@syndew/oluso-admin-ui 0.0.0-stage → 1.30.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.
- package/LICENSE +76 -0
- package/README.md +29 -2
- package/fesm2022/syndew-oluso-admin-ui-entitlements-page.component-BeZtIUnk.mjs +149 -0
- package/fesm2022/syndew-oluso-admin-ui-entitlements-page.component-BeZtIUnk.mjs.map +1 -0
- package/fesm2022/syndew-oluso-admin-ui-license-status-page.component-JQmj_qhz.mjs +205 -0
- package/fesm2022/syndew-oluso-admin-ui-license-status-page.component-JQmj_qhz.mjs.map +1 -0
- package/fesm2022/syndew-oluso-admin-ui-platform-clients-page.component-ab3WDRsI.mjs +80 -0
- package/fesm2022/syndew-oluso-admin-ui-platform-clients-page.component-ab3WDRsI.mjs.map +1 -0
- package/fesm2022/syndew-oluso-admin-ui-search-results-page.component-EH82yuW3.mjs +543 -0
- package/fesm2022/syndew-oluso-admin-ui-search-results-page.component-EH82yuW3.mjs.map +1 -0
- package/fesm2022/syndew-oluso-admin-ui-syndew-oluso-admin-ui-BVs_bAxm.mjs +22987 -0
- package/fesm2022/syndew-oluso-admin-ui-syndew-oluso-admin-ui-BVs_bAxm.mjs.map +1 -0
- package/fesm2022/syndew-oluso-admin-ui-team-detail-page.component-CjrQ89qU.mjs +566 -0
- package/fesm2022/syndew-oluso-admin-ui-team-detail-page.component-CjrQ89qU.mjs.map +1 -0
- package/fesm2022/syndew-oluso-admin-ui-unauthorized-page.component-CWYFN6mp.mjs +73 -0
- package/fesm2022/syndew-oluso-admin-ui-unauthorized-page.component-CWYFN6mp.mjs.map +1 -0
- package/fesm2022/syndew-oluso-admin-ui-webhook-detail-page.component-Bh5dZwt-.mjs +728 -0
- package/fesm2022/syndew-oluso-admin-ui-webhook-detail-page.component-Bh5dZwt-.mjs.map +1 -0
- package/fesm2022/syndew-oluso-admin-ui.mjs +3 -0
- package/fesm2022/syndew-oluso-admin-ui.mjs.map +1 -0
- package/help/en/admin.api-scopes.detail.md +43 -0
- package/help/en/admin.api-scopes.md +37 -0
- package/help/en/admin.audit-logs.md +44 -0
- package/help/en/admin.clients.create.md +60 -0
- package/help/en/admin.clients.detail.md +61 -0
- package/help/en/admin.clients.md +48 -0
- package/help/en/admin.dashboard.md +28 -0
- package/help/en/admin.experience.journeys.builder.md +115 -0
- package/help/en/admin.experience.journeys.md +54 -0
- package/help/en/admin.experience.plugins.md +83 -0
- package/help/en/admin.experience.submissions.md +71 -0
- package/help/en/admin.feedback.detail.md +36 -0
- package/help/en/admin.feedback.md +42 -0
- package/help/en/admin.grants.md +42 -0
- package/help/en/admin.identity-providers.detail.md +46 -0
- package/help/en/admin.identity-providers.md +39 -0
- package/help/en/admin.identity-resources.md +47 -0
- package/help/en/admin.module-seats.md +45 -0
- package/help/en/admin.organizations.detail.md +51 -0
- package/help/en/admin.organizations.md +38 -0
- package/help/en/admin.platform.clients.create.md +34 -0
- package/help/en/admin.platform.clients.detail.md +28 -0
- package/help/en/admin.platform.clients.md +38 -0
- package/help/en/admin.resources.detail.md +44 -0
- package/help/en/admin.resources.md +43 -0
- package/help/en/admin.roles.md +33 -0
- package/help/en/admin.settings.license.md +39 -0
- package/help/en/admin.settings.md +70 -0
- package/help/en/admin.signing-keys.md +47 -0
- package/help/en/admin.tenants.detail.md +58 -0
- package/help/en/admin.tenants.md +46 -0
- package/help/en/admin.users.detail.md +41 -0
- package/help/en/admin.users.md +56 -0
- package/help/en/admin.webhooks.detail.md +41 -0
- package/help/en/admin.webhooks.md +37 -0
- package/package.json +51 -3
- package/types/syndew-oluso-admin-ui.d.ts +5786 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, signal, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { Router } from '@angular/router';
|
|
5
|
+
import { CardComponent, ButtonComponent, BadgeComponent, IconComponent, ConfirmDialogComponent } from '@syndew/oluso-ui-core';
|
|
6
|
+
import { e as PlatformClientService } from './syndew-oluso-admin-ui-syndew-oluso-admin-ui-BVs_bAxm.mjs';
|
|
7
|
+
|
|
8
|
+
class PlatformClientsPageComponent {
|
|
9
|
+
router = inject(Router);
|
|
10
|
+
platformClientService = inject(PlatformClientService);
|
|
11
|
+
loading = signal(true, ...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
12
|
+
clients = signal([], ...(ngDevMode ? [{ debugName: "clients" }] : /* istanbul ignore next */ []));
|
|
13
|
+
// Delete confirmation
|
|
14
|
+
showDeleteConfirm = signal(false, ...(ngDevMode ? [{ debugName: "showDeleteConfirm" }] : /* istanbul ignore next */ []));
|
|
15
|
+
deletingClient = signal(null, ...(ngDevMode ? [{ debugName: "deletingClient" }] : /* istanbul ignore next */ []));
|
|
16
|
+
saving = signal(false, ...(ngDevMode ? [{ debugName: "saving" }] : /* istanbul ignore next */ []));
|
|
17
|
+
constructor() {
|
|
18
|
+
this.loadClients();
|
|
19
|
+
}
|
|
20
|
+
loadClients() {
|
|
21
|
+
this.loading.set(true);
|
|
22
|
+
this.platformClientService.getAll().subscribe({
|
|
23
|
+
next: (clients) => {
|
|
24
|
+
this.clients.set(clients);
|
|
25
|
+
this.loading.set(false);
|
|
26
|
+
},
|
|
27
|
+
error: (error) => {
|
|
28
|
+
console.error('Failed to load platform clients:', error);
|
|
29
|
+
this.loading.set(false);
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
navigateToCreate() {
|
|
34
|
+
this.router.navigate(['/platform/clients/new']);
|
|
35
|
+
}
|
|
36
|
+
navigateToEdit(client) {
|
|
37
|
+
this.router.navigate(['/platform/clients', client.id]);
|
|
38
|
+
}
|
|
39
|
+
confirmDelete(client) {
|
|
40
|
+
this.deletingClient.set(client);
|
|
41
|
+
this.showDeleteConfirm.set(true);
|
|
42
|
+
}
|
|
43
|
+
cancelDelete() {
|
|
44
|
+
this.showDeleteConfirm.set(false);
|
|
45
|
+
this.deletingClient.set(null);
|
|
46
|
+
}
|
|
47
|
+
deleteClient() {
|
|
48
|
+
const client = this.deletingClient();
|
|
49
|
+
if (!client)
|
|
50
|
+
return;
|
|
51
|
+
this.saving.set(true);
|
|
52
|
+
this.platformClientService.delete(client.id).subscribe({
|
|
53
|
+
next: () => {
|
|
54
|
+
this.showDeleteConfirm.set(false);
|
|
55
|
+
this.deletingClient.set(null);
|
|
56
|
+
this.saving.set(false);
|
|
57
|
+
this.loadClients();
|
|
58
|
+
},
|
|
59
|
+
error: (error) => {
|
|
60
|
+
console.error('Failed to delete client:', error);
|
|
61
|
+
this.saving.set(false);
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
formatDate(dateString) {
|
|
66
|
+
return new Date(dateString).toLocaleDateString();
|
|
67
|
+
}
|
|
68
|
+
formatGrantTypes(grantTypes) {
|
|
69
|
+
return grantTypes?.join(', ') || '-';
|
|
70
|
+
}
|
|
71
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: PlatformClientsPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
72
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: PlatformClientsPageComponent, isStandalone: true, selector: "admin-platform-clients-page", ngImport: i0, template: "<div class=\"space-y-6\">\n <!-- Page header -->\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-2xl font-bold text-gray-900\">Platform Clients</h1>\n <p class=\"mt-1 text-sm text-gray-500\">\n System-level OAuth clients available across all tenants\n </p>\n </div>\n <ui-button (clicked)=\"navigateToCreate()\">\n <ui-icon name=\"plus\" class=\"h-4 w-4 mr-2\" />\n Add Platform Client\n </ui-button>\n </div>\n\n <!-- Platform clients table -->\n <ui-card [padding]=\"false\">\n <div class=\"overflow-hidden\">\n <table class=\"min-w-full divide-y divide-gray-200\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Client ID\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Name\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Status\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Grant Types\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Created\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Actions\n </th>\n </tr>\n </thead>\n <tbody class=\"bg-white divide-y divide-gray-200\">\n @if (loading()) {\n <tr>\n <td colspan=\"6\" class=\"px-6 py-12 text-center\">\n <div class=\"flex justify-center\">\n <svg\n class=\"animate-spin h-8 w-8 text-primary-600\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n </div>\n </td>\n </tr>\n } @else if (clients().length === 0) {\n <tr>\n <td colspan=\"6\" class=\"px-6 py-12 text-center text-sm text-gray-500\">\n No platform clients configured yet\n </td>\n </tr>\n } @else {\n @for (client of clients(); track client.clientId) {\n <tr class=\"hover:bg-gray-50 cursor-pointer\" (click)=\"navigateToEdit(client)\">\n <td class=\"px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900\">\n {{ client.clientId }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-sm text-gray-500\">\n {{ client.clientName || '-' }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap\">\n <ui-badge [variant]=\"client.enabled ? 'success' : 'danger'\">\n {{ client.enabled ? 'Enabled' : 'Disabled' }}\n </ui-badge>\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-xs text-gray-500\">\n {{ formatGrantTypes(client.allowedGrantTypes) }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-sm text-gray-500\">\n {{ formatDate(client.created) }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-right text-sm font-medium space-x-2\" (click)=\"$event.stopPropagation()\">\n <ui-button variant=\"secondary\" size=\"sm\" (clicked)=\"navigateToEdit(client)\">\n Edit\n </ui-button>\n <ui-button variant=\"danger\" size=\"sm\" (clicked)=\"confirmDelete(client)\">\n Delete\n </ui-button>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n </ui-card>\n</div>\n\n<!-- Delete Confirmation -->\n<ui-confirm-dialog\n [open]=\"showDeleteConfirm()\"\n title=\"Delete Platform Client\"\n [message]=\"'Are you sure you want to delete the platform client \\'' + (deletingClient()?.clientId ?? '') + '\\'? This action cannot be undone.'\"\n confirmText=\"Delete\"\n confirmVariant=\"danger\"\n [loading]=\"saving()\"\n (confirmed)=\"deleteClient()\"\n (cancelled)=\"cancelDelete()\"\n/>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CardComponent, selector: "ui-card", inputs: ["title", "subtitle", "padding", "shadow"] }, { kind: "component", type: ButtonComponent, selector: "ui-button", inputs: ["variant", "size", "disabled", "loading", "type", "fullWidth"], outputs: ["clicked"] }, { kind: "component", type: BadgeComponent, selector: "ui-badge", inputs: ["variant", "size"] }, { kind: "component", type: IconComponent, selector: "ui-icon", inputs: ["name", "strokeWidth"] }, { kind: "component", type: ConfirmDialogComponent, selector: "ui-confirm-dialog", inputs: ["open", "title", "message", "confirmText", "cancelText", "variant", "loading", "closeOnBackdrop", "closeOnEscape"], outputs: ["confirmed", "cancelled"] }] });
|
|
73
|
+
}
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: PlatformClientsPageComponent, decorators: [{
|
|
75
|
+
type: Component,
|
|
76
|
+
args: [{ selector: 'admin-platform-clients-page', standalone: true, imports: [CommonModule, CardComponent, ButtonComponent, BadgeComponent, IconComponent, ConfirmDialogComponent], template: "<div class=\"space-y-6\">\n <!-- Page header -->\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-2xl font-bold text-gray-900\">Platform Clients</h1>\n <p class=\"mt-1 text-sm text-gray-500\">\n System-level OAuth clients available across all tenants\n </p>\n </div>\n <ui-button (clicked)=\"navigateToCreate()\">\n <ui-icon name=\"plus\" class=\"h-4 w-4 mr-2\" />\n Add Platform Client\n </ui-button>\n </div>\n\n <!-- Platform clients table -->\n <ui-card [padding]=\"false\">\n <div class=\"overflow-hidden\">\n <table class=\"min-w-full divide-y divide-gray-200\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Client ID\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Name\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Status\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Grant Types\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Created\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Actions\n </th>\n </tr>\n </thead>\n <tbody class=\"bg-white divide-y divide-gray-200\">\n @if (loading()) {\n <tr>\n <td colspan=\"6\" class=\"px-6 py-12 text-center\">\n <div class=\"flex justify-center\">\n <svg\n class=\"animate-spin h-8 w-8 text-primary-600\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n </div>\n </td>\n </tr>\n } @else if (clients().length === 0) {\n <tr>\n <td colspan=\"6\" class=\"px-6 py-12 text-center text-sm text-gray-500\">\n No platform clients configured yet\n </td>\n </tr>\n } @else {\n @for (client of clients(); track client.clientId) {\n <tr class=\"hover:bg-gray-50 cursor-pointer\" (click)=\"navigateToEdit(client)\">\n <td class=\"px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900\">\n {{ client.clientId }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-sm text-gray-500\">\n {{ client.clientName || '-' }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap\">\n <ui-badge [variant]=\"client.enabled ? 'success' : 'danger'\">\n {{ client.enabled ? 'Enabled' : 'Disabled' }}\n </ui-badge>\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-xs text-gray-500\">\n {{ formatGrantTypes(client.allowedGrantTypes) }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-sm text-gray-500\">\n {{ formatDate(client.created) }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-right text-sm font-medium space-x-2\" (click)=\"$event.stopPropagation()\">\n <ui-button variant=\"secondary\" size=\"sm\" (clicked)=\"navigateToEdit(client)\">\n Edit\n </ui-button>\n <ui-button variant=\"danger\" size=\"sm\" (clicked)=\"confirmDelete(client)\">\n Delete\n </ui-button>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n </ui-card>\n</div>\n\n<!-- Delete Confirmation -->\n<ui-confirm-dialog\n [open]=\"showDeleteConfirm()\"\n title=\"Delete Platform Client\"\n [message]=\"'Are you sure you want to delete the platform client \\'' + (deletingClient()?.clientId ?? '') + '\\'? This action cannot be undone.'\"\n confirmText=\"Delete\"\n confirmVariant=\"danger\"\n [loading]=\"saving()\"\n (confirmed)=\"deleteClient()\"\n (cancelled)=\"cancelDelete()\"\n/>\n" }]
|
|
77
|
+
}], ctorParameters: () => [] });
|
|
78
|
+
|
|
79
|
+
export { PlatformClientsPageComponent };
|
|
80
|
+
//# sourceMappingURL=syndew-oluso-admin-ui-platform-clients-page.component-ab3WDRsI.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syndew-oluso-admin-ui-platform-clients-page.component-ab3WDRsI.mjs","sources":["../../../../libs/admin-ui/src/lib/pages/platform-clients/platform-clients-page.component.ts","../../../../libs/admin-ui/src/lib/pages/platform-clients/platform-clients-page.component.html"],"sourcesContent":["import { Component, inject, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { CardComponent, ButtonComponent, BadgeComponent, IconComponent, ConfirmDialogComponent } from '@syndew/oluso-ui-core';\nimport { PlatformClientService } from '../../services/platform-client.service';\nimport { Client } from '../../models/client.model';\n\n@Component({\n selector: 'admin-platform-clients-page',\n standalone: true,\n imports: [CommonModule, CardComponent, ButtonComponent, BadgeComponent, IconComponent, ConfirmDialogComponent],\n templateUrl: './platform-clients-page.component.html',\n})\nexport class PlatformClientsPageComponent {\n private readonly router = inject(Router);\n private readonly platformClientService = inject(PlatformClientService);\n\n readonly loading = signal(true);\n readonly clients = signal<Client[]>([]);\n\n // Delete confirmation\n readonly showDeleteConfirm = signal(false);\n readonly deletingClient = signal<Client | null>(null);\n readonly saving = signal(false);\n\n constructor() {\n this.loadClients();\n }\n\n loadClients(): void {\n this.loading.set(true);\n this.platformClientService.getAll().subscribe({\n next: (clients) => {\n this.clients.set(clients);\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Failed to load platform clients:', error);\n this.loading.set(false);\n },\n });\n }\n\n navigateToCreate(): void {\n this.router.navigate(['/platform/clients/new']);\n }\n\n navigateToEdit(client: Client): void {\n this.router.navigate(['/platform/clients', client.id]);\n }\n\n confirmDelete(client: Client): void {\n this.deletingClient.set(client);\n this.showDeleteConfirm.set(true);\n }\n\n cancelDelete(): void {\n this.showDeleteConfirm.set(false);\n this.deletingClient.set(null);\n }\n\n deleteClient(): void {\n const client = this.deletingClient();\n if (!client) return;\n\n this.saving.set(true);\n this.platformClientService.delete(client.id).subscribe({\n next: () => {\n this.showDeleteConfirm.set(false);\n this.deletingClient.set(null);\n this.saving.set(false);\n this.loadClients();\n },\n error: (error) => {\n console.error('Failed to delete client:', error);\n this.saving.set(false);\n },\n });\n }\n\n formatDate(dateString: string): string {\n return new Date(dateString).toLocaleDateString();\n }\n\n formatGrantTypes(grantTypes: string[]): string {\n return grantTypes?.join(', ') || '-';\n }\n}\n","<div class=\"space-y-6\">\n <!-- Page header -->\n <div class=\"flex items-center justify-between\">\n <div>\n <h1 class=\"text-2xl font-bold text-gray-900\">Platform Clients</h1>\n <p class=\"mt-1 text-sm text-gray-500\">\n System-level OAuth clients available across all tenants\n </p>\n </div>\n <ui-button (clicked)=\"navigateToCreate()\">\n <ui-icon name=\"plus\" class=\"h-4 w-4 mr-2\" />\n Add Platform Client\n </ui-button>\n </div>\n\n <!-- Platform clients table -->\n <ui-card [padding]=\"false\">\n <div class=\"overflow-hidden\">\n <table class=\"min-w-full divide-y divide-gray-200\">\n <thead class=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Client ID\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Name\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Status\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Grant Types\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Created\n </th>\n <th scope=\"col\" class=\"px-6 py-3 text-right text-xs font-medium text-gray-500 uppercase tracking-wider\">\n Actions\n </th>\n </tr>\n </thead>\n <tbody class=\"bg-white divide-y divide-gray-200\">\n @if (loading()) {\n <tr>\n <td colspan=\"6\" class=\"px-6 py-12 text-center\">\n <div class=\"flex justify-center\">\n <svg\n class=\"animate-spin h-8 w-8 text-primary-600\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n </div>\n </td>\n </tr>\n } @else if (clients().length === 0) {\n <tr>\n <td colspan=\"6\" class=\"px-6 py-12 text-center text-sm text-gray-500\">\n No platform clients configured yet\n </td>\n </tr>\n } @else {\n @for (client of clients(); track client.clientId) {\n <tr class=\"hover:bg-gray-50 cursor-pointer\" (click)=\"navigateToEdit(client)\">\n <td class=\"px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900\">\n {{ client.clientId }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-sm text-gray-500\">\n {{ client.clientName || '-' }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap\">\n <ui-badge [variant]=\"client.enabled ? 'success' : 'danger'\">\n {{ client.enabled ? 'Enabled' : 'Disabled' }}\n </ui-badge>\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-xs text-gray-500\">\n {{ formatGrantTypes(client.allowedGrantTypes) }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-sm text-gray-500\">\n {{ formatDate(client.created) }}\n </td>\n <td class=\"px-6 py-4 whitespace-nowrap text-right text-sm font-medium space-x-2\" (click)=\"$event.stopPropagation()\">\n <ui-button variant=\"secondary\" size=\"sm\" (clicked)=\"navigateToEdit(client)\">\n Edit\n </ui-button>\n <ui-button variant=\"danger\" size=\"sm\" (clicked)=\"confirmDelete(client)\">\n Delete\n </ui-button>\n </td>\n </tr>\n }\n }\n </tbody>\n </table>\n </div>\n </ui-card>\n</div>\n\n<!-- Delete Confirmation -->\n<ui-confirm-dialog\n [open]=\"showDeleteConfirm()\"\n title=\"Delete Platform Client\"\n [message]=\"'Are you sure you want to delete the platform client \\'' + (deletingClient()?.clientId ?? '') + '\\'? This action cannot be undone.'\"\n confirmText=\"Delete\"\n confirmVariant=\"danger\"\n [loading]=\"saving()\"\n (confirmed)=\"deleteClient()\"\n (cancelled)=\"cancelDelete()\"\n/>\n"],"names":[],"mappings":"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"}
|