@design.estate/dees-catalog 3.71.1 → 3.72.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.
@@ -187227,7 +187227,7 @@ var stepperDemo = /* @__PURE__ */ __name(() => b2`
187227
187227
  init_dist_ts30();
187228
187228
  init_dist_ts29();
187229
187229
  init_theme();
187230
- var _activeFormValid_dec, _activeForm_dec, _stepperZIndex_dec, _overlay_dec, _selectedStep_dec, _steps_dec, _a81, _DeesStepper_decorators, _init82, _steps, _selectedStep, _overlay, _stepperZIndex, _activeForm, _activeFormValid;
187230
+ var _activeFormValid_dec, _activeForm_dec, _stepperZIndex_dec, _cancelable_dec, _overlay_dec, _selectedStep_dec, _steps_dec, _a81, _DeesStepper_decorators, _init82, _steps, _selectedStep, _overlay, _cancelable, _stepperZIndex, _activeForm, _activeFormValid;
187231
187231
  _DeesStepper_decorators = [customElement("dees-stepper")];
187232
187232
  var _DeesStepper = class _DeesStepper extends (_a81 = DeesElement, _steps_dec = [n5({
187233
187233
  type: Array
@@ -187236,31 +187236,43 @@ var _DeesStepper = class _DeesStepper extends (_a81 = DeesElement, _steps_dec =
187236
187236
  })], _overlay_dec = [n5({
187237
187237
  type: Boolean,
187238
187238
  reflect: true
187239
+ })], _cancelable_dec = [n5({
187240
+ type: Boolean,
187241
+ reflect: true
187239
187242
  })], _stepperZIndex_dec = [n5({ type: Number, attribute: false })], _activeForm_dec = [n5({ type: Object, attribute: false })], _activeFormValid_dec = [n5({ type: Boolean, attribute: false })], _a81) {
187240
187243
  constructor() {
187241
187244
  super();
187242
187245
  __privateAdd(this, _steps, __runInitializers(_init82, 8, this, [])), __runInitializers(_init82, 11, this);
187243
187246
  __privateAdd(this, _selectedStep, __runInitializers(_init82, 12, this)), __runInitializers(_init82, 15, this);
187244
187247
  __privateAdd(this, _overlay, __runInitializers(_init82, 16, this, false)), __runInitializers(_init82, 19, this);
187245
- __privateAdd(this, _stepperZIndex, __runInitializers(_init82, 20, this, 1e3)), __runInitializers(_init82, 23, this);
187246
- __privateAdd(this, _activeForm, __runInitializers(_init82, 24, this, null)), __runInitializers(_init82, 27, this);
187247
- __privateAdd(this, _activeFormValid, __runInitializers(_init82, 28, this, true)), __runInitializers(_init82, 31, this);
187248
+ __privateAdd(this, _cancelable, __runInitializers(_init82, 20, this, true)), __runInitializers(_init82, 23, this);
187249
+ __privateAdd(this, _stepperZIndex, __runInitializers(_init82, 24, this, 1e3)), __runInitializers(_init82, 27, this);
187250
+ __privateAdd(this, _activeForm, __runInitializers(_init82, 28, this, null)), __runInitializers(_init82, 31, this);
187251
+ __privateAdd(this, _activeFormValid, __runInitializers(_init82, 32, this, true)), __runInitializers(_init82, 35, this);
187248
187252
  __publicField(this, "activeFormSubscription");
187249
187253
  __publicField(this, "windowLayer");
187250
187254
  __publicField(this, "getIndexOfStep", /* @__PURE__ */ __name((stepArg) => {
187251
187255
  return this.steps.findIndex((stepArg2) => stepArg === stepArg2);
187252
187256
  }, "getIndexOfStep"));
187253
187257
  __publicField(this, "scroller");
187258
+ /**
187259
+ * Currently-open confirmation modal (if any). Prevents double-stacking when
187260
+ * the user clicks the backdrop or the Cancel button while a confirm modal
187261
+ * is already visible. The reference may become stale (point to a destroyed
187262
+ * modal) if the user dismisses the confirm modal by clicking its own
187263
+ * backdrop — so handleCancelRequest() uses isConnected to detect that.
187264
+ */
187265
+ __publicField(this, "cancelConfirmModal");
187254
187266
  }
187255
187267
  static async createAndShow(optionsArg) {
187256
187268
  const body3 = document.body;
187257
187269
  const stepper = new _DeesStepper();
187258
187270
  stepper.steps = optionsArg.steps;
187259
187271
  stepper.overlay = true;
187272
+ if (optionsArg.cancelable !== void 0) {
187273
+ stepper.cancelable = optionsArg.cancelable;
187274
+ }
187260
187275
  stepper.windowLayer = await DeesWindowLayer.createAndShow({ blur: true });
187261
- stepper.windowLayer.addEventListener("click", async () => {
187262
- await stepper.destroy();
187263
- });
187264
187276
  body3.append(stepper.windowLayer);
187265
187277
  body3.append(stepper);
187266
187278
  stepper.stepperZIndex = zIndexRegistry.getNextZIndex();
@@ -187272,6 +187284,7 @@ var _DeesStepper = class _DeesStepper extends (_a81 = DeesElement, _steps_dec =
187272
187284
  <div
187273
187285
  class="stepperContainer ${this.overlay ? "overlay" : ""}"
187274
187286
  style=${this.overlay ? `z-index: ${this.stepperZIndex};` : ""}
187287
+ @click=${this.handleOutsideClick}
187275
187288
  >
187276
187289
  ${this.steps.map((stepArg, stepIndex) => {
187277
187290
  const isSelected = stepArg === this.selectedStep;
@@ -187292,19 +187305,23 @@ var _DeesStepper = class _DeesStepper extends (_a81 = DeesElement, _steps_dec =
187292
187305
  <div class="title">${stepArg.title}</div>
187293
187306
  <div class="content">${stepArg.content}</div>
187294
187307
  </div>
187295
- ${stepArg.menuOptions && stepArg.menuOptions.length > 0 ? b2`<div slot="footer" class="bottomButtons">
187296
- ${isSelected && this.activeForm !== null && !this.activeFormValid ? b2`<div class="stepHint">Complete form to continue</div>` : ""}
187297
- ${stepArg.menuOptions.map((actionArg, actionIndex) => {
187308
+ <div slot="footer" class="bottomButtons">
187309
+ ${isSelected && this.activeForm !== null && !this.activeFormValid ? b2`<div class="stepHint">Complete form to continue</div>` : ""}
187310
+ ${this.cancelable ? b2`<div
187311
+ class="bottomButton"
187312
+ @click=${() => this.handleCancelRequest()}
187313
+ >Cancel</div>` : ""}
187314
+ ${stepArg.menuOptions?.map((actionArg, actionIndex) => {
187298
187315
  const isPrimary = actionIndex === stepArg.menuOptions.length - 1;
187299
187316
  const isDisabled = isPrimary && this.activeForm !== null && !this.activeFormValid;
187300
187317
  return b2`
187301
- <div
187302
- class="bottomButton ${isPrimary ? "primary" : ""} ${isDisabled ? "disabled" : ""}"
187303
- @click=${() => this.handleMenuOptionClick(actionArg, isPrimary)}
187304
- >${actionArg.name}</div>
187305
- `;
187306
- })}
187307
- </div>` : ""}
187318
+ <div
187319
+ class="bottomButton ${isPrimary ? "primary" : ""} ${isDisabled ? "disabled" : ""}"
187320
+ @click=${() => this.handleMenuOptionClick(actionArg, isPrimary)}
187321
+ >${actionArg.name}</div>
187322
+ `;
187323
+ }) ?? ""}
187324
+ </div>
187308
187325
  </dees-tile>`;
187309
187326
  })}
187310
187327
  </div>
@@ -187446,6 +187463,65 @@ var _DeesStepper = class _DeesStepper extends (_a81 = DeesElement, _steps_dec =
187446
187463
  }
187447
187464
  await optionArg.action(this);
187448
187465
  }
187466
+ /**
187467
+ * Click handler on .stepperContainer. Mirrors dees-modal.handleOutsideClick:
187468
+ * when the user clicks the empty backdrop area (target === stepperContainer,
187469
+ * not any descendant tile), trigger the cancel confirmation flow. Clicks
187470
+ * that originate inside a step tile have a different event.target and are
187471
+ * ignored here.
187472
+ */
187473
+ handleOutsideClick(eventArg) {
187474
+ if (!this.overlay) return;
187475
+ if (!this.cancelable) return;
187476
+ eventArg.stopPropagation();
187477
+ const stepperContainer = this.shadowRoot.querySelector(".stepperContainer");
187478
+ if (eventArg.target === stepperContainer) {
187479
+ this.handleCancelRequest();
187480
+ }
187481
+ }
187482
+ /**
187483
+ * Shown by both the backdrop click and the Cancel button in the footer.
187484
+ * Presents a dees-modal asking the user to confirm cancellation. If they
187485
+ * confirm, the stepper and window layer are destroyed; otherwise the
187486
+ * confirm modal is dismissed and the stepper stays open.
187487
+ *
187488
+ * The isConnected check on the cached reference handles the case where the
187489
+ * user dismissed the previous confirm modal by clicking ITS OWN backdrop —
187490
+ * dees-modal.handleOutsideClick calls destroy() directly, bypassing our
187491
+ * action callbacks, so our cached reference would be stale without this
187492
+ * fallback check.
187493
+ */
187494
+ async handleCancelRequest() {
187495
+ if (!this.cancelable) return;
187496
+ if (this.cancelConfirmModal && this.cancelConfirmModal.isConnected) return;
187497
+ this.cancelConfirmModal = void 0;
187498
+ this.cancelConfirmModal = await DeesModal.createAndShow({
187499
+ heading: "Cancel setup?",
187500
+ width: "small",
187501
+ content: b2`
187502
+ <p style="margin: 0;">
187503
+ Are you sure you want to cancel? Any progress on the current step will be lost.
187504
+ </p>
187505
+ `,
187506
+ menuOptions: [
187507
+ {
187508
+ name: "Continue setup",
187509
+ action: /* @__PURE__ */ __name(async (modal) => {
187510
+ this.cancelConfirmModal = void 0;
187511
+ await modal.destroy();
187512
+ }, "action")
187513
+ },
187514
+ {
187515
+ name: "Yes, cancel",
187516
+ action: /* @__PURE__ */ __name(async (modal) => {
187517
+ this.cancelConfirmModal = void 0;
187518
+ await modal.destroy();
187519
+ await this.destroy();
187520
+ }, "action")
187521
+ }
187522
+ ]
187523
+ });
187524
+ }
187449
187525
  async destroy() {
187450
187526
  const domtools19 = await this.domtoolsPromise;
187451
187527
  const container = this.shadowRoot.querySelector(".stepperContainer");
@@ -187467,12 +187543,14 @@ _init82 = __decoratorStart(_a81);
187467
187543
  _steps = new WeakMap();
187468
187544
  _selectedStep = new WeakMap();
187469
187545
  _overlay = new WeakMap();
187546
+ _cancelable = new WeakMap();
187470
187547
  _stepperZIndex = new WeakMap();
187471
187548
  _activeForm = new WeakMap();
187472
187549
  _activeFormValid = new WeakMap();
187473
187550
  __decorateElement(_init82, 4, "steps", _steps_dec, _DeesStepper, _steps);
187474
187551
  __decorateElement(_init82, 4, "selectedStep", _selectedStep_dec, _DeesStepper, _selectedStep);
187475
187552
  __decorateElement(_init82, 4, "overlay", _overlay_dec, _DeesStepper, _overlay);
187553
+ __decorateElement(_init82, 4, "cancelable", _cancelable_dec, _DeesStepper, _cancelable);
187476
187554
  __decorateElement(_init82, 4, "stepperZIndex", _stepperZIndex_dec, _DeesStepper, _stepperZIndex);
187477
187555
  __decorateElement(_init82, 4, "activeForm", _activeForm_dec, _DeesStepper, _activeForm);
187478
187556
  __decorateElement(_init82, 4, "activeFormValid", _activeFormValid_dec, _DeesStepper, _activeFormValid);
@@ -187663,15 +187741,17 @@ __publicField(_DeesStepper, "styles", [
187663
187741
  transition: all 0.15s ease;
187664
187742
  background: transparent;
187665
187743
  border: none;
187666
- border-left: 1px solid var(--dees-color-border-subtle);
187667
187744
  color: var(--dees-color-text-muted);
187668
187745
  white-space: nowrap;
187669
187746
  display: flex;
187670
187747
  align-items: center;
187671
187748
  }
187672
187749
 
187673
- .bottomButtons .bottomButton:first-child {
187674
- border-left: none;
187750
+ /* Border-left separator on every button EXCEPT the first one.
187751
+ Uses general sibling so the stepHint (if rendered on the left) does
187752
+ not shift which button counts as "first" and create a phantom border. */
187753
+ .bottomButtons .bottomButton ~ .bottomButton {
187754
+ border-left: 1px solid var(--dees-color-border-subtle);
187675
187755
  }
187676
187756
 
187677
187757
  .bottomButtons .bottomButton:hover {
@@ -201198,7 +201278,7 @@ init_group_runtime();
201198
201278
  // ts_web/00_commitinfo_data.ts
201199
201279
  var commitinfo = {
201200
201280
  name: "@design.estate/dees-catalog",
201201
- version: "3.71.1",
201281
+ version: "3.72.0",
201202
201282
  description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
201203
201283
  };
201204
201284
  export {
@@ -203171,4 +203251,4 @@ ibantools/jsnext/ibantools.js:
203171
203251
  * @preferred
203172
203252
  *)
203173
203253
  */
203174
- //# sourceMappingURL=bundle-1775924449030.js.map
203254
+ //# sourceMappingURL=bundle-1775937892404.js.map
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.71.1',
6
+ version: '3.72.0',
7
7
  description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
@@ -22,10 +22,18 @@ export declare class DeesStepper extends DeesElement {
22
22
  static demoGroups: string[];
23
23
  static createAndShow(optionsArg: {
24
24
  steps: IStep[];
25
+ cancelable?: boolean;
25
26
  }): Promise<DeesStepper>;
26
27
  accessor steps: IStep[];
27
28
  accessor selectedStep: IStep;
28
29
  accessor overlay: boolean;
30
+ /**
31
+ * When true (default), the stepper renders a Cancel button in every step's
32
+ * footer, and clicking the backdrop (overlay mode) triggers the same cancel
33
+ * confirmation flow. Set to false for forced flows where the user must
34
+ * complete the stepper — no Cancel button, no backdrop dismissal.
35
+ */
36
+ accessor cancelable: boolean;
29
37
  accessor stepperZIndex: number;
30
38
  accessor activeForm: DeesForm | null;
31
39
  accessor activeFormValid: boolean;
@@ -64,5 +72,34 @@ export declare class DeesStepper extends DeesElement {
64
72
  * completes before the click handler returns.
65
73
  */
66
74
  private handleMenuOptionClick;
75
+ /**
76
+ * Currently-open confirmation modal (if any). Prevents double-stacking when
77
+ * the user clicks the backdrop or the Cancel button while a confirm modal
78
+ * is already visible. The reference may become stale (point to a destroyed
79
+ * modal) if the user dismisses the confirm modal by clicking its own
80
+ * backdrop — so handleCancelRequest() uses isConnected to detect that.
81
+ */
82
+ private cancelConfirmModal?;
83
+ /**
84
+ * Click handler on .stepperContainer. Mirrors dees-modal.handleOutsideClick:
85
+ * when the user clicks the empty backdrop area (target === stepperContainer,
86
+ * not any descendant tile), trigger the cancel confirmation flow. Clicks
87
+ * that originate inside a step tile have a different event.target and are
88
+ * ignored here.
89
+ */
90
+ private handleOutsideClick;
91
+ /**
92
+ * Shown by both the backdrop click and the Cancel button in the footer.
93
+ * Presents a dees-modal asking the user to confirm cancellation. If they
94
+ * confirm, the stepper and window layer are destroyed; otherwise the
95
+ * confirm modal is dismissed and the stepper stays open.
96
+ *
97
+ * The isConnected check on the cached reference handles the case where the
98
+ * user dismissed the previous confirm modal by clicking ITS OWN backdrop —
99
+ * dees-modal.handleOutsideClick calls destroy() directly, bypassing our
100
+ * action callbacks, so our cached reference would be stale without this
101
+ * fallback check.
102
+ */
103
+ handleCancelRequest(): Promise<void>;
67
104
  destroy(): Promise<void>;
68
105
  }
@@ -40,6 +40,7 @@ import { themeDefaultStyles } from '../../00theme.js';
40
40
  import { cssGeistFontFamily } from '../../00fonts.js';
41
41
  import { zIndexRegistry } from '../../00zindex.js';
42
42
  import { DeesWindowLayer } from '../../00group-overlay/dees-windowlayer/dees-windowlayer.js';
43
+ import { DeesModal } from '../../00group-overlay/dees-modal/dees-modal.js';
43
44
  import '../dees-tile/dees-tile.js';
44
45
  let DeesStepper = (() => {
45
46
  let _classDecorators = [customElement('dees-stepper')];
@@ -56,6 +57,9 @@ let DeesStepper = (() => {
56
57
  let _overlay_decorators;
57
58
  let _overlay_initializers = [];
58
59
  let _overlay_extraInitializers = [];
60
+ let _cancelable_decorators;
61
+ let _cancelable_initializers = [];
62
+ let _cancelable_extraInitializers = [];
59
63
  let _stepperZIndex_decorators;
60
64
  let _stepperZIndex_initializers = [];
61
65
  let _stepperZIndex_extraInitializers = [];
@@ -79,12 +83,17 @@ let DeesStepper = (() => {
79
83
  type: Boolean,
80
84
  reflect: true,
81
85
  })];
86
+ _cancelable_decorators = [property({
87
+ type: Boolean,
88
+ reflect: true,
89
+ })];
82
90
  _stepperZIndex_decorators = [property({ type: Number, attribute: false })];
83
91
  _activeForm_decorators = [property({ type: Object, attribute: false })];
84
92
  _activeFormValid_decorators = [property({ type: Boolean, attribute: false })];
85
93
  __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);
86
94
  __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);
87
95
  __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);
96
+ __esDecorate(this, null, _cancelable_decorators, { kind: "accessor", name: "cancelable", static: false, private: false, access: { has: obj => "cancelable" in obj, get: obj => obj.cancelable, set: (obj, value) => { obj.cancelable = value; } }, metadata: _metadata }, _cancelable_initializers, _cancelable_extraInitializers);
88
97
  __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);
89
98
  __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);
90
99
  __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);
@@ -100,10 +109,10 @@ let DeesStepper = (() => {
100
109
  const stepper = new DeesStepper();
101
110
  stepper.steps = optionsArg.steps;
102
111
  stepper.overlay = true;
112
+ if (optionsArg.cancelable !== undefined) {
113
+ stepper.cancelable = optionsArg.cancelable;
114
+ }
103
115
  stepper.windowLayer = await DeesWindowLayer.createAndShow({ blur: true });
104
- stepper.windowLayer.addEventListener('click', async () => {
105
- await stepper.destroy();
106
- });
107
116
  body.append(stepper.windowLayer);
108
117
  body.append(stepper);
109
118
  // Get z-index for stepper (should be above window layer)
@@ -121,7 +130,16 @@ let DeesStepper = (() => {
121
130
  #overlay_accessor_storage = (__runInitializers(this, _selectedStep_extraInitializers), __runInitializers(this, _overlay_initializers, false));
122
131
  get overlay() { return this.#overlay_accessor_storage; }
123
132
  set overlay(value) { this.#overlay_accessor_storage = value; }
124
- #stepperZIndex_accessor_storage = (__runInitializers(this, _overlay_extraInitializers), __runInitializers(this, _stepperZIndex_initializers, 1000));
133
+ #cancelable_accessor_storage = (__runInitializers(this, _overlay_extraInitializers), __runInitializers(this, _cancelable_initializers, true));
134
+ /**
135
+ * When true (default), the stepper renders a Cancel button in every step's
136
+ * footer, and clicking the backdrop (overlay mode) triggers the same cancel
137
+ * confirmation flow. Set to false for forced flows where the user must
138
+ * complete the stepper — no Cancel button, no backdrop dismissal.
139
+ */
140
+ get cancelable() { return this.#cancelable_accessor_storage; }
141
+ set cancelable(value) { this.#cancelable_accessor_storage = value; }
142
+ #stepperZIndex_accessor_storage = (__runInitializers(this, _cancelable_extraInitializers), __runInitializers(this, _stepperZIndex_initializers, 1000));
125
143
  get stepperZIndex() { return this.#stepperZIndex_accessor_storage; }
126
144
  set stepperZIndex(value) { this.#stepperZIndex_accessor_storage = value; }
127
145
  #activeForm_accessor_storage = (__runInitializers(this, _stepperZIndex_extraInitializers), __runInitializers(this, _activeForm_initializers, null));
@@ -317,15 +335,17 @@ let DeesStepper = (() => {
317
335
  transition: all 0.15s ease;
318
336
  background: transparent;
319
337
  border: none;
320
- border-left: 1px solid var(--dees-color-border-subtle);
321
338
  color: var(--dees-color-text-muted);
322
339
  white-space: nowrap;
323
340
  display: flex;
324
341
  align-items: center;
325
342
  }
326
343
 
327
- .bottomButtons .bottomButton:first-child {
328
- border-left: none;
344
+ /* Border-left separator on every button EXCEPT the first one.
345
+ Uses general sibling so the stepHint (if rendered on the left) does
346
+ not shift which button counts as "first" and create a phantom border. */
347
+ .bottomButtons .bottomButton ~ .bottomButton {
348
+ border-left: 1px solid var(--dees-color-border-subtle);
329
349
  }
330
350
 
331
351
  .bottomButtons .bottomButton:hover {
@@ -383,6 +403,7 @@ let DeesStepper = (() => {
383
403
  <div
384
404
  class="stepperContainer ${this.overlay ? 'overlay' : ''}"
385
405
  style=${this.overlay ? `z-index: ${this.stepperZIndex};` : ''}
406
+ @click=${this.handleOutsideClick}
386
407
  >
387
408
  ${this.steps.map((stepArg, stepIndex) => {
388
409
  const isSelected = stepArg === this.selectedStep;
@@ -405,23 +426,27 @@ let DeesStepper = (() => {
405
426
  <div class="title">${stepArg.title}</div>
406
427
  <div class="content">${stepArg.content}</div>
407
428
  </div>
408
- ${stepArg.menuOptions && stepArg.menuOptions.length > 0
409
- ? html `<div slot="footer" class="bottomButtons">
410
- ${isSelected && this.activeForm !== null && !this.activeFormValid
411
- ? html `<div class="stepHint">Complete form to continue</div>`
412
- : ''}
413
- ${stepArg.menuOptions.map((actionArg, actionIndex) => {
414
- const isPrimary = actionIndex === stepArg.menuOptions.length - 1;
415
- const isDisabled = isPrimary && this.activeForm !== null && !this.activeFormValid;
416
- return html `
417
- <div
418
- class="bottomButton ${isPrimary ? 'primary' : ''} ${isDisabled ? 'disabled' : ''}"
419
- @click=${() => this.handleMenuOptionClick(actionArg, isPrimary)}
420
- >${actionArg.name}</div>
421
- `;
422
- })}
423
- </div>`
429
+ <div slot="footer" class="bottomButtons">
430
+ ${isSelected && this.activeForm !== null && !this.activeFormValid
431
+ ? html `<div class="stepHint">Complete form to continue</div>`
424
432
  : ''}
433
+ ${this.cancelable
434
+ ? html `<div
435
+ class="bottomButton"
436
+ @click=${() => this.handleCancelRequest()}
437
+ >Cancel</div>`
438
+ : ''}
439
+ ${stepArg.menuOptions?.map((actionArg, actionIndex) => {
440
+ const isPrimary = actionIndex === stepArg.menuOptions.length - 1;
441
+ const isDisabled = isPrimary && this.activeForm !== null && !this.activeFormValid;
442
+ return html `
443
+ <div
444
+ class="bottomButton ${isPrimary ? 'primary' : ''} ${isDisabled ? 'disabled' : ''}"
445
+ @click=${() => this.handleMenuOptionClick(actionArg, isPrimary)}
446
+ >${actionArg.name}</div>
447
+ `;
448
+ }) ?? ''}
449
+ </div>
425
450
  </dees-tile>`;
426
451
  })}
427
452
  </div>
@@ -570,6 +595,77 @@ let DeesStepper = (() => {
570
595
  }
571
596
  await optionArg.action(this);
572
597
  }
598
+ /**
599
+ * Currently-open confirmation modal (if any). Prevents double-stacking when
600
+ * the user clicks the backdrop or the Cancel button while a confirm modal
601
+ * is already visible. The reference may become stale (point to a destroyed
602
+ * modal) if the user dismisses the confirm modal by clicking its own
603
+ * backdrop — so handleCancelRequest() uses isConnected to detect that.
604
+ */
605
+ cancelConfirmModal;
606
+ /**
607
+ * Click handler on .stepperContainer. Mirrors dees-modal.handleOutsideClick:
608
+ * when the user clicks the empty backdrop area (target === stepperContainer,
609
+ * not any descendant tile), trigger the cancel confirmation flow. Clicks
610
+ * that originate inside a step tile have a different event.target and are
611
+ * ignored here.
612
+ */
613
+ handleOutsideClick(eventArg) {
614
+ if (!this.overlay)
615
+ return;
616
+ if (!this.cancelable)
617
+ return;
618
+ eventArg.stopPropagation();
619
+ const stepperContainer = this.shadowRoot.querySelector('.stepperContainer');
620
+ if (eventArg.target === stepperContainer) {
621
+ this.handleCancelRequest();
622
+ }
623
+ }
624
+ /**
625
+ * Shown by both the backdrop click and the Cancel button in the footer.
626
+ * Presents a dees-modal asking the user to confirm cancellation. If they
627
+ * confirm, the stepper and window layer are destroyed; otherwise the
628
+ * confirm modal is dismissed and the stepper stays open.
629
+ *
630
+ * The isConnected check on the cached reference handles the case where the
631
+ * user dismissed the previous confirm modal by clicking ITS OWN backdrop —
632
+ * dees-modal.handleOutsideClick calls destroy() directly, bypassing our
633
+ * action callbacks, so our cached reference would be stale without this
634
+ * fallback check.
635
+ */
636
+ async handleCancelRequest() {
637
+ if (!this.cancelable)
638
+ return;
639
+ if (this.cancelConfirmModal && this.cancelConfirmModal.isConnected)
640
+ return;
641
+ this.cancelConfirmModal = undefined;
642
+ this.cancelConfirmModal = await DeesModal.createAndShow({
643
+ heading: 'Cancel setup?',
644
+ width: 'small',
645
+ content: html `
646
+ <p style="margin: 0;">
647
+ Are you sure you want to cancel? Any progress on the current step will be lost.
648
+ </p>
649
+ `,
650
+ menuOptions: [
651
+ {
652
+ name: 'Continue setup',
653
+ action: async (modal) => {
654
+ this.cancelConfirmModal = undefined;
655
+ await modal.destroy();
656
+ },
657
+ },
658
+ {
659
+ name: 'Yes, cancel',
660
+ action: async (modal) => {
661
+ this.cancelConfirmModal = undefined;
662
+ await modal.destroy();
663
+ await this.destroy();
664
+ },
665
+ },
666
+ ],
667
+ });
668
+ }
573
669
  async destroy() {
574
670
  const domtools = await this.domtoolsPromise;
575
671
  const container = this.shadowRoot.querySelector('.stepperContainer');
@@ -595,4 +691,4 @@ let DeesStepper = (() => {
595
691
  return DeesStepper = _classThis;
596
692
  })();
597
693
  export { DeesStepper };
598
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1zdGVwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtc3RlcHBlci9kZWVzLXN0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsSUFBSSxFQUNKLEdBQUcsRUFDSCxTQUFTLEVBRVQsVUFBVSxFQUNWLFFBQVEsR0FFVCxNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sS0FBSyxRQUFRLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNERBQTRELENBQUM7QUFFN0YsT0FBTywyQkFBMkIsQ0FBQztJQW1CdEIsV0FBVzs0QkFEdkIsYUFBYSxDQUFDLGNBQWMsQ0FBQzs7OztzQkFDRyxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJCQUFuQixTQUFRLFdBQVc7Ozs7aUNBMkJ6QyxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLEtBQUs7aUJBQ1osQ0FBQzt3Q0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE1BQU07aUJBQ2IsQ0FBQzttQ0FHRCxRQUFRLENBQUM7b0JBQ1IsSUFBSSxFQUFFLE9BQU87b0JBQ2IsT0FBTyxFQUFFLElBQUk7aUJBQ2QsQ0FBQzt5Q0FHRCxRQUFRLENBQUMsRUFBRSxJQUFJ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
694
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1zdGVwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtbGF5b3V0L2RlZXMtc3RlcHBlci9kZWVzLXN0ZXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUM7QUFFOUMsT0FBTyxFQUNMLFdBQVcsRUFDWCxhQUFhLEVBQ2IsSUFBSSxFQUNKLEdBQUcsRUFDSCxTQUFTLEVBRVQsVUFBVSxFQUNWLFFBQVEsR0FFVCxNQUFNLDZCQUE2QixDQUFDO0FBRXJDLE9BQU8sS0FBSyxRQUFRLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDN0YsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBRTNFLE9BQU8sMkJBQTJCLENBQUM7SUFtQnRCLFdBQVc7NEJBRHZCLGFBQWEsQ0FBQyxjQUFjLENBQUM7Ozs7c0JBQ0csV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyQkFBbkIsU0FBUSxXQUFXOzs7O2lDQTRCekMsUUFBUSxDQUFDO29CQUNSLElBQUksRUFBRSxLQUFLO2lCQUNaLENBQUM7d0NBR0QsUUFBUSxDQUFDO29CQUNSLElBQUksRUFBRSxNQUFNO2lCQUNiLENBQUM7bUNBR0QsUUFBUSxDQUFDO29CQUNSLElBQUksRUFBRSxPQUFPO29CQUNiLE9BQU8s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