@design.estate/dees-catalog 9.5.0 → 9.6.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.
@@ -33,15 +33,17 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
33
33
  return useValue ? value : void 0;
34
34
  };
35
35
  import * as plugins from '../../00plugins.js';
36
- import { DeesElement, customElement, html, css, cssManager, property, } from '@design.estate/dees-element';
36
+ import { DeesElement, customElement, html, cssManager, property, state, } from '@design.estate/dees-element';
37
37
  import * as domtools from '@design.estate/dees-domtools';
38
38
  import { stepperDemo } from './dees-stepper.demo.js';
39
39
  import { themeDefaultStyles } from '../../00theme.js';
40
40
  import { zIndexRegistry } from '../../00zindex.js';
41
- import { DeesWindowLayer } from '../../00group-overlay/dees-windowlayer/dees-windowlayer.js';
42
41
  import { DeesModal } from '../../00group-overlay/dees-modal/dees-modal.js';
43
42
  import '../../00group-feedback/dees-progressbar/dees-progressbar.js';
44
43
  import '../dees-tile/dees-tile.js';
44
+ import '../../00group-button/dees-button/dees-button.js';
45
+ import '../../00group-utility/dees-icon/dees-icon.js';
46
+ import { stepperStyles } from './styles.js';
45
47
  let DeesStepper = (() => {
46
48
  let _classDecorators = [customElement('dees-stepper')];
47
49
  let _classDescriptor;
@@ -69,6 +71,15 @@ let DeesStepper = (() => {
69
71
  let _activeFormValid_decorators;
70
72
  let _activeFormValid_initializers = [];
71
73
  let _activeFormValid_extraInitializers = [];
74
+ let _stepError_decorators;
75
+ let _stepError_initializers = [];
76
+ let _stepError_extraInitializers = [];
77
+ let _progressRunning_decorators;
78
+ let _progressRunning_initializers = [];
79
+ let _progressRunning_extraInitializers = [];
80
+ let _actionPending_decorators;
81
+ let _actionPending_initializers = [];
82
+ let _actionPending_extraInitializers = [];
72
83
  var DeesStepper = class extends _classSuper {
73
84
  static { _classThis = this; }
74
85
  static {
@@ -90,6 +101,9 @@ let DeesStepper = (() => {
90
101
  _stepperZIndex_decorators = [property({ type: Number, attribute: false })];
91
102
  _activeForm_decorators = [property({ type: Object, attribute: false })];
92
103
  _activeFormValid_decorators = [property({ type: Boolean, attribute: false })];
104
+ _stepError_decorators = [state()];
105
+ _progressRunning_decorators = [state()];
106
+ _actionPending_decorators = [state()];
93
107
  __esDecorate(this, null, _steps_decorators, { kind: "accessor", name: "steps", static: false, private: false, access: { has: obj => "steps" in obj, get: obj => obj.steps, set: (obj, value) => { obj.steps = value; } }, metadata: _metadata }, _steps_initializers, _steps_extraInitializers);
94
108
  __esDecorate(this, null, _selectedStep_decorators, { kind: "accessor", name: "selectedStep", static: false, private: false, access: { has: obj => "selectedStep" in obj, get: obj => obj.selectedStep, set: (obj, value) => { obj.selectedStep = value; } }, metadata: _metadata }, _selectedStep_initializers, _selectedStep_extraInitializers);
95
109
  __esDecorate(this, null, _overlay_decorators, { kind: "accessor", name: "overlay", static: false, private: false, access: { has: obj => "overlay" in obj, get: obj => obj.overlay, set: (obj, value) => { obj.overlay = value; } }, metadata: _metadata }, _overlay_initializers, _overlay_extraInitializers);
@@ -97,6 +111,9 @@ let DeesStepper = (() => {
97
111
  __esDecorate(this, null, _stepperZIndex_decorators, { kind: "accessor", name: "stepperZIndex", static: false, private: false, access: { has: obj => "stepperZIndex" in obj, get: obj => obj.stepperZIndex, set: (obj, value) => { obj.stepperZIndex = value; } }, metadata: _metadata }, _stepperZIndex_initializers, _stepperZIndex_extraInitializers);
98
112
  __esDecorate(this, null, _activeForm_decorators, { kind: "accessor", name: "activeForm", static: false, private: false, access: { has: obj => "activeForm" in obj, get: obj => obj.activeForm, set: (obj, value) => { obj.activeForm = value; } }, metadata: _metadata }, _activeForm_initializers, _activeForm_extraInitializers);
99
113
  __esDecorate(this, null, _activeFormValid_decorators, { kind: "accessor", name: "activeFormValid", static: false, private: false, access: { has: obj => "activeFormValid" in obj, get: obj => obj.activeFormValid, set: (obj, value) => { obj.activeFormValid = value; } }, metadata: _metadata }, _activeFormValid_initializers, _activeFormValid_extraInitializers);
114
+ __esDecorate(this, null, _stepError_decorators, { kind: "accessor", name: "stepError", static: false, private: false, access: { has: obj => "stepError" in obj, get: obj => obj.stepError, set: (obj, value) => { obj.stepError = value; } }, metadata: _metadata }, _stepError_initializers, _stepError_extraInitializers);
115
+ __esDecorate(this, null, _progressRunning_decorators, { kind: "accessor", name: "progressRunning", static: false, private: false, access: { has: obj => "progressRunning" in obj, get: obj => obj.progressRunning, set: (obj, value) => { obj.progressRunning = value; } }, metadata: _metadata }, _progressRunning_initializers, _progressRunning_extraInitializers);
116
+ __esDecorate(this, null, _actionPending_decorators, { kind: "accessor", name: "actionPending", static: false, private: false, access: { has: obj => "actionPending" in obj, get: obj => obj.actionPending, set: (obj, value) => { obj.actionPending = value; } }, metadata: _metadata }, _actionPending_initializers, _actionPending_extraInitializers);
100
117
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
101
118
  DeesStepper = _classThis = _classDescriptor.value;
102
119
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -112,12 +129,11 @@ let DeesStepper = (() => {
112
129
  if (optionsArg.cancelable !== undefined) {
113
130
  stepper.cancelable = optionsArg.cancelable;
114
131
  }
115
- stepper.windowLayer = await DeesWindowLayer.createAndShow({ blur: true });
116
- body.append(stepper.windowLayer);
117
132
  body.append(stepper);
118
- // Get z-index for stepper (should be above window layer)
133
+ // Share overlay ordering with catalog controls opened from this dialog.
119
134
  stepper.stepperZIndex = zIndexRegistry.getNextZIndex();
120
135
  zIndexRegistry.register(stepper, stepper.stepperZIndex);
136
+ await stepper.updateComplete;
121
137
  return stepper;
122
138
  }
123
139
  #steps_accessor_storage = __runInitializers(this, _steps_initializers, []);
@@ -149,287 +165,52 @@ let DeesStepper = (() => {
149
165
  get activeFormValid() { return this.#activeFormValid_accessor_storage; }
150
166
  set activeFormValid(value) { this.#activeFormValid_accessor_storage = value; }
151
167
  activeFormSubscription = __runInitializers(this, _activeFormValid_extraInitializers);
152
- windowLayer;
168
+ #stepError_accessor_storage = __runInitializers(this, _stepError_initializers, '');
169
+ get stepError() { return this.#stepError_accessor_storage; }
170
+ set stepError(value) { this.#stepError_accessor_storage = value; }
171
+ #progressRunning_accessor_storage = (__runInitializers(this, _stepError_extraInitializers), __runInitializers(this, _progressRunning_initializers, false));
172
+ get progressRunning() { return this.#progressRunning_accessor_storage; }
173
+ set progressRunning(value) { this.#progressRunning_accessor_storage = value; }
174
+ #actionPending_accessor_storage = (__runInitializers(this, _progressRunning_extraInitializers), __runInitializers(this, _actionPending_initializers, false));
175
+ get actionPending() { return this.#actionPending_accessor_storage; }
176
+ set actionPending(value) { this.#actionPending_accessor_storage = value; }
177
+ resizeObserver = __runInitializers(this, _actionPending_extraInitializers);
178
+ activeValidationStep;
179
+ actionStep;
180
+ destroyPromise;
181
+ scrollTarget;
182
+ scrollInFlight = false;
183
+ cancelRequestPending = false;
153
184
  constructor() {
154
185
  super();
186
+ this.registerStartupFunction(async (signal) => {
187
+ await this.updateComplete;
188
+ if (signal.aborted)
189
+ return;
190
+ this.destroyPromise = undefined;
191
+ const dialog = this.shadowRoot?.querySelector('dialog');
192
+ if (dialog && !dialog.open)
193
+ dialog.showModal();
194
+ this.resizeObserver = new ResizeObserver(() => this.positionSelectedStep(false));
195
+ this.resizeObserver.observe(this.shadowRoot.querySelector('.stepperContainer'));
196
+ for (const tile of this.shadowRoot.querySelectorAll('.step'))
197
+ this.resizeObserver.observe(tile);
198
+ await this.setScrollStatus();
199
+ });
155
200
  }
156
- static styles = [
157
- themeDefaultStyles,
158
- cssManager.defaultStyles,
159
- css `
160
- /* TODO: Migrate hardcoded values to --dees-* CSS variables */
161
- :host {
162
- position: absolute;
163
- width: 100%;
164
- height: 100%;
165
- font-family: var(--dees-font-family);
166
- color: var(--dees-color-text-primary);
167
- }
168
-
169
- /*
170
- * In overlay mode the host is "transparent" to layout — the inner
171
- * .stepperContainer.overlay is what pins to the viewport and carries the
172
- * z-index. Keeping :host unpositioned avoids nesting the stacking context
173
- * under an auto-z-index parent (which was trapping .stepperContainer
174
- * below DeesWindowLayer's sibling layers). This mirrors how dees-modal
175
- * keeps its own :host unpositioned and lets .modalContainer drive layout.
176
- */
177
- :host([overlay]) {
178
- position: static;
179
- width: 0;
180
- height: 0;
181
- }
182
-
183
- .stepperContainer {
184
- position: absolute;
185
- width: 100%;
186
- height: 100%;
187
- overflow: hidden;
188
- }
189
-
190
- .stepperContainer.overlay {
191
- position: fixed;
192
- top: 0;
193
- left: 0;
194
- width: 100vw;
195
- height: 100vh;
196
- }
197
-
198
- /* Exit animation — reverse of the entry. Tiles slide DOWN + fade out,
199
- mirroring the .entrance slide-up. The transition override is needed
200
- because dees-tile.step has its own 0.7s transition for step selection
201
- which would otherwise make the exit sluggish. */
202
- .stepperContainer.predestroy dees-tile.step {
203
- transform: translateY(16px);
204
- filter: opacity(0);
205
- transition: transform 0.25s, filter 0.2s;
206
- }
207
-
208
- dees-tile.step {
209
- position: relative;
210
- pointer-events: none;
211
- box-sizing: border-box;
212
- width: min(500px, calc(100vw - 32px));
213
- max-width: 500px;
214
- max-height: calc(100vh - 64px);
215
- min-height: min(300px, calc(100vh - 64px));
216
- margin: auto;
217
- margin-bottom: 20px;
218
- filter: opacity(0.55) saturate(0.85);
219
- transition: transform 0.7s cubic-bezier(0.87, 0, 0.13, 1), filter 0.7s cubic-bezier(0.87, 0, 0.13, 1);
220
- user-select: none;
221
- }
222
-
223
- dees-tile.step.selected {
224
- pointer-events: all;
225
- filter: opacity(1) saturate(1);
226
- user-select: auto;
227
- }
228
-
229
- dees-tile.step.hiddenStep {
230
- filter: opacity(0);
231
- }
232
-
233
- dees-tile.step.entrance {
234
- transition: transform 0.35s ease, filter 0.35s ease;
235
- }
236
-
237
- dees-tile.step.entrance.hiddenStep {
238
- transform: translateY(16px);
239
- }
240
-
241
- dees-tile.step:last-child {
242
- margin-bottom: 100vh;
243
- }
244
-
245
- .stepperContainer.overlay dees-tile.step::part(outer) {
246
- box-shadow:
247
- 0 0 0 1px color-mix(in srgb, var(--dees-color-text-primary) 3%, transparent),
248
- var(--dees-shadow-lg);
249
- }
250
-
251
- .stepperContainer:not(.overlay) dees-tile.step {
252
- max-height: calc(100% - 64px);
253
- min-height: min(300px, calc(100% - 64px));
254
- }
255
-
256
- .step-header {
257
- height: 36px;
258
- display: flex;
259
- align-items: center;
260
- justify-content: space-between;
261
- padding: 0 8px 0 12px;
262
- gap: 12px;
263
- }
264
-
265
- .goBack-spacer {
266
- width: 1px;
267
- }
268
-
269
- .step-header .goBack {
270
- display: inline-flex;
271
- align-items: center;
272
- gap: 6px;
273
- height: 24px;
274
- padding: 0 8px;
275
- font-size: 12px;
276
- font-weight: 500;
277
- line-height: 1;
278
- border: none;
279
- background: transparent;
280
- color: var(--dees-color-text-muted);
281
- border-radius: var(--dees-radius-sm);
282
- cursor: pointer;
283
- transition:
284
- background-color var(--dees-transition-fast) var(--dees-ease-standard),
285
- color var(--dees-transition-fast) var(--dees-ease-standard),
286
- transform var(--dees-transition-default) var(--dees-ease-standard);
287
- }
288
-
289
- .step-header .goBack:hover {
290
- background: var(--dees-color-hover);
291
- color: var(--dees-color-text-secondary);
292
- transform: translateX(-2px);
293
- }
294
-
295
- .step-header .goBack:active {
296
- background: var(--dees-color-border-default);
297
- }
298
-
299
- .step-header .goBack span {
300
- transition: transform var(--dees-transition-default) var(--dees-ease-standard);
301
- display: inline-block;
302
- }
303
-
304
- .step-header .goBack:hover span {
305
- transform: translateX(-2px);
306
- }
307
-
308
- .step-header .stepCounter {
309
- color: var(--dees-color-text-muted);
310
- font-size: 12px;
311
- font-weight: 500;
312
- letter-spacing: -0.01em;
313
- padding: 0 8px;
314
- }
315
-
316
- .step-body .title {
317
- text-align: center;
318
- padding-top: 32px;
319
- font-family: var(--dees-font-family);
320
- font-size: 24px;
321
- font-weight: 600;
322
- letter-spacing: -0.01em;
323
- color: inherit;
324
- }
325
-
326
- .step-body .content {
327
- padding: 32px;
328
- }
329
-
330
- .step-body .content.withProgressStep {
331
- padding-top: 20px;
332
- }
333
-
334
- .progressStep {
335
- padding: 0 24px;
336
- }
337
-
338
- /* --- Footer: modal-style bottom buttons --- */
339
- .bottomButtons {
340
- display: flex;
341
- flex-direction: row;
342
- justify-content: flex-end;
343
- align-items: center;
344
- gap: 0;
345
- height: 36px;
346
- width: 100%;
347
- box-sizing: border-box;
348
- }
349
-
350
- .bottomButtons .bottomButton {
351
- padding: 0 16px;
352
- height: 100%;
353
- text-align: center;
354
- font-size: 12px;
355
- font-weight: 500;
356
- cursor: pointer;
357
- user-select: none;
358
- transition:
359
- background-color var(--dees-transition-fast) var(--dees-ease-standard),
360
- color var(--dees-transition-fast) var(--dees-ease-standard);
361
- background: transparent;
362
- border: none;
363
- color: var(--dees-color-text-muted);
364
- white-space: nowrap;
365
- display: flex;
366
- align-items: center;
367
- }
368
-
369
- /* Border-left separator on every button EXCEPT the first one.
370
- Uses general sibling so the stepHint (if rendered on the left) does
371
- not shift which button counts as "first" and create a phantom border. */
372
- .bottomButtons .bottomButton ~ .bottomButton {
373
- border-left: 1px solid var(--dees-color-border-subtle);
374
- }
375
-
376
- .bottomButtons .bottomButton:hover {
377
- background: var(--dees-color-hover);
378
- color: var(--dees-color-text-primary);
379
- }
380
-
381
- .bottomButtons .bottomButton:active {
382
- background: var(--dees-color-border-subtle);
383
- }
384
-
385
- .bottomButtons .bottomButton.primary {
386
- color: var(--dees-color-link);
387
- font-weight: 600;
388
- }
389
-
390
- .bottomButtons .bottomButton.primary:hover {
391
- background: color-mix(in srgb, var(--dees-color-link) 8%, transparent);
392
- color: color-mix(in srgb, var(--dees-color-link) 80%, var(--dees-color-text-primary));
393
- }
394
-
395
- .bottomButtons .bottomButton.primary:active {
396
- background: color-mix(in srgb, var(--dees-color-link) 12%, transparent);
397
- }
398
-
399
- .bottomButtons .bottomButton.disabled {
400
- pointer-events: none;
401
- opacity: 0.4;
402
- cursor: not-allowed;
403
- }
404
-
405
- .bottomButtons .bottomButton.disabled:hover {
406
- background: transparent;
407
- color: var(--dees-color-text-muted);
408
- }
409
-
410
- /* Hint shown on the left of the footer when the active step's form has
411
- unfilled required fields. Uses margin-right: auto to push right-aligned
412
- buttons to the right while keeping the hint flush-left. */
413
- .bottomButtons .stepHint {
414
- margin-right: auto;
415
- padding: 0 16px;
416
- font-size: 11px;
417
- line-height: 1;
418
- letter-spacing: -0.01em;
419
- color: var(--dees-color-text-muted);
420
- display: flex;
421
- align-items: center;
422
- user-select: none;
423
- }
424
- `,
425
- ];
201
+ static styles = [themeDefaultStyles, cssManager.defaultStyles, stepperStyles];
426
202
  render() {
203
+ const label = this.selectedStep?.title ?? 'Setup';
204
+ return this.overlay
205
+ ? html `<dialog class="stepperContainer overlay" aria-label=${label} aria-modal="true"
206
+ style=${`z-index: ${this.stepperZIndex};`} @cancel=${this.handleDialogCancel}
207
+ @click=${this.handleOutsideClick}>${this.renderSteps()}</dialog>`
208
+ : html `<div class="stepperContainer" role="region" aria-label=${label}>${this.renderSteps()}</div>`;
209
+ }
210
+ renderSteps() {
211
+ if (!this.steps.length)
212
+ return html `<div class="empty">No steps to show.</div>`;
427
213
  return html `
428
- <div
429
- class="stepperContainer ${this.overlay ? 'overlay' : ''}"
430
- style=${this.overlay ? `z-index: ${this.stepperZIndex};` : ''}
431
- @click=${this.handleOutsideClick}
432
- >
433
214
  ${this.steps.map((stepArg, stepIndex) => {
434
215
  const isSelected = stepArg === this.selectedStep;
435
216
  const isHidden = this.getIndexOfStep(stepArg) > this.getIndexOfStep(this.selectedStep);
@@ -437,21 +218,24 @@ let DeesStepper = (() => {
437
218
  const showBackButton = !isFirst && stepArg.allowBack !== false;
438
219
  const progressStepState = stepArg.progressStep ? this.getProgressStepState(stepArg) : null;
439
220
  return html `<dees-tile
440
- class="step ${isSelected ? 'selected' : ''} ${isHidden ? 'hiddenStep' : ''} ${isFirst ? 'entrance' : ''}"
441
- overscroll="contain"
221
+ class="step ${isSelected ? 'selected' : ''} ${isHidden ? 'hiddenStep' : ''}"
222
+ overscroll="contain" ?inert=${!isSelected} aria-hidden=${!isSelected}
442
223
  >
443
224
  <div slot="header" class="step-header">
444
- ${showBackButton
445
- ? html `<div class="goBack" @click=${this.goBack}>
446
- <span><-</span> go to previous step
447
- </div>`
448
- : html `<div class="goBack-spacer"></div>`}
449
- <div class="stepCounter">
450
- Step ${stepIndex + 1} of ${this.steps.length}
451
- </div>
225
+ <ol class="step-rail" aria-label="Progress">${this.steps.map((step, index) => html `
226
+ <li class="step-marker ${index < stepIndex ? 'complete' : index === stepIndex ? 'current' : ''}"
227
+ aria-label=${`${index + 1}. ${step.title}${index < stepIndex ? ', completed' : ''}`}
228
+ aria-current=${index === stepIndex ? 'step' : 'false'} title=${step.title}></li>
229
+ `)}</ol>
230
+ <span class="step-counter">${stepIndex + 1} of ${this.steps.length}</span>
452
231
  </div>
453
232
  <div class="step-body">
454
- <div class="title">${stepArg.title}</div>
233
+ <div class="heading-row">
234
+ <h2 class="title" tabindex="-1">${stepArg.title}</h2>
235
+ <span class="step-hint" aria-hidden=${!isSelected || this.activeForm === null || this.activeFormValid}
236
+ title="Fill in the required fields to continue.">Complete required fields</span>
237
+ </div>
238
+ ${stepArg.description ? html `<p class="description">${stepArg.description}</p>` : ''}
455
239
  ${stepArg.progressStep && progressStepState ? html `
456
240
  <div class="progressStep">
457
241
  <dees-progressbar
@@ -466,89 +250,121 @@ let DeesStepper = (() => {
466
250
  </div>
467
251
  ` : ''}
468
252
  <div class="content ${stepArg.progressStep ? 'withProgressStep' : ''}">${stepArg.content}</div>
253
+ ${isSelected && this.stepError ? html `<div class="step-error" role="alert">
254
+ <dees-icon icon="lucide:CircleAlert" iconSize="16"></dees-icon><span>${this.stepError}</span>
255
+ </div>` : ''}
469
256
  </div>
470
- <div slot="footer" class="bottomButtons">
471
- ${isSelected && this.activeForm !== null && !this.activeFormValid
472
- ? html `<div class="stepHint">Complete form to continue</div>`
473
- : ''}
257
+ <div slot="footer" class="step-footer">
258
+ <div class="bottomButtons">
259
+ ${showBackButton ? html `<dees-button class="back-action" type="ghost" text="Back"
260
+ icon="lucide:ChevronLeft" .disabled=${this.actionPending} @clicked=${this.goBack}></dees-button>`
261
+ : html `<span class="footer-spacer"></span>`}
474
262
  ${this.cancelable
475
- ? html `<div
476
- class="bottomButton"
477
- @click=${() => this.handleCancelRequest()}
478
- >Cancel</div>`
263
+ ? html `<dees-button type="ghost" text="Cancel" @clicked=${this.handleCancelRequest}></dees-button>`
479
264
  : ''}
265
+ ${isSelected && this.stepError && stepArg.validationFunc
266
+ ? html `<dees-button type="accent" text="Try again" icon="lucide:RotateCw" @clicked=${this.retryStep}></dees-button>` : ''}
480
267
  ${stepArg.menuOptions?.map((actionArg, actionIndex) => {
481
268
  const isPrimary = actionIndex === stepArg.menuOptions.length - 1;
482
- const isDisabled = isPrimary && this.activeForm !== null && !this.activeFormValid;
483
- return html `
484
- <div
485
- class="bottomButton ${isPrimary ? 'primary' : ''} ${isDisabled ? 'disabled' : ''}"
486
- @click=${() => this.handleMenuOptionClick(actionArg, isPrimary)}
487
- >${actionArg.name}</div>
488
- `;
269
+ const isDisabled = this.actionPending || (isPrimary && (!this.activeFormValid || this.progressRunning || (!!this.stepError && !!stepArg.progressStep)));
270
+ return html `<dees-button class="step-action" .text=${actionArg.name}
271
+ .icon=${actionArg.iconName ?? ''} .type=${isPrimary ? 'accent' : 'secondary'}
272
+ .disabled=${isDisabled} .status=${isPrimary && this.actionPending ? 'pending' : 'normal'}
273
+ @clicked=${() => this.handleMenuOptionClick(actionArg, isPrimary)}></dees-button>`;
489
274
  }) ?? ''}
275
+ </div>
490
276
  </div>
491
277
  </dees-tile>`;
492
278
  })}
493
- </div>
494
279
  `;
495
280
  }
496
281
  getIndexOfStep = (stepArg) => {
497
282
  return this.steps.findIndex((stepArg2) => stepArg === stepArg2);
498
283
  };
499
- async firstUpdated() {
500
- await this.domtoolsPromise;
501
- await this.domtools.convenience.smartdelay.delayFor(0);
502
- if (!this.steps.length) {
503
- return;
284
+ willUpdate(changed) {
285
+ if (changed.has('steps') && !this.steps.includes(this.selectedStep))
286
+ this.selectedStep = this.steps[0];
287
+ if (changed.has('selectedStep') || changed.has('steps')) {
288
+ if (this.activeValidationStep !== this.selectedStep) {
289
+ this.activeValidationStep?.abortController?.abort();
290
+ if (this.activeValidationStep)
291
+ this.activeValidationStep.validationFuncCalled = false;
292
+ this.activeValidationStep = this.selectedStep;
293
+ this.stepError = '';
294
+ this.progressRunning = false;
295
+ this.actionPending = false;
296
+ this.actionStep = undefined;
297
+ this.prepareStepForActivation(this.selectedStep);
298
+ }
504
299
  }
505
- this.prepareStepForActivation(this.steps[0]);
506
- this.selectedStep = this.steps[0];
507
- await this.updateComplete;
508
- await this.setScrollStatus();
509
- // Remove entrance class after initial animation completes
510
- await this.domtools.convenience.smartdelay.delayFor(350);
511
- this.shadowRoot.querySelector('.step.entrance')?.classList.remove('entrance');
512
300
  }
513
301
  async updated(changedProperties) {
514
- if (!changedProperties.has('selectedStep') && !changedProperties.has('steps')) {
515
- return;
302
+ if (changedProperties.has('overlay')) {
303
+ this.scroller?.destroy();
304
+ this.scroller = undefined;
305
+ this.scrollTarget = undefined;
306
+ this.scrollInFlight = false;
516
307
  }
308
+ const dialog = this.shadowRoot?.querySelector('dialog');
309
+ if (dialog && !dialog.open && this.isConnected)
310
+ dialog.showModal();
311
+ if (!changedProperties.has('selectedStep') && !changedProperties.has('steps') && !changedProperties.has('overlay'))
312
+ return;
517
313
  await this.setScrollStatus();
314
+ if (!this.isConnected)
315
+ return;
316
+ if (changedProperties.has('steps') || changedProperties.has('overlay')) {
317
+ this.resizeObserver?.disconnect();
318
+ this.resizeObserver?.observe(this.shadowRoot.querySelector('.stepperContainer'));
319
+ for (const tile of this.shadowRoot.querySelectorAll('.step'))
320
+ this.resizeObserver?.observe(tile);
321
+ }
322
+ if (this.overlay || this.shadowRoot?.activeElement) {
323
+ this.shadowRoot?.querySelector('.selected .title')?.focus({ preventScroll: true });
324
+ }
518
325
  }
519
326
  scroller;
520
327
  async setScrollStatus() {
521
- const stepperContainer = this.shadowRoot.querySelector('.stepperContainer');
522
- const selectedStepElement = this.shadowRoot.querySelector('.selected');
523
- if (!selectedStepElement) {
328
+ const step = this.selectedStep;
329
+ const selectedStepElement = this.shadowRoot?.querySelector('.step.selected');
330
+ if (!selectedStepElement || !this.isConnected)
331
+ return;
332
+ const form = selectedStepElement.querySelector('dees-form');
333
+ await form?.updateComplete;
334
+ if (!this.isConnected || step !== this.selectedStep)
524
335
  return;
525
- }
526
336
  this.scanActiveForm(selectedStepElement);
527
- if (!stepperContainer.style.paddingTop) {
528
- stepperContainer.style.paddingTop = `${stepperContainer.offsetHeight / 2 - selectedStepElement.offsetHeight / 2}px`;
337
+ this.positionSelectedStep(true);
338
+ if (!step.validationFuncCalled && step.validationFunc) {
339
+ step.abortController = new AbortController();
340
+ step.validationFuncCalled = true;
341
+ void this.runStepValidation(step, selectedStepElement, step.abortController.signal);
529
342
  }
530
- const scrollPosition = selectedStepElement.offsetTop -
531
- stepperContainer.offsetHeight / 2 +
532
- selectedStepElement.offsetHeight / 2;
533
- await domtools.DomTools.setupDomTools();
343
+ }
344
+ positionSelectedStep(animate) {
345
+ const container = this.shadowRoot?.querySelector('.stepperContainer');
346
+ const selected = this.shadowRoot?.querySelector('.step.selected');
347
+ const first = this.shadowRoot?.querySelector('.step');
348
+ if (!container || !selected || !first || !this.isConnected)
349
+ return;
350
+ container.style.paddingTop = `${Math.max(24, (container.clientHeight - first.offsetHeight) / 2)}px`;
351
+ const position = Math.max(0, selected.offsetTop - (container.clientHeight - selected.offsetHeight) / 2);
534
352
  if (!this.scroller) {
535
- this.scroller = new domtools.plugins.SweetScroll({
536
- vertical: true,
537
- horizontal: false,
538
- easing: 'easeInOutExpo',
539
- duration: 700,
540
- }, stepperContainer);
541
- }
542
- if (!this.selectedStep.validationFuncCalled && this.selectedStep.validationFunc) {
543
- this.selectedStep.abortController = new AbortController();
544
- this.selectedStep.validationFuncCalled = true;
545
- void this.runStepValidation(this.selectedStep, selectedStepElement, this.selectedStep.abortController.signal);
353
+ this.scroller = new domtools.plugins.SweetScroll({ vertical: true, horizontal: false, easing: 'easeOutCubic', duration: 320, cancellable: false }, container);
354
+ animate = false;
546
355
  }
547
- this.scroller.to(scrollPosition);
356
+ // Form validity can resize the footer after selection. Retarget the active
357
+ // scroll instead of letting ResizeObserver snap it to the destination.
358
+ if (this.scrollTarget !== undefined && Math.abs(this.scrollTarget - position) < 1)
359
+ return;
360
+ const duration = (animate || this.scrollInFlight) && !matchMedia('(prefers-reduced-motion: reduce)').matches ? 320 : 0;
361
+ this.scrollTarget = position;
362
+ this.scroller.to(position, { duration, complete: () => { this.scrollInFlight = false; } });
363
+ this.scrollInFlight = duration > 0;
548
364
  }
549
365
  async goBack() {
550
366
  const currentIndex = this.steps.findIndex((stepArg) => stepArg === this.selectedStep);
551
- if (currentIndex <= 0) {
367
+ if (currentIndex <= 0 || this.selectedStep.allowBack === false) {
552
368
  return;
553
369
  }
554
370
  // Abort any active listeners on current step
@@ -561,9 +377,16 @@ let DeesStepper = (() => {
561
377
  previousStep.validationFuncCalled = false;
562
378
  this.prepareStepForActivation(previousStep);
563
379
  this.selectedStep = previousStep;
564
- await this.domtoolsPromise;
565
- await this.domtools.convenience.smartdelay.delayFor(100);
566
- this.selectedStep.onReturnToStepFunc?.(this, this.shadowRoot.querySelector('.selected'));
380
+ await this.updateComplete;
381
+ if (this.isConnected && this.selectedStep === previousStep) {
382
+ try {
383
+ await previousStep.onReturnToStepFunc?.(this, this.shadowRoot.querySelector('.selected'));
384
+ }
385
+ catch (error) {
386
+ if (this.selectedStep === previousStep)
387
+ this.stepError = error instanceof Error ? error.message : 'Could not return to this step.';
388
+ }
389
+ }
567
390
  }
568
391
  goNext() {
569
392
  const currentIndex = this.steps.findIndex((stepArg) => stepArg === this.selectedStep);
@@ -651,7 +474,12 @@ let DeesStepper = (() => {
651
474
  return;
652
475
  }
653
476
  const fields = form.getFormElements();
654
- this.activeFormValid = fields.every((field) => !field.required || (field.value !== null && field.value !== undefined && field.value !== ''));
477
+ this.activeFormValid = fields.every(field => {
478
+ if (!field.required || field.disabled)
479
+ return true;
480
+ const value = 'getValue' in field && field.getValue ? field.getValue() : field.value;
481
+ return value !== null && value !== undefined && value !== '' && value !== false && (!Array.isArray(value) || value.length > 0);
482
+ });
655
483
  }
656
484
  /**
657
485
  * Click handler for menuOption buttons in the footer. For the primary (last)
@@ -661,25 +489,39 @@ let DeesStepper = (() => {
661
489
  * completes before the click handler returns.
662
490
  */
663
491
  async handleMenuOptionClick(optionArg, isPrimary) {
492
+ if (this.actionPending || (isPrimary && this.progressRunning))
493
+ return;
494
+ this.recomputeFormValid();
664
495
  const form = this.activeForm;
665
- if (isPrimary && form) {
666
- if (!this.activeFormValid)
496
+ if (isPrimary && !this.activeFormValid)
497
+ return;
498
+ const step = this.selectedStep;
499
+ this.actionPending = true;
500
+ this.actionStep = step;
501
+ this.stepError = '';
502
+ try {
503
+ if (isPrimary && form)
504
+ await form.gatherAndDispatch();
505
+ if (!this.isConnected || step !== this.selectedStep)
667
506
  return;
668
- await new Promise((resolve) => {
669
- form.addEventListener('formData', () => resolve(), { once: true });
670
- form.gatherAndDispatch();
671
- });
507
+ await optionArg.action(this);
508
+ }
509
+ catch (error) {
510
+ if (this.isConnected && step === this.selectedStep)
511
+ this.stepError = error instanceof Error ? error.message : 'The action could not be completed. Try again.';
512
+ }
513
+ finally {
514
+ if (this.actionStep === step) {
515
+ this.actionPending = false;
516
+ this.actionStep = undefined;
517
+ }
672
518
  }
673
- await optionArg.action(this);
674
519
  }
675
520
  getProgressStepState(stepArg) {
676
521
  if (!stepArg.progressStep) {
677
522
  return {};
678
523
  }
679
- if (!stepArg.progressStepState) {
680
- stepArg.progressStepState = this.createInitialProgressStepState(stepArg);
681
- }
682
- return stepArg.progressStepState;
524
+ return stepArg.progressStepState ?? this.createInitialProgressStepState(stepArg);
683
525
  }
684
526
  createInitialProgressStepState(stepArg) {
685
527
  return {
@@ -699,9 +541,10 @@ let DeesStepper = (() => {
699
541
  stepArg.progressStepState = this.createInitialProgressStepState(stepArg);
700
542
  }
701
543
  async runStepValidation(stepArg, selectedStepElement, signal) {
544
+ this.progressRunning = !!stepArg.progressStep;
702
545
  try {
703
546
  await stepArg.validationFunc?.(this, selectedStepElement, signal);
704
- if (signal.aborted) {
547
+ if (signal.aborted || !this.isConnected || this.selectedStep !== stepArg) {
705
548
  return;
706
549
  }
707
550
  if (stepArg.progressStep && stepArg.progressStep.autoAdvance !== false && this.selectedStep === stepArg) {
@@ -709,20 +552,39 @@ let DeesStepper = (() => {
709
552
  }
710
553
  }
711
554
  catch (error) {
712
- if (signal.aborted) {
555
+ if (signal.aborted || !this.isConnected || this.selectedStep !== stepArg) {
713
556
  return;
714
557
  }
558
+ const errorText = error instanceof Error ? error.message : 'This step could not be completed. Try again.';
559
+ this.stepError = errorText;
715
560
  if (stepArg.progressStep) {
716
- const errorText = error instanceof Error ? error.message : 'Unexpected error';
717
561
  this.appendProgressStepLine(`Error: ${errorText}`, stepArg);
718
562
  this.updateProgressStep({
719
563
  indeterminate: false,
720
564
  statusText: errorText,
721
565
  }, stepArg);
722
566
  }
723
- console.error(error);
567
+ }
568
+ finally {
569
+ if (!signal.aborted && this.selectedStep === stepArg)
570
+ this.progressRunning = false;
724
571
  }
725
572
  }
573
+ /** Rerun the current step after a recoverable validation/provisioning failure. */
574
+ async retryStep() {
575
+ const step = this.selectedStep;
576
+ if (!step?.validationFunc || this.progressRunning || this.actionPending)
577
+ return;
578
+ step.abortController?.abort();
579
+ step.validationFuncCalled = false;
580
+ this.stepError = '';
581
+ this.prepareStepForActivation(step);
582
+ await this.setScrollStatus();
583
+ }
584
+ handleDialogCancel(event) {
585
+ event.preventDefault();
586
+ void this.handleCancelRequest();
587
+ }
726
588
  /**
727
589
  * Currently-open confirmation modal (if any). Prevents double-stacking when
728
590
  * the user clicks the backdrop or the Cancel button while a confirm modal
@@ -762,60 +624,83 @@ let DeesStepper = (() => {
762
624
  * fallback check.
763
625
  */
764
626
  async handleCancelRequest() {
765
- if (!this.cancelable)
627
+ if (!this.cancelable || this.cancelRequestPending || !this.isConnected)
766
628
  return;
767
629
  if (this.cancelConfirmModal && this.cancelConfirmModal.isConnected)
768
630
  return;
769
631
  this.cancelConfirmModal = undefined;
770
- this.cancelConfirmModal = await DeesModal.createAndShow({
771
- heading: 'Cancel setup?',
772
- width: 'small',
773
- content: html `
632
+ this.cancelRequestPending = true;
633
+ try {
634
+ this.cancelConfirmModal = await DeesModal.createAndShow({
635
+ heading: 'Cancel setup?',
636
+ width: 'small',
637
+ content: html `
774
638
  <p style="margin: 0;">
775
639
  Are you sure you want to cancel? Any progress on the current step will be lost.
776
640
  </p>
777
641
  `,
778
- menuOptions: [
779
- {
780
- name: 'Continue setup',
781
- action: async (modal) => {
782
- this.cancelConfirmModal = undefined;
783
- await modal.destroy();
642
+ menuOptions: [
643
+ {
644
+ name: 'Continue setup',
645
+ action: async (modal) => {
646
+ this.cancelConfirmModal = undefined;
647
+ await modal.destroy();
648
+ },
784
649
  },
785
- },
786
- {
787
- name: 'Yes, cancel',
788
- action: async (modal) => {
789
- this.cancelConfirmModal = undefined;
790
- modal.destroy(); // fire-and-forget — starts the confirm modal fade
791
- const domtools = await this.domtoolsPromise;
792
- await domtools.convenience.smartdelay.delayFor(100);
793
- await this.destroy();
650
+ {
651
+ name: 'Yes, cancel',
652
+ action: async (modal) => {
653
+ this.cancelConfirmModal = undefined;
654
+ await modal.destroy();
655
+ await this.destroy();
656
+ },
794
657
  },
795
- },
796
- ],
797
- });
798
- }
799
- async destroy() {
800
- const domtools = await this.domtoolsPromise;
801
- const container = this.shadowRoot.querySelector('.stepperContainer');
802
- if (this.selectedStep?.abortController) {
803
- this.selectedStep.abortController.abort();
804
- }
805
- container?.classList.add('predestroy');
806
- await domtools.convenience.smartdelay.delayFor(250);
807
- if (this.parentElement) {
808
- this.parentElement.removeChild(this);
658
+ ],
659
+ });
660
+ if (!this.isConnected)
661
+ await this.cancelConfirmModal.destroy();
809
662
  }
810
- if (this.windowLayer) {
811
- await this.windowLayer.destroy();
663
+ finally {
664
+ this.cancelRequestPending = false;
812
665
  }
813
- // Tear down form subscription to avoid leaks when the overlay closes.
666
+ }
667
+ destroy() {
668
+ return this.destroyPromise ??= this.closeAndRemove();
669
+ }
670
+ async closeAndRemove() {
671
+ this.selectedStep?.abortController?.abort();
672
+ // Close nested dialogs first so the browser can restore the original opener.
673
+ if (this.cancelConfirmModal?.isConnected)
674
+ await this.cancelConfirmModal.destroy();
675
+ this.shadowRoot?.querySelector('.stepperContainer')?.classList.add('predestroy');
676
+ const tile = this.shadowRoot?.querySelector('.step.selected');
677
+ if (tile)
678
+ await Promise.allSettled(tile.getAnimations().map(animation => animation.finished));
679
+ this.shadowRoot?.querySelector('dialog')?.close();
680
+ this.remove();
681
+ }
682
+ async disconnectedCallback() {
683
+ this.selectedStep?.abortController?.abort();
684
+ if (this.selectedStep)
685
+ this.selectedStep.validationFuncCalled = false;
686
+ this.resizeObserver?.disconnect();
687
+ this.resizeObserver = undefined;
688
+ this.scroller?.destroy();
689
+ this.scroller = undefined;
690
+ this.scrollTarget = undefined;
691
+ this.scrollInFlight = false;
692
+ this.shadowRoot?.querySelector('dialog')?.close();
693
+ if (this.cancelConfirmModal?.isConnected)
694
+ void this.cancelConfirmModal.destroy();
814
695
  this.activeFormSubscription?.unsubscribe();
815
696
  this.activeFormSubscription = undefined;
816
697
  this.activeForm = null;
817
- // Unregister from z-index registry
698
+ this.actionPending = false;
699
+ this.actionStep = undefined;
700
+ this.progressRunning = false;
818
701
  zIndexRegistry.unregister(this);
702
+ this.dispatchEvent(new CustomEvent('stepper-close', { bubbles: true, composed: true }));
703
+ await super.disconnectedCallback();
819
704
  }
820
705
  static {
821
706
  __runInitializers(_classThis, _classExtraInitializers);
@@ -824,4 +709,4 @@ let DeesStepper = (() => {
824
709
  return DeesStepper = _classThis;
825
710
  })();
826
711
  export { DeesStepper };
827
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1zdGVwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtc3RlcHBlci9kZWVzLXN0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsSUFBSSxFQUNKLEdBQUcsRUFDSCxVQUFVLEVBQ1YsUUFBUSxHQUVULE1BQU0sNkJBQTZCLENBQUM7QUFFckMsT0FBTyxLQUFLLFFBQVEsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUM3RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFFM0UsT0FBTyw2REFBNkQsQ0FBQztBQUNyRSxPQUFPLDJCQUEyQixDQUFDO0lBb0N0QixXQUFXOzRCQUR2QixhQUFhLENBQUMsY0FBYyxDQUFDOzs7O3NCQUNHLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBQW5CLFNBQVEsV0FBVzs7OztpQ0E0QnpDLFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsS0FBSztpQkFDWixDQUFDO3dDQUdELFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsTUFBTTtpQkFDYixDQUFDO21DQUdELFFBQVEsQ0FBQztvQkFDUixJQUFJLEVBQUUsT0FBTztvQkFDYixPQUFPLEVBQUUsSUFBSTtpQkFDZCxDQUFDO3NDQVNELFFBQVEs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
712
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1zdGVwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtc3RlcHBlci9kZWVzLXN0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsSUFBSSxFQUNKLFVBQVUsRUFDVixRQUFRLEVBQ1IsS0FBSyxHQUVOLE1BQU0sNkJBQTZCLENBQUM7QUFFckMsT0FBTyxLQUFLLFFBQVEsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUUzRSxPQUFPLDZEQUE2RCxDQUFDO0FBQ3JFLE9BQU8sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLDhDQUE4QyxDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7SUFxQy9CLFdBQVc7NEJBRHZCLGFBQWEsQ0FBQyxjQUFjLENBQUM7Ozs7c0JBQ0csV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQkFBbkIsU0FBUSxXQUFXOzs7O2lDQTBCekMsUUFBUSxDQUFDO29CQUNSLElBQUksRUFBRSxLQUFLO2lCQUNaLENBQUM7d0NBR0QsUUFBUSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO2lCQUNiLENBQUM7bUNBR0QsUUFBUSxDQUFDO29CQUNSLElBQUks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