@idp.global/catalog 2.0.0 → 2.1.1

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.
Files changed (70) hide show
  1. package/changelog.md +27 -0
  2. package/dist_bundle/bundle.js +3726 -1337
  3. package/dist_ts_web/00_commitinfo_data.js +1 -1
  4. package/dist_ts_web/elements/idp-admin-overview.d.ts +28 -0
  5. package/dist_ts_web/elements/idp-admin-overview.js +460 -0
  6. package/dist_ts_web/elements/idp-admin-shared.d.ts +18 -0
  7. package/dist_ts_web/elements/idp-admin-shared.js +404 -0
  8. package/dist_ts_web/elements/idp-admin-shell.d.ts +96 -11
  9. package/dist_ts_web/elements/idp-admin-shell.js +442 -816
  10. package/dist_ts_web/elements/idp-admin-sidebar.d.ts +42 -0
  11. package/dist_ts_web/elements/idp-admin-sidebar.js +702 -0
  12. package/dist_ts_web/elements/idp-app-pair.d.ts +19 -0
  13. package/dist_ts_web/elements/idp-app-pair.js +187 -0
  14. package/dist_ts_web/elements/idp-auth-card.d.ts +17 -0
  15. package/dist_ts_web/elements/idp-auth-card.js +180 -0
  16. package/dist_ts_web/elements/idp-avatar.d.ts +17 -0
  17. package/dist_ts_web/elements/idp-avatar.js +151 -0
  18. package/dist_ts_web/elements/idp-badge.d.ts +2 -0
  19. package/dist_ts_web/elements/idp-badge.js +12 -3
  20. package/dist_ts_web/elements/idp-brand-mark.d.ts +16 -0
  21. package/dist_ts_web/elements/idp-brand-mark.js +139 -0
  22. package/dist_ts_web/elements/idp-button.d.ts +3 -0
  23. package/dist_ts_web/elements/idp-button.js +47 -3
  24. package/dist_ts_web/elements/idp-consent-card.d.ts +34 -0
  25. package/dist_ts_web/elements/idp-consent-card.js +217 -0
  26. package/dist_ts_web/elements/idp-delegation-section.d.ts +59 -0
  27. package/dist_ts_web/elements/idp-delegation-section.js +609 -0
  28. package/dist_ts_web/elements/idp-form-submit.d.ts +2 -1
  29. package/dist_ts_web/elements/idp-form-submit.js +11 -2
  30. package/dist_ts_web/elements/idp-form.js +2 -2
  31. package/dist_ts_web/elements/idp-input.d.ts +4 -0
  32. package/dist_ts_web/elements/idp-input.js +68 -15
  33. package/dist_ts_web/elements/idp-option-row.d.ts +25 -0
  34. package/dist_ts_web/elements/idp-option-row.js +267 -0
  35. package/dist_ts_web/elements/idp-otp-input.d.ts +32 -0
  36. package/dist_ts_web/elements/idp-otp-input.js +274 -0
  37. package/dist_ts_web/elements/idp-progress-bar.d.ts +14 -0
  38. package/dist_ts_web/elements/idp-progress-bar.js +127 -0
  39. package/dist_ts_web/elements/idp-signed-in-pill.d.ts +15 -0
  40. package/dist_ts_web/elements/idp-signed-in-pill.js +113 -0
  41. package/dist_ts_web/elements/idp-spinner.d.ts +13 -0
  42. package/dist_ts_web/elements/idp-spinner.js +109 -0
  43. package/dist_ts_web/elements/idp-status-icon.d.ts +18 -0
  44. package/dist_ts_web/elements/idp-status-icon.js +136 -0
  45. package/dist_ts_web/elements/index.d.ts +15 -0
  46. package/dist_ts_web/elements/index.js +16 -1
  47. package/package.json +2 -2
  48. package/ts_web/00_commitinfo_data.ts +1 -1
  49. package/ts_web/elements/idp-admin-overview.ts +388 -0
  50. package/ts_web/elements/idp-admin-shared.ts +419 -0
  51. package/ts_web/elements/idp-admin-shell.ts +514 -871
  52. package/ts_web/elements/idp-admin-sidebar.ts +648 -0
  53. package/ts_web/elements/idp-app-pair.ts +120 -0
  54. package/ts_web/elements/idp-auth-card.ts +113 -0
  55. package/ts_web/elements/idp-avatar.ts +84 -0
  56. package/ts_web/elements/idp-badge.ts +5 -1
  57. package/ts_web/elements/idp-brand-mark.ts +76 -0
  58. package/ts_web/elements/idp-button.ts +36 -1
  59. package/ts_web/elements/idp-consent-card.ts +146 -0
  60. package/ts_web/elements/idp-delegation-section.ts +576 -0
  61. package/ts_web/elements/idp-form-submit.ts +5 -1
  62. package/ts_web/elements/idp-form.ts +1 -1
  63. package/ts_web/elements/idp-input.ts +58 -13
  64. package/ts_web/elements/idp-option-row.ts +184 -0
  65. package/ts_web/elements/idp-otp-input.ts +204 -0
  66. package/ts_web/elements/idp-progress-bar.ts +69 -0
  67. package/ts_web/elements/idp-signed-in-pill.ts +55 -0
  68. package/ts_web/elements/idp-spinner.ts +56 -0
  69. package/ts_web/elements/idp-status-icon.ts +76 -0
  70. package/ts_web/elements/index.ts +15 -0
@@ -0,0 +1,702 @@
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 { DeesElement, html, property, state, customElement, css } from '@design.estate/dees-element';
36
+ import { idpElementStyles } from './tokens.js';
37
+ import { idpAdminSharedStyles } from './idp-admin-shared.js';
38
+ import './idp-icon.js';
39
+ import './idp-badge.js';
40
+ import './idp-avatar.js';
41
+ let IdpAdminSidebar = (() => {
42
+ let _classDecorators = [customElement('idp-admin-sidebar')];
43
+ let _classDescriptor;
44
+ let _classExtraInitializers = [];
45
+ let _classThis;
46
+ let _classSuper = DeesElement;
47
+ let _page_decorators;
48
+ let _page_initializers = [];
49
+ let _page_extraInitializers = [];
50
+ let _user_decorators;
51
+ let _user_initializers = [];
52
+ let _user_extraInitializers = [];
53
+ let _accounts_decorators;
54
+ let _accounts_initializers = [];
55
+ let _accounts_extraInitializers = [];
56
+ let _orgs_decorators;
57
+ let _orgs_initializers = [];
58
+ let _orgs_extraInitializers = [];
59
+ let _selectedOrgId_decorators;
60
+ let _selectedOrgId_initializers = [];
61
+ let _selectedOrgId_extraInitializers = [];
62
+ let _globalAdmin_decorators;
63
+ let _globalAdmin_initializers = [];
64
+ let _globalAdmin_extraInitializers = [];
65
+ let _sessionCount_decorators;
66
+ let _sessionCount_initializers = [];
67
+ let _sessionCount_extraInitializers = [];
68
+ let _orgMenuOpen_decorators;
69
+ let _orgMenuOpen_initializers = [];
70
+ let _orgMenuOpen_extraInitializers = [];
71
+ let _userMenuOpen_decorators;
72
+ let _userMenuOpen_initializers = [];
73
+ let _userMenuOpen_extraInitializers = [];
74
+ var IdpAdminSidebar = class extends _classSuper {
75
+ static { _classThis = this; }
76
+ static {
77
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
78
+ _page_decorators = [property({ type: String })];
79
+ _user_decorators = [property({ type: Object })];
80
+ _accounts_decorators = [property({ type: Array })];
81
+ _orgs_decorators = [property({ type: Array })];
82
+ _selectedOrgId_decorators = [property({ type: String, attribute: 'selected-org-id' })];
83
+ _globalAdmin_decorators = [property({ type: Boolean, attribute: 'global-admin', reflect: true })];
84
+ _sessionCount_decorators = [property({ type: Number, attribute: 'session-count' })];
85
+ _orgMenuOpen_decorators = [state()];
86
+ _userMenuOpen_decorators = [state()];
87
+ __esDecorate(this, null, _page_decorators, { kind: "accessor", name: "page", static: false, private: false, access: { has: obj => "page" in obj, get: obj => obj.page, set: (obj, value) => { obj.page = value; } }, metadata: _metadata }, _page_initializers, _page_extraInitializers);
88
+ __esDecorate(this, null, _user_decorators, { kind: "accessor", name: "user", static: false, private: false, access: { has: obj => "user" in obj, get: obj => obj.user, set: (obj, value) => { obj.user = value; } }, metadata: _metadata }, _user_initializers, _user_extraInitializers);
89
+ __esDecorate(this, null, _accounts_decorators, { kind: "accessor", name: "accounts", static: false, private: false, access: { has: obj => "accounts" in obj, get: obj => obj.accounts, set: (obj, value) => { obj.accounts = value; } }, metadata: _metadata }, _accounts_initializers, _accounts_extraInitializers);
90
+ __esDecorate(this, null, _orgs_decorators, { kind: "accessor", name: "orgs", static: false, private: false, access: { has: obj => "orgs" in obj, get: obj => obj.orgs, set: (obj, value) => { obj.orgs = value; } }, metadata: _metadata }, _orgs_initializers, _orgs_extraInitializers);
91
+ __esDecorate(this, null, _selectedOrgId_decorators, { kind: "accessor", name: "selectedOrgId", static: false, private: false, access: { has: obj => "selectedOrgId" in obj, get: obj => obj.selectedOrgId, set: (obj, value) => { obj.selectedOrgId = value; } }, metadata: _metadata }, _selectedOrgId_initializers, _selectedOrgId_extraInitializers);
92
+ __esDecorate(this, null, _globalAdmin_decorators, { kind: "accessor", name: "globalAdmin", static: false, private: false, access: { has: obj => "globalAdmin" in obj, get: obj => obj.globalAdmin, set: (obj, value) => { obj.globalAdmin = value; } }, metadata: _metadata }, _globalAdmin_initializers, _globalAdmin_extraInitializers);
93
+ __esDecorate(this, null, _sessionCount_decorators, { kind: "accessor", name: "sessionCount", static: false, private: false, access: { has: obj => "sessionCount" in obj, get: obj => obj.sessionCount, set: (obj, value) => { obj.sessionCount = value; } }, metadata: _metadata }, _sessionCount_initializers, _sessionCount_extraInitializers);
94
+ __esDecorate(this, null, _orgMenuOpen_decorators, { kind: "accessor", name: "orgMenuOpen", static: false, private: false, access: { has: obj => "orgMenuOpen" in obj, get: obj => obj.orgMenuOpen, set: (obj, value) => { obj.orgMenuOpen = value; } }, metadata: _metadata }, _orgMenuOpen_initializers, _orgMenuOpen_extraInitializers);
95
+ __esDecorate(this, null, _userMenuOpen_decorators, { kind: "accessor", name: "userMenuOpen", static: false, private: false, access: { has: obj => "userMenuOpen" in obj, get: obj => obj.userMenuOpen, set: (obj, value) => { obj.userMenuOpen = value; } }, metadata: _metadata }, _userMenuOpen_initializers, _userMenuOpen_extraInitializers);
96
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
97
+ IdpAdminSidebar = _classThis = _classDescriptor.value;
98
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
99
+ }
100
+ static demo = () => html `
101
+ <div style="height: 520px; width: 220px; border: 1px solid var(--sh-border, #e8e8ed); overflow: hidden;">
102
+ <idp-admin-sidebar
103
+ global-admin
104
+ page="overview"
105
+ selected-org-id="org_foss"
106
+ session-count="3"
107
+ .user=${{ name: 'Alex Mercer', email: 'alex@lossless.com' }}
108
+ .accounts=${[{ name: 'Alex Mercer', email: 'alex.mercer@gmail.com' }]}
109
+ .orgs=${[
110
+ { id: 'org_foss', name: 'Lossless GmbH', slug: 'lossless', myRole: 'owner' },
111
+ { id: 'org_task', name: 'Task VC', slug: 'task', myRole: 'admin' },
112
+ ]}
113
+ ></idp-admin-sidebar>
114
+ </div>
115
+ `;
116
+ static demoGroups = ['idp.global v5 composed surfaces'];
117
+ static styles = [
118
+ ...idpElementStyles,
119
+ idpAdminSharedStyles,
120
+ css `
121
+ :host {
122
+ display: block;
123
+ height: 100%;
124
+ min-height: 0;
125
+ }
126
+ .sidebar {
127
+ height: 100%;
128
+ min-height: 0;
129
+ display: flex;
130
+ flex-direction: column;
131
+ /* visible so the user menu can be wider than the sidebar column */
132
+ overflow: visible;
133
+ border-right: 1px solid var(--idp-border);
134
+ background: var(--idp-bg);
135
+ }
136
+ .logo-block {
137
+ padding: 14px 16px 10px;
138
+ border-bottom: 1px solid var(--idp-border);
139
+ }
140
+ .logo {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: 8px;
144
+ }
145
+ .logo-icon {
146
+ width: 26px;
147
+ height: 26px;
148
+ display: flex;
149
+ align-items: center;
150
+ justify-content: center;
151
+ flex-shrink: 0;
152
+ border-radius: 7px;
153
+ background: var(--idp-primary);
154
+ color: var(--idp-primary-fg);
155
+ }
156
+ .logo-text {
157
+ color: var(--idp-fg);
158
+ font-size: 13px;
159
+ font-weight: 700;
160
+ letter-spacing: -0.3px;
161
+ }
162
+ .nav-wrap {
163
+ flex: 1;
164
+ min-height: 0;
165
+ overflow: auto;
166
+ padding: 10px 8px;
167
+ }
168
+ .nav-section {
169
+ margin-bottom: 20px;
170
+ }
171
+ .nav-title {
172
+ padding: 0 8px;
173
+ margin-bottom: 4px;
174
+ color: var(--idp-muted-fg);
175
+ font-size: 10px;
176
+ font-weight: 600;
177
+ letter-spacing: 0.8px;
178
+ text-transform: uppercase;
179
+ }
180
+ .nav-list {
181
+ display: grid;
182
+ }
183
+ .nav-item,
184
+ .org-switch {
185
+ border: 0;
186
+ font-family: inherit;
187
+ }
188
+ .nav-item {
189
+ width: 100%;
190
+ display: flex;
191
+ align-items: center;
192
+ gap: 8px;
193
+ padding: 6px 8px;
194
+ border-radius: 7px;
195
+ background: transparent;
196
+ color: var(--idp-muted-fg);
197
+ font-size: 13px;
198
+ font-weight: 400;
199
+ text-align: left;
200
+ }
201
+ .nav-item.active {
202
+ background: var(--idp-muted);
203
+ color: var(--idp-fg);
204
+ font-weight: 500;
205
+ }
206
+ .nav-item idp-icon {
207
+ color: currentColor;
208
+ }
209
+ .nav-item.active idp-icon {
210
+ color: var(--idp-accent);
211
+ }
212
+ .org-switch-wrap {
213
+ position: relative;
214
+ margin-bottom: 2px;
215
+ }
216
+ .org-switch {
217
+ width: 100%;
218
+ display: flex;
219
+ align-items: center;
220
+ gap: 8px;
221
+ padding: 6px 8px;
222
+ border-radius: 7px;
223
+ background: transparent;
224
+ color: var(--idp-muted-fg);
225
+ cursor: pointer;
226
+ }
227
+ .org-switch:hover {
228
+ background: var(--idp-muted);
229
+ }
230
+ .org-switch.open {
231
+ background: var(--idp-muted);
232
+ }
233
+ .org-switch.open .org-name {
234
+ color: var(--idp-accent);
235
+ }
236
+ .org-switch.open idp-icon {
237
+ transform: rotate(180deg);
238
+ }
239
+ .org-menu {
240
+ position: absolute;
241
+ top: calc(100% + 4px);
242
+ left: 0;
243
+ right: 0;
244
+ z-index: 40;
245
+ overflow: hidden;
246
+ border: 1px solid var(--idp-border);
247
+ border-radius: 10px;
248
+ background: var(--idp-card);
249
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.1);
250
+ }
251
+ .org-menu-title {
252
+ padding: 6px 8px 3px;
253
+ color: var(--idp-muted-fg);
254
+ font-size: 10px;
255
+ font-weight: 600;
256
+ letter-spacing: 0.7px;
257
+ text-transform: uppercase;
258
+ }
259
+ .org-menu-item,
260
+ .org-create {
261
+ width: 100%;
262
+ display: flex;
263
+ align-items: center;
264
+ gap: 8px;
265
+ border: 0;
266
+ background: transparent;
267
+ font-family: inherit;
268
+ text-align: left;
269
+ }
270
+ .org-menu-item {
271
+ padding: 6px 8px;
272
+ cursor: pointer;
273
+ }
274
+ .org-menu-item.selected {
275
+ background: var(--idp-accent-soft);
276
+ }
277
+ .org-menu-item .org-avatar {
278
+ width: 20px;
279
+ height: 20px;
280
+ font-size: 7px;
281
+ }
282
+ .org-menu-name {
283
+ overflow: hidden;
284
+ color: var(--idp-fg);
285
+ font-size: 12px;
286
+ font-weight: 400;
287
+ text-overflow: ellipsis;
288
+ white-space: nowrap;
289
+ }
290
+ .org-menu-item.selected .org-menu-name {
291
+ color: var(--idp-accent);
292
+ }
293
+ .org-menu-role {
294
+ color: var(--idp-muted-fg);
295
+ font-size: 10px;
296
+ }
297
+ .org-menu-divider {
298
+ height: 1px;
299
+ margin: 3px 0;
300
+ background: var(--idp-border);
301
+ }
302
+ .org-create {
303
+ padding: 6px 8px 8px;
304
+ color: var(--idp-muted-fg);
305
+ cursor: pointer;
306
+ font-size: 12px;
307
+ }
308
+ .org-create-icon {
309
+ width: 20px;
310
+ height: 20px;
311
+ display: flex;
312
+ align-items: center;
313
+ justify-content: center;
314
+ flex-shrink: 0;
315
+ border: 1.5px dashed var(--idp-border);
316
+ border-radius: 5px;
317
+ }
318
+ .org-name {
319
+ flex: 1;
320
+ min-width: 0;
321
+ overflow: hidden;
322
+ color: var(--idp-muted-fg);
323
+ font-size: 13px;
324
+ font-weight: 400;
325
+ text-align: left;
326
+ text-overflow: ellipsis;
327
+ white-space: nowrap;
328
+ }
329
+ .user-footer {
330
+ position: relative;
331
+ padding: 8px;
332
+ border-top: 1px solid var(--idp-border);
333
+ }
334
+ .user-trigger {
335
+ display: flex;
336
+ align-items: center;
337
+ gap: 9px;
338
+ width: 100%;
339
+ padding: 6px 8px;
340
+ border: none;
341
+ border-radius: 8px;
342
+ background: transparent;
343
+ color: var(--idp-muted-fg);
344
+ font-family: var(--idp-font);
345
+ text-align: left;
346
+ cursor: pointer;
347
+ transition: background 120ms ease;
348
+ }
349
+ .user-trigger:hover,
350
+ .user-trigger.open {
351
+ background: var(--idp-muted);
352
+ }
353
+ .user-menu {
354
+ position: absolute;
355
+ bottom: calc(100% + 2px);
356
+ left: 8px;
357
+ width: 252px;
358
+ max-width: calc(100vw - 24px);
359
+ z-index: 40;
360
+ padding: 4px;
361
+ background: var(--idp-card);
362
+ border: 1px solid var(--idp-border);
363
+ border-radius: var(--idp-radius);
364
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
365
+ overflow: hidden;
366
+ }
367
+ .user-menu-identity {
368
+ display: flex;
369
+ align-items: center;
370
+ gap: 9px;
371
+ padding: 8px 10px 9px;
372
+ margin-bottom: 4px;
373
+ border-bottom: 1px solid var(--idp-border);
374
+ }
375
+ .user-menu-item {
376
+ display: flex;
377
+ align-items: center;
378
+ gap: 9px;
379
+ width: 100%;
380
+ padding: 7px 10px;
381
+ border: none;
382
+ border-radius: 7px;
383
+ background: transparent;
384
+ color: var(--idp-fg);
385
+ font-family: var(--idp-font);
386
+ font-size: 12.5px;
387
+ text-align: left;
388
+ cursor: pointer;
389
+ transition: background 100ms ease;
390
+ }
391
+ .user-menu-item idp-icon {
392
+ color: var(--idp-muted-fg);
393
+ flex-shrink: 0;
394
+ }
395
+ .user-menu-item span {
396
+ flex: 1;
397
+ }
398
+ .user-menu-item:hover {
399
+ background: var(--idp-muted);
400
+ }
401
+ .user-menu-item.destructive {
402
+ color: var(--idp-destructive);
403
+ }
404
+ .user-menu-item.destructive idp-icon {
405
+ color: var(--idp-destructive);
406
+ }
407
+ .user-menu-item.destructive:hover {
408
+ background: var(--idp-error-bg);
409
+ }
410
+ .user-menu-item.account .user-meta {
411
+ flex: 1;
412
+ }
413
+ .user-menu-hint {
414
+ flex: 0 0 auto !important;
415
+ font-size: 10.5px;
416
+ color: var(--idp-muted-fg);
417
+ }
418
+ .user-menu-divider {
419
+ height: 1px;
420
+ margin: 4px 0;
421
+ background: var(--idp-border);
422
+ }
423
+ .user-menu-title {
424
+ padding: 4px 10px 2px;
425
+ font-size: 10px;
426
+ font-weight: 600;
427
+ letter-spacing: 0.7px;
428
+ text-transform: uppercase;
429
+ }
430
+ .user-menu-title,
431
+ .user-email {
432
+ color: var(--idp-muted-fg);
433
+ }
434
+ .user-avatar {
435
+ display: flex;
436
+ align-items: center;
437
+ justify-content: center;
438
+ flex-shrink: 0;
439
+ width: 26px;
440
+ height: 26px;
441
+ border-radius: 50%;
442
+ background: oklch(0.85 0.08 240);
443
+ color: oklch(0.3 0.08 240);
444
+ font-family: var(--idp-mono);
445
+ font-size: 9px;
446
+ font-weight: 700;
447
+ }
448
+ .user-meta {
449
+ flex: 1;
450
+ min-width: 0;
451
+ }
452
+ .user-name,
453
+ .user-email {
454
+ overflow: hidden;
455
+ text-overflow: ellipsis;
456
+ white-space: nowrap;
457
+ }
458
+ .user-name {
459
+ color: var(--idp-fg);
460
+ font-size: 12px;
461
+ font-weight: 500;
462
+ }
463
+ .user-email {
464
+ font-size: 10px;
465
+ }
466
+ `,
467
+ ];
468
+ #page_accessor_storage = __runInitializers(this, _page_initializers, 'overview');
469
+ get page() { return this.#page_accessor_storage; }
470
+ set page(value) { this.#page_accessor_storage = value; }
471
+ #user_accessor_storage = (__runInitializers(this, _page_extraInitializers), __runInitializers(this, _user_initializers, {
472
+ name: '',
473
+ email: '',
474
+ }));
475
+ get user() { return this.#user_accessor_storage; }
476
+ set user(value) { this.#user_accessor_storage = value; }
477
+ #accounts_accessor_storage = (__runInitializers(this, _user_extraInitializers), __runInitializers(this, _accounts_initializers, []));
478
+ get accounts() { return this.#accounts_accessor_storage; }
479
+ set accounts(value) { this.#accounts_accessor_storage = value; }
480
+ #orgs_accessor_storage = (__runInitializers(this, _accounts_extraInitializers), __runInitializers(this, _orgs_initializers, []));
481
+ get orgs() { return this.#orgs_accessor_storage; }
482
+ set orgs(value) { this.#orgs_accessor_storage = value; }
483
+ #selectedOrgId_accessor_storage = (__runInitializers(this, _orgs_extraInitializers), __runInitializers(this, _selectedOrgId_initializers, ''));
484
+ get selectedOrgId() { return this.#selectedOrgId_accessor_storage; }
485
+ set selectedOrgId(value) { this.#selectedOrgId_accessor_storage = value; }
486
+ #globalAdmin_accessor_storage = (__runInitializers(this, _selectedOrgId_extraInitializers), __runInitializers(this, _globalAdmin_initializers, false));
487
+ get globalAdmin() { return this.#globalAdmin_accessor_storage; }
488
+ set globalAdmin(value) { this.#globalAdmin_accessor_storage = value; }
489
+ #sessionCount_accessor_storage = (__runInitializers(this, _globalAdmin_extraInitializers), __runInitializers(this, _sessionCount_initializers, 0));
490
+ get sessionCount() { return this.#sessionCount_accessor_storage; }
491
+ set sessionCount(value) { this.#sessionCount_accessor_storage = value; }
492
+ #orgMenuOpen_accessor_storage = (__runInitializers(this, _sessionCount_extraInitializers), __runInitializers(this, _orgMenuOpen_initializers, false));
493
+ get orgMenuOpen() { return this.#orgMenuOpen_accessor_storage; }
494
+ set orgMenuOpen(value) { this.#orgMenuOpen_accessor_storage = value; }
495
+ #userMenuOpen_accessor_storage = (__runInitializers(this, _orgMenuOpen_extraInitializers), __runInitializers(this, _userMenuOpen_initializers, false));
496
+ get userMenuOpen() { return this.#userMenuOpen_accessor_storage; }
497
+ set userMenuOpen(value) { this.#userMenuOpen_accessor_storage = value; }
498
+ workspaceNav = (__runInitializers(this, _userMenuOpen_extraInitializers), [
499
+ { id: 'overview', label: 'Overview', icon: 'grid' },
500
+ ]);
501
+ accountNav = [
502
+ { id: 'profile', label: 'Profile', icon: 'user' },
503
+ { id: 'security', label: 'Security', icon: 'shield' },
504
+ { id: 'sessions', label: 'Sessions & Devices', icon: 'monitor' },
505
+ { id: 'apps', label: 'Connected Apps', icon: 'grid' },
506
+ ];
507
+ orgNav = [
508
+ { id: 'org-general', label: 'General', icon: 'building' },
509
+ { id: 'org-settings', label: 'Settings', icon: 'settings' },
510
+ { id: 'org-members', label: 'Members', icon: 'users' },
511
+ { id: 'org-apps', label: 'OAuth Apps', icon: 'box' },
512
+ ];
513
+ supportNav = [
514
+ { id: 'support', label: 'Support', icon: 'shield' },
515
+ ];
516
+ adminNav = [
517
+ { id: 'ga-users', label: 'All Users', icon: 'users' },
518
+ { id: 'ga-orgs', label: 'All Organisations', icon: 'building' },
519
+ { id: 'ga-apps', label: 'Platform Apps', icon: 'globe' },
520
+ ];
521
+ get safeOrgs() {
522
+ return Array.isArray(this.orgs) ? this.orgs.filter(Boolean) : [];
523
+ }
524
+ get currentOrg() {
525
+ const orgs = this.safeOrgs;
526
+ return orgs.find((orgArg) => orgArg.id === this.selectedOrgId) || orgs[0] || {
527
+ id: '',
528
+ name: 'No organisation',
529
+ slug: '',
530
+ myRole: '',
531
+ };
532
+ }
533
+ get userInitials() {
534
+ if (this.user?.initials) {
535
+ return this.user.initials;
536
+ }
537
+ const source = this.user?.name || this.user?.email || '?';
538
+ return source
539
+ .split(/\s+|@/)
540
+ .filter(Boolean)
541
+ .map((partArg) => partArg[0])
542
+ .slice(0, 2)
543
+ .join('')
544
+ .toUpperCase();
545
+ }
546
+ dispatchSidebarEvent(eventNameArg, detailArg) {
547
+ this.dispatchEvent(new CustomEvent(eventNameArg, {
548
+ detail: detailArg,
549
+ bubbles: true,
550
+ composed: true,
551
+ }));
552
+ }
553
+ setPage(pageArg) {
554
+ this.page = pageArg;
555
+ this.orgMenuOpen = false;
556
+ this.userMenuOpen = false;
557
+ this.dispatchSidebarEvent('idp-admin-navigate', { page: pageArg });
558
+ }
559
+ selectOrg(orgIdArg) {
560
+ this.selectedOrgId = orgIdArg;
561
+ this.orgMenuOpen = false;
562
+ this.page = 'org-general';
563
+ this.dispatchSidebarEvent('idp-admin-org-select', {
564
+ orgId: orgIdArg,
565
+ org: this.safeOrgs.find((orgArg) => orgArg.id === orgIdArg) || null,
566
+ });
567
+ }
568
+ requestOrgCreate() {
569
+ this.orgMenuOpen = false;
570
+ this.dispatchSidebarEvent('idp-admin-org-create-request', {});
571
+ }
572
+ requestLogout() {
573
+ this.userMenuOpen = false;
574
+ this.dispatchSidebarEvent('idp-admin-logout-request', {});
575
+ }
576
+ switchAccount(accountArg) {
577
+ this.userMenuOpen = false;
578
+ this.dispatchSidebarEvent('idp-admin-account-switch', { account: accountArg });
579
+ }
580
+ requestAddAccount() {
581
+ this.userMenuOpen = false;
582
+ this.dispatchEvent(new CustomEvent('idp-admin-account-add', { bubbles: true, composed: true }));
583
+ }
584
+ renderNavGroup(items, active = '') {
585
+ return html `
586
+ <div class="nav-list">
587
+ ${items.map((item) => html `
588
+ <button class="nav-item ${item.id === active ? 'active' : ''}" @click=${() => this.setPage(item.id)}>
589
+ <idp-icon name=${item.icon} size="14"></idp-icon>
590
+ ${item.label}
591
+ ${item.badge ? html `<idp-badge variant="accent" style="margin-left:auto">${item.badge}</idp-badge>` : html ``}
592
+ </button>
593
+ `)}
594
+ </div>
595
+ `;
596
+ }
597
+ renderUserMenu() {
598
+ const otherAccounts = (this.accounts || []).filter((accountArg) => accountArg.email !== this.user?.email);
599
+ return html `
600
+ <div class="user-menu" role="menu">
601
+ <div class="user-menu-identity">
602
+ <idp-avatar name=${this.user?.name || this.user?.email || '?'} size="32"></idp-avatar>
603
+ <div class="user-meta"><div class="user-name">${this.user?.name || 'Unknown User'}</div><div class="user-email">${this.user?.email || 'No email'}</div></div>
604
+ ${this.globalAdmin ? html `<idp-badge variant="accent">Admin</idp-badge>` : html ``}
605
+ </div>
606
+ <button class="user-menu-item" @click=${() => this.setPage('profile')}>
607
+ <idp-icon name="user" size="14"></idp-icon><span>Profile</span>
608
+ </button>
609
+ <button class="user-menu-item" @click=${() => this.setPage('security')}>
610
+ <idp-icon name="shield" size="14"></idp-icon><span>Security</span>
611
+ </button>
612
+ <button class="user-menu-item" @click=${() => this.setPage('sessions')}>
613
+ <idp-icon name="monitor" size="14"></idp-icon><span>Sessions &amp; Devices</span>
614
+ ${this.sessionCount ? html `<span class="user-menu-hint">${this.sessionCount} active</span>` : html ``}
615
+ </button>
616
+ ${otherAccounts.length
617
+ ? html `
618
+ <div class="user-menu-divider"></div>
619
+ <div class="user-menu-title">Switch account</div>
620
+ ${otherAccounts.map((accountArg) => html `
621
+ <button class="user-menu-item account" @click=${() => this.switchAccount(accountArg)}>
622
+ <idp-avatar name=${accountArg.name || accountArg.email} size="22"></idp-avatar>
623
+ <div class="user-meta"><div class="user-name">${accountArg.name}</div><div class="user-email">${accountArg.email}</div></div>
624
+ <idp-icon name="lucide:ArrowLeftRight" size="12"></idp-icon>
625
+ </button>
626
+ `)}
627
+ <button class="user-menu-item" @click=${() => this.requestAddAccount()}>
628
+ <idp-icon name="plus" size="14"></idp-icon><span>Add account</span>
629
+ </button>
630
+ `
631
+ : html ``}
632
+ <div class="user-menu-divider"></div>
633
+ <button class="user-menu-item destructive" @click=${() => this.requestLogout()}>
634
+ <idp-icon name="logout" size="14"></idp-icon><span>Sign out</span>
635
+ </button>
636
+ </div>
637
+ `;
638
+ }
639
+ render() {
640
+ const currentOrg = this.currentOrg;
641
+ return html `
642
+ <aside class="sidebar">
643
+ <div class="logo-block">
644
+ <div class="logo">
645
+ <div class="logo-icon" aria-hidden="true">
646
+ <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
647
+ <path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path>
648
+ </svg>
649
+ </div>
650
+ <span class="logo-text">idp.global</span>
651
+ </div>
652
+ </div>
653
+ <div class="nav-wrap">
654
+ <div class="nav-section"><div class="nav-title">Workspace</div>${this.renderNavGroup(this.workspaceNav, this.page)}</div>
655
+ <div class="nav-section"><div class="nav-title">My Account</div>${this.renderNavGroup(this.accountNav, this.page)}</div>
656
+ <div class="nav-section">
657
+ <div class="nav-title">Organisation</div>
658
+ <div class="org-switch-wrap">
659
+ <button class="org-switch ${this.orgMenuOpen ? 'open' : ''}" @click=${() => { this.orgMenuOpen = !this.orgMenuOpen; }}>
660
+ <span class="org-avatar">${currentOrg.name.slice(0, 2).toUpperCase()}</span>
661
+ <span class="org-name">${currentOrg.name}</span>
662
+ <idp-icon name="chevron-down" size="10"></idp-icon>
663
+ </button>
664
+ ${this.orgMenuOpen ? html `
665
+ <div class="org-menu">
666
+ <div class="org-menu-title">Switch organisation</div>
667
+ ${this.safeOrgs.map((orgArg) => html `
668
+ <button class="org-menu-item ${orgArg.id === this.selectedOrgId ? 'selected' : ''}" @click=${() => this.selectOrg(orgArg.id)}>
669
+ <span class="org-avatar">${orgArg.name.slice(0, 2).toUpperCase()}</span>
670
+ <span style="flex:1;min-width:0"><span class="org-menu-name">${orgArg.name}</span><span class="org-menu-role">${orgArg.myRole || 'member'}</span></span>
671
+ ${orgArg.id === this.selectedOrgId ? html `<idp-icon name="check" size="11"></idp-icon>` : html ``}
672
+ </button>
673
+ `)}
674
+ <div class="org-menu-divider"></div>
675
+ <button class="org-create" @click=${() => this.requestOrgCreate()}><span class="org-create-icon"><idp-icon name="plus" size="9"></idp-icon></span>Create organisation</button>
676
+ </div>
677
+ ` : html ``}
678
+ </div>
679
+ ${this.renderNavGroup(this.orgNav, this.page)}
680
+ </div>
681
+ <div class="nav-section"><div class="nav-title">Support</div>${this.renderNavGroup(this.supportNav, this.page)}</div>
682
+ ${this.globalAdmin ? html `<div class="nav-section"><div class="nav-title">Global Admin</div>${this.renderNavGroup(this.adminNav, this.page)}</div>` : html ``}
683
+ </div>
684
+ <div class="user-footer">
685
+ <button class="user-trigger ${this.userMenuOpen ? 'open' : ''}" aria-haspopup="menu" aria-expanded=${this.userMenuOpen} @click=${() => { this.userMenuOpen = !this.userMenuOpen; }}>
686
+ <span class="user-avatar">${this.userInitials}</span>
687
+ <div class="user-meta"><div class="user-name">${this.user?.name || 'Unknown User'}</div><div class="user-email">${this.user?.email || 'No email'}</div></div>
688
+ <idp-icon name="lucide:ChevronsUpDown" size="13"></idp-icon>
689
+ </button>
690
+ ${this.userMenuOpen ? this.renderUserMenu() : html ``}
691
+ </div>
692
+ </aside>
693
+ `;
694
+ }
695
+ static {
696
+ __runInitializers(_classThis, _classExtraInitializers);
697
+ }
698
+ };
699
+ return IdpAdminSidebar = _classThis;
700
+ })();
701
+ export { IdpAdminSidebar };
702
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLWFkbWluLXNpZGViYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvaWRwLWFkbWluLXNpZGViYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUMxSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxlQUFlLENBQUM7QUFDdkIsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLGlCQUFpQixDQUFDO0lBd0JaLGVBQWU7NEJBRDNCLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OytCQUFuQixTQUFRLFdBQVc7Ozs7Z0NBbVg3QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0NBRzFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztvQ0FNMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO2dDQUd6QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7eUNBR3pCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLENBQUM7dUNBR3hELFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7d0NBR3JFLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxN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