@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
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/catalog',
6
- version: '2.0.0',
6
+ version: '2.1.1',
7
7
  description: 'Web component catalog for idp.global, based on the v5 Apple-system design language.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUscUJBQXFCO0lBQzNCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxxRkFBcUY7Q0FDbkcsQ0FBQSJ9
@@ -0,0 +1,28 @@
1
+ import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
+ import './idp-icon.js';
3
+ import './idp-badge.js';
4
+ import '@design.estate/dees-catalog/dist_ts_web/elements/00group-chart/dees-chart-area/index.js';
5
+ import type { IIdpAdminUser, IIdpAdminOrg, IIdpAdminSession, IIdpAdminActivity, IIdpAdminPassportDevice, IIdpAdminOverviewData } from './idp-admin-shell.js';
6
+ declare global {
7
+ interface HTMLElementTagNameMap {
8
+ 'idp-admin-overview': IdpAdminOverview;
9
+ }
10
+ }
11
+ export declare class IdpAdminOverview extends DeesElement {
12
+ static demo: () => TemplateResult<1>;
13
+ static demoGroups: string[];
14
+ static styles: import("@design.estate/dees-element").CSSResult[];
15
+ accessor user: IIdpAdminUser;
16
+ accessor orgs: IIdpAdminOrg[];
17
+ accessor sessions: IIdpAdminSession[];
18
+ accessor activities: IIdpAdminActivity[];
19
+ accessor passportDevices: IIdpAdminPassportDevice[];
20
+ accessor dataLoading: boolean;
21
+ accessor dataError: string;
22
+ accessor overviewData: IIdpAdminOverviewData | null;
23
+ private navigate;
24
+ private renderDataState;
25
+ private renderInsights;
26
+ private renderFooterRows;
27
+ render(): TemplateResult;
28
+ }
@@ -0,0 +1,460 @@
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, customElement, css } from '@design.estate/dees-element';
36
+ import { idpElementStyles } from './tokens.js';
37
+ import { idpAdminSharedStyles, renderAdminKpi, renderAdminStateCard, formatAdminTimeAgo } from './idp-admin-shared.js';
38
+ import './idp-icon.js';
39
+ import './idp-badge.js';
40
+ import '@design.estate/dees-catalog/dist_ts_web/elements/00group-chart/dees-chart-area/index.js';
41
+ let IdpAdminOverview = (() => {
42
+ let _classDecorators = [customElement('idp-admin-overview')];
43
+ let _classDescriptor;
44
+ let _classExtraInitializers = [];
45
+ let _classThis;
46
+ let _classSuper = DeesElement;
47
+ let _user_decorators;
48
+ let _user_initializers = [];
49
+ let _user_extraInitializers = [];
50
+ let _orgs_decorators;
51
+ let _orgs_initializers = [];
52
+ let _orgs_extraInitializers = [];
53
+ let _sessions_decorators;
54
+ let _sessions_initializers = [];
55
+ let _sessions_extraInitializers = [];
56
+ let _activities_decorators;
57
+ let _activities_initializers = [];
58
+ let _activities_extraInitializers = [];
59
+ let _passportDevices_decorators;
60
+ let _passportDevices_initializers = [];
61
+ let _passportDevices_extraInitializers = [];
62
+ let _dataLoading_decorators;
63
+ let _dataLoading_initializers = [];
64
+ let _dataLoading_extraInitializers = [];
65
+ let _dataError_decorators;
66
+ let _dataError_initializers = [];
67
+ let _dataError_extraInitializers = [];
68
+ let _overviewData_decorators;
69
+ let _overviewData_initializers = [];
70
+ let _overviewData_extraInitializers = [];
71
+ var IdpAdminOverview = class extends _classSuper {
72
+ static { _classThis = this; }
73
+ static {
74
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
75
+ _user_decorators = [property({ type: Object })];
76
+ _orgs_decorators = [property({ type: Array })];
77
+ _sessions_decorators = [property({ type: Array })];
78
+ _activities_decorators = [property({ type: Array })];
79
+ _passportDevices_decorators = [property({ type: Array })];
80
+ _dataLoading_decorators = [property({ type: Boolean, attribute: 'data-loading', reflect: true })];
81
+ _dataError_decorators = [property({ type: String, attribute: 'data-error' })];
82
+ _overviewData_decorators = [property({ type: Object })];
83
+ __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);
84
+ __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);
85
+ __esDecorate(this, null, _sessions_decorators, { kind: "accessor", name: "sessions", static: false, private: false, access: { has: obj => "sessions" in obj, get: obj => obj.sessions, set: (obj, value) => { obj.sessions = value; } }, metadata: _metadata }, _sessions_initializers, _sessions_extraInitializers);
86
+ __esDecorate(this, null, _activities_decorators, { kind: "accessor", name: "activities", static: false, private: false, access: { has: obj => "activities" in obj, get: obj => obj.activities, set: (obj, value) => { obj.activities = value; } }, metadata: _metadata }, _activities_initializers, _activities_extraInitializers);
87
+ __esDecorate(this, null, _passportDevices_decorators, { kind: "accessor", name: "passportDevices", static: false, private: false, access: { has: obj => "passportDevices" in obj, get: obj => obj.passportDevices, set: (obj, value) => { obj.passportDevices = value; } }, metadata: _metadata }, _passportDevices_initializers, _passportDevices_extraInitializers);
88
+ __esDecorate(this, null, _dataLoading_decorators, { kind: "accessor", name: "dataLoading", static: false, private: false, access: { has: obj => "dataLoading" in obj, get: obj => obj.dataLoading, set: (obj, value) => { obj.dataLoading = value; } }, metadata: _metadata }, _dataLoading_initializers, _dataLoading_extraInitializers);
89
+ __esDecorate(this, null, _dataError_decorators, { kind: "accessor", name: "dataError", static: false, private: false, access: { has: obj => "dataError" in obj, get: obj => obj.dataError, set: (obj, value) => { obj.dataError = value; } }, metadata: _metadata }, _dataError_initializers, _dataError_extraInitializers);
90
+ __esDecorate(this, null, _overviewData_decorators, { kind: "accessor", name: "overviewData", static: false, private: false, access: { has: obj => "overviewData" in obj, get: obj => obj.overviewData, set: (obj, value) => { obj.overviewData = value; } }, metadata: _metadata }, _overviewData_initializers, _overviewData_extraInitializers);
91
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
92
+ IdpAdminOverview = _classThis = _classDescriptor.value;
93
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
94
+ }
95
+ static demo = () => {
96
+ const now = Date.now();
97
+ const hours = Array.from({ length: 24 }, (unused, indexArg) => indexArg);
98
+ return html `
99
+ <idp-admin-overview
100
+ .user=${{ name: 'Alex Mercer', email: 'alex@lossless.com' }}
101
+ .orgs=${[
102
+ { id: 'org_foss', name: 'Lossless GmbH', slug: 'lossless', myRole: 'owner' },
103
+ { id: 'org_task', name: 'Task VC', slug: 'task', myRole: 'admin' },
104
+ ]}
105
+ .sessions=${[
106
+ { id: 's1', deviceName: 'MacBook Pro', browser: 'Safari 18', os: 'macOS', ip: '84.132.10.4', lastActive: now - 120000, createdAt: now - 86400000 * 3, isCurrent: true },
107
+ { id: 's2', deviceName: 'iPhone 15 Pro', browser: 'Safari', os: 'iOS 18', ip: '84.132.10.4', lastActive: now - 3600000, createdAt: now - 86400000 * 10, isCurrent: false },
108
+ ]}
109
+ .activities=${[
110
+ { id: 'a1', action: 'login_success', description: 'Signed in with passkey', timestamp: now - 300000 },
111
+ { id: 'a2', action: 'app_authorized', description: 'Granted access to foss.global', timestamp: now - 7200000 },
112
+ ]}
113
+ .overviewData=${{
114
+ chartLabel: 'Approval activity',
115
+ chartSeries: [
116
+ { name: 'Approvals', data: hours.map((hourArg) => ({ x: now - (23 - hourArg) * 3600000, y: [22, 18, 14, 10, 8, 7, 9, 14, 22, 38, 52, 64, 71, 74, 70, 65, 58, 52, 45, 38, 32, 28, 25, 23][hourArg] })) },
117
+ { name: 'OAuth grants', data: hours.map((hourArg) => ({ x: now - (23 - hourArg) * 3600000, y: [16, 12, 9, 7, 6, 5, 7, 11, 18, 30, 42, 50, 56, 58, 56, 52, 47, 41, 36, 30, 26, 23, 20, 18][hourArg] })) },
118
+ ],
119
+ threats: [
120
+ { severity: 'error', title: 'Repeated denied logins', meta: '5 attempts · Lagos, NG · last 1h', action: 'Block IP' },
121
+ { severity: 'warning', title: 'Stale device key', meta: 'sam@ · Apple Watch · 9 mo old', action: 'Rotate' },
122
+ ],
123
+ regions: [
124
+ { name: 'Berlin, DE', code: 'DE', count: 1284, share: 1, kind: 'home' },
125
+ { name: 'Amsterdam, NL', code: 'NL', count: 642, share: 0.5 },
126
+ { name: 'Lagos, NG', code: 'NG', count: 12, share: 0.01, kind: 'risk' },
127
+ ],
128
+ feed: [
129
+ { tone: 'info', text: 'Identity created · did:idp:0x9b12…f034', meta: 'block #9 841 222' },
130
+ { tone: 'ok', text: 'Anchor confirmed · 12 blocks deep', meta: '2m' },
131
+ ],
132
+ }}
133
+ ></idp-admin-overview>
134
+ `;
135
+ };
136
+ static demoGroups = ['idp.global v5 composed surfaces'];
137
+ static styles = [
138
+ ...idpElementStyles,
139
+ idpAdminSharedStyles,
140
+ css `
141
+ :host {
142
+ display: block;
143
+ background: var(--idp-bg);
144
+ color: var(--idp-fg);
145
+ }
146
+ .chart-card dees-chart-area {
147
+ display: block;
148
+ min-height: 240px;
149
+ }
150
+ .region-row {
151
+ display: grid;
152
+ grid-template-columns: 28px 1fr auto;
153
+ gap: 12px;
154
+ align-items: center;
155
+ padding: 8px 0;
156
+ }
157
+ .region-code {
158
+ font-family: var(--idp-mono);
159
+ font-size: 10px;
160
+ font-weight: 700;
161
+ text-align: center;
162
+ padding: 2px 0;
163
+ border: 1px solid var(--idp-border);
164
+ border-radius: 3px;
165
+ color: var(--idp-fg-3);
166
+ }
167
+ .region-code.home {
168
+ color: var(--idp-accent);
169
+ border-color: var(--sh-accent-ring);
170
+ background: var(--idp-accent-soft);
171
+ }
172
+ .region-code.risk {
173
+ color: var(--idp-error);
174
+ border-color: var(--idp-error-border);
175
+ background: var(--idp-error-bg);
176
+ }
177
+ .region-bar {
178
+ height: 4px;
179
+ margin-top: 4px;
180
+ border-radius: 2px;
181
+ background: var(--idp-muted);
182
+ overflow: hidden;
183
+ }
184
+ .region-bar-fill {
185
+ height: 100%;
186
+ background: var(--idp-accent);
187
+ opacity: 0.85;
188
+ }
189
+ .region-bar-fill.risk {
190
+ background: var(--idp-error);
191
+ opacity: 0.8;
192
+ }
193
+ .region-count {
194
+ font-family: var(--idp-mono);
195
+ font-size: 11.5px;
196
+ color: var(--idp-fg);
197
+ min-width: 44px;
198
+ text-align: right;
199
+ }
200
+ .region-list {
201
+ padding: 4px 16px 8px;
202
+ }
203
+ .threat-row {
204
+ display: grid;
205
+ grid-template-columns: 6px 1fr auto;
206
+ gap: 12px;
207
+ align-items: center;
208
+ padding: 12px 0;
209
+ border-bottom: 1px solid var(--idp-border-soft);
210
+ }
211
+ .threat-row:last-child {
212
+ border-bottom: none;
213
+ }
214
+ .threat-list {
215
+ padding: 0 16px;
216
+ }
217
+ .threat-dot {
218
+ width: 6px;
219
+ height: 6px;
220
+ border-radius: 3px;
221
+ }
222
+ .threat-title {
223
+ font-size: 12.5px;
224
+ font-weight: 500;
225
+ color: var(--idp-fg);
226
+ }
227
+ .threat-meta {
228
+ font-family: var(--idp-mono);
229
+ font-size: 10.5px;
230
+ color: var(--idp-muted-fg);
231
+ margin-top: 2px;
232
+ }
233
+ .threat-action {
234
+ padding: 4px 10px;
235
+ border: 1px solid var(--idp-border);
236
+ border-radius: 6px;
237
+ background: var(--idp-bg);
238
+ color: var(--idp-fg);
239
+ font-family: var(--idp-font);
240
+ font-size: 11px;
241
+ font-weight: 500;
242
+ white-space: nowrap;
243
+ cursor: pointer;
244
+ }
245
+ `,
246
+ ];
247
+ #user_accessor_storage = __runInitializers(this, _user_initializers, {
248
+ name: '',
249
+ email: '',
250
+ });
251
+ get user() { return this.#user_accessor_storage; }
252
+ set user(value) { this.#user_accessor_storage = value; }
253
+ #orgs_accessor_storage = (__runInitializers(this, _user_extraInitializers), __runInitializers(this, _orgs_initializers, []));
254
+ get orgs() { return this.#orgs_accessor_storage; }
255
+ set orgs(value) { this.#orgs_accessor_storage = value; }
256
+ #sessions_accessor_storage = (__runInitializers(this, _orgs_extraInitializers), __runInitializers(this, _sessions_initializers, []));
257
+ get sessions() { return this.#sessions_accessor_storage; }
258
+ set sessions(value) { this.#sessions_accessor_storage = value; }
259
+ #activities_accessor_storage = (__runInitializers(this, _sessions_extraInitializers), __runInitializers(this, _activities_initializers, []));
260
+ get activities() { return this.#activities_accessor_storage; }
261
+ set activities(value) { this.#activities_accessor_storage = value; }
262
+ #passportDevices_accessor_storage = (__runInitializers(this, _activities_extraInitializers), __runInitializers(this, _passportDevices_initializers, []));
263
+ get passportDevices() { return this.#passportDevices_accessor_storage; }
264
+ set passportDevices(value) { this.#passportDevices_accessor_storage = value; }
265
+ #dataLoading_accessor_storage = (__runInitializers(this, _passportDevices_extraInitializers), __runInitializers(this, _dataLoading_initializers, false));
266
+ get dataLoading() { return this.#dataLoading_accessor_storage; }
267
+ set dataLoading(value) { this.#dataLoading_accessor_storage = value; }
268
+ #dataError_accessor_storage = (__runInitializers(this, _dataLoading_extraInitializers), __runInitializers(this, _dataError_initializers, ''));
269
+ get dataError() { return this.#dataError_accessor_storage; }
270
+ set dataError(value) { this.#dataError_accessor_storage = value; }
271
+ #overviewData_accessor_storage = (__runInitializers(this, _dataError_extraInitializers), __runInitializers(this, _overviewData_initializers, null));
272
+ get overviewData() { return this.#overviewData_accessor_storage; }
273
+ set overviewData(value) { this.#overviewData_accessor_storage = value; }
274
+ navigate(pageArg) {
275
+ this.dispatchEvent(new CustomEvent('idp-admin-navigate', {
276
+ detail: { page: pageArg },
277
+ bubbles: true,
278
+ composed: true,
279
+ }));
280
+ }
281
+ renderDataState(emptyTitleArg, emptyDescriptionArg, iconArg = 'box') {
282
+ if (this.dataLoading) {
283
+ return renderAdminStateCard('Loading data', 'Fetching the latest account and organisation data.', 'cloud');
284
+ }
285
+ if (this.dataError) {
286
+ return renderAdminStateCard('Data unavailable', this.dataError, 'alert');
287
+ }
288
+ return renderAdminStateCard(emptyTitleArg, emptyDescriptionArg, iconArg);
289
+ }
290
+ renderInsights() {
291
+ const data = this.overviewData;
292
+ if (!data?.chartSeries?.length && !data?.threats?.length) {
293
+ return html ``;
294
+ }
295
+ const toneColor = (severityArg) => severityArg === 'error'
296
+ ? 'var(--idp-error)'
297
+ : severityArg === 'warning' ? 'var(--idp-warn)' : 'var(--idp-info)';
298
+ return html `
299
+ <div class="primary-grid">
300
+ ${data?.chartSeries?.length ? html `
301
+ <div class="card chart-card">
302
+ <div class="card-head"><span class="card-title">${data.chartLabel || 'Approval activity'}</span></div>
303
+ <dees-chart-area
304
+ .label=${data.chartLabel || 'Approval activity'}
305
+ .yAxisFormatter=${(valueArg) => `${Math.round(valueArg)}`}
306
+ .series=${data.chartSeries.map((seriesArg) => ({
307
+ name: seriesArg.name,
308
+ data: seriesArg.data.map((pointArg) => ({ x: pointArg.x, y: pointArg.y })),
309
+ }))}
310
+ ></dees-chart-area>
311
+ </div>
312
+ ` : html ``}
313
+ ${data?.threats?.length ? html `
314
+ <div class="card">
315
+ <div class="card-head"><span class="card-title">Needs attention</span><idp-badge variant="error">${data.threats.length} open</idp-badge></div>
316
+ <div class="threat-list">
317
+ ${data.threats.map((threatArg) => html `
318
+ <div class="threat-row">
319
+ <span class="threat-dot" style="background:${toneColor(threatArg.severity)}"></span>
320
+ <div><div class="threat-title">${threatArg.title}</div><div class="threat-meta">${threatArg.meta}</div></div>
321
+ ${threatArg.action ? html `<button class="threat-action">${threatArg.action}</button>` : html ``}
322
+ </div>
323
+ `)}
324
+ </div>
325
+ </div>
326
+ ` : html ``}
327
+ </div>
328
+ `;
329
+ }
330
+ renderFooterRows() {
331
+ const data = this.overviewData;
332
+ if (!data?.feed?.length && !data?.regions?.length) {
333
+ return html ``;
334
+ }
335
+ const feedColor = (toneArg) => toneArg === 'ok'
336
+ ? 'var(--idp-ok)'
337
+ : toneArg === 'warn' ? 'var(--idp-warn)' : toneArg === 'error' ? 'var(--idp-error)' : 'var(--idp-info)';
338
+ return html `
339
+ <div class="primary-grid">
340
+ ${data?.feed?.length ? html `
341
+ <div class="card">
342
+ <div class="card-head"><span class="card-title">Cardano feed</span><idp-badge variant="accent">live</idp-badge></div>
343
+ ${data.feed.map((itemArg) => html `
344
+ <div class="feed-item"><span class="feed-dot" style="--dot-color:${feedColor(itemArg.tone)}"></span><div class="feed-text">${itemArg.text}</div><span class="feed-meta">${itemArg.meta}</span></div>
345
+ `)}
346
+ </div>
347
+ ` : html ``}
348
+ ${data?.regions?.length ? html `
349
+ <div class="card">
350
+ <div class="card-head"><span class="card-title">Sign-ins by region</span><span class="feed-meta">last 24h</span></div>
351
+ <div class="region-list">
352
+ ${data.regions.map((regionArg) => html `
353
+ <div class="region-row">
354
+ <span class="region-code ${regionArg.kind || ''}">${regionArg.code}</span>
355
+ <div>
356
+ <div style="display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--idp-fg)">
357
+ ${regionArg.name}
358
+ ${regionArg.kind === 'risk' ? html `<idp-badge variant="error">flagged</idp-badge>` : html ``}
359
+ ${regionArg.kind === 'home' ? html `<idp-badge variant="accent">primary</idp-badge>` : html ``}
360
+ </div>
361
+ <div class="region-bar"><div class="region-bar-fill ${regionArg.kind === 'risk' ? 'risk' : ''}" style="width:${Math.round(Math.min(1, Math.max(0, regionArg.share)) * 100)}%"></div></div>
362
+ </div>
363
+ <span class="region-count">${regionArg.count.toLocaleString()}</span>
364
+ </div>
365
+ `)}
366
+ </div>
367
+ </div>
368
+ ` : html ``}
369
+ </div>
370
+ `;
371
+ }
372
+ render() {
373
+ const firstName = this.user?.name?.split(' ')[0] || 'there';
374
+ const activeSessionCount = this.sessions.filter((sessionArg) => sessionArg.isCurrent).length || this.sessions.length;
375
+ const activePassportCount = this.passportDevices.filter((deviceArg) => deviceArg.status === 'active').length;
376
+ const kpis = [
377
+ {
378
+ label: 'Organisations',
379
+ value: String(this.orgs.length),
380
+ delta: 'live',
381
+ deltaKind: 'live',
382
+ spark: [1, 1, 1, 1, 1, 1, 1, Math.max(this.orgs.length, 1)],
383
+ sparkColor: 'var(--idp-spark-info)',
384
+ accent: 'var(--idp-chart-1)',
385
+ sub: 'Memberships visible to this account',
386
+ },
387
+ {
388
+ label: 'Sessions',
389
+ value: String(this.sessions.length),
390
+ delta: `${activeSessionCount} active`,
391
+ deltaKind: 'up',
392
+ spark: [1, 2, 1, 2, 3, 2, Math.max(this.sessions.length, 1)],
393
+ sparkColor: 'var(--idp-spark-up)',
394
+ accent: 'var(--idp-chart-2)',
395
+ sub: this.sessions.length ? `Latest ${formatAdminTimeAgo(Math.max(...this.sessions.map((sessionArg) => sessionArg.lastActive)))}` : 'No active sessions loaded',
396
+ },
397
+ {
398
+ label: 'Passport devices',
399
+ value: String(this.passportDevices.length),
400
+ delta: `${activePassportCount} active`,
401
+ deltaKind: 'live',
402
+ spark: [1, 1, 1, Math.max(this.passportDevices.length, 1)],
403
+ sparkColor: 'var(--idp-spark-info)',
404
+ accent: 'var(--idp-chart-5)',
405
+ sub: 'Cryptographic credentials',
406
+ },
407
+ {
408
+ label: 'Activity',
409
+ value: String(this.activities.length),
410
+ delta: 'live',
411
+ deltaKind: 'live',
412
+ spark: [1, 2, 2, 3, Math.max(this.activities.length, 1)],
413
+ sparkColor: 'var(--idp-spark-info)',
414
+ accent: 'var(--idp-info)',
415
+ sub: 'Recent account events',
416
+ },
417
+ ];
418
+ return html `
419
+ <header class="page-head">
420
+ <div>
421
+ <div class="eyebrow-row"><span class="eyebrow">Account - Overview</span><span class="live-pill"><span class="live-dot"></span>live</span></div>
422
+ <h1>Good morning, ${firstName}.</h1>
423
+ <div class="lead">Account-wide operational snapshot using live identity data.</div>
424
+ </div>
425
+ <div class="page-actions"><button class="plain-button outline" @click=${() => this.navigate('sessions')}>Review sessions</button><button class="plain-button primary" @click=${() => this.navigate('security')}>Manage security</button></div>
426
+ </header>
427
+ <div class="body">
428
+ <div class="kpis">${kpis.map((kpiArg) => renderAdminKpi(kpiArg))}</div>
429
+ ${this.dataLoading || this.dataError ? this.renderDataState('No overview data', 'The console has not received live account data yet.', 'activity') : html ``}
430
+ ${this.renderInsights()}
431
+ <div class="primary-grid">
432
+ <div class="card">
433
+ <div class="card-head"><span class="card-title">Recent activity</span><idp-badge>${this.activities.length} events</idp-badge></div>
434
+ ${this.activities.length ? this.activities.slice(0, 8).map((activityArg) => html `
435
+ <div class="feed-item"><span class="feed-dot" style="--dot-color:var(--idp-info)"></span><div class="feed-text"><strong>${activityArg.action.replace(/_/g, ' ')}</strong> - ${activityArg.description}</div><span class="feed-meta">${formatAdminTimeAgo(activityArg.timestamp)}</span></div>
436
+ `) : renderAdminStateCard('No activity yet', 'Activity events will appear here after logins, app changes, and organisation updates.', 'activity')}
437
+ </div>
438
+ <div class="card">
439
+ <div class="card-head"><span class="card-title">Current sessions</span><idp-badge>${this.sessions.length} total</idp-badge></div>
440
+ ${this.sessions.length ? this.sessions.slice(0, 5).map((sessionArg) => html `
441
+ <div class="feed-item"><span class="feed-dot" style="--dot-color:${sessionArg.isCurrent ? 'var(--idp-ok)' : 'var(--idp-muted-fg)'}"></span><div class="feed-text"><strong>${sessionArg.deviceName || 'Unknown device'}</strong> - <span class="mono">${sessionArg.browser} ${sessionArg.os}</span></div><span class="feed-meta">${formatAdminTimeAgo(sessionArg.lastActive)}</span></div>
442
+ `) : renderAdminStateCard('No sessions loaded', 'Active session telemetry is unavailable or there are no sessions.', 'monitor')}
443
+ </div>
444
+ </div>
445
+ ${this.renderFooterRows()}
446
+ </div>
447
+ `;
448
+ }
449
+ constructor() {
450
+ super(...arguments);
451
+ __runInitializers(this, _overviewData_extraInitializers);
452
+ }
453
+ static {
454
+ __runInitializers(_classThis, _classExtraInitializers);
455
+ }
456
+ };
457
+ return IdpAdminOverview = _classThis;
458
+ })();
459
+ export { IdpAdminOverview };
460
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLWFkbWluLW92ZXJ2aWV3LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfd2ViL2VsZW1lbnRzL2lkcC1hZG1pbi1vdmVydmlldy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQXVCLE1BQU0sNkJBQTZCLENBQUM7QUFDbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQXFCLE1BQU0sdUJBQXVCLENBQUM7QUFDMUksT0FBTyxlQUFlLENBQUM7QUFDdkIsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLHlGQUF5RixDQUFDO0lBbUJwRixnQkFBZ0I7NEJBRDVCLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2dDQUFuQixTQUFRLFdBQVc7Ozs7Z0NBMko5QyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0NBTTFCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztvQ0FHekIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO3NDQUd6QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7MkNBR3pCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzt1Q0FHekIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztxQ0FHckUsUUFBUSxDQUFDLEVBQUUsSUFBSSxF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
@@ -0,0 +1,18 @@
1
+ import { type TemplateResult } from '@design.estate/dees-element';
2
+ import './idp-icon.js';
3
+ export type TIdpAdminKpi = {
4
+ label: string;
5
+ value: string;
6
+ unit?: string;
7
+ delta: string;
8
+ deltaKind: 'up' | 'live';
9
+ sub: string;
10
+ accent: string;
11
+ spark: number[];
12
+ sparkColor: string;
13
+ };
14
+ export declare const idpAdminSharedStyles: import("@design.estate/dees-element").CSSResult;
15
+ export declare const renderAdminSparkline: (dataArg: number[], colorArg: string) => TemplateResult;
16
+ export declare const renderAdminKpi: (kpiArg: TIdpAdminKpi) => TemplateResult;
17
+ export declare const renderAdminStateCard: (titleArg: string, descriptionArg: string, iconArg?: string) => TemplateResult;
18
+ export declare const formatAdminTimeAgo: (timestampArg?: number) => string;