@rolatech/angular-platform 20.3.0-beta.2

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 (51) hide show
  1. package/README.md +3 -0
  2. package/fesm2022/rolatech-angular-platform-application-create-DqPMquaO.mjs +129 -0
  3. package/fesm2022/rolatech-angular-platform-application-create-DqPMquaO.mjs.map +1 -0
  4. package/fesm2022/rolatech-angular-platform-application-detail-BoITs_yE.mjs +54 -0
  5. package/fesm2022/rolatech-angular-platform-application-detail-BoITs_yE.mjs.map +1 -0
  6. package/fesm2022/rolatech-angular-platform-application-index-BlCbJVDc.mjs +82 -0
  7. package/fesm2022/rolatech-angular-platform-application-index-BlCbJVDc.mjs.map +1 -0
  8. package/fesm2022/rolatech-angular-platform-application-organization-index-D7TJ8CID.mjs +54 -0
  9. package/fesm2022/rolatech-angular-platform-application-organization-index-D7TJ8CID.mjs.map +1 -0
  10. package/fesm2022/rolatech-angular-platform-application-role-index-9_XVRBgD.mjs +66 -0
  11. package/fesm2022/rolatech-angular-platform-application-role-index-9_XVRBgD.mjs.map +1 -0
  12. package/fesm2022/rolatech-angular-platform-application-routes-DE5CJMgn.mjs +38 -0
  13. package/fesm2022/rolatech-angular-platform-application-routes-DE5CJMgn.mjs.map +1 -0
  14. package/fesm2022/rolatech-angular-platform-platform-auth-client-detail-BMvM7PvP.mjs +137 -0
  15. package/fesm2022/rolatech-angular-platform-platform-auth-client-detail-BMvM7PvP.mjs.map +1 -0
  16. package/fesm2022/rolatech-angular-platform-platform-auth-client-editor-75GPRUsF.mjs +281 -0
  17. package/fesm2022/rolatech-angular-platform-platform-auth-client-editor-75GPRUsF.mjs.map +1 -0
  18. package/fesm2022/rolatech-angular-platform-platform-auth-client-index-DilT3UzO.mjs +95 -0
  19. package/fesm2022/rolatech-angular-platform-platform-auth-client-index-DilT3UzO.mjs.map +1 -0
  20. package/fesm2022/rolatech-angular-platform-platform-auth-client.routes-D_VFpAgu.mjs +21 -0
  21. package/fesm2022/rolatech-angular-platform-platform-auth-client.routes-D_VFpAgu.mjs.map +1 -0
  22. package/fesm2022/rolatech-angular-platform-platform-endpoint-detail-CEaO9MFQ.mjs +57 -0
  23. package/fesm2022/rolatech-angular-platform-platform-endpoint-detail-CEaO9MFQ.mjs.map +1 -0
  24. package/fesm2022/rolatech-angular-platform-platform-endpoint-index-69W62bRP.mjs +92 -0
  25. package/fesm2022/rolatech-angular-platform-platform-endpoint-index-69W62bRP.mjs.map +1 -0
  26. package/fesm2022/rolatech-angular-platform-platform-endpoint.routes-Cj66S7N-.mjs +13 -0
  27. package/fesm2022/rolatech-angular-platform-platform-endpoint.routes-Cj66S7N-.mjs.map +1 -0
  28. package/fesm2022/rolatech-angular-platform-platform-role-index-8kRxDJiW.mjs +35 -0
  29. package/fesm2022/rolatech-angular-platform-platform-role-index-8kRxDJiW.mjs.map +1 -0
  30. package/fesm2022/rolatech-angular-platform-platform-service-registry-detail-CQ4Wk1R8.mjs +89 -0
  31. package/fesm2022/rolatech-angular-platform-platform-service-registry-detail-CQ4Wk1R8.mjs.map +1 -0
  32. package/fesm2022/rolatech-angular-platform-platform-service-registry-editor-Bd3nIfxd.mjs +246 -0
  33. package/fesm2022/rolatech-angular-platform-platform-service-registry-editor-Bd3nIfxd.mjs.map +1 -0
  34. package/fesm2022/rolatech-angular-platform-platform-service-registry-index-D4470pau.mjs +95 -0
  35. package/fesm2022/rolatech-angular-platform-platform-service-registry-index-D4470pau.mjs.map +1 -0
  36. package/fesm2022/rolatech-angular-platform-platform-service-registry.routes-DlWUwwws.mjs +21 -0
  37. package/fesm2022/rolatech-angular-platform-platform-service-registry.routes-DlWUwwws.mjs.map +1 -0
  38. package/fesm2022/rolatech-angular-platform-platform-user-detail-fzo89PHV.mjs +81 -0
  39. package/fesm2022/rolatech-angular-platform-platform-user-detail-fzo89PHV.mjs.map +1 -0
  40. package/fesm2022/rolatech-angular-platform-platform-user-index-DBT4N0zi.mjs +89 -0
  41. package/fesm2022/rolatech-angular-platform-platform-user-index-DBT4N0zi.mjs.map +1 -0
  42. package/fesm2022/rolatech-angular-platform-platform-user.routes-C6OoAsWU.mjs +13 -0
  43. package/fesm2022/rolatech-angular-platform-platform-user.routes-C6OoAsWU.mjs.map +1 -0
  44. package/fesm2022/rolatech-angular-platform-role-permission-page-DslhArZQ.mjs +527 -0
  45. package/fesm2022/rolatech-angular-platform-role-permission-page-DslhArZQ.mjs.map +1 -0
  46. package/fesm2022/rolatech-angular-platform-role-permission-page.routes-IiX17wDW.mjs +11 -0
  47. package/fesm2022/rolatech-angular-platform-role-permission-page.routes-IiX17wDW.mjs.map +1 -0
  48. package/fesm2022/rolatech-angular-platform.mjs +293 -0
  49. package/fesm2022/rolatech-angular-platform.mjs.map +1 -0
  50. package/package.json +33 -0
  51. package/types/rolatech-angular-platform.d.ts +70 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolatech-angular-platform-role-permission-page-DslhArZQ.mjs","sources":["../../../../packages/angular-platform/src/lib/store/role-permission-page.facade.ts","../../../../packages/angular-platform/src/lib/components/role-permission-group/role-permission-group.ts","../../../../packages/angular-platform/src/lib/components/role-permission-group/role-permission-group.html","../../../../packages/angular-platform/src/lib/pages/role/role-permission-page/role-permission-page.ts","../../../../packages/angular-platform/src/lib/pages/role/role-permission-page/role-permission-page.html"],"sourcesContent":["import { Injectable, computed, inject, signal } from '@angular/core';\nimport { finalize } from 'rxjs';\nimport {\n AuthScope,\n RolePermissionCatalogGroupResponse,\n RolePermissionPageResponse,\n RoleService,\n UpdateRolePermissionsRequest,\n} from '@rolatech/angular-services';\n\n@Injectable()\nexport class RolePermissionPageFacade {\n private readonly roleService = inject(RoleService);\n\n readonly loading = signal(false);\n readonly saving = signal(false);\n\n readonly scope = signal<AuthScope>('PLATFORM');\n readonly roleId = signal<string | null>(null);\n readonly appId = signal<string | null>(null);\n readonly orgId = signal<string | null>(null);\n\n readonly page = signal<RolePermissionPageResponse | null>(null);\n readonly keyword = signal('');\n readonly assignedOnly = signal(false);\n readonly selectedPermissionIds = signal<Set<string>>(new Set());\n readonly expandedModules = signal<Set<string>>(new Set());\n readonly activeModule = signal<string | null>(null);\n\n readonly role = computed(() => this.page()?.role ?? null);\n\n readonly originalAssignedIds = computed(() => {\n const page = this.page();\n if (!page) {\n return new Set<string>();\n }\n\n return new Set(\n page.permissionCatalog\n .flatMap((group) => group.permissions)\n .filter((item) => item.assigned)\n .map((item) => item.id),\n );\n });\n\n readonly allModules = computed(() => this.page()?.permissionCatalog.map((group) => group.module) ?? []);\n\n readonly permissionCatalog = computed<RolePermissionCatalogGroupResponse[]>(() => {\n const page = this.page();\n if (!page) {\n return [];\n }\n\n const keyword = this.keyword().trim().toLowerCase();\n const assignedOnly = this.assignedOnly();\n const selected = this.selectedPermissionIds();\n\n return page.permissionCatalog\n .map((group) => {\n const permissions = [...group.permissions]\n .sort((a, b) => a.sortOrder - b.sortOrder || a.name.localeCompare(b.name) || a.code.localeCompare(b.code))\n .filter((item) => {\n const matchesKeyword =\n !keyword ||\n item.name.toLowerCase().includes(keyword) ||\n item.code.toLowerCase().includes(keyword) ||\n item.action.toLowerCase().includes(keyword) ||\n (item.description ?? '').toLowerCase().includes(keyword) ||\n (item.serviceId ?? '').toLowerCase().includes(keyword);\n\n const matchesAssigned = !assignedOnly || selected.has(item.id);\n\n return matchesKeyword && matchesAssigned;\n })\n .map((item) => ({\n ...item,\n assigned: selected.has(item.id),\n }));\n\n return {\n ...group,\n permissions,\n };\n })\n .filter((group) => group.permissions.length > 0);\n });\n\n readonly totalPermissions = computed(() => {\n const page = this.page();\n if (!page) {\n return 0;\n }\n\n return page.permissionCatalog.flatMap((group) => group.permissions).length;\n });\n\n readonly selectedCount = computed(() => this.selectedPermissionIds().size);\n\n readonly dirty = computed(() => {\n const original = this.originalAssignedIds();\n const current = this.selectedPermissionIds();\n\n if (original.size !== current.size) {\n return true;\n }\n\n for (const id of original) {\n if (!current.has(id)) {\n return true;\n }\n }\n\n return false;\n });\n\n init(params: { scope: AuthScope; roleId: string; appId?: string | null; orgId?: string | null }): void {\n this.scope.set(params.scope);\n this.roleId.set(params.roleId);\n this.appId.set(params.appId ?? null);\n this.orgId.set(params.orgId ?? null);\n this.load();\n }\n\n load(): void {\n const roleId = this.roleId();\n if (!roleId) {\n return;\n }\n\n this.loading.set(true);\n\n this.findPermissionPage()\n .pipe(finalize(() => this.loading.set(false)))\n .subscribe((response) => {\n this.page.set(response);\n this.selectedPermissionIds.set(this.extractAssignedIds(response));\n\n const modules = response.permissionCatalog.map((group) => group.module);\n this.expandedModules.set(new Set(modules));\n this.activeModule.set(modules[0] ?? null);\n });\n }\n\n setKeyword(value: string): void {\n this.keyword.set(value);\n\n if (value.trim()) {\n this.expandAll();\n }\n }\n\n setAssignedOnly(value: boolean): void {\n this.assignedOnly.set(value);\n\n if (value) {\n this.expandAll();\n }\n }\n\n toggleAssignedOnly(): void {\n this.assignedOnly.update((value) => !value);\n\n if (this.assignedOnly()) {\n this.expandAll();\n }\n }\n\n setActiveModule(module: string | null): void {\n this.activeModule.set(module);\n }\n\n isActiveModule(module: string): boolean {\n return this.activeModule() === module;\n }\n\n togglePermission(permissionId: string): void {\n const permission = this.findPermissionById(permissionId);\n if (!permission || !permission.enabled) {\n return;\n }\n\n this.selectedPermissionIds.update((current) => {\n const next = new Set(current);\n\n if (next.has(permissionId)) {\n next.delete(permissionId);\n } else {\n next.add(permissionId);\n }\n\n return next;\n });\n }\n\n isAssigned(permissionId: string): boolean {\n return this.selectedPermissionIds().has(permissionId);\n }\n\n reset(): void {\n this.selectedPermissionIds.set(new Set(this.originalAssignedIds()));\n }\n\n clearAll(): void {\n this.selectedPermissionIds.set(new Set());\n }\n\n selectAllVisible(): void {\n const visibleIds = this.permissionCatalog()\n .flatMap((group) => group.permissions)\n .filter((item) => item.enabled)\n .map((item) => item.id);\n\n this.selectedPermissionIds.update((current) => {\n const next = new Set(current);\n\n for (const id of visibleIds) {\n next.add(id);\n }\n\n return next;\n });\n }\n\n selectModule(module: string): void {\n const group = this.page()?.permissionCatalog.find((item) => item.module === module);\n if (!group) {\n return;\n }\n\n this.selectedPermissionIds.update((current) => {\n const next = new Set(current);\n\n for (const permission of group.permissions) {\n if (permission.enabled) {\n next.add(permission.id);\n }\n }\n\n return next;\n });\n }\n\n clearModule(module: string): void {\n const group = this.page()?.permissionCatalog.find((item) => item.module === module);\n if (!group) {\n return;\n }\n\n this.selectedPermissionIds.update((current) => {\n const next = new Set(current);\n\n for (const permission of group.permissions) {\n next.delete(permission.id);\n }\n\n return next;\n });\n }\n\n isModuleFullyAssigned(module: string): boolean {\n const group = this.page()?.permissionCatalog.find((item) => item.module === module);\n if (!group) {\n return false;\n }\n\n const enabledPermissions = group.permissions.filter((item) => item.enabled);\n if (enabledPermissions.length === 0) {\n return false;\n }\n\n const selected = this.selectedPermissionIds();\n return enabledPermissions.every((item) => selected.has(item.id));\n }\n\n isExpanded(module: string): boolean {\n return this.expandedModules().has(module);\n }\n\n toggleModuleExpanded(module: string): void {\n this.expandedModules.update((current) => {\n const next = new Set(current);\n if (next.has(module)) {\n next.delete(module);\n } else {\n next.add(module);\n }\n return next;\n });\n }\n\n expandModule(module: string): void {\n this.expandedModules.update((current) => {\n const next = new Set(current);\n next.add(module);\n return next;\n });\n }\n\n expandAll(): void {\n this.expandedModules.set(new Set(this.permissionCatalog().map((group) => group.module)));\n }\n\n collapseAll(): void {\n this.expandedModules.set(new Set());\n }\n\n save(): void {\n const roleId = this.roleId();\n if (!roleId || this.saving()) {\n return;\n }\n\n const request: UpdateRolePermissionsRequest = {\n permissionIds: Array.from(this.selectedPermissionIds()),\n };\n\n this.saving.set(true);\n\n this.updatePermissions(request)\n .pipe(finalize(() => this.saving.set(false)))\n .subscribe((role) => {\n const currentPage = this.page();\n if (!currentPage) {\n return;\n }\n\n const selected = new Set(this.selectedPermissionIds());\n\n this.page.set({\n role,\n permissionCatalog: currentPage.permissionCatalog.map((group) => ({\n ...group,\n permissions: group.permissions.map((permission) => ({\n ...permission,\n assigned: selected.has(permission.id),\n })),\n })),\n });\n });\n }\n\n getModuleAssignedCount(module: string): number {\n const group = this.permissionCatalog().find((item) => item.module === module);\n if (!group) {\n return 0;\n }\n\n const selected = this.selectedPermissionIds();\n return group.permissions.filter((item) => selected.has(item.id)).length;\n }\n\n getModuleTotalCount(module: string): number {\n const group = this.permissionCatalog().find((item) => item.module === module);\n if (!group) {\n return 0;\n }\n\n return group.permissions.length;\n }\n\n getModuleCountLabel(module: string): string {\n return `${this.getModuleAssignedCount(module)}/${this.getModuleTotalCount(module)}`;\n }\n\n private findPermissionPage() {\n const scope = this.scope();\n const roleId = this.requireRoleId();\n\n switch (scope) {\n case 'PLATFORM':\n return this.roleService.findPlatformRolePermissionPage(roleId);\n case 'APP':\n return this.roleService.findApplicationRolePermissionPage(roleId, this.appId());\n case 'ORG':\n return this.roleService.findOrganizationRolePermissionPage(this.requireOrgId(), roleId);\n }\n }\n\n private updatePermissions(request: UpdateRolePermissionsRequest) {\n const scope = this.scope();\n const roleId = this.requireRoleId();\n\n switch (scope) {\n case 'PLATFORM':\n return this.roleService.updatePlatformRolePermissions(roleId, request);\n case 'APP':\n return this.roleService.updateApplicationRolePermissions(roleId, request, this.appId());\n case 'ORG':\n return this.roleService.updateOrganizationRolePermissions(this.requireOrgId(), roleId, request);\n }\n }\n\n private findPermissionById(permissionId: string) {\n return this.page()\n ?.permissionCatalog.flatMap((group) => group.permissions)\n .find((item) => item.id === permissionId);\n }\n\n private extractAssignedIds(response: RolePermissionPageResponse): Set<string> {\n return new Set(\n response.permissionCatalog\n .flatMap((group) => group.permissions)\n .filter((item) => item.assigned)\n .map((item) => item.id),\n );\n }\n\n private requireRoleId(): string {\n const value = this.roleId();\n if (!value) {\n throw new Error('roleId is required.');\n }\n return value;\n }\n\n private requireOrgId(): string {\n const value = this.orgId();\n if (!value) {\n throw new Error('orgId is required for ORG scope.');\n }\n return value;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, inject, input } from '@angular/core';\nimport { RolePermissionCatalogGroupResponse } from '@rolatech/angular-services';\nimport { RolePermissionPageFacade } from '../../store/role-permission-page.facade';\n\n@Component({\n selector: 'rolatech-role-permission-group',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './role-permission-group.html',\n styleUrl: './role-permission-group.scss',\n})\nexport class RolePermissionGroup {\n readonly facade = inject(RolePermissionPageFacade);\n\n readonly group = input.required<RolePermissionCatalogGroupResponse>();\n\n readonly expanded = computed(() => this.facade.isExpanded(this.group().module));\n\n readonly fullyAssigned = computed(() => this.facade.isModuleFullyAssigned(this.group().module));\n\n toggleExpanded(): void {\n this.facade.toggleModuleExpanded(this.group().module);\n }\n\n selectAll(): void {\n this.facade.selectModule(this.group().module);\n }\n\n clear(): void {\n this.facade.clearModule(this.group().module);\n }\n\n togglePermission(permissionId: string): void {\n this.facade.togglePermission(permissionId);\n }\n\n isAssigned(permissionId: string): boolean {\n return this.facade.isAssigned(permissionId);\n }\n\n trackPermission = (_index: number, item: { id: string }): string => item.id;\n}\n","<section class=\"scroll-mt-24 rounded-2xl border border-(--rt-border-color) bg-card p-5 shadow-sm\" [attr.data-module]=\"group().module\">\n <div class=\"mb-4 flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between\">\n <div class=\"space-y-1\">\n <div class=\"flex items-center gap-3\">\n <button\n type=\"button\"\n class=\"inline-flex h-8 w-8 items-center justify-center rounded-xl border border-(--rt-border-color) text-sm\"\n (click)=\"toggleExpanded()\"\n >\n {{ expanded() ? '−' : '+' }}\n </button>\n\n <div>\n <h2 class=\"text-lg font-semibold\">{{ group().moduleName }}</h2>\n <div class=\"text-sm text-muted-foreground\">{{ group().module }} · {{ group().permissions.length }} permissions</div>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <button type=\"button\" class=\"rounded-xl border border-(--rt-border-color) px-3 py-2 text-sm\" (click)=\"selectAll()\">Select All</button>\n\n <button type=\"button\" class=\"rounded-xl border border-(--rt-border-color) px-3 py-2 text-sm\" (click)=\"clear()\">Clear</button>\n\n <span class=\"rounded-xl border border-(--rt-border-color) px-3 py-2 text-sm text-muted-foreground\">\n {{ fullyAssigned() ? 'Fully assigned' : 'Partial / none' }}\n </span>\n </div>\n </div>\n\n @if (expanded()) {\n <div class=\"grid gap-3 md:grid-cols-2 2xl:grid-cols-3\">\n @for (permission of group().permissions; track trackPermission($index, permission)) {\n <label class=\"flex items-start gap-3 rounded-2xl border border-(--rt-border-color) p-4 transition\" [class.opacity-60]=\"!permission.enabled\">\n <input\n type=\"checkbox\"\n class=\"mt-1\"\n [checked]=\"isAssigned(permission.id)\"\n [disabled]=\"!permission.enabled\"\n (change)=\"togglePermission(permission.id)\"\n />\n\n <div class=\"min-w-0 flex-1 space-y-2\">\n <div class=\"flex flex-wrap items-center gap-2\">\n <div class=\"font-medium\">{{ permission.name }}</div>\n\n <span class=\"rounded-full border border-(--rt-border-color) px-2 py-0.5 text-[11px] uppercase\"> {{ permission.action }} </span>\n\n @if (permission.serviceId) {\n <span class=\"rounded-full border border-(--rt-border-color) px-2 py-0.5 text-[11px] text-muted-foreground\"> {{ permission.serviceId }} </span>\n } @if (!permission.enabled) {\n <span class=\"rounded-full border border-(--rt-border-color) px-2 py-0.5 text-[11px]\"> Disabled </span>\n }\n </div>\n\n <div class=\"break-all text-sm text-muted-foreground\">{{ permission.code }}</div>\n\n @if (permission.description) {\n <p class=\"text-sm text-muted-foreground\">{{ permission.description }}</p>\n }\n </div>\n </label>\n }\n </div>\n }\n</section>\n","import { CommonModule } from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n QueryList,\n ViewChildren,\n effect,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, RouterLink } from '@angular/router';\nimport { RolePermissionGroup } from '../../../components/role-permission-group/role-permission-group';\nimport { PlatformScopeBadge } from '../../../shared';\nimport { RolePermissionPageFacade } from '../../../store/role-permission-page.facade';\n\n@Component({\n selector: 'rolatech-role-permission-page',\n standalone: true,\n imports: [CommonModule, RouterLink, RolePermissionGroup, PlatformScopeBadge],\n templateUrl: './role-permission-page.html',\n styleUrl: './role-permission-page.scss',\n providers: [RolePermissionPageFacade],\n})\nexport class RolePermissionPage implements AfterViewInit, OnDestroy {\n readonly facade = inject(RolePermissionPageFacade);\n\n private readonly route = inject(ActivatedRoute);\n private readonly destroyRef = inject(DestroyRef);\n\n @ViewChildren('groupSection', { read: ElementRef })\n private readonly groupSections!: QueryList<ElementRef<HTMLElement>>;\n\n private observer?: IntersectionObserver;\n\n constructor() {\n this.route.paramMap.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((params) => {\n const roleId = params.get('id');\n const orgId = params.get('orgId');\n const appId = params.get('appId') ?? this.route.snapshot.queryParamMap.get('appId');\n const scope = params.get('scope') ?? this.route.snapshot.queryParamMap.get('scope') ?? this.route.snapshot.data['scope'];\n\n if (!roleId) {\n return;\n }\n\n if (orgId) {\n this.facade.init({\n scope: 'ORG',\n roleId,\n orgId,\n });\n return;\n }\n\n if (scope === 'application') {\n this.facade.init({\n scope: 'APP',\n roleId,\n appId,\n });\n return;\n }\n\n this.facade.init({\n scope: 'PLATFORM',\n roleId,\n });\n });\n\n effect(() => {\n const role = this.facade.role();\n if (!role) {\n return;\n }\n\n document.title = `${role.name} · Role Permissions`;\n });\n\n effect(() => {\n this.facade.permissionCatalog();\n queueMicrotask(() => this.setupObserver());\n });\n }\n\n ngAfterViewInit(): void {\n this.groupSections.changes.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {\n this.setupObserver();\n });\n\n queueMicrotask(() => this.setupObserver());\n }\n\n ngOnDestroy(): void {\n this.disconnectObserver();\n }\n\n onKeywordInput(event: Event): void {\n const input = event.target as HTMLInputElement | null;\n this.facade.setKeyword(input?.value ?? '');\n }\n\n onAssignedOnlyChange(event: Event): void {\n const input = event.target as HTMLInputElement | null;\n this.facade.setAssignedOnly(!!input?.checked);\n }\n\n scrollToModule(module: string): void {\n this.facade.expandModule(module);\n\n queueMicrotask(() => {\n const section = this.findGroupSection(module);\n if (!section) {\n return;\n }\n\n this.facade.setActiveModule(module);\n this.scrollElementIntoViewWithOffset(section.nativeElement);\n });\n }\n\n trackModule = (_index: number, item: { module: string }): string => item.module;\n\n private scrollElementIntoViewWithOffset(element: HTMLElement): void {\n const topbarOffset = this.getTopbarOffset();\n const stickyModuleBarOffset = this.getMobileModuleBarOffset();\n const extraGap = 16;\n\n const offset = topbarOffset + stickyModuleBarOffset + extraGap;\n\n const targetTop = window.scrollY + element.getBoundingClientRect().top - offset;\n\n window.scrollTo({\n top: Math.max(targetTop, 0),\n behavior: 'smooth',\n });\n }\n private getTopbarOffset(): number {\n const topbar = document.querySelector('rolatech-topbar');\n if (!(topbar instanceof HTMLElement)) {\n return 0;\n }\n\n return topbar.getBoundingClientRect().height;\n }\n\n private getMobileModuleBarOffset(): number {\n const moduleBar = document.querySelector('[data-role-permission-mobile-modules]');\n if (!(moduleBar instanceof HTMLElement)) {\n return 0;\n }\n\n const styles = window.getComputedStyle(moduleBar);\n const isHidden = styles.display === 'none';\n\n if (isHidden) {\n return 0;\n }\n\n return moduleBar.getBoundingClientRect().height;\n }\n private findGroupSection(module: string): ElementRef<HTMLElement> | undefined {\n return this.groupSections.find((item) => item.nativeElement.dataset['module'] === module);\n }\n\n private setupObserver(): void {\n this.disconnectObserver();\n\n const elements = this.groupSections?.toArray() ?? [];\n if (elements.length === 0) {\n return;\n }\n\n this.observer = new IntersectionObserver(\n (entries) => {\n const visibleEntries = entries\n .filter((entry) => entry.isIntersecting)\n .sort((a, b) => b.intersectionRatio - a.intersectionRatio);\n\n if (visibleEntries.length === 0) {\n return;\n }\n\n const module = visibleEntries[0].target.getAttribute('data-module');\n if (module) {\n this.facade.setActiveModule(module);\n }\n },\n {\n root: null,\n rootMargin: '-80px 0px -55% 0px',\n threshold: [0.1, 0.2, 0.35, 0.5, 0.75],\n },\n );\n\n for (const section of elements) {\n this.observer.observe(section.nativeElement);\n }\n }\n\n private disconnectObserver(): void {\n this.observer?.disconnect();\n this.observer = undefined;\n }\n}\n","<section class=\"rt-platform-theme flex flex-col gap-6 bg-(--rt-base-background) p-6 text-(--rt-text-primary)\">\n @if (facade.loading()) {\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-card p-10 text-center text-muted-foreground shadow-sm\">\n Loading role permissions...\n </section>\n } @else if (facade.role(); as role) {\n <header class=\"rounded-2xl border border-(--rt-border-color) bg-card p-6 shadow-sm\">\n <div class=\"flex flex-col gap-5 xl:flex-row xl:items-start xl:justify-between\">\n <div class=\"space-y-4\">\n <div class=\"space-y-2\">\n <div class=\"flex flex-wrap items-center gap-2 text-sm text-muted-foreground\">\n <a routerLink=\"../../\" class=\"hover:underline cursor-pointer\">Roles</a>\n <span>/</span>\n <span>{{ role.name }}</span>\n <span>/</span>\n <span>Permissions</span>\n </div>\n\n <div>\n <h1 class=\"text-2xl font-semibold tracking-tight\">{{ role.name }}</h1>\n <div class=\"mt-1 text-sm text-muted-foreground\">{{ role.code }}</div>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <div class=\"inline-flex items-center gap-2 rounded-full border border-(--rt-border-color) px-3 py-1 text-xs font-medium\">\n <span>Scope:</span>\n <rolatech-platform-scope-badge [scope]=\"role.scope\" />\n </div>\n\n <span class=\"inline-flex items-center rounded-full border border-(--rt-border-color) px-3 py-1 text-xs font-medium\">\n Status: {{ role.enabled ? 'Enabled' : 'Disabled' }}\n </span>\n\n @if (role.appId) {\n <span class=\"rounded-full border border-(--rt-border-color) px-3 py-1 text-xs font-medium\"> App: {{ role.appId }} </span>\n } @if (role.orgId) {\n <span class=\"rounded-full border border-(--rt-border-color) px-3 py-1 text-xs font-medium\"> Org: {{ role.orgId }} </span>\n }\n </div>\n\n @if (role.description) {\n <p class=\"max-w-3xl text-sm text-muted-foreground\">{{ role.description }}</p>\n }\n </div>\n\n <div class=\"grid gap-3 sm:grid-cols-2 xl:min-w-[320px]\">\n <div class=\"rounded-2xl border border-(--rt-border-color) p-4\">\n <div class=\"text-xs uppercase tracking-wide text-muted-foreground\">Selected</div>\n <div class=\"mt-2 text-2xl font-semibold\">{{ facade.selectedCount() }}</div>\n </div>\n\n <div class=\"rounded-2xl border border-(--rt-border-color) p-4\">\n <div class=\"text-xs uppercase tracking-wide text-muted-foreground\">Total</div>\n <div class=\"mt-2 text-2xl font-semibold\">{{ facade.totalPermissions() }}</div>\n </div>\n </div>\n </div>\n </header>\n\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div class=\"flex flex-col gap-4 xl:flex-row xl:items-center xl:justify-between\">\n <div class=\"flex flex-col gap-3 md:flex-row md:items-center\">\n <input\n type=\"text\"\n class=\"w-full rounded-xl border border-(--rt-border-color) px-3 py-2 text-sm md:w-80\"\n placeholder=\"Search by name, code, action, service\"\n [value]=\"facade.keyword()\"\n (input)=\"onKeywordInput($event)\"\n />\n\n <label class=\"inline-flex items-center gap-2 text-sm text-foreground\">\n <input type=\"checkbox\" [checked]=\"facade.assignedOnly()\" (change)=\"onAssignedOnlyChange($event)\" />\n Assigned only\n </label>\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <button type=\"button\" class=\"rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm\" (click)=\"facade.expandAll()\">Expand All</button>\n\n <button type=\"button\" class=\"rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm\" (click)=\"facade.collapseAll()\">Collapse All</button>\n\n <button type=\"button\" class=\"rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm\" (click)=\"facade.selectAllVisible()\">\n Select Visible\n </button>\n\n <button type=\"button\" class=\"rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm\" (click)=\"facade.clearAll()\">Clear All</button>\n\n <button\n type=\"button\"\n class=\"rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm\"\n [disabled]=\"!facade.dirty() || facade.saving()\"\n (click)=\"facade.reset()\"\n >\n Reset\n </button>\n\n <button\n type=\"button\"\n class=\"rounded-xl border border-(--rt-border-color) px-4 py-2 text-sm font-medium\"\n [disabled]=\"!facade.dirty() || facade.saving()\"\n (click)=\"facade.save()\"\n >\n @if (facade.saving()) { Saving... } @else { Save Changes }\n </button>\n </div>\n </div>\n </section>\n\n <section class=\"xl:hidden\">\n <div class=\"sticky top-4 z-10 -mx-1 overflow-x-auto pb-1\">\n <div class=\"flex min-w-max gap-2 px-1\">\n @for (group of facade.permissionCatalog(); track trackModule($index, group)) {\n <button\n type=\"button\"\n class=\"inline-flex items-center gap-2 rounded-full border border-(--rt-border-color) bg-card px-3 py-2 text-sm shadow-sm transition\"\n [class.bg-accent]=\"facade.isActiveModule(group.module)\"\n [class.border-foreground]=\"facade.isActiveModule(group.module)\"\n (click)=\"scrollToModule(group.module)\"\n >\n <span>{{ group.moduleName }}</span>\n <span class=\"rounded-full border border-(--rt-border-color) px-2 py-0.5 text-[11px] text-muted-foreground\">\n {{ facade.getModuleCountLabel(group.module) }}\n </span>\n </button>\n }\n </div>\n </div>\n </section>\n\n <section class=\"grid gap-6 xl:grid-cols-[260px_minmax(0,1fr)]\">\n <aside class=\"hidden xl:block\">\n <div class=\"sticky top-6 rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div class=\"mb-3 text-sm font-semibold\">Modules</div>\n\n <nav class=\"flex max-h-[70vh] flex-col gap-2 overflow-auto pr-1\">\n @for (group of facade.permissionCatalog(); track trackModule($index, group)) {\n <button\n type=\"button\"\n class=\"flex items-center justify-between gap-3 rounded-xl border border-(--rt-border-color) px-3 py-2 text-left text-sm transition\"\n [class.bg-accent]=\"facade.isActiveModule(group.module)\"\n [class.border-foreground]=\"facade.isActiveModule(group.module)\"\n (click)=\"scrollToModule(group.module)\"\n >\n <span class=\"min-w-0 flex-1 truncate\">{{ group.moduleName }}</span>\n\n <span class=\"shrink-0 rounded-full border border-(--rt-border-color) px-2 py-0.5 text-[11px] text-muted-foreground\">\n {{ facade.getModuleCountLabel(group.module) }}\n </span>\n </button>\n }\n </nav>\n </div>\n </aside>\n\n <section class=\"flex flex-col gap-4\">\n @for (group of facade.permissionCatalog(); track trackModule($index, group)) {\n <div #groupSection [attr.data-module]=\"group.module\">\n <rolatech-role-permission-group [group]=\"group\" />\n </div>\n }\n </section>\n </section>\n } @else {\n <section class=\"rounded-2xl border border-(--rt-border-color) bg-card p-10 text-center text-muted-foreground shadow-sm\">Role not found.</section>\n }\n</section>\n"],"names":[],"mappings":";;;;;;;;;MAWa,wBAAwB,CAAA;AAClB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAEzC,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,MAAM,GAAG,MAAM,CAAC,KAAK,kDAAC;AAEtB,IAAA,KAAK,GAAG,MAAM,CAAY,UAAU,iDAAC;AACrC,IAAA,MAAM,GAAG,MAAM,CAAgB,IAAI,kDAAC;AACpC,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AAEnC,IAAA,IAAI,GAAG,MAAM,CAAoC,IAAI,gDAAC;AACtD,IAAA,OAAO,GAAG,MAAM,CAAC,EAAE,mDAAC;AACpB,IAAA,YAAY,GAAG,MAAM,CAAC,KAAK,wDAAC;AAC5B,IAAA,qBAAqB,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,iEAAC;AACtD,IAAA,eAAe,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,2DAAC;AAChD,IAAA,YAAY,GAAG,MAAM,CAAgB,IAAI,wDAAC;AAE1C,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,IAAI,IAAI,gDAAC;AAEhD,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAC3C,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,IAAI,GAAG,EAAU;QAC1B;AAEA,QAAA,OAAO,IAAI,GAAG,CACZ,IAAI,CAAC;aACF,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW;aACpC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ;aAC9B,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAC1B;AACH,IAAA,CAAC,+DAAC;IAEO,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAE9F,IAAA,iBAAiB,GAAG,QAAQ,CAAuC,MAAK;AAC/E,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACnD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE;QAE7C,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAAC,CAAC,KAAK,KAAI;AACb,YAAA,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW;AACtC,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;AACxG,iBAAA,MAAM,CAAC,CAAC,IAAI,KAAI;gBACf,MAAM,cAAc,GAClB,CAAC,OAAO;oBACR,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACzC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;oBACzC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC3C,oBAAA,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AACxD,oBAAA,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AAExD,gBAAA,MAAM,eAAe,GAAG,CAAC,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAE9D,OAAO,cAAc,IAAI,eAAe;AAC1C,YAAA,CAAC;AACA,iBAAA,GAAG,CAAC,CAAC,IAAI,MAAM;AACd,gBAAA,GAAG,IAAI;gBACP,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AAChC,aAAA,CAAC,CAAC;YAEL,OAAO;AACL,gBAAA,GAAG,KAAK;gBACR,WAAW;aACZ;AACH,QAAA,CAAC;AACA,aAAA,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AACpD,IAAA,CAAC,6DAAC;AAEO,IAAA,gBAAgB,GAAG,QAAQ,CAAC,MAAK;AACxC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;QACxB,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM;AAC5E,IAAA,CAAC,4DAAC;AAEO,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC,IAAI,yDAAC;AAEjE,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AAC7B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAC3C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,EAAE;QAE5C,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;AAClC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;YACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACpB,gBAAA,OAAO,IAAI;YACb;QACF;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,iDAAC;AAEF,IAAA,IAAI,CAAC,MAA0F,EAAA;QAC7F,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;QACpC,IAAI,CAAC,IAAI,EAAE;IACb;IAEA,IAAI,GAAA;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAEtB,IAAI,CAAC,kBAAkB;AACpB,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5C,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;AACtB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvB,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAEjE,YAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC;YACvE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC3C,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,UAAU,CAAC,KAAa,EAAA;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AAEvB,QAAA,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;YAChB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEA,IAAA,eAAe,CAAC,KAAc,EAAA;AAC5B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;QAE5B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;YACvB,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEA,IAAA,eAAe,CAAC,MAAqB,EAAA;AACnC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;IAC/B;AAEA,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,YAAY,EAAE,KAAK,MAAM;IACvC;AAEA,IAAA,gBAAgB,CAAC,YAAoB,EAAA;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;QACxD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YACtC;QACF;QAEA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAE7B,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC3B;iBAAO;AACL,gBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACxB;AAEA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,UAAU,CAAC,YAAoB,EAAA;QAC7B,OAAO,IAAI,CAAC,qBAAqB,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;IACvD;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACrE;IAEA,QAAQ,GAAA;QACN,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IAC3C;IAEA,gBAAgB,GAAA;AACd,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB;aACtC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW;aACpC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO;aAC7B,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAEzB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAE7B,YAAA,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;AAC3B,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACd;AAEA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QACnF,IAAI,CAAC,KAAK,EAAE;YACV;QACF;QAEA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAE7B,YAAA,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;AAC1C,gBAAA,IAAI,UAAU,CAAC,OAAO,EAAE;AACtB,oBAAA,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACzB;YACF;AAEA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,MAAc,EAAA;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QACnF,IAAI,CAAC,KAAK,EAAE;YACV;QACF;QAEA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AAC5C,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAE7B,YAAA,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;AAC1C,gBAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B;AAEA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,qBAAqB,CAAC,MAAc,EAAA;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QACnF,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC;AAC3E,QAAA,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;AACnC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE;AAC7C,QAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClE;AAEA,IAAA,UAAU,CAAC,MAAc,EAAA;QACvB,OAAO,IAAI,CAAC,eAAe,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;IAC3C;AAEA,IAAA,oBAAoB,CAAC,MAAc,EAAA;QACjC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACtC,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAC7B,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACpB,gBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACrB;iBAAO;AACL,gBAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAClB;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,YAAY,CAAC,MAAc,EAAA;QACzB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,OAAO,KAAI;AACtC,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC;AAC7B,YAAA,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;AAChB,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACJ;IAEA,SAAS,GAAA;QACP,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1F;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;IACrC;IAEA,IAAI,GAAA;AACF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;QAC5B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;YAC5B;QACF;AAEA,QAAA,MAAM,OAAO,GAAiC;YAC5C,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;SACxD;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAErB,QAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO;AAC3B,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3C,aAAA,SAAS,CAAC,CAAC,IAAI,KAAI;AAClB,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE;YAC/B,IAAI,CAAC,WAAW,EAAE;gBAChB;YACF;YAEA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAEtD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBACZ,IAAI;AACJ,gBAAA,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AAC/D,oBAAA,GAAG,KAAK;AACR,oBAAA,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM;AAClD,wBAAA,GAAG,UAAU;wBACb,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;AACtC,qBAAA,CAAC,CAAC;AACJ,iBAAA,CAAC,CAAC;AACJ,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,sBAAsB,CAAC,MAAc,EAAA;QACnC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QAC7E,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE;QAC7C,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM;IACzE;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;QAC7E,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,OAAO,KAAK,CAAC,WAAW,CAAC,MAAM;IACjC;AAEA,IAAA,mBAAmB,CAAC,MAAc,EAAA;AAChC,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAA,CAAA,EAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;IACrF;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;QAEnC,QAAQ,KAAK;AACX,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,MAAM,CAAC;AAChE,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACjF,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,kCAAkC,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC;;IAE7F;AAEQ,IAAA,iBAAiB,CAAC,OAAqC,EAAA;AAC7D,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE;QAEnC,QAAQ,KAAK;AACX,YAAA,KAAK,UAAU;gBACb,OAAO,IAAI,CAAC,WAAW,CAAC,6BAA6B,CAAC,MAAM,EAAE,OAAO,CAAC;AACxE,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,gCAAgC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;AACzF,YAAA,KAAK,KAAK;AACR,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,iCAAiC,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC;;IAErG;AAEQ,IAAA,kBAAkB,CAAC,YAAoB,EAAA;QAC7C,OAAO,IAAI,CAAC,IAAI;AACd,cAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW;AACvD,aAAA,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,YAAY,CAAC;IAC7C;AAEQ,IAAA,kBAAkB,CAAC,QAAoC,EAAA;AAC7D,QAAA,OAAO,IAAI,GAAG,CACZ,QAAQ,CAAC;aACN,OAAO,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW;aACpC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,QAAQ;aAC9B,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,CAC1B;IACH;IAEQ,aAAa,GAAA;AACnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;QAC3B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;QACxC;AACA,QAAA,OAAO,KAAK;IACd;IAEQ,YAAY,GAAA;AAClB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;QACrD;AACA,QAAA,OAAO,KAAK;IACd;uGA1ZW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAxB,wBAAwB,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC;;;MCEY,mBAAmB,CAAA;AACrB,IAAA,MAAM,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAEzC,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAsC;IAE5D,QAAQ,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,oDAAC;IAEtE,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,yDAAC;IAE/F,cAAc,GAAA;AACZ,QAAA,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;IACvD;IAEA,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;IAC/C;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC;IAC9C;AAEA,IAAA,gBAAgB,CAAC,YAAoB,EAAA;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC;IAC5C;AAEA,IAAA,UAAU,CAAC,YAAoB,EAAA;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;IAC7C;IAEA,eAAe,GAAG,CAAC,MAAc,EAAE,IAAoB,KAAa,IAAI,CAAC,EAAE;uGA7BhE,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECZhC,44FAkEA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1DY,YAAY,EAAA,CAAA,EAAA,CAAA;;2FAIX,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gCAAgC,EAAA,UAAA,EAC9B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,44FAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;;MEkBZ,kBAAkB,CAAA;AACpB,IAAA,MAAM,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAEjC,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAG/B,IAAA,aAAa;AAEtB,IAAA,QAAQ;AAEhB,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;YACjF,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;AACnF,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;YAExH,IAAI,CAAC,MAAM,EAAE;gBACX;YACF;YAEA,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,oBAAA,KAAK,EAAE,KAAK;oBACZ,MAAM;oBACN,KAAK;AACN,iBAAA,CAAC;gBACF;YACF;AAEA,YAAA,IAAI,KAAK,KAAK,aAAa,EAAE;AAC3B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,oBAAA,KAAK,EAAE,KAAK;oBACZ,MAAM;oBACN,KAAK;AACN,iBAAA,CAAC;gBACF;YACF;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;AACf,gBAAA,KAAK,EAAE,UAAU;gBACjB,MAAM;AACP,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;YAC/B,IAAI,CAAC,IAAI,EAAE;gBACT;YACF;YAEA,QAAQ,CAAC,KAAK,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,qBAAqB;AACpD,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;YAC/B,cAAc,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;AAC5C,QAAA,CAAC,CAAC;IACJ;IAEA,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;YAClF,IAAI,CAAC,aAAa,EAAE;AACtB,QAAA,CAAC,CAAC;QAEF,cAAc,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5C;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,kBAAkB,EAAE;IAC3B;AAEA,IAAA,cAAc,CAAC,KAAY,EAAA;AACzB,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAiC;QACrD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IAC5C;AAEA,IAAA,oBAAoB,CAAC,KAAY,EAAA;AAC/B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAiC;QACrD,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC;IAC/C;AAEA,IAAA,cAAc,CAAC,MAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC;QAEhC,cAAc,CAAC,MAAK;YAClB,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;YAC7C,IAAI,CAAC,OAAO,EAAE;gBACZ;YACF;AAEA,YAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;AACnC,YAAA,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,aAAa,CAAC;AAC7D,QAAA,CAAC,CAAC;IACJ;IAEA,WAAW,GAAG,CAAC,MAAc,EAAE,IAAwB,KAAa,IAAI,CAAC,MAAM;AAEvE,IAAA,+BAA+B,CAAC,OAAoB,EAAA;AAC1D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE;AAC3C,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,EAAE;QAC7D,MAAM,QAAQ,GAAG,EAAE;AAEnB,QAAA,MAAM,MAAM,GAAG,YAAY,GAAG,qBAAqB,GAAG,QAAQ;AAE9D,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,GAAG,MAAM;QAE/E,MAAM,CAAC,QAAQ,CAAC;YACd,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3B,YAAA,QAAQ,EAAE,QAAQ;AACnB,SAAA,CAAC;IACJ;IACQ,eAAe,GAAA;QACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAC;AACxD,QAAA,IAAI,EAAE,MAAM,YAAY,WAAW,CAAC,EAAE;AACpC,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,OAAO,MAAM,CAAC,qBAAqB,EAAE,CAAC,MAAM;IAC9C;IAEQ,wBAAwB,GAAA;QAC9B,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,uCAAuC,CAAC;AACjF,QAAA,IAAI,EAAE,SAAS,YAAY,WAAW,CAAC,EAAE;AACvC,YAAA,OAAO,CAAC;QACV;QAEA,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AACjD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,KAAK,MAAM;QAE1C,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,CAAC;QACV;AAEA,QAAA,OAAO,SAAS,CAAC,qBAAqB,EAAE,CAAC,MAAM;IACjD;AACQ,IAAA,gBAAgB,CAAC,MAAc,EAAA;QACrC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC;IAC3F;IAEQ,aAAa,GAAA;QACnB,IAAI,CAAC,kBAAkB,EAAE;QAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE;AACpD,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB;QACF;QAEA,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CACtC,CAAC,OAAO,KAAI;YACV,MAAM,cAAc,GAAG;iBACpB,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc;AACtC,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,iBAAiB,GAAG,CAAC,CAAC,iBAAiB,CAAC;AAE5D,YAAA,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC/B;YACF;AAEA,YAAA,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,aAAa,CAAC;YACnE,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;YACrC;AACF,QAAA,CAAC,EACD;AACE,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE,oBAAoB;YAChC,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;AACvC,SAAA,CACF;AAED,QAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAC9C;IACF;IAEQ,kBAAkB,GAAA;AACxB,QAAA,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE;AAC3B,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;IAC3B;uGAnLW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,+BAAA,EAAA,SAAA,EAFlB,CAAC,wBAAwB,CAAC,uGAQC,UAAU,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EChClD,yiPAuKA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlJY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,mBAAmB,8FAAE,kBAAkB,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKhE,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAR9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,+BAA+B,EAAA,UAAA,EAC7B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,EAAA,SAAA,EAGjE,CAAC,wBAAwB,CAAC,EAAA,QAAA,EAAA,yiPAAA,EAAA,MAAA,EAAA,CAAA,wBAAA,CAAA,EAAA;;sBAQpC,YAAY;AAAC,gBAAA,IAAA,EAAA,CAAA,cAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;;;;;"}
@@ -0,0 +1,11 @@
1
+ import { RolePermissionPage } from './rolatech-angular-platform-role-permission-page-DslhArZQ.mjs';
2
+
3
+ const rolePermissionPageRoutes = [
4
+ {
5
+ path: '',
6
+ component: RolePermissionPage,
7
+ },
8
+ ];
9
+
10
+ export { rolePermissionPageRoutes };
11
+ //# sourceMappingURL=rolatech-angular-platform-role-permission-page.routes-IiX17wDW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolatech-angular-platform-role-permission-page.routes-IiX17wDW.mjs","sources":["../../../../packages/angular-platform/src/lib/pages/role/role-permission-page/role-permission-page.routes.ts"],"sourcesContent":["import { Routes } from '@angular/router';\nimport { RolePermissionPage } from './role-permission-page';\n\nexport const rolePermissionPageRoutes: Routes = [\n {\n path: '',\n component: RolePermissionPage,\n },\n];\n"],"names":[],"mappings":";;AAGO,MAAM,wBAAwB,GAAW;AAC9C,IAAA;AACE,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,SAAS,EAAE,kBAAkB;AAC9B,KAAA;;;;;"}
@@ -0,0 +1,293 @@
1
+ import * as i0 from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, input, computed, ViewEncapsulation } from '@angular/core';
3
+ import { provideRoleAwareFeature, PLATFORM_ADMIN_ROLES, accessMatchGuard } from '@rolatech/angular-auth';
4
+
5
+ const PLATFORM_ADMIN_ROUTES = [
6
+ {
7
+ path: '',
8
+ pathMatch: 'full',
9
+ redirectTo: 'applications',
10
+ },
11
+ {
12
+ path: 'applications',
13
+ loadChildren: () => import('./rolatech-angular-platform-application-routes-DE5CJMgn.mjs').then((m) => m.APPLICATION_ROUTES),
14
+ },
15
+ {
16
+ path: 'users',
17
+ loadChildren: () => import('./rolatech-angular-platform-platform-user.routes-C6OoAsWU.mjs').then((m) => m.PLATFORM_USER_ROUTES),
18
+ },
19
+ {
20
+ path: 'endpoints',
21
+ loadChildren: () => import('./rolatech-angular-platform-platform-endpoint.routes-Cj66S7N-.mjs').then((m) => m.PLATFORM_ENDPOINT_ROUTES),
22
+ },
23
+ {
24
+ path: 'service-registry',
25
+ loadChildren: () => import('./rolatech-angular-platform-platform-service-registry.routes-DlWUwwws.mjs').then((m) => m.PLATFORM_SERVICE_REGISTRY_ROUTES),
26
+ },
27
+ {
28
+ path: 'clients',
29
+ loadChildren: () => import('./rolatech-angular-platform-platform-auth-client.routes-D_VFpAgu.mjs').then((m) => m.PLATFORM_AUTH_CLIENT_ROUTES),
30
+ },
31
+ {
32
+ path: 'roles',
33
+ loadComponent: () => import('./rolatech-angular-platform-platform-role-index-8kRxDJiW.mjs').then((m) => m.PlatformRoleIndexPage),
34
+ },
35
+ {
36
+ path: 'roles/:id/permissions',
37
+ loadChildren: () => import('./rolatech-angular-platform-role-permission-page.routes-IiX17wDW.mjs').then((m) => m.rolePermissionPageRoutes),
38
+ },
39
+ ];
40
+
41
+ var platformAdmin_routes = /*#__PURE__*/Object.freeze({
42
+ __proto__: null,
43
+ PLATFORM_ADMIN_ROUTES: PLATFORM_ADMIN_ROUTES
44
+ });
45
+
46
+ class PlatformPageHeader {
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformPageHeader, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: PlatformPageHeader, isStandalone: true, selector: "rolatech-platform-page-header", ngImport: i0, template: "<header class=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div class=\"min-w-0\">\n <ng-content select=\"[header-left]\"></ng-content>\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <ng-content select=\"[header-actions]\"></ng-content>\n </div>\n</header>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
49
+ }
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformPageHeader, decorators: [{
51
+ type: Component,
52
+ args: [{ selector: 'rolatech-platform-page-header', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<header class=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div class=\"min-w-0\">\n <ng-content select=\"[header-left]\"></ng-content>\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <ng-content select=\"[header-actions]\"></ng-content>\n </div>\n</header>\n" }]
53
+ }] });
54
+
55
+ class PlatformStatCard {
56
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformStatCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
57
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: PlatformStatCard, isStandalone: true, selector: "rolatech-platform-stat-card", ngImport: i0, template: "<article class=\"rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div class=\"text-sm text-muted-foreground\">\n <ng-content select=\"[stat-label]\"></ng-content>\n </div>\n\n <div class=\"mt-2 text-2xl font-semibold\">\n <ng-content select=\"[stat-value]\"></ng-content>\n </div>\n\n <div class=\"mt-2 text-xs text-muted-foreground\">\n <ng-content select=\"[stat-meta]\"></ng-content>\n </div>\n</article>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformStatCard, decorators: [{
60
+ type: Component,
61
+ args: [{ selector: 'rolatech-platform-stat-card', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<article class=\"rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div class=\"text-sm text-muted-foreground\">\n <ng-content select=\"[stat-label]\"></ng-content>\n </div>\n\n <div class=\"mt-2 text-2xl font-semibold\">\n <ng-content select=\"[stat-value]\"></ng-content>\n </div>\n\n <div class=\"mt-2 text-xs text-muted-foreground\">\n <ng-content select=\"[stat-meta]\"></ng-content>\n </div>\n</article>\n" }]
62
+ }] });
63
+
64
+ class PlatformFilterPanel {
65
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformFilterPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
66
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: PlatformFilterPanel, isStandalone: true, selector: "rolatech-platform-filter-panel", ngImport: i0, template: "<aside class=\"space-y-4 rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div>\n <h2 class=\"text-base font-semibold\">\n <ng-content select=\"[filter-title]\"></ng-content>\n </h2>\n <p class=\"mt-1 text-sm text-muted-foreground\">\n <ng-content select=\"[filter-description]\"></ng-content>\n </p>\n </div>\n\n <div class=\"space-y-4\">\n <ng-content></ng-content>\n </div>\n</aside>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
67
+ }
68
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformFilterPanel, decorators: [{
69
+ type: Component,
70
+ args: [{ selector: 'rolatech-platform-filter-panel', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<aside class=\"space-y-4 rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div>\n <h2 class=\"text-base font-semibold\">\n <ng-content select=\"[filter-title]\"></ng-content>\n </h2>\n <p class=\"mt-1 text-sm text-muted-foreground\">\n <ng-content select=\"[filter-description]\"></ng-content>\n </p>\n </div>\n\n <div class=\"space-y-4\">\n <ng-content></ng-content>\n </div>\n</aside>\n" }]
71
+ }] });
72
+
73
+ class PlatformDataTable {
74
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformDataTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
75
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: PlatformDataTable, isStandalone: true, selector: "rolatech-platform-data-table", ngImport: i0, template: "<section class=\"overflow-hidden rounded-2xl border border-(--rt-border-color) bg-card shadow-sm\">\n <div class=\"border-b border-(--rt-border-color) px-4 py-3\">\n <ng-content select=\"[table-toolbar]\"></ng-content>\n </div>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full border-collapse text-sm\">\n <ng-content></ng-content>\n </table>\n </div>\n</section>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
76
+ }
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformDataTable, decorators: [{
78
+ type: Component,
79
+ args: [{ selector: 'rolatech-platform-data-table', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"overflow-hidden rounded-2xl border border-(--rt-border-color) bg-card shadow-sm\">\n <div class=\"border-b border-(--rt-border-color) px-4 py-3\">\n <ng-content select=\"[table-toolbar]\"></ng-content>\n </div>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full border-collapse text-sm\">\n <ng-content></ng-content>\n </table>\n </div>\n</section>\n" }]
80
+ }] });
81
+
82
+ class PlatformTabs {
83
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformTabs, deps: [], target: i0.ɵɵFactoryTarget.Component });
84
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: PlatformTabs, isStandalone: true, selector: "rolatech-platform-tabs", ngImport: i0, template: "<div class=\"border-b border-(--rt-border-color) px-4\">\n <div class=\"flex flex-wrap gap-2 py-3\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
85
+ }
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformTabs, decorators: [{
87
+ type: Component,
88
+ args: [{ selector: 'rolatech-platform-tabs', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"border-b border-(--rt-border-color) px-4\">\n <div class=\"flex flex-wrap gap-2 py-3\">\n <ng-content></ng-content>\n </div>\n</div>\n" }]
89
+ }] });
90
+
91
+ class PlatformStickyActionBar {
92
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformStickyActionBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
93
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: PlatformStickyActionBar, isStandalone: true, selector: "rolatech-platform-sticky-action-bar", ngImport: i0, template: "<section\n class=\"sticky bottom-4 z-10 flex flex-col gap-3 rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-lg md:flex-row md:items-center md:justify-between\"\n>\n <div class=\"text-sm\">\n <ng-content select=\"[action-message]\"></ng-content>\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <ng-content select=\"[action-buttons]\"></ng-content>\n </div>\n</section>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
94
+ }
95
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformStickyActionBar, decorators: [{
96
+ type: Component,
97
+ args: [{ selector: 'rolatech-platform-sticky-action-bar', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section\n class=\"sticky bottom-4 z-10 flex flex-col gap-3 rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-lg md:flex-row md:items-center md:justify-between\"\n>\n <div class=\"text-sm\">\n <ng-content select=\"[action-message]\"></ng-content>\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <ng-content select=\"[action-buttons]\"></ng-content>\n </div>\n</section>\n" }]
98
+ }] });
99
+
100
+ const PLATFORM_SCOPE_LABEL = {
101
+ PLATFORM: 'Platform',
102
+ APP: 'Application',
103
+ ORG: 'Organization',
104
+ };
105
+ const PLATFORM_STATUS_LABEL = {
106
+ ACTIVE: 'Active',
107
+ INACTIVE: 'Inactive',
108
+ DRAFT: 'Draft',
109
+ SUSPENDED: 'Suspended',
110
+ PENDING: 'Pending',
111
+ DISABLED: 'Disabled',
112
+ };
113
+ function platformScopeLabel(scope) {
114
+ if (!scope)
115
+ return '—';
116
+ return PLATFORM_SCOPE_LABEL[scope] ?? humanizeEnum(scope);
117
+ }
118
+ function platformStatusLabel(status) {
119
+ if (!status)
120
+ return '—';
121
+ return PLATFORM_STATUS_LABEL[status] ?? humanizeEnum(status);
122
+ }
123
+ function humanizeEnum(value) {
124
+ return value
125
+ .toLowerCase()
126
+ .split('_')
127
+ .map((part) => part.charAt(0).toUpperCase() + part.slice(1))
128
+ .join(' ');
129
+ }
130
+
131
+ class PlatformScopeBadge {
132
+ scope = input('PLATFORM', ...(ngDevMode ? [{ debugName: "scope" }] : []));
133
+ label = computed(() => {
134
+ switch (this.scope()) {
135
+ case 'PLATFORM':
136
+ return platformScopeLabel('PLATFORM');
137
+ case 'APP':
138
+ return platformScopeLabel('APP');
139
+ case 'ORG':
140
+ return platformScopeLabel('ORG');
141
+ default:
142
+ return platformScopeLabel(this.scope());
143
+ }
144
+ }, ...(ngDevMode ? [{ debugName: "label" }] : []));
145
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformScopeBadge, deps: [], target: i0.ɵɵFactoryTarget.Component });
146
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: PlatformScopeBadge, isStandalone: true, selector: "rolatech-platform-scope-badge", inputs: { scope: { classPropertyName: "scope", publicName: "scope", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: "<span class=\"inline-flex rounded-full border border-(--rt-border-color) bg-(--rt-raised-background) px-2 py-1 text-xs text-(--rt-text-secondary)\">\n {{ label() }}\n</span>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
147
+ }
148
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformScopeBadge, decorators: [{
149
+ type: Component,
150
+ args: [{ selector: 'rolatech-platform-scope-badge', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'block' }, template: "<span class=\"inline-flex rounded-full border border-(--rt-border-color) bg-(--rt-raised-background) px-2 py-1 text-xs text-(--rt-text-secondary)\">\n {{ label() }}\n</span>\n" }]
151
+ }], propDecorators: { scope: [{ type: i0.Input, args: [{ isSignal: true, alias: "scope", required: false }] }] } });
152
+
153
+ class PlatformStatusBadge {
154
+ status = input(null, ...(ngDevMode ? [{ debugName: "status" }] : []));
155
+ label = computed(() => platformStatusLabel(this.status()), ...(ngDevMode ? [{ debugName: "label" }] : []));
156
+ badgeClass = computed(() => {
157
+ switch (this.status()) {
158
+ case 'ACTIVE':
159
+ return 'border-emerald-200 bg-emerald-50 text-emerald-700';
160
+ case 'INACTIVE':
161
+ case 'FAILED':
162
+ case 'DISABLED':
163
+ return 'border-rose-200 bg-rose-50 text-rose-700';
164
+ case 'DRAFT':
165
+ case 'PENDING':
166
+ return 'border-amber-200 bg-amber-50 text-amber-700';
167
+ default:
168
+ return 'border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-secondary)';
169
+ }
170
+ }, ...(ngDevMode ? [{ debugName: "badgeClass" }] : []));
171
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformStatusBadge, deps: [], target: i0.ɵɵFactoryTarget.Component });
172
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.1", type: PlatformStatusBadge, isStandalone: true, selector: "rolatech-platform-status-badge", inputs: { status: { classPropertyName: "status", publicName: "status", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: "<span\n class=\"inline-flex rounded-full border border-(--rt-border-color) px-2 py-1 text-xs font-semibold uppercase tracking-wide\"\n [class]=\"badgeClass()\"\n>\n {{ label() }}\n</span>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
173
+ }
174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformStatusBadge, decorators: [{
175
+ type: Component,
176
+ args: [{ selector: 'rolatech-platform-status-badge', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { class: 'block' }, template: "<span\n class=\"inline-flex rounded-full border border-(--rt-border-color) px-2 py-1 text-xs font-semibold uppercase tracking-wide\"\n [class]=\"badgeClass()\"\n>\n {{ label() }}\n</span>\n" }]
177
+ }], propDecorators: { status: [{ type: i0.Input, args: [{ isSignal: true, alias: "status", required: false }] }] } });
178
+
179
+ class PlatformGroupPanel {
180
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformGroupPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
181
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: PlatformGroupPanel, isStandalone: true, selector: "rolatech-platform-group-panel", ngImport: i0, template: "<details class=\"overflow-hidden rounded-2xl border border-(--rt-border-color) bg-card shadow-sm\" open>\n <summary class=\"flex cursor-pointer list-none items-center justify-between gap-3 px-4 py-3\">\n <div class=\"min-w-0\">\n <ng-content select=\"[group-header]\"></ng-content>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <ng-content select=\"[group-actions]\"></ng-content>\n </div>\n </summary>\n\n <div class=\"border-t border-(--rt-border-color)\">\n <ng-content></ng-content>\n </div>\n</details>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
182
+ }
183
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformGroupPanel, decorators: [{
184
+ type: Component,
185
+ args: [{ selector: 'rolatech-platform-group-panel', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<details class=\"overflow-hidden rounded-2xl border border-(--rt-border-color) bg-card shadow-sm\" open>\n <summary class=\"flex cursor-pointer list-none items-center justify-between gap-3 px-4 py-3\">\n <div class=\"min-w-0\">\n <ng-content select=\"[group-header]\"></ng-content>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <ng-content select=\"[group-actions]\"></ng-content>\n </div>\n </summary>\n\n <div class=\"border-t border-(--rt-border-color)\">\n <ng-content></ng-content>\n </div>\n</details>\n" }]
186
+ }] });
187
+
188
+ class PlatformDetailPanel {
189
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformDetailPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
190
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.1", type: PlatformDetailPanel, isStandalone: true, selector: "rolatech-platform-detail-panel", ngImport: i0, template: "<section class=\"rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div class=\"mb-4\">\n <h2 class=\"text-base font-semibold\">\n <ng-content select=\"[panel-title]\"></ng-content>\n </h2>\n <p class=\"mt-1 text-sm text-muted-foreground\">\n <ng-content select=\"[panel-description]\"></ng-content>\n </p>\n </div>\n\n <div>\n <ng-content></ng-content>\n </div>\n</section>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush });
191
+ }
192
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.1", ngImport: i0, type: PlatformDetailPanel, decorators: [{
193
+ type: Component,
194
+ args: [{ selector: 'rolatech-platform-detail-panel', imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<section class=\"rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div class=\"mb-4\">\n <h2 class=\"text-base font-semibold\">\n <ng-content select=\"[panel-title]\"></ng-content>\n </h2>\n <p class=\"mt-1 text-sm text-muted-foreground\">\n <ng-content select=\"[panel-description]\"></ng-content>\n </p>\n </div>\n\n <div>\n <ng-content></ng-content>\n </div>\n</section>\n" }]
195
+ }] });
196
+
197
+ function provideAngularPlatformFeature() {
198
+ return provideRoleAwareFeature({
199
+ routes: [
200
+ {
201
+ path: 'platform',
202
+ canMatch: [
203
+ accessMatchGuard({
204
+ authenticated: true,
205
+ anyPlatformRole: [...PLATFORM_ADMIN_ROLES],
206
+ }),
207
+ ],
208
+ loadChildren: () => Promise.resolve().then(function () { return platformAdmin_routes; }).then((m) => m.PLATFORM_ADMIN_ROUTES),
209
+ },
210
+ ],
211
+ navigation: [
212
+ {
213
+ id: 'platform',
214
+ title: 'Platform',
215
+ icon: 'hub',
216
+ order: 700,
217
+ access: {
218
+ authenticated: true,
219
+ anyPlatformRole: [...PLATFORM_ADMIN_ROLES],
220
+ },
221
+ children: [
222
+ {
223
+ id: 'platform-applications',
224
+ title: 'Applications',
225
+ icon: 'apps',
226
+ routerLink: '/platform/applications',
227
+ access: {
228
+ authenticated: true,
229
+ anyPlatformRole: [...PLATFORM_ADMIN_ROLES],
230
+ },
231
+ },
232
+ {
233
+ id: 'platform-users',
234
+ title: 'Users',
235
+ icon: 'group',
236
+ routerLink: '/platform/users',
237
+ access: {
238
+ authenticated: true,
239
+ anyPlatformRole: [...PLATFORM_ADMIN_ROLES],
240
+ },
241
+ },
242
+ {
243
+ id: 'platform-endpoints',
244
+ title: 'Endpoints',
245
+ icon: 'route',
246
+ routerLink: '/platform/endpoints',
247
+ access: {
248
+ authenticated: true,
249
+ anyPlatformRole: [...PLATFORM_ADMIN_ROLES],
250
+ },
251
+ },
252
+ {
253
+ id: 'platform-service-registry',
254
+ title: 'Service Registry',
255
+ icon: 'dns',
256
+ routerLink: '/platform/service-registry',
257
+ access: {
258
+ authenticated: true,
259
+ anyPlatformRole: [...PLATFORM_ADMIN_ROLES],
260
+ },
261
+ },
262
+ {
263
+ id: 'platform-clients',
264
+ title: 'Auth Clients',
265
+ icon: 'key',
266
+ routerLink: '/platform/clients',
267
+ access: {
268
+ authenticated: true,
269
+ anyPlatformRole: [...PLATFORM_ADMIN_ROLES],
270
+ },
271
+ },
272
+ {
273
+ id: 'platform-roles',
274
+ title: 'Roles',
275
+ icon: 'shield',
276
+ routerLink: '/platform/roles',
277
+ access: {
278
+ authenticated: true,
279
+ anyPlatformRole: [...PLATFORM_ADMIN_ROLES],
280
+ },
281
+ },
282
+ ],
283
+ },
284
+ ],
285
+ });
286
+ }
287
+
288
+ /**
289
+ * Generated bundle index. Do not edit.
290
+ */
291
+
292
+ export { PLATFORM_ADMIN_ROUTES, PLATFORM_SCOPE_LABEL, PLATFORM_STATUS_LABEL, PlatformDataTable, PlatformDetailPanel, PlatformFilterPanel, PlatformGroupPanel, PlatformPageHeader, PlatformScopeBadge, PlatformStatCard, PlatformStatusBadge, PlatformStickyActionBar, PlatformTabs, humanizeEnum, platformScopeLabel, platformStatusLabel, provideAngularPlatformFeature };
293
+ //# sourceMappingURL=rolatech-angular-platform.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rolatech-angular-platform.mjs","sources":["../../../../packages/angular-platform/src/lib/routes/platform-admin.routes.ts","../../../../packages/angular-platform/src/lib/shared/layout/platform-page-header/platform-page-header.ts","../../../../packages/angular-platform/src/lib/shared/layout/platform-page-header/platform-page-header.html","../../../../packages/angular-platform/src/lib/shared/cards/platform-stat-card/platform-stat-card.ts","../../../../packages/angular-platform/src/lib/shared/cards/platform-stat-card/platform-stat-card.html","../../../../packages/angular-platform/src/lib/shared/filters/platform-filter-panel/platform-filter-panel.ts","../../../../packages/angular-platform/src/lib/shared/filters/platform-filter-panel/platform-filter-panel.html","../../../../packages/angular-platform/src/lib/shared/table/platform-data-table/platform-data-table.ts","../../../../packages/angular-platform/src/lib/shared/table/platform-data-table/platform-data-table.html","../../../../packages/angular-platform/src/lib/shared/tabs/platform-tabs/platform-tabs.ts","../../../../packages/angular-platform/src/lib/shared/tabs/platform-tabs/platform-tabs.html","../../../../packages/angular-platform/src/lib/shared/actions/platform-sticky-action-bar/platform-sticky-action-bar.ts","../../../../packages/angular-platform/src/lib/shared/actions/platform-sticky-action-bar/platform-sticky-action-bar.html","../../../../packages/angular-platform/src/lib/ui/platform-label.ts","../../../../packages/angular-platform/src/lib/shared/badges/platform-scope-badge/platform-scope-badge.ts","../../../../packages/angular-platform/src/lib/shared/badges/platform-scope-badge/platform-scope-badge.html","../../../../packages/angular-platform/src/lib/shared/badges/platform-status-badge/platform-status-badge.ts","../../../../packages/angular-platform/src/lib/shared/badges/platform-status-badge/platform-status-badge.html","../../../../packages/angular-platform/src/lib/shared/panels/platform-group-panel/platform-group-panel.ts","../../../../packages/angular-platform/src/lib/shared/panels/platform-group-panel/platform-group-panel.html","../../../../packages/angular-platform/src/lib/shared/panels/platform-detail-panel/platform-detail-panel.ts","../../../../packages/angular-platform/src/lib/shared/panels/platform-detail-panel/platform-detail-panel.html","../../../../packages/angular-platform/src/provider.ts","../../../../packages/angular-platform/src/rolatech-angular-platform.ts"],"sourcesContent":["import { Routes } from '@angular/router';\n\nexport const PLATFORM_ADMIN_ROUTES: Routes = [\n {\n path: '',\n pathMatch: 'full',\n redirectTo: 'applications',\n },\n {\n path: 'applications',\n loadChildren: () => import('../pages/application/application-routes').then((m) => m.APPLICATION_ROUTES),\n },\n {\n path: 'users',\n loadChildren: () => import('../pages/user/platform-user.routes').then((m) => m.PLATFORM_USER_ROUTES),\n },\n {\n path: 'endpoints',\n loadChildren: () => import('../pages/endpoint/platform-endpoint.routes').then((m) => m.PLATFORM_ENDPOINT_ROUTES),\n },\n {\n path: 'service-registry',\n loadChildren: () =>\n import('../pages/service-registry/platform-service-registry.routes').then((m) => m.PLATFORM_SERVICE_REGISTRY_ROUTES),\n },\n {\n path: 'clients',\n loadChildren: () => import('../pages/client/platform-auth-client.routes').then((m) => m.PLATFORM_AUTH_CLIENT_ROUTES),\n },\n {\n path: 'roles',\n loadComponent: () => import('../pages/role/platform-role-index/platform-role-index').then((m) => m.PlatformRoleIndexPage),\n },\n {\n path: 'roles/:id/permissions',\n loadChildren: () =>\n import('../pages/role/role-permission-page/role-permission-page.routes').then((m) => m.rolePermissionPageRoutes),\n },\n];\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-platform-page-header',\n imports: [],\n templateUrl: './platform-page-header.html',\n styleUrl: './platform-page-header.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlatformPageHeader {}\n","<header class=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div class=\"min-w-0\">\n <ng-content select=\"[header-left]\"></ng-content>\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <ng-content select=\"[header-actions]\"></ng-content>\n </div>\n</header>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-platform-stat-card',\n imports: [],\n templateUrl: './platform-stat-card.html',\n styleUrl: './platform-stat-card.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlatformStatCard {}\n","<article class=\"rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div class=\"text-sm text-muted-foreground\">\n <ng-content select=\"[stat-label]\"></ng-content>\n </div>\n\n <div class=\"mt-2 text-2xl font-semibold\">\n <ng-content select=\"[stat-value]\"></ng-content>\n </div>\n\n <div class=\"mt-2 text-xs text-muted-foreground\">\n <ng-content select=\"[stat-meta]\"></ng-content>\n </div>\n</article>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-platform-filter-panel',\n imports: [],\n templateUrl: './platform-filter-panel.html',\n styleUrl: './platform-filter-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlatformFilterPanel {}\n","<aside class=\"space-y-4 rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div>\n <h2 class=\"text-base font-semibold\">\n <ng-content select=\"[filter-title]\"></ng-content>\n </h2>\n <p class=\"mt-1 text-sm text-muted-foreground\">\n <ng-content select=\"[filter-description]\"></ng-content>\n </p>\n </div>\n\n <div class=\"space-y-4\">\n <ng-content></ng-content>\n </div>\n</aside>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-platform-data-table',\n imports: [],\n templateUrl: './platform-data-table.html',\n styleUrl: './platform-data-table.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlatformDataTable {}\n","<section class=\"overflow-hidden rounded-2xl border border-(--rt-border-color) bg-card shadow-sm\">\n <div class=\"border-b border-(--rt-border-color) px-4 py-3\">\n <ng-content select=\"[table-toolbar]\"></ng-content>\n </div>\n\n <div class=\"overflow-x-auto\">\n <table class=\"min-w-full border-collapse text-sm\">\n <ng-content></ng-content>\n </table>\n </div>\n</section>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-platform-tabs',\n imports: [],\n templateUrl: './platform-tabs.html',\n styleUrl: './platform-tabs.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlatformTabs {}\n","<div class=\"border-b border-(--rt-border-color) px-4\">\n <div class=\"flex flex-wrap gap-2 py-3\">\n <ng-content></ng-content>\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-platform-sticky-action-bar',\n imports: [],\n templateUrl: './platform-sticky-action-bar.html',\n styleUrl: './platform-sticky-action-bar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlatformStickyActionBar {}\n","<section\n class=\"sticky bottom-4 z-10 flex flex-col gap-3 rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-lg md:flex-row md:items-center md:justify-between\"\n>\n <div class=\"text-sm\">\n <ng-content select=\"[action-message]\"></ng-content>\n </div>\n\n <div class=\"flex flex-wrap gap-2\">\n <ng-content select=\"[action-buttons]\"></ng-content>\n </div>\n</section>\n","export const PLATFORM_SCOPE_LABEL: Record<'PLATFORM' | 'APP' | 'ORG', string> = {\n PLATFORM: 'Platform',\n APP: 'Application',\n ORG: 'Organization',\n};\n\nexport const PLATFORM_STATUS_LABEL: Record<string, string> = {\n ACTIVE: 'Active',\n INACTIVE: 'Inactive',\n DRAFT: 'Draft',\n SUSPENDED: 'Suspended',\n PENDING: 'Pending',\n DISABLED: 'Disabled',\n};\n\nexport function platformScopeLabel(scope: string | null | undefined): string {\n if (!scope) return '—';\n return PLATFORM_SCOPE_LABEL[scope as keyof typeof PLATFORM_SCOPE_LABEL] ?? humanizeEnum(scope);\n}\n\nexport function platformStatusLabel(status: string | null | undefined): string {\n if (!status) return '—';\n return PLATFORM_STATUS_LABEL[status] ?? humanizeEnum(status);\n}\n\nexport function humanizeEnum(value: string): string {\n return value\n .toLowerCase()\n .split('_')\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(' ');\n}\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { platformScopeLabel } from '../../../ui/platform-label';\n\n@Component({\n selector: 'rolatech-platform-scope-badge',\n imports: [],\n templateUrl: './platform-scope-badge.html',\n styleUrl: './platform-scope-badge.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class PlatformScopeBadge {\n readonly scope = input<'PLATFORM' | 'APP' | 'ORG' | string>('PLATFORM');\n\n readonly label = computed(() => {\n switch (this.scope()) {\n case 'PLATFORM':\n return platformScopeLabel('PLATFORM');\n case 'APP':\n return platformScopeLabel('APP');\n case 'ORG':\n return platformScopeLabel('ORG');\n default:\n return platformScopeLabel(this.scope());\n }\n });\n}\n","<span class=\"inline-flex rounded-full border border-(--rt-border-color) bg-(--rt-raised-background) px-2 py-1 text-xs text-(--rt-text-secondary)\">\n {{ label() }}\n</span>\n","import { ChangeDetectionStrategy, Component, computed, input, ViewEncapsulation } from '@angular/core';\nimport { platformStatusLabel } from '../../../ui/platform-label';\n\n@Component({\n selector: 'rolatech-platform-status-badge',\n imports: [],\n templateUrl: './platform-status-badge.html',\n styleUrl: './platform-status-badge.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'block' },\n})\nexport class PlatformStatusBadge {\n readonly status = input<string | null | undefined>(null);\n readonly label = computed(() => platformStatusLabel(this.status()));\n\n readonly badgeClass = computed(() => {\n switch (this.status()) {\n case 'ACTIVE':\n return 'border-emerald-200 bg-emerald-50 text-emerald-700';\n case 'INACTIVE':\n case 'FAILED':\n case 'DISABLED':\n return 'border-rose-200 bg-rose-50 text-rose-700';\n case 'DRAFT':\n case 'PENDING':\n return 'border-amber-200 bg-amber-50 text-amber-700';\n default:\n return 'border-(--rt-border-color) bg-(--rt-raised-background) text-(--rt-text-secondary)';\n }\n });\n}\n","<span\n class=\"inline-flex rounded-full border border-(--rt-border-color) px-2 py-1 text-xs font-semibold uppercase tracking-wide\"\n [class]=\"badgeClass()\"\n>\n {{ label() }}\n</span>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-platform-group-panel',\n imports: [],\n templateUrl: './platform-group-panel.html',\n styleUrl: './platform-group-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlatformGroupPanel {}\n","<details class=\"overflow-hidden rounded-2xl border border-(--rt-border-color) bg-card shadow-sm\" open>\n <summary class=\"flex cursor-pointer list-none items-center justify-between gap-3 px-4 py-3\">\n <div class=\"min-w-0\">\n <ng-content select=\"[group-header]\"></ng-content>\n </div>\n\n <div class=\"flex items-center gap-2\">\n <ng-content select=\"[group-actions]\"></ng-content>\n </div>\n </summary>\n\n <div class=\"border-t border-(--rt-border-color)\">\n <ng-content></ng-content>\n </div>\n</details>\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n selector: 'rolatech-platform-detail-panel',\n imports: [],\n templateUrl: './platform-detail-panel.html',\n styleUrl: './platform-detail-panel.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PlatformDetailPanel {}\n","<section class=\"rounded-2xl border border-(--rt-border-color) bg-card p-4 shadow-sm\">\n <div class=\"mb-4\">\n <h2 class=\"text-base font-semibold\">\n <ng-content select=\"[panel-title]\"></ng-content>\n </h2>\n <p class=\"mt-1 text-sm text-muted-foreground\">\n <ng-content select=\"[panel-description]\"></ng-content>\n </p>\n </div>\n\n <div>\n <ng-content></ng-content>\n </div>\n</section>\n","import { EnvironmentProviders } from '@angular/core';\nimport { PLATFORM_ADMIN_ROLES, accessMatchGuard, provideRoleAwareFeature } from '@rolatech/angular-auth';\n\nexport function provideAngularPlatformFeature(): EnvironmentProviders {\n return provideRoleAwareFeature({\n routes: [\n {\n path: 'platform',\n canMatch: [\n accessMatchGuard({\n authenticated: true,\n anyPlatformRole: [...PLATFORM_ADMIN_ROLES],\n }),\n ],\n loadChildren: () => import('./lib/routes/platform-admin.routes').then((m) => m.PLATFORM_ADMIN_ROUTES),\n },\n ],\n navigation: [\n {\n id: 'platform',\n title: 'Platform',\n icon: 'hub',\n order: 700,\n access: {\n authenticated: true,\n anyPlatformRole: [...PLATFORM_ADMIN_ROLES],\n },\n children: [\n {\n id: 'platform-applications',\n title: 'Applications',\n icon: 'apps',\n routerLink: '/platform/applications',\n access: {\n authenticated: true,\n anyPlatformRole: [...PLATFORM_ADMIN_ROLES],\n },\n },\n {\n id: 'platform-users',\n title: 'Users',\n icon: 'group',\n routerLink: '/platform/users',\n access: {\n authenticated: true,\n anyPlatformRole: [...PLATFORM_ADMIN_ROLES],\n },\n },\n {\n id: 'platform-endpoints',\n title: 'Endpoints',\n icon: 'route',\n routerLink: '/platform/endpoints',\n access: {\n authenticated: true,\n anyPlatformRole: [...PLATFORM_ADMIN_ROLES],\n },\n },\n {\n id: 'platform-service-registry',\n title: 'Service Registry',\n icon: 'dns',\n routerLink: '/platform/service-registry',\n access: {\n authenticated: true,\n anyPlatformRole: [...PLATFORM_ADMIN_ROLES],\n },\n },\n {\n id: 'platform-clients',\n title: 'Auth Clients',\n icon: 'key',\n routerLink: '/platform/clients',\n access: {\n authenticated: true,\n anyPlatformRole: [...PLATFORM_ADMIN_ROLES],\n },\n },\n {\n id: 'platform-roles',\n title: 'Roles',\n icon: 'shield',\n routerLink: '/platform/roles',\n access: {\n authenticated: true,\n anyPlatformRole: [...PLATFORM_ADMIN_ROLES],\n },\n },\n ],\n },\n ],\n });\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@rolatech/angular-platform",
3
+ "version": "20.3.0-beta.2",
4
+ "private": false,
5
+ "peerDependencies": {
6
+ "@angular/common": "^21.2.0",
7
+ "@angular/core": "^21.2.0"
8
+ },
9
+ "sideEffects": false,
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/viablecell/rolatech-web.git"
13
+ },
14
+ "license": "MIT",
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "exports": {
19
+ ".": {
20
+ "sass": "./themes/styles.scss",
21
+ "types": "./types/rolatech-angular-platform.d.ts",
22
+ "default": "./fesm2022/rolatech-angular-platform.mjs"
23
+ },
24
+ "./package.json": {
25
+ "default": "./package.json"
26
+ }
27
+ },
28
+ "module": "fesm2022/rolatech-angular-platform.mjs",
29
+ "typings": "types/rolatech-angular-platform.d.ts",
30
+ "dependencies": {
31
+ "tslib": "^2.3.0"
32
+ }
33
+ }