@rolatech/angular-platform 20.3.0-beta.2 → 20.3.0-beta.3
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/fesm2022/rolatech-angular-platform-application-create-CwJeutMN.mjs +138 -0
- package/fesm2022/rolatech-angular-platform-application-create-CwJeutMN.mjs.map +1 -0
- package/fesm2022/rolatech-angular-platform-application-detail-Bzgydts3.mjs +54 -0
- package/fesm2022/rolatech-angular-platform-application-detail-Bzgydts3.mjs.map +1 -0
- package/fesm2022/rolatech-angular-platform-application-member-detail-D3ESzMBX.mjs +72 -0
- package/fesm2022/rolatech-angular-platform-application-member-detail-D3ESzMBX.mjs.map +1 -0
- package/fesm2022/rolatech-angular-platform-application-member-index-D7po13YP.mjs +135 -0
- package/fesm2022/rolatech-angular-platform-application-member-index-D7po13YP.mjs.map +1 -0
- package/fesm2022/rolatech-angular-platform-application-organization-index-CX4KNdF7.mjs +55 -0
- package/fesm2022/rolatech-angular-platform-application-organization-index-CX4KNdF7.mjs.map +1 -0
- package/fesm2022/rolatech-angular-platform-application-role-index-BymGtx1Z.mjs +67 -0
- package/fesm2022/rolatech-angular-platform-application-role-index-BymGtx1Z.mjs.map +1 -0
- package/fesm2022/{rolatech-angular-platform-application-routes-DE5CJMgn.mjs → rolatech-angular-platform-application-routes-kbstcOg1.mjs} +16 -8
- package/fesm2022/rolatech-angular-platform-application-routes-kbstcOg1.mjs.map +1 -0
- package/fesm2022/rolatech-angular-platform-application-workspace-shell-MPkdKJ2X.mjs +73 -0
- package/fesm2022/rolatech-angular-platform-application-workspace-shell-MPkdKJ2X.mjs.map +1 -0
- package/fesm2022/rolatech-angular-platform-role-permission-index-CkFgu7BW.mjs +139 -0
- package/fesm2022/rolatech-angular-platform-role-permission-index-CkFgu7BW.mjs.map +1 -0
- package/fesm2022/{rolatech-angular-platform-role-permission-page-DslhArZQ.mjs → rolatech-angular-platform-role-permission-page-CgRpVi8e.mjs} +12 -3
- package/fesm2022/rolatech-angular-platform-role-permission-page-CgRpVi8e.mjs.map +1 -0
- package/fesm2022/{rolatech-angular-platform-role-permission-page.routes-IiX17wDW.mjs → rolatech-angular-platform-role-permission-page.routes-D8wuIMCR.mjs} +2 -2
- package/fesm2022/{rolatech-angular-platform-role-permission-page.routes-IiX17wDW.mjs.map → rolatech-angular-platform-role-permission-page.routes-D8wuIMCR.mjs.map} +1 -1
- package/fesm2022/rolatech-angular-platform.mjs +19 -3
- package/fesm2022/rolatech-angular-platform.mjs.map +1 -1
- package/package.json +1 -1
- package/fesm2022/rolatech-angular-platform-application-create-DqPMquaO.mjs +0 -129
- package/fesm2022/rolatech-angular-platform-application-create-DqPMquaO.mjs.map +0 -1
- package/fesm2022/rolatech-angular-platform-application-detail-BoITs_yE.mjs +0 -54
- package/fesm2022/rolatech-angular-platform-application-detail-BoITs_yE.mjs.map +0 -1
- package/fesm2022/rolatech-angular-platform-application-organization-index-D7TJ8CID.mjs +0 -54
- package/fesm2022/rolatech-angular-platform-application-organization-index-D7TJ8CID.mjs.map +0 -1
- package/fesm2022/rolatech-angular-platform-application-role-index-9_XVRBgD.mjs +0 -66
- package/fesm2022/rolatech-angular-platform-application-role-index-9_XVRBgD.mjs.map +0 -1
- package/fesm2022/rolatech-angular-platform-application-routes-DE5CJMgn.mjs.map +0 -1
- package/fesm2022/rolatech-angular-platform-platform-role-index-8kRxDJiW.mjs +0 -35
- package/fesm2022/rolatech-angular-platform-platform-role-index-8kRxDJiW.mjs.map +0 -1
- package/fesm2022/rolatech-angular-platform-role-permission-page-DslhArZQ.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
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;;;;;"}
|