@design.estate/dees-catalog 3.97.0 → 3.98.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 +4701 -3485
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.d.ts +35 -0
- package/dist_ts_web/elements/00group-button/dees-button/dees-button.js +128 -5
- package/dist_ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.js +5 -6
- package/dist_ts_web/elements/00group-dataview/dees-table/dees-table.d.ts +1 -0
- package/dist_ts_web/elements/00group-dataview/dees-table/dees-table.js +21 -11
- package/dist_ts_web/elements/00group-feedback/dees-spinner/dees-spinner.js +12 -3
- package/dist_ts_web/elements/00group-form/dees-form-submit/dees-form-submit.d.ts +9 -0
- package/dist_ts_web/elements/00group-form/dees-form-submit/dees-form-submit.js +25 -2
- package/dist_ts_web/elements/00group-input/dees-input-multitoggle/dees-input-multitoggle.js +20 -4
- package/dist_ts_web/elements/00group-input/dees-input-text/dees-input-text.d.ts +15 -0
- package/dist_ts_web/elements/00group-input/dees-input-text/dees-input-text.js +36 -2
- package/dist_ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.js +2 -1
- package/dist_ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.d.ts +246 -0
- package/dist_ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.demo.js +439 -21
- package/dist_ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.js +857 -23
- package/dist_ts_web/elements/00group-utility/dees-icon/dees-icon.d.ts +2 -1
- package/dist_ts_web/elements/00group-utility/dees-icon/dees-icon.js +52 -80
- package/dist_ts_web/elements/00theme.d.ts +2 -0
- package/dist_ts_web/elements/00theme.js +7 -1
- package/package.json +3 -3
- package/readme.hints.md +35 -0
- package/readme.md +85 -11
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-button/dees-button/dees-button.ts +128 -2
- package/ts_web/elements/00group-dataview/dees-statsgrid/dees-statsgrid.ts +5 -6
- package/ts_web/elements/00group-dataview/dees-table/dees-table.ts +43 -27
- package/ts_web/elements/00group-feedback/dees-spinner/dees-spinner.ts +11 -2
- package/ts_web/elements/00group-form/dees-form-submit/dees-form-submit.ts +18 -0
- package/ts_web/elements/00group-input/dees-input-multitoggle/dees-input-multitoggle.ts +19 -3
- package/ts_web/elements/00group-input/dees-input-text/dees-input-text.ts +29 -0
- package/ts_web/elements/00group-simple/dees-simple-appdash/dees-simple-appdash.ts +1 -0
- package/ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.demo.ts +418 -19
- package/ts_web/elements/00group-simple/dees-simple-login/dees-simple-login.ts +969 -20
- package/ts_web/elements/00group-utility/dees-icon/dees-icon.ts +55 -91
- package/ts_web/elements/00theme.ts +8 -0
|
@@ -1,4 +1,440 @@
|
|
|
1
|
-
|
|
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] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
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 { html, css, cssManager, customElement, state, DeesElement } from '@design.estate/dees-element';
|
|
36
|
+
import { themeDefaultStyles } from '../../00theme.js';
|
|
37
|
+
/**
|
|
38
|
+
* The catalog carries no third-party brand assets, so provider icons are always supplied by
|
|
39
|
+
* the consumer. These are neutral Lucide stand-ins for what a real deployment would pass.
|
|
40
|
+
*/
|
|
41
|
+
const demoProviders = [
|
|
42
|
+
{ id: 'idp-global', label: 'idp.global', icon: 'lucide:shieldCheck' },
|
|
43
|
+
{ id: 'workspace', label: 'Workspace SSO', icon: 'lucide:building2' },
|
|
44
|
+
{ id: 'email-link', label: 'Email link', icon: 'lucide:mail' },
|
|
45
|
+
];
|
|
46
|
+
const manyProviders = [
|
|
47
|
+
...demoProviders,
|
|
48
|
+
{ id: 'security-key', label: 'Security key', icon: 'lucide:usb' },
|
|
49
|
+
{ id: 'smartcard', label: 'Smartcard', icon: 'lucide:idCard' },
|
|
50
|
+
{ id: 'legacy-ldap', label: 'LDAP', icon: 'lucide:network', disabled: true },
|
|
51
|
+
];
|
|
52
|
+
const delay = (msArg) => new Promise((resolve) => window.setTimeout(resolve, msArg));
|
|
53
|
+
const variants = [
|
|
54
|
+
{
|
|
55
|
+
key: 'legacy',
|
|
56
|
+
title: 'Default (password only)',
|
|
57
|
+
description: 'No new properties set. This is the pre-existing component: username, password, the ' +
|
|
58
|
+
'legacy `login` event and nothing else.',
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
key: 'full',
|
|
62
|
+
title: 'Passkey + providers + password',
|
|
63
|
+
description: 'Handler mode. Every method has its own busy and error state — the passkey handler ' +
|
|
64
|
+
'below always rejects, and the password form stays untouched by it.',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
key: 'passkeyOnly',
|
|
68
|
+
title: 'Passkey only',
|
|
69
|
+
description: '`.passkey=${true} .password=${false}` — no credential fallback at all.',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
key: 'enrollment',
|
|
73
|
+
title: 'Passkey enrollment + sign in',
|
|
74
|
+
description: "`.passkeyIntents=${['authenticate', 'register']}` renders both ceremonies. " +
|
|
75
|
+
'This is what Onebox hand-rolls today.',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
key: 'providerOnly',
|
|
79
|
+
title: 'Providers only',
|
|
80
|
+
description: 'A pure OIDC surface. The provider handler resolves after a short delay.',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
key: 'manyProviders',
|
|
84
|
+
title: 'Six providers',
|
|
85
|
+
description: 'Four or more providers pair up into two columns instead of growing the card. The ' +
|
|
86
|
+
'last one is `disabled`.',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
key: 'eventMode',
|
|
90
|
+
title: 'Event mode (no handlers)',
|
|
91
|
+
description: 'No handler properties. The component dispatches `passkey-login` / `provider-login` ' +
|
|
92
|
+
'and the demo drives busy and error state through `setBusy()` and `reportError()`.',
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
let DeesSimpleLoginDemo = (() => {
|
|
96
|
+
let _classDecorators = [customElement('dees-simple-login-demo')];
|
|
97
|
+
let _classDescriptor;
|
|
98
|
+
let _classExtraInitializers = [];
|
|
99
|
+
let _classThis;
|
|
100
|
+
let _classSuper = DeesElement;
|
|
101
|
+
let _variant_decorators;
|
|
102
|
+
let _variant_initializers = [];
|
|
103
|
+
let _variant_extraInitializers = [];
|
|
104
|
+
let _log_decorators;
|
|
105
|
+
let _log_initializers = [];
|
|
106
|
+
let _log_extraInitializers = [];
|
|
107
|
+
var DeesSimpleLoginDemo = class extends _classSuper {
|
|
108
|
+
static { _classThis = this; }
|
|
109
|
+
static {
|
|
110
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
111
|
+
_variant_decorators = [state()];
|
|
112
|
+
_log_decorators = [state()];
|
|
113
|
+
__esDecorate(this, null, _variant_decorators, { kind: "accessor", name: "variant", static: false, private: false, access: { has: obj => "variant" in obj, get: obj => obj.variant, set: (obj, value) => { obj.variant = value; } }, metadata: _metadata }, _variant_initializers, _variant_extraInitializers);
|
|
114
|
+
__esDecorate(this, null, _log_decorators, { kind: "accessor", name: "log", static: false, private: false, access: { has: obj => "log" in obj, get: obj => obj.log, set: (obj, value) => { obj.log = value; } }, metadata: _metadata }, _log_initializers, _log_extraInitializers);
|
|
115
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
116
|
+
DeesSimpleLoginDemo = _classThis = _classDescriptor.value;
|
|
117
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
118
|
+
}
|
|
119
|
+
#variant_accessor_storage = __runInitializers(this, _variant_initializers, 'full');
|
|
120
|
+
get variant() { return this.#variant_accessor_storage; }
|
|
121
|
+
set variant(value) { this.#variant_accessor_storage = value; }
|
|
122
|
+
#log_accessor_storage = (__runInitializers(this, _variant_extraInitializers), __runInitializers(this, _log_initializers, []));
|
|
123
|
+
get log() { return this.#log_accessor_storage; }
|
|
124
|
+
set log(value) { this.#log_accessor_storage = value; }
|
|
125
|
+
static styles = [
|
|
126
|
+
themeDefaultStyles,
|
|
127
|
+
cssManager.defaultStyles,
|
|
128
|
+
css `
|
|
129
|
+
:host {
|
|
130
|
+
display: block;
|
|
131
|
+
position: absolute;
|
|
132
|
+
inset: 0;
|
|
133
|
+
font-family: var(--dees-font-family);
|
|
134
|
+
color: var(--dees-color-text-primary);
|
|
135
|
+
background: var(--dees-color-bg-canvas);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.layout {
|
|
139
|
+
display: grid;
|
|
140
|
+
grid-template-columns: 320px 1fr;
|
|
141
|
+
height: 100%;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.sidebar {
|
|
145
|
+
display: flex;
|
|
146
|
+
flex-direction: column;
|
|
147
|
+
gap: var(--dees-spacing-md);
|
|
148
|
+
padding: var(--dees-spacing-xl);
|
|
149
|
+
overflow-y: auto;
|
|
150
|
+
border-right: 1px solid var(--dees-color-border-default);
|
|
151
|
+
background: var(--dees-color-bg-secondary);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.sidebarTitle {
|
|
155
|
+
font-size: var(--dees-font-control-size);
|
|
156
|
+
font-weight: 600;
|
|
157
|
+
color: var(--dees-color-text-muted);
|
|
158
|
+
text-transform: uppercase;
|
|
159
|
+
letter-spacing: 0.06em;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.variant {
|
|
163
|
+
padding: var(--dees-spacing-md);
|
|
164
|
+
border: 1px solid var(--dees-color-border-subtle);
|
|
165
|
+
border-radius: var(--dees-radius-lg);
|
|
166
|
+
corner-shape: var(--dees-corner-shape);
|
|
167
|
+
background: var(--dees-color-bg-primary);
|
|
168
|
+
cursor: pointer;
|
|
169
|
+
transition: border-color var(--dees-transition-fast) var(--dees-ease-standard);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.variant:hover {
|
|
173
|
+
border-color: var(--dees-color-border-strong);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.variant.selected {
|
|
177
|
+
border-color: var(--dees-color-accent-primary);
|
|
178
|
+
box-shadow: 0 0 0 1px var(--dees-color-accent-primary);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.variantTitle {
|
|
182
|
+
font-size: var(--dees-font-control-size);
|
|
183
|
+
font-weight: 600;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.variantDescription {
|
|
187
|
+
margin-top: var(--dees-spacing-xs);
|
|
188
|
+
font-size: var(--dees-font-control-size-sm);
|
|
189
|
+
line-height: 1.45;
|
|
190
|
+
color: var(--dees-color-text-muted);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.logTitle {
|
|
194
|
+
margin-top: var(--dees-spacing-lg);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.logEntries {
|
|
198
|
+
display: flex;
|
|
199
|
+
flex-direction: column;
|
|
200
|
+
gap: var(--dees-spacing-xs);
|
|
201
|
+
font-family: var(--dees-font-family-mono);
|
|
202
|
+
font-size: var(--dees-font-control-size-sm);
|
|
203
|
+
color: var(--dees-color-text-secondary);
|
|
204
|
+
user-select: text;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.stage {
|
|
208
|
+
position: relative;
|
|
209
|
+
overflow: hidden;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.authenticated {
|
|
213
|
+
display: flex;
|
|
214
|
+
flex-direction: column;
|
|
215
|
+
gap: var(--dees-spacing-md);
|
|
216
|
+
align-items: center;
|
|
217
|
+
justify-content: center;
|
|
218
|
+
height: 100%;
|
|
219
|
+
text-align: center;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.authenticated h1 {
|
|
223
|
+
margin: 0;
|
|
224
|
+
font-size: var(--dees-font-title2-size);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.authenticated p {
|
|
228
|
+
margin: 0;
|
|
229
|
+
color: var(--dees-color-text-muted);
|
|
230
|
+
}
|
|
231
|
+
`,
|
|
232
|
+
];
|
|
233
|
+
get loginElement() {
|
|
234
|
+
return this.shadowRoot?.querySelector('dees-simple-login') || null;
|
|
235
|
+
}
|
|
236
|
+
note(messageArg) {
|
|
237
|
+
this.log = [messageArg, ...this.log].slice(0, 12);
|
|
238
|
+
}
|
|
239
|
+
render() {
|
|
240
|
+
return html `
|
|
241
|
+
<div class="layout">
|
|
242
|
+
<div class="sidebar">
|
|
243
|
+
<div class="sidebarTitle">Variants</div>
|
|
244
|
+
${variants.map((variantArg) => html `
|
|
245
|
+
<div
|
|
246
|
+
class="variant ${this.variant === variantArg.key ? 'selected' : ''}"
|
|
247
|
+
@click=${() => {
|
|
248
|
+
this.variant = variantArg.key;
|
|
249
|
+
this.log = [];
|
|
250
|
+
}}
|
|
251
|
+
>
|
|
252
|
+
<div class="variantTitle">${variantArg.title}</div>
|
|
253
|
+
<div class="variantDescription">${variantArg.description}</div>
|
|
254
|
+
</div>
|
|
255
|
+
`)}
|
|
256
|
+
<div class="sidebarTitle logTitle">Event log</div>
|
|
257
|
+
<div class="logEntries">
|
|
258
|
+
${this.log.length === 0
|
|
259
|
+
? html `<div>— nothing yet —</div>`
|
|
260
|
+
: this.log.map((entry) => html `<div>${entry}</div>`)}
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
<div class="stage">${this.renderVariant()}</div>
|
|
264
|
+
</div>
|
|
265
|
+
`;
|
|
266
|
+
}
|
|
267
|
+
renderVariant() {
|
|
268
|
+
const shared = html `
|
|
269
|
+
<div class="authenticated">
|
|
270
|
+
<h1>Signed in</h1>
|
|
271
|
+
<p>This is the slotted content that appears after login.</p>
|
|
272
|
+
</div>
|
|
273
|
+
`;
|
|
274
|
+
if (this.variant === 'legacy') {
|
|
275
|
+
return html `
|
|
276
|
+
<dees-simple-login
|
|
277
|
+
name="My Application"
|
|
278
|
+
@login=${(eventArg) => {
|
|
279
|
+
const data = eventArg.detail?.data;
|
|
280
|
+
this.note(`login: ${data?.username} / ${'*'.repeat(data?.password?.length || 0)}`);
|
|
281
|
+
void this.loginElement?.switchToSlottedContent();
|
|
282
|
+
}}
|
|
283
|
+
>
|
|
284
|
+
${shared}
|
|
285
|
+
</dees-simple-login>
|
|
286
|
+
`;
|
|
287
|
+
}
|
|
288
|
+
if (this.variant === 'full') {
|
|
289
|
+
return html `
|
|
290
|
+
<dees-simple-login
|
|
291
|
+
name="idp.global"
|
|
292
|
+
.passkey=${true}
|
|
293
|
+
.passkeyAvailable=${true}
|
|
294
|
+
.providers=${demoProviders}
|
|
295
|
+
.labels=${{ subheading: 'Choose how you want to continue' }}
|
|
296
|
+
.passkeyLoginHandler=${async (contextArg) => {
|
|
297
|
+
this.note(`passkey handler (${contextArg.mediation})`);
|
|
298
|
+
await delay(900);
|
|
299
|
+
throw new Error('No passkey found for this account.');
|
|
300
|
+
}}
|
|
301
|
+
.providerLoginHandler=${async (contextArg) => {
|
|
302
|
+
this.note(`provider handler: ${contextArg.providerId}`);
|
|
303
|
+
await delay(900);
|
|
304
|
+
void this.loginElement?.switchToSlottedContent();
|
|
305
|
+
}}
|
|
306
|
+
.passwordLoginHandler=${async () => {
|
|
307
|
+
this.note('password handler');
|
|
308
|
+
await delay(900);
|
|
309
|
+
void this.loginElement?.switchToSlottedContent();
|
|
310
|
+
}}
|
|
311
|
+
@login=${(eventArg) => {
|
|
312
|
+
this.note(`login event: ${eventArg.detail?.data?.username}`);
|
|
313
|
+
}}
|
|
314
|
+
>
|
|
315
|
+
${shared}
|
|
316
|
+
</dees-simple-login>
|
|
317
|
+
`;
|
|
318
|
+
}
|
|
319
|
+
if (this.variant === 'passkeyOnly') {
|
|
320
|
+
return html `
|
|
321
|
+
<dees-simple-login
|
|
322
|
+
name="Onebox"
|
|
323
|
+
.passkey=${true}
|
|
324
|
+
.passkeyAvailable=${true}
|
|
325
|
+
.password=${false}
|
|
326
|
+
.labels=${{ subheading: 'Use a passkey registered for your Onebox account' }}
|
|
327
|
+
.passkeyLoginHandler=${async () => {
|
|
328
|
+
this.note('passkey sign in');
|
|
329
|
+
await delay(900);
|
|
330
|
+
void this.loginElement?.switchToSlottedContent();
|
|
331
|
+
}}
|
|
332
|
+
>
|
|
333
|
+
${shared}
|
|
334
|
+
</dees-simple-login>
|
|
335
|
+
`;
|
|
336
|
+
}
|
|
337
|
+
if (this.variant === 'enrollment') {
|
|
338
|
+
return html `
|
|
339
|
+
<dees-simple-login
|
|
340
|
+
name="Onebox"
|
|
341
|
+
.passkey=${true}
|
|
342
|
+
.passkeyAvailable=${true}
|
|
343
|
+
.password=${false}
|
|
344
|
+
.passkeyIntents=${['authenticate', 'register']}
|
|
345
|
+
.labels=${{ subheading: 'Sign in, or enroll this device' }}
|
|
346
|
+
.passkeyLoginHandler=${async () => {
|
|
347
|
+
this.note('passkey authenticate');
|
|
348
|
+
await delay(900);
|
|
349
|
+
throw new Error('This device has no passkey for Onebox yet.');
|
|
350
|
+
}}
|
|
351
|
+
.passkeyRegisterHandler=${async () => {
|
|
352
|
+
this.note('passkey register');
|
|
353
|
+
await delay(900);
|
|
354
|
+
void this.loginElement?.switchToSlottedContent();
|
|
355
|
+
}}
|
|
356
|
+
>
|
|
357
|
+
${shared}
|
|
358
|
+
</dees-simple-login>
|
|
359
|
+
`;
|
|
360
|
+
}
|
|
361
|
+
if (this.variant === 'providerOnly') {
|
|
362
|
+
return html `
|
|
363
|
+
<dees-simple-login
|
|
364
|
+
name="login.idp.global"
|
|
365
|
+
.password=${false}
|
|
366
|
+
.providers=${demoProviders}
|
|
367
|
+
.labels=${{ subheading: 'Continue with one of your identity providers' }}
|
|
368
|
+
.providerLoginHandler=${async (contextArg) => {
|
|
369
|
+
this.note(`provider handler: ${contextArg.providerId}`);
|
|
370
|
+
await delay(900);
|
|
371
|
+
void this.loginElement?.switchToSlottedContent();
|
|
372
|
+
}}
|
|
373
|
+
>
|
|
374
|
+
${shared}
|
|
375
|
+
</dees-simple-login>
|
|
376
|
+
`;
|
|
377
|
+
}
|
|
378
|
+
if (this.variant === 'manyProviders') {
|
|
379
|
+
return html `
|
|
380
|
+
<dees-simple-login
|
|
381
|
+
name="login.idp.global"
|
|
382
|
+
.providers=${manyProviders}
|
|
383
|
+
.methodOrder=${['provider', 'password']}
|
|
384
|
+
.providerLoginHandler=${async (contextArg) => {
|
|
385
|
+
this.note(`provider handler: ${contextArg.providerId}`);
|
|
386
|
+
await delay(600);
|
|
387
|
+
throw new Error('Discovery endpoint unreachable.');
|
|
388
|
+
}}
|
|
389
|
+
@login=${() => this.note('login event')}
|
|
390
|
+
>
|
|
391
|
+
${shared}
|
|
392
|
+
</dees-simple-login>
|
|
393
|
+
`;
|
|
394
|
+
}
|
|
395
|
+
// eventMode
|
|
396
|
+
return html `
|
|
397
|
+
<dees-simple-login
|
|
398
|
+
name="Cloudly"
|
|
399
|
+
.passkey=${true}
|
|
400
|
+
.passkeyAvailable=${true}
|
|
401
|
+
.providers=${demoProviders}
|
|
402
|
+
@passkey-login=${async (eventArg) => {
|
|
403
|
+
this.note(`passkey-login event (username: ${eventArg.detail.username || '—'})`);
|
|
404
|
+
const element = this.loginElement;
|
|
405
|
+
element?.setBusy({ method: 'passkey' }, true);
|
|
406
|
+
await delay(900);
|
|
407
|
+
element?.setBusy({ method: 'passkey' }, false);
|
|
408
|
+
element?.reportError({ method: 'passkey' }, 'Consumer-reported: ceremony declined.');
|
|
409
|
+
}}
|
|
410
|
+
@provider-login=${async (eventArg) => {
|
|
411
|
+
this.note(`provider-login event: ${eventArg.detail.providerId}`);
|
|
412
|
+
const element = this.loginElement;
|
|
413
|
+
const target = { method: 'provider', providerId: eventArg.detail.providerId };
|
|
414
|
+
element?.setBusy(target, true);
|
|
415
|
+
await delay(900);
|
|
416
|
+
element?.setBusy(target, false);
|
|
417
|
+
element?.reportError(target, 'Consumer-reported: redirect blocked.');
|
|
418
|
+
}}
|
|
419
|
+
@login=${(eventArg) => {
|
|
420
|
+
this.note(`login event: ${eventArg.detail?.data?.username}`);
|
|
421
|
+
this.loginElement?.reportError('password', 'Consumer-reported: invalid credentials.');
|
|
422
|
+
}}
|
|
423
|
+
>
|
|
424
|
+
${shared}
|
|
425
|
+
</dees-simple-login>
|
|
426
|
+
`;
|
|
427
|
+
}
|
|
428
|
+
constructor() {
|
|
429
|
+
super(...arguments);
|
|
430
|
+
__runInitializers(this, _log_extraInitializers);
|
|
431
|
+
}
|
|
432
|
+
static {
|
|
433
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
return DeesSimpleLoginDemo = _classThis;
|
|
437
|
+
})();
|
|
2
438
|
export const demoFunc = () => html `
|
|
3
439
|
<style>
|
|
4
440
|
body {
|
|
@@ -14,25 +450,7 @@ export const demoFunc = () => html `
|
|
|
14
450
|
}
|
|
15
451
|
</style>
|
|
16
452
|
<div class="demo-container">
|
|
17
|
-
<dees-simple-login
|
|
18
|
-
name="My Application"
|
|
19
|
-
@login=${(e) => {
|
|
20
|
-
console.log('Login event received:', e.detail);
|
|
21
|
-
const loginData = e.detail?.data || e.detail;
|
|
22
|
-
if (loginData?.username && loginData?.password) {
|
|
23
|
-
alert(`Login attempted with:\nUsername: ${loginData.username}\nPassword: ${loginData.password}`);
|
|
24
|
-
// Here you would typically validate credentials and show the slotted content
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
console.error('Invalid login data structure:', e.detail);
|
|
28
|
-
}
|
|
29
|
-
}}
|
|
30
|
-
>
|
|
31
|
-
<div style="padding: 40px; text-align: center;">
|
|
32
|
-
<h1>Welcome!</h1>
|
|
33
|
-
<p>This is the slotted content that appears after login.</p>
|
|
34
|
-
</div>
|
|
35
|
-
</dees-simple-login>
|
|
453
|
+
<dees-simple-login-demo></dees-simple-login-demo>
|
|
36
454
|
</div>
|
|
37
455
|
`;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
456
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1zaW1wbGUtbG9naW4uZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXNpbXBsZS9kZWVzLXNpbXBsZS1sb2dpbi9kZWVzLXNpbXBsZS1sb2dpbi5kZW1vLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN2RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVN0RDs7O0dBR0c7QUFDSCxNQUFNLGFBQWEsR0FBeUI7SUFDMUMsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFO0lBQ3JFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRTtJQUNyRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO0NBQy9ELENBQUM7QUFFRixNQUFNLGFBQWEsR0FBeUI7SUFDMUMsR0FBRyxhQUFhO0lBQ2hCLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7SUFDakUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtJQUM5RCxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtDQUM3RSxD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
|