@idp.global/catalog 2.0.0 → 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.
- package/changelog.md +15 -0
- package/dist_bundle/bundle.js +4428 -1496
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/idp-admin-overview.d.ts +28 -0
- package/dist_ts_web/elements/idp-admin-overview.js +460 -0
- package/dist_ts_web/elements/idp-admin-shared.d.ts +18 -0
- package/dist_ts_web/elements/idp-admin-shared.js +404 -0
- package/dist_ts_web/elements/idp-admin-shell.d.ts +96 -11
- package/dist_ts_web/elements/idp-admin-shell.js +442 -816
- package/dist_ts_web/elements/idp-admin-sidebar.d.ts +42 -0
- package/dist_ts_web/elements/idp-admin-sidebar.js +700 -0
- package/dist_ts_web/elements/idp-app-pair.d.ts +19 -0
- package/dist_ts_web/elements/idp-app-pair.js +187 -0
- package/dist_ts_web/elements/idp-auth-card.d.ts +17 -0
- package/dist_ts_web/elements/idp-auth-card.js +180 -0
- package/dist_ts_web/elements/idp-avatar.d.ts +17 -0
- package/dist_ts_web/elements/idp-avatar.js +151 -0
- package/dist_ts_web/elements/idp-badge.d.ts +2 -0
- package/dist_ts_web/elements/idp-badge.js +12 -3
- package/dist_ts_web/elements/idp-brand-mark.d.ts +16 -0
- package/dist_ts_web/elements/idp-brand-mark.js +139 -0
- package/dist_ts_web/elements/idp-button.d.ts +3 -0
- package/dist_ts_web/elements/idp-button.js +47 -3
- package/dist_ts_web/elements/idp-consent-card.d.ts +34 -0
- package/dist_ts_web/elements/idp-consent-card.js +217 -0
- package/dist_ts_web/elements/idp-delegation-section.d.ts +59 -0
- package/dist_ts_web/elements/idp-delegation-section.js +609 -0
- package/dist_ts_web/elements/idp-form-submit.d.ts +2 -1
- package/dist_ts_web/elements/idp-form-submit.js +11 -2
- package/dist_ts_web/elements/idp-form.js +2 -2
- package/dist_ts_web/elements/idp-input.d.ts +4 -0
- package/dist_ts_web/elements/idp-input.js +68 -15
- package/dist_ts_web/elements/idp-option-row.d.ts +25 -0
- package/dist_ts_web/elements/idp-option-row.js +267 -0
- package/dist_ts_web/elements/idp-otp-input.d.ts +32 -0
- package/dist_ts_web/elements/idp-otp-input.js +274 -0
- package/dist_ts_web/elements/idp-progress-bar.d.ts +14 -0
- package/dist_ts_web/elements/idp-progress-bar.js +127 -0
- package/dist_ts_web/elements/idp-signed-in-pill.d.ts +15 -0
- package/dist_ts_web/elements/idp-signed-in-pill.js +113 -0
- package/dist_ts_web/elements/idp-spinner.d.ts +13 -0
- package/dist_ts_web/elements/idp-spinner.js +109 -0
- package/dist_ts_web/elements/idp-status-icon.d.ts +18 -0
- package/dist_ts_web/elements/idp-status-icon.js +136 -0
- package/dist_ts_web/elements/index.d.ts +15 -0
- package/dist_ts_web/elements/index.js +16 -1
- package/package.json +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/idp-admin-overview.ts +388 -0
- package/ts_web/elements/idp-admin-shared.ts +419 -0
- package/ts_web/elements/idp-admin-shell.ts +514 -871
- package/ts_web/elements/idp-admin-sidebar.ts +646 -0
- package/ts_web/elements/idp-app-pair.ts +120 -0
- package/ts_web/elements/idp-auth-card.ts +113 -0
- package/ts_web/elements/idp-avatar.ts +84 -0
- package/ts_web/elements/idp-badge.ts +5 -1
- package/ts_web/elements/idp-brand-mark.ts +76 -0
- package/ts_web/elements/idp-button.ts +36 -1
- package/ts_web/elements/idp-consent-card.ts +146 -0
- package/ts_web/elements/idp-delegation-section.ts +576 -0
- package/ts_web/elements/idp-form-submit.ts +5 -1
- package/ts_web/elements/idp-form.ts +1 -1
- package/ts_web/elements/idp-input.ts +58 -13
- package/ts_web/elements/idp-option-row.ts +184 -0
- package/ts_web/elements/idp-otp-input.ts +204 -0
- package/ts_web/elements/idp-progress-bar.ts +69 -0
- package/ts_web/elements/idp-signed-in-pill.ts +55 -0
- package/ts_web/elements/idp-spinner.ts +56 -0
- package/ts_web/elements/idp-status-icon.ts +76 -0
- 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
|
-
|
|
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
|
|
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;
|