@idp.global/catalog 1.2.1 → 2.1.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.
Files changed (70) hide show
  1. package/changelog.md +21 -0
  2. package/dist_bundle/bundle.js +4428 -1496
  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 +700 -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 +1 -1
  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 +646 -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,404 @@
1
+ import { css, html } from '@design.estate/dees-element';
2
+ import './idp-icon.js';
3
+ export const idpAdminSharedStyles = css `
4
+ .state-card {
5
+ padding: 42px 24px;
6
+ border: 1px solid var(--idp-border);
7
+ border-radius: var(--idp-radius);
8
+ background: var(--idp-card);
9
+ color: var(--idp-muted-fg);
10
+ text-align: center;
11
+ }
12
+ .state-icon {
13
+ width: 38px;
14
+ height: 38px;
15
+ display: inline-flex;
16
+ align-items: center;
17
+ justify-content: center;
18
+ margin-bottom: 12px;
19
+ border: 1px solid var(--idp-border);
20
+ border-radius: 10px;
21
+ background: var(--idp-muted);
22
+ color: var(--idp-muted-fg);
23
+ }
24
+ .state-title {
25
+ margin-bottom: 4px;
26
+ color: var(--idp-fg);
27
+ font-size: 14px;
28
+ font-weight: 600;
29
+ }
30
+ .state-description {
31
+ max-width: 420px;
32
+ margin: 0 auto;
33
+ font-size: 12px;
34
+ line-height: 1.5;
35
+ }
36
+ .org-avatar {
37
+ display: flex;
38
+ align-items: center;
39
+ justify-content: center;
40
+ flex-shrink: 0;
41
+ width: 14px;
42
+ height: 14px;
43
+ border: 1px solid var(--idp-border);
44
+ border-radius: 6px;
45
+ background: var(--idp-accent-soft);
46
+ color: var(--idp-accent);
47
+ font-family: var(--idp-mono);
48
+ font-size: 5px;
49
+ font-weight: 700;
50
+ }
51
+ .page-head {
52
+ display: flex;
53
+ align-items: flex-end;
54
+ justify-content: space-between;
55
+ gap: 16px;
56
+ flex-wrap: wrap;
57
+ padding: 24px 28px 18px;
58
+ border-bottom: 1px solid var(--idp-border);
59
+ background: var(--idp-bg);
60
+ }
61
+ .eyebrow-row {
62
+ display: flex;
63
+ align-items: center;
64
+ gap: 8px;
65
+ margin-bottom: 4px;
66
+ }
67
+ .eyebrow {
68
+ color: var(--idp-muted-fg);
69
+ font-family: var(--idp-mono);
70
+ font-size: 10px;
71
+ font-weight: 600;
72
+ letter-spacing: 0.08em;
73
+ text-transform: uppercase;
74
+ }
75
+ .live-pill {
76
+ display: inline-flex;
77
+ align-items: center;
78
+ gap: 4px;
79
+ padding: 1px 7px;
80
+ border: 1px solid var(--idp-ok-border);
81
+ border-radius: 999px;
82
+ background: var(--idp-ok-bg);
83
+ color: var(--idp-ok);
84
+ font-family: var(--idp-mono);
85
+ font-size: 10px;
86
+ font-weight: 500;
87
+ }
88
+ .live-dot,
89
+ .feed-dot {
90
+ width: 6px;
91
+ height: 6px;
92
+ border-radius: 50%;
93
+ background: var(--idp-ok);
94
+ box-shadow: 0 0 6px var(--idp-ok);
95
+ animation: idp-blink 1.6s ease-in-out infinite;
96
+ }
97
+ @keyframes idp-blink {
98
+ 0%, 100% { opacity: 1; }
99
+ 50% { opacity: 0.35; }
100
+ }
101
+ h1,
102
+ h2 {
103
+ margin: 0;
104
+ color: var(--idp-fg);
105
+ font-family: var(--idp-display);
106
+ letter-spacing: -0.025em;
107
+ }
108
+ h1 {
109
+ font-size: 26px;
110
+ font-weight: 700;
111
+ line-height: 1.1;
112
+ }
113
+ .lead {
114
+ margin-top: 4px;
115
+ color: var(--idp-muted-fg);
116
+ font-size: 13px;
117
+ }
118
+ .lead code,
119
+ .mono {
120
+ color: var(--idp-info);
121
+ font-family: var(--idp-mono);
122
+ }
123
+ .page-actions {
124
+ display: flex;
125
+ align-items: center;
126
+ gap: 12px;
127
+ }
128
+ .tabs {
129
+ display: inline-flex;
130
+ gap: 1px;
131
+ padding: 2px;
132
+ border: 1px solid var(--idp-border);
133
+ border-radius: 6px;
134
+ background: var(--idp-bg-2);
135
+ }
136
+ .tab {
137
+ padding: 4px 10px;
138
+ border-radius: 4px;
139
+ color: var(--idp-muted-fg);
140
+ font-family: var(--idp-mono);
141
+ font-size: 11px;
142
+ font-weight: 500;
143
+ }
144
+ .tab.active {
145
+ background: var(--idp-muted);
146
+ color: var(--idp-fg);
147
+ }
148
+ .plain-button {
149
+ display: inline-flex;
150
+ align-items: center;
151
+ gap: 6px;
152
+ height: 28px;
153
+ padding: 5px 10px;
154
+ border: 0;
155
+ border-radius: 8px;
156
+ background: transparent;
157
+ color: var(--idp-fg);
158
+ font-family: inherit;
159
+ font-size: 12px;
160
+ font-weight: 500;
161
+ white-space: nowrap;
162
+ }
163
+ .plain-button.outline {
164
+ border: 1px solid var(--idp-border);
165
+ }
166
+ .plain-button.primary {
167
+ background: var(--idp-accent);
168
+ color: var(--idp-accent-fg);
169
+ }
170
+ .plain-button.destructive {
171
+ background: var(--idp-destructive);
172
+ color: var(--idp-accent-fg);
173
+ }
174
+ .plain-button.ghost {
175
+ color: var(--idp-fg);
176
+ }
177
+ .plain-button:disabled {
178
+ opacity: 0.45;
179
+ cursor: not-allowed;
180
+ }
181
+ .body {
182
+ display: flex;
183
+ flex-direction: column;
184
+ gap: 16px;
185
+ padding: 20px 28px 32px;
186
+ }
187
+ .narrow-body {
188
+ max-width: 700px;
189
+ }
190
+ .wide-body {
191
+ max-width: 860px;
192
+ }
193
+ .kpis {
194
+ display: grid;
195
+ grid-template-columns: repeat(4, 1fr);
196
+ gap: 12px;
197
+ }
198
+ .kpi,
199
+ .card {
200
+ border: 1px solid var(--idp-border);
201
+ background: var(--idp-card);
202
+ }
203
+ .kpi {
204
+ position: relative;
205
+ min-height: 132px;
206
+ display: flex;
207
+ flex-direction: column;
208
+ gap: 4px;
209
+ overflow: hidden;
210
+ padding: 18px 20px 14px;
211
+ border-radius: 10px;
212
+ }
213
+ .kpi::before {
214
+ content: '';
215
+ position: absolute;
216
+ top: 0;
217
+ left: 0;
218
+ right: 0;
219
+ height: 2px;
220
+ background: var(--kpi-accent);
221
+ }
222
+ .kpi-label {
223
+ color: var(--idp-muted-fg);
224
+ font-size: 11.5px;
225
+ font-weight: 500;
226
+ letter-spacing: 0.02em;
227
+ }
228
+ .kpi-value {
229
+ color: var(--idp-fg);
230
+ font-family: var(--idp-display);
231
+ font-size: 30px;
232
+ font-weight: 700;
233
+ font-variant-numeric: tabular-nums;
234
+ letter-spacing: -0.025em;
235
+ line-height: 1.1;
236
+ }
237
+ .kpi-value span {
238
+ margin-left: 2px;
239
+ color: var(--idp-muted-fg);
240
+ font-size: 14px;
241
+ font-weight: 500;
242
+ }
243
+ .kpi-sub {
244
+ color: var(--idp-fg-3);
245
+ font-family: var(--idp-mono);
246
+ font-size: 11px;
247
+ }
248
+ .kpi-foot {
249
+ display: flex;
250
+ align-items: flex-end;
251
+ justify-content: space-between;
252
+ gap: 8px;
253
+ margin-top: auto;
254
+ }
255
+ .delta {
256
+ display: inline-flex;
257
+ align-items: center;
258
+ gap: 4px;
259
+ color: var(--idp-ok);
260
+ font-family: var(--idp-mono);
261
+ font-size: 11px;
262
+ font-weight: 600;
263
+ }
264
+ .sparkline {
265
+ width: 84px;
266
+ opacity: 0.85;
267
+ }
268
+ .primary-grid,
269
+ .secondary-grid {
270
+ display: grid;
271
+ grid-template-columns: minmax(0, 1.6fr) minmax(300px, 1fr);
272
+ gap: 16px;
273
+ }
274
+ .card {
275
+ overflow: hidden;
276
+ border-radius: 8px;
277
+ }
278
+ .card-head {
279
+ display: flex;
280
+ align-items: center;
281
+ gap: 10px;
282
+ padding: 12px 16px;
283
+ border-bottom: 1px solid var(--idp-border-soft);
284
+ }
285
+ .card-title {
286
+ color: var(--idp-fg);
287
+ font-size: 13px;
288
+ font-weight: 600;
289
+ }
290
+ .feed-dot {
291
+ display: inline-block;
292
+ width: 8px;
293
+ height: 8px;
294
+ border-radius: 4px;
295
+ background: var(--dot-color);
296
+ box-shadow: var(--dot-glow, none);
297
+ }
298
+ .feed-meta {
299
+ color: var(--idp-muted-fg);
300
+ font-family: var(--idp-mono);
301
+ font-size: 11.5px;
302
+ }
303
+ .feed-item {
304
+ display: grid;
305
+ grid-template-columns: 14px 1fr auto;
306
+ gap: 12px;
307
+ align-items: center;
308
+ padding: 11px 16px;
309
+ border-bottom: 1px solid var(--idp-border-soft);
310
+ }
311
+ .feed-item:last-child {
312
+ border-bottom: 0;
313
+ }
314
+ .feed-text {
315
+ color: var(--idp-fg-2);
316
+ font-size: 12.5px;
317
+ }
318
+ .feed-text strong {
319
+ color: var(--idp-fg);
320
+ font-weight: 600;
321
+ }
322
+ @media (max-width: 1120px) {
323
+ .kpis {
324
+ grid-template-columns: repeat(2, 1fr);
325
+ }
326
+ .primary-grid,
327
+ .secondary-grid {
328
+ grid-template-columns: 1fr;
329
+ }
330
+ }
331
+ @media (max-width: 720px) {
332
+ .page-head,
333
+ .body {
334
+ padding-left: 20px;
335
+ padding-right: 20px;
336
+ }
337
+ .page-actions {
338
+ flex-wrap: wrap;
339
+ }
340
+ .kpis {
341
+ grid-template-columns: 1fr;
342
+ }
343
+ }
344
+ `;
345
+ export const renderAdminSparkline = (dataArg, colorArg) => {
346
+ const max = Math.max(...dataArg);
347
+ const min = Math.min(...dataArg);
348
+ const range = max - min || 1;
349
+ const width = 100;
350
+ const height = 22;
351
+ const points = dataArg.map((valueArg, indexArg) => {
352
+ const x = (indexArg / (dataArg.length - 1)) * width;
353
+ const y = height - ((valueArg - min) / range) * (height - 4) - 2;
354
+ return `${x},${y}`;
355
+ }).join(' ');
356
+ const area = `0,${height} ${points} ${width},${height}`;
357
+ return html `
358
+ <svg viewBox="0 0 ${width} ${height}" preserveAspectRatio="none">
359
+ <polygon points=${area} fill=${colorArg} opacity="0.12"></polygon>
360
+ <polyline points=${points} fill="none" stroke=${colorArg} stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></polyline>
361
+ </svg>
362
+ `;
363
+ };
364
+ export const renderAdminKpi = (kpiArg) => {
365
+ return html `
366
+ <div class="kpi" style="--kpi-accent:${kpiArg.accent}">
367
+ <div class="kpi-label">${kpiArg.label}</div>
368
+ <div class="kpi-value">${kpiArg.value}${kpiArg.unit ? html `<span>${kpiArg.unit}</span>` : html ``}</div>
369
+ <div class="kpi-sub">${kpiArg.sub}</div>
370
+ <div class="kpi-foot">
371
+ <span class="delta">${kpiArg.deltaKind === 'live' ? html `<span class="live-dot"></span>` : html ``}${kpiArg.delta}</span>
372
+ <div class="sparkline">${renderAdminSparkline(kpiArg.spark, kpiArg.sparkColor)}</div>
373
+ </div>
374
+ </div>
375
+ `;
376
+ };
377
+ export const renderAdminStateCard = (titleArg, descriptionArg, iconArg = 'box') => {
378
+ return html `
379
+ <div class="state-card">
380
+ <span class="state-icon"><idp-icon name=${iconArg} size="17"></idp-icon></span>
381
+ <div class="state-title">${titleArg}</div>
382
+ <div class="state-description">${descriptionArg}</div>
383
+ </div>
384
+ `;
385
+ };
386
+ export const formatAdminTimeAgo = (timestampArg) => {
387
+ if (!timestampArg) {
388
+ return 'unknown';
389
+ }
390
+ const diff = Date.now() - timestampArg;
391
+ const minutes = Math.floor(diff / 60000);
392
+ const hours = Math.floor(diff / 3600000);
393
+ const days = Math.floor(diff / 86400000);
394
+ if (minutes < 1)
395
+ return 'just now';
396
+ if (minutes < 60)
397
+ return `${minutes}m ago`;
398
+ if (hours < 24)
399
+ return `${hours}h ago`;
400
+ if (days < 7)
401
+ return `${days}d ago`;
402
+ return new Date(timestampArg).toLocaleDateString();
403
+ };
404
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLWFkbWluLXNoYXJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3dlYi9lbGVtZW50cy9pZHAtYWRtaW4tc2hhcmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQzdFLE9BQU8sZUFBZSxDQUFDO0FBY3ZCLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FxVnRDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLE9BQWlCLEVBQUUsUUFBZ0IsRUFBa0IsRUFBRTtJQUMxRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7SUFDakMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sS0FBSyxHQUFHLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzdCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQztJQUNsQixNQUFNLE1BQU0sR0FBRyxFQUFF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
@@ -2,6 +2,12 @@ import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
2
  import './idp-badge.js';
3
3
  import './idp-icon.js';
4
4
  import './idp-data-table.js';
5
+ import './idp-avatar.js';
6
+ import './idp-toggle.js';
7
+ import './idp-delegation-section.js';
8
+ import './idp-admin-sidebar.js';
9
+ import './idp-admin-overview.js';
10
+ import type { IIdpDelegation, IIdpDelegationApp } from './idp-delegation-section.js';
5
11
  declare global {
6
12
  interface HTMLElementTagNameMap {
7
13
  'idp-admin-shell': IdpAdminShell;
@@ -21,6 +27,10 @@ export interface IIdpAdminOrg {
21
27
  name: string;
22
28
  slug: string;
23
29
  myRole?: string;
30
+ plan?: string;
31
+ status?: string;
32
+ memberCount?: number;
33
+ createdAt?: number;
24
34
  }
25
35
  export interface IIdpAdminNavigateEventDetail {
26
36
  page: TIdpAdminPage;
@@ -29,6 +39,70 @@ export interface IIdpAdminOrgSelectEventDetail {
29
39
  orgId: string;
30
40
  org: IIdpAdminOrg | null;
31
41
  }
42
+ export interface IIdpAdminLogoutEventDetail {
43
+ everywhere: boolean;
44
+ }
45
+ export interface IIdpAdminAccountSwitchEventDetail {
46
+ account: IIdpAdminUser;
47
+ }
48
+ export interface IIdpAdminOrgCreateEventDetail {
49
+ name: string;
50
+ slug: string;
51
+ }
52
+ export interface IIdpAdminGaUser {
53
+ id: string;
54
+ name: string;
55
+ email: string;
56
+ status: string;
57
+ isGlobalAdmin: boolean;
58
+ orgCount: number;
59
+ createdAt: number;
60
+ }
61
+ export interface IIdpAdminGaUserActionEventDetail {
62
+ userId: string;
63
+ action: 'suspend' | 'unsuspend';
64
+ }
65
+ export interface IIdpAdminGaOrgActionEventDetail {
66
+ orgId: string;
67
+ action: 'suspend' | 'unsuspend';
68
+ }
69
+ export interface IIdpAdminGaAppActionEventDetail {
70
+ appId: string;
71
+ action: 'approve' | 'reject' | 'suspend' | 'reinstate';
72
+ }
73
+ export interface IIdpAdminOverviewSeriesPoint {
74
+ /** epoch-ms timestamp or Date-parseable string; plain clock times like '14:00' are not chartable */
75
+ x: string | number;
76
+ y: number;
77
+ }
78
+ export interface IIdpAdminOverviewThreat {
79
+ severity: 'error' | 'warning' | 'info';
80
+ title: string;
81
+ meta: string;
82
+ action?: string;
83
+ }
84
+ export interface IIdpAdminOverviewRegion {
85
+ name: string;
86
+ code: string;
87
+ count: number;
88
+ share: number;
89
+ kind?: 'home' | 'risk';
90
+ }
91
+ export interface IIdpAdminOverviewFeedItem {
92
+ tone: 'ok' | 'info' | 'warn' | 'error';
93
+ text: string;
94
+ meta: string;
95
+ }
96
+ export interface IIdpAdminOverviewData {
97
+ chartLabel?: string;
98
+ chartSeries?: {
99
+ name: string;
100
+ data: IIdpAdminOverviewSeriesPoint[];
101
+ }[];
102
+ threats?: IIdpAdminOverviewThreat[];
103
+ regions?: IIdpAdminOverviewRegion[];
104
+ feed?: IIdpAdminOverviewFeedItem[];
105
+ }
32
106
  export interface IIdpAdminSession {
33
107
  id: string;
34
108
  deviceName: string;
@@ -229,7 +303,17 @@ export declare class IdpAdminShell extends DeesElement {
229
303
  accessor totpEnrollment: IIdpAdminTotpEnrollment | null;
230
304
  accessor passkeys: IIdpAdminPasskey[];
231
305
  accessor credentialMessage: string;
232
- private accessor orgMenuOpen;
306
+ accessor accounts: IIdpAdminUser[];
307
+ accessor gaUsers: IIdpAdminGaUser[];
308
+ accessor overviewData: IIdpAdminOverviewData | null;
309
+ accessor delegationApps: IIdpDelegationApp[];
310
+ accessor delegations: IIdpDelegation[];
311
+ private accessor logoutEverywhere;
312
+ private accessor createOrgName;
313
+ private accessor createOrgSlug;
314
+ private accessor gaUserSearch;
315
+ private accessor toast;
316
+ private toastTimer;
233
317
  private accessor currentPassword;
234
318
  private accessor newPassword;
235
319
  private accessor confirmPassword;
@@ -252,11 +336,6 @@ export declare class IdpAdminShell extends DeesElement {
252
336
  private accessor dialogMemberRoles;
253
337
  private accessor dialogApp;
254
338
  private accessor dialogAppMappings;
255
- private workspaceNav;
256
- private accountNav;
257
- private orgNav;
258
- private supportNav;
259
- private adminNav;
260
339
  private get safeOrgs();
261
340
  private get currentOrg();
262
341
  private get userInitials();
@@ -275,8 +354,16 @@ export declare class IdpAdminShell extends DeesElement {
275
354
  private regenerateBackupCodes;
276
355
  private requestPasskeyRegistration;
277
356
  private setPage;
278
- private selectOrg;
357
+ private handleSidebarNavigate;
358
+ private handleSidebarOrgSelect;
279
359
  private requestOrgCreate;
360
+ private slugify;
361
+ private setCreateOrgName;
362
+ private submitCreateOrg;
363
+ private requestLogout;
364
+ private confirmLogout;
365
+ showToast(messageArg: string, toneArg?: 'ok' | 'warn' | 'error'): void;
366
+ disconnectedCallback(): Promise<void>;
280
367
  private dispatchShellEvent;
281
368
  private formatTimeAgo;
282
369
  private renderStateCard;
@@ -303,11 +390,9 @@ export declare class IdpAdminShell extends DeesElement {
303
390
  private renderRoleDeleteDialog;
304
391
  private renderMemberRolesDialog;
305
392
  private renderAppRoleMappingsDialog;
393
+ private renderCreateOrgDialog;
394
+ private renderLogoutConfirmDialog;
306
395
  private renderDialog;
307
- private renderNavGroup;
308
- private renderSidebar;
309
- private renderSparkline;
310
- private renderKpi;
311
396
  private renderPageHeader;
312
397
  private renderSectionCard;
313
398
  private renderFormRow;