@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.
- package/dist_bundle/bundle.js +1307 -1448
- package/dist_bundle/bundle.js.map +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-layout/dees-stepper/dees-stepper.d.ts +21 -2
- package/dist_ts_web/elements/00group-layout/dees-stepper/dees-stepper.demo.d.ts +4 -0
- package/dist_ts_web/elements/00group-layout/dees-stepper/dees-stepper.demo.js +218 -193
- package/dist_ts_web/elements/00group-layout/dees-stepper/dees-stepper.js +288 -403
- package/dist_ts_web/elements/00group-layout/dees-stepper/styles.d.ts +1 -0
- package/dist_ts_web/elements/00group-layout/dees-stepper/styles.js +41 -0
- package/package.json +1 -1
- package/readme.md +31 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-layout/dees-stepper/dees-stepper.demo.ts +142 -200
- package/ts_web/elements/00group-layout/dees-stepper/dees-stepper.ts +216 -400
- package/ts_web/elements/00group-layout/dees-stepper/styles.ts +41 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/dees-catalog',
|
|
6
|
-
version: '9.
|
|
6
|
+
version: '9.6.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
|
|
@@ -4,6 +4,8 @@ import * as domtools from '@design.estate/dees-domtools';
|
|
|
4
4
|
import type { DeesForm } from '../../00group-form/dees-form/dees-form.js';
|
|
5
5
|
import '../../00group-feedback/dees-progressbar/dees-progressbar.js';
|
|
6
6
|
import '../dees-tile/dees-tile.js';
|
|
7
|
+
import '../../00group-button/dees-button/dees-button.js';
|
|
8
|
+
import '../../00group-utility/dees-icon/dees-icon.js';
|
|
7
9
|
export interface IStepProgressState {
|
|
8
10
|
label?: string;
|
|
9
11
|
percentage?: number;
|
|
@@ -18,6 +20,7 @@ export interface IStepProgress extends IStepProgressState {
|
|
|
18
20
|
}
|
|
19
21
|
export interface IStep {
|
|
20
22
|
title: string;
|
|
23
|
+
description?: string;
|
|
21
24
|
content: TemplateResult;
|
|
22
25
|
allowBack?: boolean;
|
|
23
26
|
progressStep?: IStepProgress;
|
|
@@ -54,15 +57,26 @@ export declare class DeesStepper extends DeesElement {
|
|
|
54
57
|
accessor activeForm: DeesForm | null;
|
|
55
58
|
accessor activeFormValid: boolean;
|
|
56
59
|
private activeFormSubscription?;
|
|
57
|
-
private
|
|
60
|
+
private accessor stepError;
|
|
61
|
+
private accessor progressRunning;
|
|
62
|
+
private accessor actionPending;
|
|
63
|
+
private resizeObserver?;
|
|
64
|
+
private activeValidationStep?;
|
|
65
|
+
private actionStep?;
|
|
66
|
+
private destroyPromise?;
|
|
67
|
+
private scrollTarget?;
|
|
68
|
+
private scrollInFlight;
|
|
69
|
+
private cancelRequestPending;
|
|
58
70
|
constructor();
|
|
59
71
|
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
60
72
|
render(): TemplateResult<1>;
|
|
73
|
+
private renderSteps;
|
|
61
74
|
getIndexOfStep: (stepArg: IStep) => number;
|
|
62
|
-
|
|
75
|
+
protected willUpdate(changed: Map<PropertyKey, unknown>): void;
|
|
63
76
|
updated(changedProperties: Map<string | number | symbol, unknown>): Promise<void>;
|
|
64
77
|
scroller: typeof domtools.plugins.SweetScroll.prototype;
|
|
65
78
|
setScrollStatus(): Promise<void>;
|
|
79
|
+
private positionSelectedStep;
|
|
66
80
|
goBack(): Promise<void>;
|
|
67
81
|
goNext(): void;
|
|
68
82
|
resetProgressStep(stepArg?: IStep): void;
|
|
@@ -95,6 +109,9 @@ export declare class DeesStepper extends DeesElement {
|
|
|
95
109
|
private createInitialProgressStepState;
|
|
96
110
|
private prepareStepForActivation;
|
|
97
111
|
private runStepValidation;
|
|
112
|
+
/** Rerun the current step after a recoverable validation/provisioning failure. */
|
|
113
|
+
retryStep(): Promise<void>;
|
|
114
|
+
private handleDialogCancel;
|
|
98
115
|
/**
|
|
99
116
|
* Currently-open confirmation modal (if any). Prevents double-stacking when
|
|
100
117
|
* the user clicks the backdrop or the Cancel button while a confirm modal
|
|
@@ -125,4 +142,6 @@ export declare class DeesStepper extends DeesElement {
|
|
|
125
142
|
*/
|
|
126
143
|
handleCancelRequest(): Promise<void>;
|
|
127
144
|
destroy(): Promise<void>;
|
|
145
|
+
private closeAndRemove;
|
|
146
|
+
disconnectedCallback(): Promise<void>;
|
|
128
147
|
}
|
|
@@ -1 +1,5 @@
|
|
|
1
|
+
import '../../00group-form/dees-form/dees-form.js';
|
|
2
|
+
import '../../00group-input/dees-input-text/dees-input-text.js';
|
|
3
|
+
import '../../00group-input/dees-input-multitoggle/dees-input-multitoggle.js';
|
|
4
|
+
import '../../00group-input/dees-input-toggle/dees-input-toggle.js';
|
|
1
5
|
export declare const stepperDemo: () => import("@design.estate/dees-element").TemplateResult<1>;
|
|
@@ -1,199 +1,224 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (signal) {
|
|
24
|
-
signal.addEventListener('abort', handleAbort, { once: true });
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
25
23
|
}
|
|
26
|
-
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
27
|
};
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
<p>
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
statusText: 'Allocating a clean workspace...',
|
|
82
|
-
terminalLines: ['Allocating a clean workspace'],
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import { DeesElement, customElement, property, state, html, css, cssManager } from '@design.estate/dees-element';
|
|
36
|
+
import { DeesStepper } from './dees-stepper.js';
|
|
37
|
+
import { themeDefaultStyles } from '../../00theme.js';
|
|
38
|
+
import { demoPage } from '../../../demos/templates.js';
|
|
39
|
+
import '../../00group-form/dees-form/dees-form.js';
|
|
40
|
+
import '../../00group-input/dees-input-text/dees-input-text.js';
|
|
41
|
+
import '../../00group-input/dees-input-multitoggle/dees-input-multitoggle.js';
|
|
42
|
+
import '../../00group-input/dees-input-toggle/dees-input-toggle.js';
|
|
43
|
+
const waitForProgressTick = (duration, signal) => new Promise(resolve => {
|
|
44
|
+
if (signal?.aborted) {
|
|
45
|
+
resolve(false);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const abort = () => { clearTimeout(timer); resolve(false); };
|
|
49
|
+
const timer = setTimeout(() => { signal?.removeEventListener('abort', abort); resolve(true); }, duration);
|
|
50
|
+
signal?.addEventListener('abort', abort, { once: true });
|
|
51
|
+
});
|
|
52
|
+
const contentStyles = html `<style>
|
|
53
|
+
.setup-summary { margin: 0; display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 12px 24px; font-size: 13px; }
|
|
54
|
+
.setup-summary dt { color: var(--dees-color-text-secondary); }
|
|
55
|
+
.setup-summary dd { margin: 0; text-align: right; overflow-wrap: anywhere; font-weight: 500; }
|
|
56
|
+
.setup-note { color: var(--dees-color-text-secondary); font-size: 12px; line-height: 1.6; margin: 20px 0 0; }
|
|
57
|
+
.setup-success { display: flex; align-items: center; gap: 10px; margin: 0 0 20px; color: var(--dees-color-text-success); }
|
|
58
|
+
</style>`;
|
|
59
|
+
const createDemoSteps = (failFirst, finish) => {
|
|
60
|
+
const draft = { name: '', email: '', purpose: 'Product', updates: true };
|
|
61
|
+
let attempts = 0;
|
|
62
|
+
const summary = () => html `${contentStyles}<dl class="setup-summary">
|
|
63
|
+
<dt>Workspace</dt><dd>${draft.name}</dd><dt>Owner</dt><dd>${draft.email}</dd>
|
|
64
|
+
<dt>Built for</dt><dd>${draft.purpose}</dd><dt>Weekly digest</dt><dd>${draft.updates ? 'On' : 'Off'}</dd>
|
|
65
|
+
</dl>`;
|
|
66
|
+
const collect = (event) => {
|
|
67
|
+
Object.assign(draft, event.detail.data);
|
|
68
|
+
steps[2].content = summary();
|
|
69
|
+
steps[4].content = html `${contentStyles}<p class="setup-success"><dees-icon icon="lucide:CircleCheck" iconSize="20"></dees-icon>Everything is in place.</p>${summary()}`;
|
|
70
|
+
};
|
|
71
|
+
const next = [{ name: 'Continue', action: async (stepper) => stepper?.goNext() }];
|
|
72
|
+
const steps = [
|
|
73
|
+
{
|
|
74
|
+
title: 'Create a workspace.',
|
|
75
|
+
description: 'Give your workspace a name and choose who will own it.',
|
|
76
|
+
content: html `<dees-form @formData=${collect}>
|
|
77
|
+
<dees-input-text key="name" label="Workspace name" placeholder="Studio Notes" required></dees-input-text>
|
|
78
|
+
<dees-input-text key="email" label="Work email" placeholder="alex@example.com" type="email" required></dees-input-text>
|
|
79
|
+
</dees-form>`,
|
|
80
|
+
menuOptions: next,
|
|
83
81
|
},
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
stepper.updateProgressStep({
|
|
99
|
-
percentage: progressFrame.percentage,
|
|
100
|
-
indeterminate: true,
|
|
101
|
-
statusText: `${progressFrame.line}...`,
|
|
102
|
-
terminalLines: [progressFrame.line],
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
stepper.appendProgressStepLine(progressFrame.line);
|
|
107
|
-
stepper.updateProgressStep({
|
|
108
|
-
percentage: progressFrame.percentage,
|
|
109
|
-
indeterminate: true,
|
|
110
|
-
statusText: `${progressFrame.line}...`,
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
const completed = await waitForProgressTick(progressFrame.delay, signal);
|
|
114
|
-
if (!completed) {
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
stepper.appendProgressStepLine('Workspace ready');
|
|
119
|
-
stepper.updateProgressStep({
|
|
120
|
-
percentage: 100,
|
|
121
|
-
indeterminate: false,
|
|
122
|
-
statusText: 'Workspace ready.',
|
|
123
|
-
});
|
|
124
|
-
await waitForProgressTick(350, signal);
|
|
82
|
+
{
|
|
83
|
+
title: 'Make it yours.',
|
|
84
|
+
description: 'Start with a focus. You can change these choices later.',
|
|
85
|
+
content: html `<dees-form @formData=${collect}>
|
|
86
|
+
<dees-input-multitoggle key="purpose" label="What are you working on?" .options=${['Product', 'Operations', 'Research']}></dees-input-multitoggle>
|
|
87
|
+
<dees-input-toggle key="updates" label="Weekly workspace digest" .value=${true}></dees-input-toggle>
|
|
88
|
+
</dees-form>`,
|
|
89
|
+
menuOptions: next,
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
title: 'Ready to create?',
|
|
93
|
+
description: 'Take a moment to check your choices.',
|
|
94
|
+
content: summary(),
|
|
95
|
+
menuOptions: [{ name: 'Create workspace', action: async (stepper) => stepper?.goNext() }],
|
|
125
96
|
},
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
`,
|
|
144
|
-
menuOptions: createContinueMenuOptions(),
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
title: 'Goals',
|
|
148
|
-
content: html `
|
|
149
|
-
<dees-form>
|
|
150
|
-
<dees-input-multitoggle
|
|
151
|
-
key="goal"
|
|
152
|
-
label="Main objective"
|
|
153
|
-
.options=${[
|
|
154
|
-
{ label: 'Onboarding', key: 'onboarding' },
|
|
155
|
-
{ label: 'Analytics', key: 'analytics' },
|
|
156
|
-
{ label: 'Automation', key: 'automation' },
|
|
157
|
-
]}
|
|
158
|
-
></dees-input-multitoggle>
|
|
159
|
-
</dees-form>
|
|
160
|
-
`,
|
|
161
|
-
menuOptions: createContinueMenuOptions(),
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
title: 'Review & Launch',
|
|
165
|
-
content: html `
|
|
166
|
-
<dees-panel>
|
|
167
|
-
<p>
|
|
168
|
-
Your workspace is ready. Review the collected details and launch when
|
|
169
|
-
you are ready to start.
|
|
170
|
-
</p>
|
|
171
|
-
</dees-panel>
|
|
172
|
-
`,
|
|
173
|
-
menuOptions: [
|
|
174
|
-
{
|
|
175
|
-
name: 'Launch',
|
|
176
|
-
action: async (stepper) => {
|
|
177
|
-
if (stepper?.overlay) {
|
|
178
|
-
await stepper.destroy();
|
|
179
|
-
}
|
|
180
|
-
},
|
|
97
|
+
{
|
|
98
|
+
title: 'Bringing it together.',
|
|
99
|
+
description: 'Your workspace is taking shape. This usually takes a few seconds.',
|
|
100
|
+
content: html `${contentStyles}<p class="setup-note">You can go back to adjust your choices, or cancel while setup is running.</p>`,
|
|
101
|
+
progressStep: { label: 'Creating workspace', percentage: 0, statusRows: 3 },
|
|
102
|
+
validationFunc: async (stepper, _element, signal) => {
|
|
103
|
+
attempts++;
|
|
104
|
+
const messages = ['Creating your space', 'Applying preferences', 'Preparing starter files', 'Workspace ready'];
|
|
105
|
+
for (const [index, message] of messages.entries()) {
|
|
106
|
+
if (!await waitForProgressTick(650, signal))
|
|
107
|
+
return;
|
|
108
|
+
if (failFirst && attempts === 1 && index === 2)
|
|
109
|
+
throw new Error('Starter files could not be copied. Your choices are saved. Try again.');
|
|
110
|
+
stepper.appendProgressStepLine(message);
|
|
111
|
+
stepper.updateProgressStep({ percentage: (index + 1) * 25, statusText: message, indeterminate: false });
|
|
112
|
+
}
|
|
113
|
+
await waitForProgressTick(450, signal);
|
|
181
114
|
},
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
title: 'Your workspace is ready.',
|
|
118
|
+
description: 'A fresh start, with all the details you chose.',
|
|
119
|
+
allowBack: false,
|
|
120
|
+
content: summary(),
|
|
121
|
+
menuOptions: [{ name: 'Done', action: async (stepper) => { finish(draft.name); await stepper?.destroy(); } }],
|
|
122
|
+
},
|
|
123
|
+
];
|
|
124
|
+
return steps;
|
|
125
|
+
};
|
|
126
|
+
let DeesDemoStepper = (() => {
|
|
127
|
+
let _classDecorators = [customElement('dees-demo-stepper')];
|
|
128
|
+
let _classDescriptor;
|
|
129
|
+
let _classExtraInitializers = [];
|
|
130
|
+
let _classThis;
|
|
131
|
+
let _classSuper = DeesElement;
|
|
132
|
+
let _scenario_decorators;
|
|
133
|
+
let _scenario_initializers = [];
|
|
134
|
+
let _scenario_extraInitializers = [];
|
|
135
|
+
let _closed_decorators;
|
|
136
|
+
let _closed_initializers = [];
|
|
137
|
+
let _closed_extraInitializers = [];
|
|
138
|
+
let _result_decorators;
|
|
139
|
+
let _result_initializers = [];
|
|
140
|
+
let _result_extraInitializers = [];
|
|
141
|
+
var DeesDemoStepper = class extends _classSuper {
|
|
142
|
+
static { _classThis = this; }
|
|
143
|
+
static {
|
|
144
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
145
|
+
_scenario_decorators = [property()];
|
|
146
|
+
_closed_decorators = [state()];
|
|
147
|
+
_result_decorators = [state()];
|
|
148
|
+
__esDecorate(this, null, _scenario_decorators, { kind: "accessor", name: "scenario", static: false, private: false, access: { has: obj => "scenario" in obj, get: obj => obj.scenario, set: (obj, value) => { obj.scenario = value; } }, metadata: _metadata }, _scenario_initializers, _scenario_extraInitializers);
|
|
149
|
+
__esDecorate(this, null, _closed_decorators, { kind: "accessor", name: "closed", static: false, private: false, access: { has: obj => "closed" in obj, get: obj => obj.closed, set: (obj, value) => { obj.closed = value; } }, metadata: _metadata }, _closed_initializers, _closed_extraInitializers);
|
|
150
|
+
__esDecorate(this, null, _result_decorators, { kind: "accessor", name: "result", static: false, private: false, access: { has: obj => "result" in obj, get: obj => obj.result, set: (obj, value) => { obj.result = value; } }, metadata: _metadata }, _result_initializers, _result_extraInitializers);
|
|
151
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
152
|
+
DeesDemoStepper = _classThis = _classDescriptor.value;
|
|
153
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
154
|
+
}
|
|
155
|
+
#scenario_accessor_storage = __runInitializers(this, _scenario_initializers, 'Standard setup');
|
|
156
|
+
get scenario() { return this.#scenario_accessor_storage; }
|
|
157
|
+
set scenario(value) { this.#scenario_accessor_storage = value; }
|
|
158
|
+
#closed_accessor_storage = (__runInitializers(this, _scenario_extraInitializers), __runInitializers(this, _closed_initializers, false));
|
|
159
|
+
get closed() { return this.#closed_accessor_storage; }
|
|
160
|
+
set closed(value) { this.#closed_accessor_storage = value; }
|
|
161
|
+
#result_accessor_storage = (__runInitializers(this, _closed_extraInitializers), __runInitializers(this, _result_initializers, ''));
|
|
162
|
+
get result() { return this.#result_accessor_storage; }
|
|
163
|
+
set result(value) { this.#result_accessor_storage = value; }
|
|
164
|
+
steps = (__runInitializers(this, _result_extraInitializers), createDemoSteps(false, name => { this.result = `${name} is ready.`; }));
|
|
165
|
+
overlayStepper;
|
|
166
|
+
static styles = [themeDefaultStyles, cssManager.defaultStyles, css `
|
|
167
|
+
:host { display: block; min-width: 0; }
|
|
168
|
+
.toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 20px; }
|
|
169
|
+
.actions { display: flex; gap: 8px; flex-wrap: wrap; }
|
|
170
|
+
.stage { position: relative; height: 540px; border: 1px solid var(--dees-color-border-subtle); border-radius: 18px; background: var(--dees-color-bg-secondary); overflow: hidden; }
|
|
171
|
+
.finished { display: grid; place-content: center; justify-items: center; gap: 16px; height: 100%; padding: 24px; box-sizing: border-box; text-align: center; }
|
|
172
|
+
.finished h2 { margin: 0; font-size: 20px; letter-spacing: -.025em; font-weight: 600; }
|
|
173
|
+
.finished p, .caption { font-size: 12px; line-height: 1.6; color: var(--dees-color-text-secondary); }
|
|
174
|
+
.caption { margin: 16px 0 0; }
|
|
175
|
+
summary.caption { cursor: pointer; font-size: 13px; font-weight: 500; }
|
|
176
|
+
.finished dees-icon { color: var(--dees-color-text-success); }
|
|
177
|
+
@media (max-width: 540px) { .stage { height: 560px; } }
|
|
178
|
+
`];
|
|
179
|
+
reset() {
|
|
180
|
+
this.result = '';
|
|
181
|
+
this.closed = false;
|
|
182
|
+
this.steps = createDemoSteps(this.scenario === 'Retry example', name => { this.result = `${name} is ready.`; });
|
|
183
|
+
this.requestUpdate();
|
|
184
|
+
}
|
|
185
|
+
async openOverlay(cancelable = true) {
|
|
186
|
+
if (this.overlayStepper?.isConnected)
|
|
187
|
+
return;
|
|
188
|
+
this.overlayStepper = await DeesStepper.createAndShow({
|
|
189
|
+
cancelable,
|
|
190
|
+
steps: createDemoSteps(this.scenario === 'Retry example', name => { this.result = `${name} is ready.`; }),
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
render() {
|
|
194
|
+
return html `<div class="toolbar">
|
|
195
|
+
<dees-input-multitoggle size="sm" label="Demo scenario" labelPosition="none"
|
|
196
|
+
.options=${['Standard setup', 'Retry example']} .selectedOption=${this.scenario}
|
|
197
|
+
@change=${(event) => { this.scenario = event.detail.value; this.reset(); }}></dees-input-multitoggle>
|
|
198
|
+
<div class="actions"><dees-button type="secondary" text="Open overlay" @clicked=${() => this.openOverlay()}></dees-button>
|
|
199
|
+
<dees-button type="ghost" text="Reset" @clicked=${this.reset}></dees-button></div>
|
|
195
200
|
</div>
|
|
196
|
-
<
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
201
|
+
<div class="stage">${this.closed ? html `<div class="finished">
|
|
202
|
+
<dees-icon icon=${this.result ? 'lucide:CircleCheck' : 'lucide:Layers'} iconSize="32"></dees-icon>
|
|
203
|
+
<h2>${this.result || 'Setup cancelled.'}</h2><p>This example uses local sample data.</p>
|
|
204
|
+
<dees-button type="secondary" text="Start again" @clicked=${this.reset}></dees-button>
|
|
205
|
+
</div>` : html `<dees-stepper .steps=${this.steps} @stepper-close=${() => { this.closed = true; }}></dees-stepper>`}</div>
|
|
206
|
+
<p class="caption">${this.scenario === 'Retry example' ? 'The first setup attempt pauses with an error. Try again to continue with your saved choices.' : 'Move forward, go back, and review your choices. Changes stay in this demo.'}</p>
|
|
207
|
+
<details><summary class="caption">Completion required</summary>
|
|
208
|
+
<p class="caption">For a flow that must finish, such as a required update, cancellation can be disabled.</p>
|
|
209
|
+
<dees-button type="secondary" text="Open required setup" @clicked=${() => this.openOverlay(false)}></dees-button>
|
|
210
|
+
</details>`;
|
|
211
|
+
}
|
|
212
|
+
async disconnectedCallback() {
|
|
213
|
+
if (this.overlayStepper?.isConnected)
|
|
214
|
+
await this.overlayStepper.destroy();
|
|
215
|
+
await super.disconnectedCallback();
|
|
216
|
+
}
|
|
217
|
+
static {
|
|
218
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
return DeesDemoStepper = _classThis;
|
|
222
|
+
})();
|
|
223
|
+
export const stepperDemo = () => demoPage('Stepper', 'A clear path from the first detail to the finished result.', html `<dees-demo-stepper></dees-demo-stepper>`);
|
|
224
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1zdGVwcGVyLmRlbW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1sYXlvdXQvZGVlcy1zdGVwcGVyL2RlZXMtc3RlcHBlci5kZW1vLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakgsT0FBTyxFQUFFLFdBQVcsRUFBYyxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RCxPQUFPLDJDQUEyQyxDQUFDO0FBQ25ELE9BQU8sd0RBQXdELENBQUM7QUFDaEUsT0FBTyxzRUFBc0UsQ0FBQztBQUM5RSxPQUFPLDREQUE0RCxDQUFDO0FBRXBFLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxRQUFnQixFQUFFLE1BQW9CLEVBQW9CLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtJQUM5RyxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUFDLE9BQU87SUFBQyxDQUFDO0lBQ2hELE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3RCxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxLQUFLLENB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
|