@idp.global/catalog 2.2.0 → 3.0.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.
@@ -0,0 +1,637 @@
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 './idp-badge.js';
38
+ import './idp-button.js';
39
+ import './idp-icon.js';
40
+ import './idp-input.js';
41
+ let IdpSsoConnectionForm = (() => {
42
+ let _classDecorators = [customElement('idp-sso-connection-form')];
43
+ let _classDescriptor;
44
+ let _classExtraInitializers = [];
45
+ let _classThis;
46
+ let _classSuper = DeesElement;
47
+ let _connections_decorators;
48
+ let _connections_initializers = [];
49
+ let _connections_extraInitializers = [];
50
+ let _spDetails_decorators;
51
+ let _spDetails_initializers = [];
52
+ let _spDetails_extraInitializers = [];
53
+ let _formOpen_decorators;
54
+ let _formOpen_initializers = [];
55
+ let _formOpen_extraInitializers = [];
56
+ let _manualIdp_decorators;
57
+ let _manualIdp_initializers = [];
58
+ let _manualIdp_extraInitializers = [];
59
+ let _formDisplayName_decorators;
60
+ let _formDisplayName_initializers = [];
61
+ let _formDisplayName_extraInitializers = [];
62
+ let _formEmailDomains_decorators;
63
+ let _formEmailDomains_initializers = [];
64
+ let _formEmailDomains_extraInitializers = [];
65
+ let _formMetadataXml_decorators;
66
+ let _formMetadataXml_initializers = [];
67
+ let _formMetadataXml_extraInitializers = [];
68
+ let _formEntityId_decorators;
69
+ let _formEntityId_initializers = [];
70
+ let _formEntityId_extraInitializers = [];
71
+ let _formSsoUrl_decorators;
72
+ let _formSsoUrl_initializers = [];
73
+ let _formSsoUrl_extraInitializers = [];
74
+ let _formCertificate_decorators;
75
+ let _formCertificate_initializers = [];
76
+ let _formCertificate_extraInitializers = [];
77
+ let _formProvisioningMode_decorators;
78
+ let _formProvisioningMode_initializers = [];
79
+ let _formProvisioningMode_extraInitializers = [];
80
+ let _formDefaultRoles_decorators;
81
+ let _formDefaultRoles_initializers = [];
82
+ let _formDefaultRoles_extraInitializers = [];
83
+ let _formGroupMappings_decorators;
84
+ let _formGroupMappings_initializers = [];
85
+ let _formGroupMappings_extraInitializers = [];
86
+ let _formError_decorators;
87
+ let _formError_initializers = [];
88
+ let _formError_extraInitializers = [];
89
+ var IdpSsoConnectionForm = class extends _classSuper {
90
+ static { _classThis = this; }
91
+ static {
92
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
93
+ _connections_decorators = [property({ type: Array })];
94
+ _spDetails_decorators = [property({ type: Object })];
95
+ _formOpen_decorators = [state()];
96
+ _manualIdp_decorators = [state()];
97
+ _formDisplayName_decorators = [state()];
98
+ _formEmailDomains_decorators = [state()];
99
+ _formMetadataXml_decorators = [state()];
100
+ _formEntityId_decorators = [state()];
101
+ _formSsoUrl_decorators = [state()];
102
+ _formCertificate_decorators = [state()];
103
+ _formProvisioningMode_decorators = [state()];
104
+ _formDefaultRoles_decorators = [state()];
105
+ _formGroupMappings_decorators = [state()];
106
+ _formError_decorators = [state()];
107
+ __esDecorate(this, null, _connections_decorators, { kind: "accessor", name: "connections", static: false, private: false, access: { has: obj => "connections" in obj, get: obj => obj.connections, set: (obj, value) => { obj.connections = value; } }, metadata: _metadata }, _connections_initializers, _connections_extraInitializers);
108
+ __esDecorate(this, null, _spDetails_decorators, { kind: "accessor", name: "spDetails", static: false, private: false, access: { has: obj => "spDetails" in obj, get: obj => obj.spDetails, set: (obj, value) => { obj.spDetails = value; } }, metadata: _metadata }, _spDetails_initializers, _spDetails_extraInitializers);
109
+ __esDecorate(this, null, _formOpen_decorators, { kind: "accessor", name: "formOpen", static: false, private: false, access: { has: obj => "formOpen" in obj, get: obj => obj.formOpen, set: (obj, value) => { obj.formOpen = value; } }, metadata: _metadata }, _formOpen_initializers, _formOpen_extraInitializers);
110
+ __esDecorate(this, null, _manualIdp_decorators, { kind: "accessor", name: "manualIdp", static: false, private: false, access: { has: obj => "manualIdp" in obj, get: obj => obj.manualIdp, set: (obj, value) => { obj.manualIdp = value; } }, metadata: _metadata }, _manualIdp_initializers, _manualIdp_extraInitializers);
111
+ __esDecorate(this, null, _formDisplayName_decorators, { kind: "accessor", name: "formDisplayName", static: false, private: false, access: { has: obj => "formDisplayName" in obj, get: obj => obj.formDisplayName, set: (obj, value) => { obj.formDisplayName = value; } }, metadata: _metadata }, _formDisplayName_initializers, _formDisplayName_extraInitializers);
112
+ __esDecorate(this, null, _formEmailDomains_decorators, { kind: "accessor", name: "formEmailDomains", static: false, private: false, access: { has: obj => "formEmailDomains" in obj, get: obj => obj.formEmailDomains, set: (obj, value) => { obj.formEmailDomains = value; } }, metadata: _metadata }, _formEmailDomains_initializers, _formEmailDomains_extraInitializers);
113
+ __esDecorate(this, null, _formMetadataXml_decorators, { kind: "accessor", name: "formMetadataXml", static: false, private: false, access: { has: obj => "formMetadataXml" in obj, get: obj => obj.formMetadataXml, set: (obj, value) => { obj.formMetadataXml = value; } }, metadata: _metadata }, _formMetadataXml_initializers, _formMetadataXml_extraInitializers);
114
+ __esDecorate(this, null, _formEntityId_decorators, { kind: "accessor", name: "formEntityId", static: false, private: false, access: { has: obj => "formEntityId" in obj, get: obj => obj.formEntityId, set: (obj, value) => { obj.formEntityId = value; } }, metadata: _metadata }, _formEntityId_initializers, _formEntityId_extraInitializers);
115
+ __esDecorate(this, null, _formSsoUrl_decorators, { kind: "accessor", name: "formSsoUrl", static: false, private: false, access: { has: obj => "formSsoUrl" in obj, get: obj => obj.formSsoUrl, set: (obj, value) => { obj.formSsoUrl = value; } }, metadata: _metadata }, _formSsoUrl_initializers, _formSsoUrl_extraInitializers);
116
+ __esDecorate(this, null, _formCertificate_decorators, { kind: "accessor", name: "formCertificate", static: false, private: false, access: { has: obj => "formCertificate" in obj, get: obj => obj.formCertificate, set: (obj, value) => { obj.formCertificate = value; } }, metadata: _metadata }, _formCertificate_initializers, _formCertificate_extraInitializers);
117
+ __esDecorate(this, null, _formProvisioningMode_decorators, { kind: "accessor", name: "formProvisioningMode", static: false, private: false, access: { has: obj => "formProvisioningMode" in obj, get: obj => obj.formProvisioningMode, set: (obj, value) => { obj.formProvisioningMode = value; } }, metadata: _metadata }, _formProvisioningMode_initializers, _formProvisioningMode_extraInitializers);
118
+ __esDecorate(this, null, _formDefaultRoles_decorators, { kind: "accessor", name: "formDefaultRoles", static: false, private: false, access: { has: obj => "formDefaultRoles" in obj, get: obj => obj.formDefaultRoles, set: (obj, value) => { obj.formDefaultRoles = value; } }, metadata: _metadata }, _formDefaultRoles_initializers, _formDefaultRoles_extraInitializers);
119
+ __esDecorate(this, null, _formGroupMappings_decorators, { kind: "accessor", name: "formGroupMappings", static: false, private: false, access: { has: obj => "formGroupMappings" in obj, get: obj => obj.formGroupMappings, set: (obj, value) => { obj.formGroupMappings = value; } }, metadata: _metadata }, _formGroupMappings_initializers, _formGroupMappings_extraInitializers);
120
+ __esDecorate(this, null, _formError_decorators, { kind: "accessor", name: "formError", static: false, private: false, access: { has: obj => "formError" in obj, get: obj => obj.formError, set: (obj, value) => { obj.formError = value; } }, metadata: _metadata }, _formError_initializers, _formError_extraInitializers);
121
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
122
+ IdpSsoConnectionForm = _classThis = _classDescriptor.value;
123
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
124
+ }
125
+ static demo = () => html `
126
+ <div style="max-width: 720px; display: flex; flex-direction: column; gap: 16px;">
127
+ <idp-sso-connection-form
128
+ .spDetails=${{
129
+ spEntityId: 'https://idp.global/saml/sp/metadata/conn-1',
130
+ acsUrl: 'https://idp.global/saml/acs/conn-1',
131
+ metadataUrl: 'https://idp.global/saml/sp/metadata/conn-1',
132
+ scimBaseUrl: 'https://idp.global/scim/v2',
133
+ }}
134
+ .connections=${[
135
+ {
136
+ id: 'conn-1',
137
+ displayName: 'Okta (acme.com)',
138
+ status: 'active',
139
+ emailDomains: ['acme.com', 'acme.io'],
140
+ entityId: 'http://www.okta.com/exk9examples',
141
+ ssoUrl: 'https://acme.okta.com/app/xyz/sso/saml',
142
+ certificateCount: 1,
143
+ provisioningMode: 'jit-and-scim',
144
+ defaultOrgRoles: ['member'],
145
+ groupMappings: [{ idpGroup: 'Engineering', orgRoles: ['developer'] }],
146
+ },
147
+ ]}
148
+ ></idp-sso-connection-form>
149
+ </div>
150
+ `;
151
+ static demoGroups = ['idp.global v5 admin console'];
152
+ #connections_accessor_storage = __runInitializers(this, _connections_initializers, []);
153
+ get connections() { return this.#connections_accessor_storage; }
154
+ set connections(value) { this.#connections_accessor_storage = value; }
155
+ #spDetails_accessor_storage = (__runInitializers(this, _connections_extraInitializers), __runInitializers(this, _spDetails_initializers, null));
156
+ get spDetails() { return this.#spDetails_accessor_storage; }
157
+ set spDetails(value) { this.#spDetails_accessor_storage = value; }
158
+ #formOpen_accessor_storage = (__runInitializers(this, _spDetails_extraInitializers), __runInitializers(this, _formOpen_initializers, false));
159
+ get formOpen() { return this.#formOpen_accessor_storage; }
160
+ set formOpen(value) { this.#formOpen_accessor_storage = value; }
161
+ #manualIdp_accessor_storage = (__runInitializers(this, _formOpen_extraInitializers), __runInitializers(this, _manualIdp_initializers, false));
162
+ get manualIdp() { return this.#manualIdp_accessor_storage; }
163
+ set manualIdp(value) { this.#manualIdp_accessor_storage = value; }
164
+ #formDisplayName_accessor_storage = (__runInitializers(this, _manualIdp_extraInitializers), __runInitializers(this, _formDisplayName_initializers, ''));
165
+ get formDisplayName() { return this.#formDisplayName_accessor_storage; }
166
+ set formDisplayName(value) { this.#formDisplayName_accessor_storage = value; }
167
+ #formEmailDomains_accessor_storage = (__runInitializers(this, _formDisplayName_extraInitializers), __runInitializers(this, _formEmailDomains_initializers, ''));
168
+ get formEmailDomains() { return this.#formEmailDomains_accessor_storage; }
169
+ set formEmailDomains(value) { this.#formEmailDomains_accessor_storage = value; }
170
+ #formMetadataXml_accessor_storage = (__runInitializers(this, _formEmailDomains_extraInitializers), __runInitializers(this, _formMetadataXml_initializers, ''));
171
+ get formMetadataXml() { return this.#formMetadataXml_accessor_storage; }
172
+ set formMetadataXml(value) { this.#formMetadataXml_accessor_storage = value; }
173
+ #formEntityId_accessor_storage = (__runInitializers(this, _formMetadataXml_extraInitializers), __runInitializers(this, _formEntityId_initializers, ''));
174
+ get formEntityId() { return this.#formEntityId_accessor_storage; }
175
+ set formEntityId(value) { this.#formEntityId_accessor_storage = value; }
176
+ #formSsoUrl_accessor_storage = (__runInitializers(this, _formEntityId_extraInitializers), __runInitializers(this, _formSsoUrl_initializers, ''));
177
+ get formSsoUrl() { return this.#formSsoUrl_accessor_storage; }
178
+ set formSsoUrl(value) { this.#formSsoUrl_accessor_storage = value; }
179
+ #formCertificate_accessor_storage = (__runInitializers(this, _formSsoUrl_extraInitializers), __runInitializers(this, _formCertificate_initializers, ''));
180
+ get formCertificate() { return this.#formCertificate_accessor_storage; }
181
+ set formCertificate(value) { this.#formCertificate_accessor_storage = value; }
182
+ #formProvisioningMode_accessor_storage = (__runInitializers(this, _formCertificate_extraInitializers), __runInitializers(this, _formProvisioningMode_initializers, 'jit'));
183
+ get formProvisioningMode() { return this.#formProvisioningMode_accessor_storage; }
184
+ set formProvisioningMode(value) { this.#formProvisioningMode_accessor_storage = value; }
185
+ #formDefaultRoles_accessor_storage = (__runInitializers(this, _formProvisioningMode_extraInitializers), __runInitializers(this, _formDefaultRoles_initializers, 'member'));
186
+ get formDefaultRoles() { return this.#formDefaultRoles_accessor_storage; }
187
+ set formDefaultRoles(value) { this.#formDefaultRoles_accessor_storage = value; }
188
+ #formGroupMappings_accessor_storage = (__runInitializers(this, _formDefaultRoles_extraInitializers), __runInitializers(this, _formGroupMappings_initializers, ''));
189
+ get formGroupMappings() { return this.#formGroupMappings_accessor_storage; }
190
+ set formGroupMappings(value) { this.#formGroupMappings_accessor_storage = value; }
191
+ #formError_accessor_storage = (__runInitializers(this, _formGroupMappings_extraInitializers), __runInitializers(this, _formError_initializers, ''));
192
+ get formError() { return this.#formError_accessor_storage; }
193
+ set formError(value) { this.#formError_accessor_storage = value; }
194
+ static styles = [
195
+ ...idpElementStyles,
196
+ css `
197
+ :host {
198
+ display: block;
199
+ font-family: var(--idp-font);
200
+ color: var(--idp-fg);
201
+ }
202
+ .section {
203
+ background: var(--idp-card);
204
+ border: 1px solid var(--idp-border);
205
+ border-radius: var(--idp-radius);
206
+ padding: 20px;
207
+ }
208
+ .headline {
209
+ display: flex;
210
+ align-items: flex-start;
211
+ justify-content: space-between;
212
+ gap: 16px;
213
+ }
214
+ .title {
215
+ font-size: 14px;
216
+ font-weight: 600;
217
+ }
218
+ .muted {
219
+ font-size: 12.5px;
220
+ color: var(--idp-muted-fg);
221
+ line-height: 1.5;
222
+ margin-top: 3px;
223
+ }
224
+ .sp-grid {
225
+ display: grid;
226
+ grid-template-columns: minmax(90px, auto) 1fr;
227
+ gap: 6px 14px;
228
+ margin-top: 14px;
229
+ padding: 12px;
230
+ background: var(--idp-muted);
231
+ border: 1px solid var(--idp-border);
232
+ border-radius: 10px;
233
+ font-size: 12px;
234
+ }
235
+ .sp-key {
236
+ color: var(--idp-muted-fg);
237
+ white-space: nowrap;
238
+ }
239
+ .sp-value {
240
+ font-family: var(--idp-mono, ui-monospace, monospace);
241
+ overflow-wrap: anywhere;
242
+ }
243
+ .row {
244
+ padding: 14px 0;
245
+ border-bottom: 1px solid var(--idp-border);
246
+ }
247
+ .row:last-of-type {
248
+ border-bottom: none;
249
+ }
250
+ .row-head {
251
+ display: flex;
252
+ align-items: center;
253
+ gap: 10px;
254
+ }
255
+ .row-name {
256
+ font-size: 13px;
257
+ font-weight: 500;
258
+ flex: 1;
259
+ display: flex;
260
+ align-items: center;
261
+ gap: 8px;
262
+ min-width: 0;
263
+ }
264
+ .row-meta {
265
+ font-size: 11px;
266
+ color: var(--idp-muted-fg);
267
+ margin-top: 4px;
268
+ overflow-wrap: anywhere;
269
+ }
270
+ .chip-row {
271
+ display: flex;
272
+ flex-wrap: wrap;
273
+ gap: 6px;
274
+ margin-top: 8px;
275
+ }
276
+ .row-actions {
277
+ display: flex;
278
+ gap: 6px;
279
+ flex: 0 0 auto;
280
+ }
281
+ .table-action {
282
+ background: none;
283
+ border: 1px solid var(--idp-border);
284
+ border-radius: 7px;
285
+ cursor: pointer;
286
+ font-family: inherit;
287
+ font-size: 11px;
288
+ font-weight: 500;
289
+ padding: 4px 10px;
290
+ color: var(--idp-fg);
291
+ }
292
+ .table-action:hover {
293
+ background: var(--idp-muted);
294
+ }
295
+ .table-action.destructive {
296
+ color: var(--idp-destructive);
297
+ border-color: transparent;
298
+ }
299
+ .table-action.destructive:hover {
300
+ background: var(--idp-error-bg);
301
+ }
302
+ .empty {
303
+ padding: 18px 0;
304
+ font-size: 12.5px;
305
+ color: var(--idp-muted-fg);
306
+ }
307
+ .form {
308
+ margin-top: 16px;
309
+ padding-top: 16px;
310
+ border-top: 1px solid var(--idp-border);
311
+ display: flex;
312
+ flex-direction: column;
313
+ gap: 12px;
314
+ }
315
+ .form-grid {
316
+ display: grid;
317
+ grid-template-columns: 1fr 1fr;
318
+ gap: 12px;
319
+ }
320
+ @media (max-width: 720px) {
321
+ .form-grid {
322
+ grid-template-columns: 1fr;
323
+ }
324
+ }
325
+ label.field {
326
+ display: flex;
327
+ flex-direction: column;
328
+ gap: 5px;
329
+ font-size: 12px;
330
+ font-weight: 500;
331
+ }
332
+ textarea,
333
+ select {
334
+ font-family: inherit;
335
+ font-size: 12.5px;
336
+ color: var(--idp-fg);
337
+ background: var(--idp-card);
338
+ border: 1px solid var(--idp-border);
339
+ border-radius: 8px;
340
+ padding: 8px 10px;
341
+ }
342
+ textarea {
343
+ font-family: var(--idp-mono, ui-monospace, monospace);
344
+ min-height: 96px;
345
+ resize: vertical;
346
+ }
347
+ textarea:focus-visible,
348
+ select:focus-visible {
349
+ outline: 2px solid color-mix(in srgb, var(--idp-accent), transparent 68%);
350
+ outline-offset: 1px;
351
+ }
352
+ .hint {
353
+ font-size: 11px;
354
+ font-weight: 400;
355
+ color: var(--idp-muted-fg);
356
+ }
357
+ .toggle-link {
358
+ background: none;
359
+ border: none;
360
+ padding: 0;
361
+ cursor: pointer;
362
+ font-family: inherit;
363
+ font-size: 11.5px;
364
+ color: var(--idp-accent);
365
+ text-align: left;
366
+ }
367
+ .error {
368
+ font-size: 12px;
369
+ color: var(--idp-destructive);
370
+ }
371
+ .form-actions {
372
+ display: flex;
373
+ gap: 8px;
374
+ justify-content: flex-end;
375
+ }
376
+ `,
377
+ ];
378
+ parseGroupMappings(rawArg) {
379
+ return rawArg
380
+ .split('\n')
381
+ .map((lineArg) => lineArg.trim())
382
+ .filter(Boolean)
383
+ .map((lineArg) => {
384
+ const [groupPart, rolesPart] = lineArg.split('=');
385
+ return {
386
+ idpGroup: (groupPart || '').trim(),
387
+ orgRoles: (rolesPart || '')
388
+ .split(',')
389
+ .map((roleArg) => roleArg.trim())
390
+ .filter(Boolean),
391
+ };
392
+ })
393
+ .filter((mappingArg) => mappingArg.idpGroup && mappingArg.orgRoles.length > 0);
394
+ }
395
+ parseList(rawArg) {
396
+ return rawArg
397
+ .split(',')
398
+ .map((entryArg) => entryArg.trim())
399
+ .filter(Boolean);
400
+ }
401
+ submitCreate() {
402
+ this.formError = '';
403
+ const displayName = this.formDisplayName.trim();
404
+ const emailDomains = this.parseList(this.formEmailDomains).map((domainArg) => domainArg.toLowerCase());
405
+ if (!displayName || emailDomains.length === 0) {
406
+ this.formError = 'Display name and at least one email domain are required.';
407
+ return;
408
+ }
409
+ const detail = {
410
+ displayName,
411
+ emailDomains,
412
+ provisioningMode: this.formProvisioningMode,
413
+ defaultOrgRoles: this.parseList(this.formDefaultRoles),
414
+ groupMappings: this.parseGroupMappings(this.formGroupMappings),
415
+ };
416
+ if (this.manualIdp) {
417
+ const entityId = this.formEntityId.trim();
418
+ const ssoUrl = this.formSsoUrl.trim();
419
+ const certificate = this.formCertificate.trim();
420
+ if (!entityId || !ssoUrl || !certificate) {
421
+ this.formError = 'Entity ID, SSO URL and a signing certificate are required for manual setup.';
422
+ return;
423
+ }
424
+ detail.idp = { entityId, ssoUrl, signingCertificates: [certificate] };
425
+ }
426
+ else {
427
+ const metadataXml = this.formMetadataXml.trim();
428
+ if (!metadataXml) {
429
+ this.formError = 'Paste the IdP metadata XML or switch to manual setup.';
430
+ return;
431
+ }
432
+ detail.metadataXml = metadataXml;
433
+ }
434
+ this.dispatchEvent(new CustomEvent('idp-sso-create', {
435
+ detail,
436
+ bubbles: true,
437
+ composed: true,
438
+ }));
439
+ this.resetForm();
440
+ }
441
+ resetForm() {
442
+ this.formOpen = false;
443
+ this.manualIdp = false;
444
+ this.formDisplayName = '';
445
+ this.formEmailDomains = '';
446
+ this.formMetadataXml = '';
447
+ this.formEntityId = '';
448
+ this.formSsoUrl = '';
449
+ this.formCertificate = '';
450
+ this.formProvisioningMode = 'jit';
451
+ this.formDefaultRoles = 'member';
452
+ this.formGroupMappings = '';
453
+ this.formError = '';
454
+ }
455
+ readInput(eventArg) {
456
+ const target = eventArg.composedPath()[0];
457
+ return target?.value ?? '';
458
+ }
459
+ renderConnectionRow(connectionArg) {
460
+ return html `
461
+ <div class="row">
462
+ <div class="row-head">
463
+ <div class="row-name">
464
+ ${connectionArg.displayName}
465
+ <idp-badge variant=${connectionArg.status === 'active' ? 'ok' : 'outline'}>${connectionArg.status}</idp-badge>
466
+ <idp-badge variant="outline">${connectionArg.provisioningMode}</idp-badge>
467
+ </div>
468
+ <div class="row-actions">
469
+ <button
470
+ class="table-action"
471
+ @click=${() => this.dispatchEvent(new CustomEvent('idp-sso-status', {
472
+ detail: {
473
+ connectionId: connectionArg.id,
474
+ status: connectionArg.status === 'active' ? 'disabled' : 'active',
475
+ },
476
+ bubbles: true,
477
+ composed: true,
478
+ }))}
479
+ >
480
+ ${connectionArg.status === 'active' ? 'Disable' : 'Enable'}
481
+ </button>
482
+ <button
483
+ class="table-action destructive"
484
+ @click=${() => this.dispatchEvent(new CustomEvent('idp-sso-delete', {
485
+ detail: { connectionId: connectionArg.id },
486
+ bubbles: true,
487
+ composed: true,
488
+ }))}
489
+ >
490
+ Delete
491
+ </button>
492
+ </div>
493
+ </div>
494
+ <div class="row-meta">${connectionArg.entityId} · ${connectionArg.ssoUrl} · ${connectionArg.certificateCount} cert${connectionArg.certificateCount === 1 ? '' : 's'}</div>
495
+ <div class="chip-row">
496
+ ${connectionArg.emailDomains.map((domainArg) => html `<idp-badge variant="accent">@${domainArg}</idp-badge>`)}
497
+ ${connectionArg.groupMappings.map((mappingArg) => html `<idp-badge variant="outline">${mappingArg.idpGroup} → ${mappingArg.orgRoles.join(', ')}</idp-badge>`)}
498
+ </div>
499
+ </div>
500
+ `;
501
+ }
502
+ renderForm() {
503
+ return html `
504
+ <div class="form">
505
+ <div class="form-grid">
506
+ <idp-input
507
+ label="Display name"
508
+ placeholder="e.g. Okta (acme.com)"
509
+ .value=${this.formDisplayName}
510
+ @input=${(eventArg) => (this.formDisplayName = this.readInput(eventArg))}
511
+ ></idp-input>
512
+ <idp-input
513
+ label="Email domains (comma-separated)"
514
+ placeholder="acme.com, acme.io"
515
+ .value=${this.formEmailDomains}
516
+ @input=${(eventArg) => (this.formEmailDomains = this.readInput(eventArg))}
517
+ ></idp-input>
518
+ </div>
519
+ ${this.manualIdp
520
+ ? html `
521
+ <div class="form-grid">
522
+ <idp-input
523
+ label="IdP entity ID"
524
+ placeholder="http://www.okta.com/exk..."
525
+ .value=${this.formEntityId}
526
+ @input=${(eventArg) => (this.formEntityId = this.readInput(eventArg))}
527
+ ></idp-input>
528
+ <idp-input
529
+ label="IdP SSO URL"
530
+ placeholder="https://acme.okta.com/app/.../sso/saml"
531
+ .value=${this.formSsoUrl}
532
+ @input=${(eventArg) => (this.formSsoUrl = this.readInput(eventArg))}
533
+ ></idp-input>
534
+ </div>
535
+ <label class="field">
536
+ IdP signing certificate (PEM)
537
+ <textarea
538
+ placeholder="-----BEGIN CERTIFICATE-----"
539
+ .value=${this.formCertificate}
540
+ @input=${(eventArg) => (this.formCertificate = this.readInput(eventArg))}
541
+ ></textarea>
542
+ </label>
543
+ `
544
+ : html `
545
+ <label class="field">
546
+ IdP metadata XML
547
+ <span class="hint">Download it from your IdP (Okta: Sign On → SAML metadata; Entra: Federation metadata XML)</span>
548
+ <textarea
549
+ placeholder="<EntityDescriptor ...>"
550
+ .value=${this.formMetadataXml}
551
+ @input=${(eventArg) => (this.formMetadataXml = this.readInput(eventArg))}
552
+ ></textarea>
553
+ </label>
554
+ `}
555
+ <button class="toggle-link" @click=${() => (this.manualIdp = !this.manualIdp)}>
556
+ ${this.manualIdp ? 'Use metadata XML instead' : 'Enter entity ID, SSO URL and certificate manually'}
557
+ </button>
558
+ <div class="form-grid">
559
+ <label class="field">
560
+ Provisioning
561
+ <select
562
+ .value=${this.formProvisioningMode}
563
+ @change=${(eventArg) => (this.formProvisioningMode = this.readInput(eventArg))}
564
+ >
565
+ <option value="jit">Just-in-time (create accounts on first login)</option>
566
+ <option value="scim-only">SCIM only (require provisioning before login)</option>
567
+ <option value="jit-and-scim">JIT + SCIM</option>
568
+ </select>
569
+ </label>
570
+ <idp-input
571
+ label="Default org roles (comma-separated)"
572
+ placeholder="member"
573
+ .value=${this.formDefaultRoles}
574
+ @input=${(eventArg) => (this.formDefaultRoles = this.readInput(eventArg))}
575
+ ></idp-input>
576
+ </div>
577
+ <label class="field">
578
+ Group → role mappings
579
+ <span class="hint">One per line: IdP group = role1, role2</span>
580
+ <textarea
581
+ style="min-height: 64px"
582
+ placeholder="Engineering = developer"
583
+ .value=${this.formGroupMappings}
584
+ @input=${(eventArg) => (this.formGroupMappings = this.readInput(eventArg))}
585
+ ></textarea>
586
+ </label>
587
+ ${this.formError ? html `<div class="error">${this.formError}</div>` : html ``}
588
+ <div class="form-actions">
589
+ <idp-button variant="ghost" size="sm" @click=${() => this.resetForm()}>Cancel</idp-button>
590
+ <idp-button variant="accent" size="sm" @click=${() => this.submitCreate()}>Create connection</idp-button>
591
+ </div>
592
+ </div>
593
+ `;
594
+ }
595
+ render() {
596
+ return html `
597
+ <div class="section">
598
+ <div class="headline">
599
+ <div>
600
+ <div class="title">SAML single sign-on</div>
601
+ <div class="muted">
602
+ Let members sign in through your organisation's identity provider. Users entering a
603
+ matching email domain are routed to your IdP automatically.
604
+ </div>
605
+ </div>
606
+ ${!this.formOpen
607
+ ? html `<idp-button variant="accent" size="sm" @click=${() => (this.formOpen = true)}>Add connection</idp-button>`
608
+ : html ``}
609
+ </div>
610
+ ${this.spDetails
611
+ ? html `
612
+ <div class="sp-grid">
613
+ <span class="sp-key">SP entity ID</span><span class="sp-value">${this.spDetails.spEntityId}</span>
614
+ <span class="sp-key">ACS URL</span><span class="sp-value">${this.spDetails.acsUrl}</span>
615
+ <span class="sp-key">SP metadata</span><span class="sp-value">${this.spDetails.metadataUrl}</span>
616
+ </div>
617
+ `
618
+ : html ``}
619
+ ${this.connections.length
620
+ ? this.connections.map((connectionArg) => this.renderConnectionRow(connectionArg))
621
+ : html `<div class="empty">No SSO connections yet.</div>`}
622
+ ${this.formOpen ? this.renderForm() : html ``}
623
+ </div>
624
+ `;
625
+ }
626
+ constructor() {
627
+ super(...arguments);
628
+ __runInitializers(this, _formError_extraInitializers);
629
+ }
630
+ static {
631
+ __runInitializers(_classThis, _classExtraInitializers);
632
+ }
633
+ };
634
+ return IdpSsoConnectionForm = _classThis;
635
+ })();
636
+ export { IdpSsoConnectionForm };
637
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLXNzby1jb25uZWN0aW9uLWZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvaWRwLXNzby1jb25uZWN0aW9uLWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUMxSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sZ0JBQWdCLENBQUM7SUFnRFgsb0JBQW9COzRCQURoQyxhQUFhLENBQUMseUJBQXlCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQ0FBbkIsU0FBUSxXQUFXOzs7O3VDQTZCbEQsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO3FDQUd6QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7b0NBRzFCLEtBQUssRUFBRTtxQ0FHUCxLQUFLLEVBQUU7MkNBR1AsS0FBSyxFQUFFOzRDQUdQLEtBQUssRUFBRTsyQ0FHUCxLQUFLLEVBQUU7d0NBR1AsS0FBSyxFQUFFO3NDQUdQLEtBQUssRUFBRTsyQ0FHUCxLQUFLLEVBQUU7Z0RBR1AsS0FBSyxFQUFFOzRDQUdQLEtBQUssRUFBRTs2Q0FHUCxLQUFLLEVBQUU7cUNBR1AsS0FBSyxFQUFFO1lBdENSLHNMQUFnQixXQUFXLDZCQUFYLFdBQVcsaUdBQStCO1lBRzFELGdMQUFnQixTQUFTLDZCQUFULFNBQVMsNkZBQWlDO1lBRzFELDZLQUFp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
@@ -34,3 +34,5 @@ export * from './idp-admin-shell.js';
34
34
  export * from './idp-landing-hero.js';
35
35
  export * from './idp-landing-page.js';
36
36
  export * from './idp-mobile-showcase.js';
37
+ export * from './idp-sso-connection-form.js';
38
+ export * from './idp-scim-token-panel.js';