@masterteam/delegations 0.0.30 → 0.0.32

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.
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-delegations.mjs","sources":["../../../../packages/masterteam/delegations/src/lib/delegations/delegation-status-chip/delegation-status-chip.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.actions.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.model.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.state.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.facade.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-scope-display.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-user-entity.ts","../../../../packages/masterteam/delegations/src/lib/delegations/start-session-dialog/start-session-dialog.ts","../../../../packages/masterteam/delegations/src/lib/delegations/start-session-dialog/start-session-dialog.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-candidates-prompt-dialog/delegation-candidates-prompt-dialog.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-candidates-prompt-dialog/delegation-candidates-prompt-dialog.html","../../../../packages/masterteam/delegations/src/lib/delegations/topbar-delegation-menu/topbar-delegation-menu.ts","../../../../packages/masterteam/delegations/src/lib/delegations/topbar-delegation-menu/topbar-delegation-menu.html","../../../../packages/masterteam/delegations/src/store/delegations/delegations.actions.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.model.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.state.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.facade.ts","../../../../packages/masterteam/delegations/src/lib/delegations/reject-delegation-dialog/reject-delegation-dialog.ts","../../../../packages/masterteam/delegations/src/lib/delegations/reject-delegation-dialog/reject-delegation-dialog.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-scope-options.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/scope-picker/scope-picker.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/scope-picker/scope-picker.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/delegation-form.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/delegation-form.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-detail-drawer/delegation-detail-drawer.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-detail-drawer/delegation-detail-drawer.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegations-list/delegations-list.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations-list/delegations-list.html","../../../../packages/masterteam/delegations/src/interceptors/app-delegation.interceptor.ts","../../../../packages/masterteam/delegations/src/store/index.ts","../../../../packages/masterteam/delegations/src/public-api.ts","../../../../packages/masterteam/delegations/src/masterteam-delegations.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Chip } from '@masterteam/components/chip';\nimport { DelegationEffectiveStatus } from '../../../store/delegations/delegations.model';\n\ninterface StatusVisual {\n i18nKey: string;\n styleClass: string;\n}\n\nconst STATUS_VISUAL: Record<DelegationEffectiveStatus, StatusVisual> = {\n Active: {\n i18nKey: 'delegations.status.active',\n styleClass: 'mt-status-chip mt-status-chip--active',\n },\n Scheduled: {\n i18nKey: 'delegations.status.scheduled',\n styleClass: 'mt-status-chip mt-status-chip--scheduled',\n },\n PendingApproval: {\n i18nKey: 'delegations.status.pendingApproval',\n styleClass: 'mt-status-chip mt-status-chip--pending',\n },\n InactiveToday: {\n i18nKey: 'delegations.status.inactiveToday',\n styleClass: 'mt-status-chip mt-status-chip--scheduled',\n },\n Expired: {\n i18nKey: 'delegations.status.expired',\n styleClass: 'mt-status-chip mt-status-chip--expired',\n },\n Rejected: {\n i18nKey: 'delegations.status.rejected',\n styleClass: 'mt-status-chip mt-status-chip--rejected',\n },\n Cancelled: {\n i18nKey: 'delegations.status.cancelled',\n styleClass: 'mt-status-chip mt-status-chip--cancelled',\n },\n};\n\n@Component({\n selector: 'mt-delegation-status-chip',\n standalone: true,\n imports: [Chip, TranslocoDirective],\n template: `\n <ng-container *transloco=\"let t\">\n @let v = visual();\n <mt-chip [label]=\"t(v.i18nKey)\" [styleClass]=\"v.styleClass\"></mt-chip>\n </ng-container>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n :host ::ng-deep .mt-status-chip {\n font-weight: 500;\n font-size: 0.75rem;\n border-radius: 9999px;\n padding-inline: 0.625rem;\n padding-block: 0.125rem;\n }\n :host ::ng-deep .mt-status-chip--active {\n background-color: rgb(220 252 231);\n color: rgb(22 101 52);\n }\n :host ::ng-deep .mt-status-chip--scheduled {\n background-color: rgb(219 234 254);\n color: rgb(30 64 175);\n }\n :host ::ng-deep .mt-status-chip--pending {\n background-color: rgb(254 249 195);\n color: rgb(133 77 14);\n }\n :host ::ng-deep .mt-status-chip--expired {\n background-color: rgb(243 244 246);\n color: rgb(75 85 99);\n }\n :host ::ng-deep .mt-status-chip--rejected {\n background-color: rgb(254 226 226);\n color: rgb(153 27 27);\n }\n :host ::ng-deep .mt-status-chip--cancelled {\n background-color: rgb(229 231 235);\n color: rgb(55 65 81);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--active {\n background-color: rgba(34, 197, 94, 0.2);\n color: rgb(134 239 172);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--scheduled {\n background-color: rgba(59, 130, 246, 0.2);\n color: rgb(147 197 253);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--pending {\n background-color: rgba(234, 179, 8, 0.2);\n color: rgb(253 224 71);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--expired {\n background-color: rgba(148, 163, 184, 0.2);\n color: rgb(203 213 225);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--rejected {\n background-color: rgba(239, 68, 68, 0.2);\n color: rgb(252 165 165);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--cancelled {\n background-color: rgba(148, 163, 184, 0.15);\n color: rgb(203 213 225);\n }\n `,\n ],\n})\nexport class DelegationStatusChip {\n readonly status = input.required<DelegationEffectiveStatus>();\n\n protected readonly visual = computed<StatusVisual>(\n () => STATUS_VISUAL[this.status()] ?? STATUS_VISUAL.Scheduled,\n );\n}\n","import { DelegationRow } from '../delegations/delegations.model';\nimport { DelegationSessionInvalidationReason } from './delegation-session.model';\n\n/** Fetch the active delegations the current user may start (user/activedelegations). */\nexport class LoadDelegationCandidates {\n static readonly type = '[DelegationSession] Load Candidates';\n}\n\n/** Start a delegated session for the given assignment row. */\nexport class StartDelegationSession {\n static readonly type = '[DelegationSession] Start';\n constructor(public delegation: DelegationRow) {}\n}\n\n/** End the current delegated session. Client-local only (doc 05). */\nexport class EndDelegationSession {\n static readonly type = '[DelegationSession] End';\n constructor(public reason: DelegationSessionInvalidationReason = 'Manual') {}\n}\n\n/** Switch directly from the current session to another delegation. */\nexport class SwitchDelegationSession {\n static readonly type = '[DelegationSession] Switch';\n constructor(public delegation: DelegationRow) {}\n}\n","import { LoadingStateShape } from '../utils/state-helpers';\nimport { DelegationRow } from '../delegations/delegations.model';\n\n/**\n * Active delegated session. Memory-only by design (doc 05):\n * the delegation token is never persisted to long-lived storage.\n *\n * `delegation.delegatedUser` is the executed-by (actual logged-in) user and\n * `delegation.delegator` is the on-behalf-of user — both already present on the\n * row from the active-delegations endpoint.\n */\nexport interface ActiveDelegationSession {\n token: string;\n delegation: DelegationRow;\n}\n\nexport type DelegationSessionInvalidationReason =\n | 'TokenInvalid'\n | 'SessionMismatch'\n | 'ScopeChanged'\n | 'Forbidden'\n | 'Logout'\n | 'UserSwitch'\n | 'TenantSwitch'\n | 'AppSwitch'\n | 'Manual';\n\nexport enum DelegationSessionActionKey {\n LoadCandidates = 'loadCandidates',\n StartSession = 'startSession',\n}\n\nexport interface DelegationSessionStateModel extends LoadingStateShape<DelegationSessionActionKey> {\n active: ActiveDelegationSession | null;\n candidates: DelegationRow[];\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport {\n Action,\n Actions,\n ofActionDispatched,\n ofActionSuccessful,\n Selector,\n State,\n StateContext,\n Store,\n} from '@ngxs/store';\nimport { handleApiRequest } from '@masterteam/components';\nimport { EMPTY, switchMap } from 'rxjs';\nimport { Response } from '../delegations/api.model';\nimport {\n DelegationPage,\n DelegationRow,\n} from '../delegations/delegations.model';\nimport {\n EndDelegationSession,\n LoadDelegationCandidates,\n StartDelegationSession,\n SwitchDelegationSession,\n} from './delegation-session.actions';\nimport {\n ActiveDelegationSession,\n DelegationSessionActionKey,\n DelegationSessionStateModel,\n} from './delegation-session.model';\n\nconst BASE = 'identity/delegations';\n\n// Action shells matching gateway-auth type strings - loose coupling, matched by\n// `type` only so this package does not depend on @masterteam/gateway-auth.\nclass GatewayLoginSuccessShell {\n static readonly type = '[Auth] Login Success';\n}\nclass GatewayLogoutShell {\n static readonly type = '[Auth] Logout';\n}\nclass GatewayLaunchApplicationShell {\n static readonly type = '[Auth] Launch Application';\n}\nclass GatewaySetAppSessionShell {\n static readonly type = '[Auth] Set App Session';\n}\nclass GatewayClearAppSessionShell {\n static readonly type = '[Auth] Clear App Session';\n}\nclass GatewayClearAllAppSessionsShell {\n static readonly type = '[Auth] Clear All App Sessions';\n}\n\nconst CLEAR_CANDIDATE_REASONS = [\n 'Logout',\n 'UserSwitch',\n 'TenantSwitch',\n 'AppSwitch',\n] as const;\n\nfunction shouldClearCandidates(reason: string): boolean {\n return CLEAR_CANDIDATE_REASONS.some((candidate) => candidate === reason);\n}\n\nfunction canStart(row: DelegationRow): boolean {\n return (\n row.effectiveStatus === 'Active' &&\n row.allowedActions?.includes('StartSession')\n );\n}\n\n@State<DelegationSessionStateModel>({\n name: 'delegationSession',\n defaults: {\n active: null,\n candidates: [],\n loadingActive: [],\n errors: {},\n },\n})\n@Injectable()\nexport class DelegationSessionState {\n private http = inject(HttpClient);\n private actions$ = inject(Actions);\n private store = inject(Store);\n\n constructor() {\n this.actions$\n .pipe(ofActionSuccessful(GatewayLoginSuccessShell))\n .subscribe(() => this.store.dispatch(new LoadDelegationCandidates()));\n\n this.actions$\n .pipe(ofActionDispatched(GatewayLogoutShell))\n .subscribe(() => this.store.dispatch(new EndDelegationSession('Logout')));\n\n this.actions$\n .pipe(\n ofActionDispatched(\n GatewayLaunchApplicationShell,\n GatewaySetAppSessionShell,\n GatewayClearAppSessionShell,\n GatewayClearAllAppSessionsShell,\n ),\n )\n .subscribe(() =>\n this.store.dispatch(new EndDelegationSession('AppSwitch')),\n );\n\n this.actions$\n .pipe(\n ofActionSuccessful(\n GatewayLaunchApplicationShell,\n GatewaySetAppSessionShell,\n ),\n )\n .subscribe(() => this.store.dispatch(new LoadDelegationCandidates()));\n }\n\n // ---------------------------------------------------------------------------\n // Selectors\n // ---------------------------------------------------------------------------\n\n @Selector()\n static getActive(\n state: DelegationSessionStateModel,\n ): ActiveDelegationSession | null {\n return state.active;\n }\n\n @Selector()\n static getCandidates(state: DelegationSessionStateModel): DelegationRow[] {\n return state.candidates;\n }\n\n @Selector()\n static isDelegated(state: DelegationSessionStateModel): boolean {\n return !!state.active;\n }\n\n @Selector()\n static getLoadingActive(state: DelegationSessionStateModel): string[] {\n return state.loadingActive;\n }\n\n @Selector()\n static getErrors(\n state: DelegationSessionStateModel,\n ): Record<string, string | null | undefined> {\n return state.errors;\n }\n\n // ---------------------------------------------------------------------------\n // Actions\n // ---------------------------------------------------------------------------\n\n @Action(LoadDelegationCandidates)\n loadCandidates(ctx: StateContext<DelegationSessionStateModel>) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/user/activedelegations`,\n );\n return handleApiRequest({\n ctx,\n key: DelegationSessionActionKey.LoadCandidates,\n request$: req$,\n onSuccess: (response) => ({\n candidates: (response.data?.items ?? []).filter(canStart),\n }),\n });\n }\n\n @Action(StartDelegationSession)\n start(\n ctx: StateContext<DelegationSessionStateModel>,\n { delegation }: StartDelegationSession,\n ) {\n const req$ = this.http.post<Response<string>>(\n `${BASE}/delegationToken/${delegation.delegationId}`,\n {},\n {\n headers: new HttpHeaders({ noMessage: 'true' }),\n },\n );\n return handleApiRequest({\n ctx,\n key: DelegationSessionActionKey.StartSession,\n request$: req$,\n onSuccess: (response) => ({\n active: { token: response.data, delegation } as ActiveDelegationSession,\n }),\n });\n }\n\n @Action(EndDelegationSession)\n end(\n ctx: StateContext<DelegationSessionStateModel>,\n { reason }: EndDelegationSession,\n ) {\n // Client-local only — there is no server end-session endpoint (doc 05).\n ctx.patchState({\n active: null,\n ...(shouldClearCandidates(reason) ? { candidates: [] } : {}),\n });\n return EMPTY;\n }\n\n @Action(SwitchDelegationSession)\n switch(\n ctx: StateContext<DelegationSessionStateModel>,\n { delegation }: SwitchDelegationSession,\n ) {\n return this.store\n .dispatch(new EndDelegationSession('Manual'))\n .pipe(\n switchMap(() =>\n this.store.dispatch(new StartDelegationSession(delegation)),\n ),\n );\n }\n}\n","import { computed, inject, Injectable } from '@angular/core';\nimport { select, Store } from '@ngxs/store';\nimport {\n EndDelegationSession,\n LoadDelegationCandidates,\n StartDelegationSession,\n SwitchDelegationSession,\n} from './delegation-session.actions';\nimport {\n DelegationSessionActionKey,\n DelegationSessionInvalidationReason,\n} from './delegation-session.model';\nimport { DelegationSessionState } from './delegation-session.state';\nimport { DelegationRow } from '../delegations/delegations.model';\n\n@Injectable({ providedIn: 'root' })\nexport class DelegationSessionFacade {\n private readonly store = inject(Store);\n\n // ---------------------------------------------------------------------------\n // Data slices\n // ---------------------------------------------------------------------------\n readonly active = select(DelegationSessionState.getActive);\n readonly candidates = select(DelegationSessionState.getCandidates);\n readonly isDelegated = select(DelegationSessionState.isDelegated);\n\n private readonly loadingActive = select(\n DelegationSessionState.getLoadingActive,\n );\n\n // ---------------------------------------------------------------------------\n // Derived (interceptor + topbar)\n // ---------------------------------------------------------------------------\n /** Raw delegation token for the `app-delegation` header. */\n readonly token = computed(() => this.active()?.token ?? null);\n /** On-behalf-of (delegator). */\n readonly onBehalfOf = computed(\n () => this.active()?.delegation.delegator ?? null,\n );\n /** Executed-by (actual logged-in / delegated user). */\n readonly executedBy = computed(\n () => this.active()?.delegation.delegatedUser ?? null,\n );\n readonly hasCandidates = computed(() => this.candidates().length > 0);\n\n readonly isStarting = computed(() =>\n this.loadingActive().includes(DelegationSessionActionKey.StartSession),\n );\n readonly isLoadingCandidates = computed(() =>\n this.loadingActive().includes(DelegationSessionActionKey.LoadCandidates),\n );\n\n // ---------------------------------------------------------------------------\n // Dispatchers\n // ---------------------------------------------------------------------------\n loadCandidates() {\n return this.store.dispatch(new LoadDelegationCandidates());\n }\n startSession(delegation: DelegationRow) {\n return this.store.dispatch(new StartDelegationSession(delegation));\n }\n switchSession(delegation: DelegationRow) {\n return this.store.dispatch(new SwitchDelegationSession(delegation));\n }\n endSession(reason: DelegationSessionInvalidationReason = 'Manual') {\n return this.store.dispatch(new EndDelegationSession(reason));\n }\n}\n","import type {\n DelegationDisplayValue,\n DelegationScopeAction,\n DelegationScopeTarget,\n} from '../../store/delegations/delegations.model';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction readLocalizedValue(\n source: Record<string, unknown>,\n preferredLanguage: string,\n): string | null {\n const normalizedLanguage = preferredLanguage.toLowerCase();\n const baseLanguage = normalizedLanguage.split('-')[0];\n const preferredKeys = normalizedLanguage.startsWith('ar')\n ? ['defaultAr', 'ar', normalizedLanguage, baseLanguage, 'defaultEn', 'en']\n : ['defaultEn', 'en', normalizedLanguage, baseLanguage, 'defaultAr', 'ar'];\n\n for (const key of preferredKeys) {\n const value = source[key];\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n\n for (const key of ['en', 'ar', 'defaultEn', 'defaultAr']) {\n const value = source[key];\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n\n return null;\n}\n\nfunction parseJsonRecord(value: string): Record<string, unknown> | null {\n const trimmed = value.trim();\n\n if (!trimmed.startsWith('{') || !trimmed.endsWith('}')) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(trimmed);\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\nfunction resolveDisplayValue(\n value: unknown,\n preferredLanguage: string,\n): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n\n const parsed = parseJsonRecord(trimmed);\n if (parsed) {\n return (\n readLocalizedValue(parsed, preferredLanguage) ??\n readDisplayValue(\n parsed,\n ['displayName', 'displayLabel', 'label'],\n preferredLanguage,\n ) ??\n trimmed\n );\n }\n\n return trimmed;\n }\n\n if (!isRecord(value)) {\n return null;\n }\n\n return (\n readLocalizedValue(value, preferredLanguage) ??\n readDisplayValue(\n value,\n [\n 'displayName',\n 'displayLabel',\n 'operationDisplayName',\n 'operationLabel',\n 'label',\n 'name',\n 'value',\n ],\n preferredLanguage,\n )\n );\n}\n\nfunction readDisplayValue(\n source: Record<string, unknown>,\n keys: string[],\n preferredLanguage: string,\n): string | null {\n for (const key of keys) {\n const value = resolveDisplayValue(source[key], preferredLanguage);\n if (value) {\n return value;\n }\n }\n\n return null;\n}\n\nfunction resolveDisplayOrHumanizedKey(\n source: Record<string, unknown>,\n displayKeys: string[],\n fallbackKey?: string | null,\n preferredLanguage = 'en',\n): string {\n const displayValue = readDisplayValue(source, displayKeys, preferredLanguage);\n if (displayValue) {\n return displayValue;\n }\n\n return humanizeDelegationKey(fallbackKey);\n}\n\nexport function humanizeDelegationKey(value?: string | null): string {\n if (!value) {\n return '';\n }\n\n const normalized = value\n .replace(/([a-z\\d])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/[._-]+/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n if (!normalized) {\n return '';\n }\n\n return normalized.replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function formatDelegationDisplayValue(\n value: DelegationDisplayValue | undefined,\n preferredLanguage = 'en',\n): string {\n return resolveDisplayValue(value, preferredLanguage) ?? '';\n}\n\nexport function formatDelegationTargetLabel(\n target: DelegationScopeTarget,\n preferredLanguage = 'en',\n): string {\n return resolveDisplayOrHumanizedKey(\n target as unknown as Record<string, unknown>,\n ['displayName', 'displayLabel', 'label'],\n target.targetKey,\n preferredLanguage,\n );\n}\n\nexport function formatDelegationActionLabel(\n action: DelegationScopeAction,\n preferredLanguage = 'en',\n): string {\n return resolveDisplayOrHumanizedKey(\n action as unknown as Record<string, unknown>,\n [\n 'displayName',\n 'displayLabel',\n 'operationDisplayName',\n 'operationLabel',\n 'label',\n ],\n action.operationKey,\n preferredLanguage,\n );\n}\n\nexport function formatDelegationScopeSummary(\n value: DelegationDisplayValue | undefined,\n preferredLanguage = 'en',\n): string {\n return formatDelegationDisplayValue(value, preferredLanguage);\n}\n","import type {\n EntityData,\n EntityUserValue,\n} from '@masterteam/components/entities';\nimport type { DelegationParty } from '../../store/delegations/delegations.model';\n\nexport function toDelegationUserValue(\n party: DelegationParty | null | undefined,\n): EntityUserValue {\n const displayName = party?.displayName?.trim() || party?.email?.trim() || '';\n\n return {\n id: party?.userId,\n displayName,\n email: party?.email ?? undefined,\n };\n}\n\nexport function toDelegationUserEntity(\n party: DelegationParty | null | undefined,\n options: { showEmail?: boolean; label?: string } = {},\n): EntityData {\n return {\n name: options.label ?? '',\n viewType: 'User',\n value: toDelegationUserValue(party),\n configuration: {\n hideLabel: !options.label,\n showDisplayName: true,\n showEmail: options.showEmail ?? true,\n },\n };\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { EntityPreview } from '@masterteam/components/entities';\nimport { ToastService } from '@masterteam/components/toast';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\nimport { formatDelegationScopeSummary } from '../delegation-scope-display';\nimport { toDelegationUserEntity } from '../delegation-user-entity';\n\n/**\n * Confirmation dialog before starting (or switching to) a delegated session.\n * Calls the facade, which POSTs to `delegationToken/{id}` and stores the raw\n * token in memory only.\n */\n@Component({\n selector: 'mt-start-session-dialog',\n imports: [CommonModule, Button, EntityPreview, TranslocoDirective],\n templateUrl: './start-session-dialog.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class StartSessionDialog {\n readonly delegation = input.required<DelegationRow>();\n readonly intent = input<'start' | 'switch'>('start');\n\n private readonly ref: ModalRef = inject(ModalRef);\n private readonly facade = inject(DelegationSessionFacade);\n private readonly toast = inject(ToastService);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly isBusy = this.facade.isStarting;\n\n protected readonly bodyKey = computed(() =>\n this.intent() === 'switch'\n ? 'delegations.session.switchConfirmBody'\n : 'delegations.session.startConfirmBody',\n );\n protected readonly confirmLabelKey = computed(() =>\n this.intent() === 'switch'\n ? 'delegations.action.switchSession'\n : 'delegations.action.startSession',\n );\n protected readonly successMessageKey = computed(() =>\n this.intent() === 'switch'\n ? 'delegations.session.switched'\n : 'delegations.session.started',\n );\n\n protected formatScopeSummary(summary: DelegationRow['scopeSummary']): string {\n return formatDelegationScopeSummary(\n summary,\n this.transloco.getActiveLang(),\n );\n }\n\n protected userEntity(party: DelegationRow['delegator']) {\n return toDelegationUserEntity(party, { showEmail: false });\n }\n\n confirm(): void {\n const row = this.delegation();\n const op$ =\n this.intent() === 'switch'\n ? this.facade.switchSession(row)\n : this.facade.startSession(row);\n op$.subscribe({\n next: () => {\n this.toast.success(this.transloco.translate(this.successMessageKey()));\n this.ref.close(true);\n },\n error: () => {\n /* error surfaced via shared toast pipeline; keep dialog open */\n },\n });\n }\n\n cancel(): void {\n this.ref.close(false);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col gap-4 p-2\">\n <div class=\"flex items-start gap-3\">\n <div class=\"flex flex-col min-w-0\">\n <mt-entity-preview\n [data]=\"userEntity(delegation().delegator)\"\n ></mt-entity-preview>\n @if (delegation().scopeSummary) {\n <div class=\"text-xs text-gray-500 mt-1\">\n {{ t(\"delegations.column.scopeSummary\") }}:\n {{ formatScopeSummary(delegation().scopeSummary) }}\n </div>\n }\n </div>\n </div>\n\n <p class=\"text-sm text-gray-600 leading-relaxed\">\n {{ t(bodyKey()) }}\n </p>\n\n <div class=\"flex justify-end gap-2 pt-2 border-t border-gray-200\">\n <mt-button\n variant=\"outlined\"\n color=\"secondary\"\n [label]=\"t('delegations.common.cancel')\"\n [disabled]=\"isBusy()\"\n (click)=\"cancel()\"\n ></mt-button>\n <mt-button\n color=\"primary\"\n icon=\"user.users-check\"\n [label]=\"t(confirmLabelKey())\"\n [loading]=\"isBusy()\"\n (click)=\"confirm()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { EntityPreview } from '@masterteam/components/entities';\nimport { Icon } from '@masterteam/icons';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\nimport { formatDelegationScopeSummary } from '../delegation-scope-display';\nimport { toDelegationUserEntity } from '../delegation-user-entity';\n\n/**\n * Post-login candidate prompt. It intentionally only lets the user choose a\n * delegation; the existing StartSessionDialog still performs explicit consent.\n */\n@Component({\n selector: 'mt-delegation-candidates-prompt-dialog',\n imports: [CommonModule, Button, EntityPreview, Icon, TranslocoDirective],\n templateUrl: './delegation-candidates-prompt-dialog.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationCandidatesPromptDialog {\n readonly candidates = input.required<DelegationRow[]>();\n\n private readonly ref: ModalRef = inject(ModalRef);\n private readonly transloco = inject(TranslocoService);\n\n protected formatScopeSummary(summary: DelegationRow['scopeSummary']): string {\n return formatDelegationScopeSummary(\n summary,\n this.transloco.getActiveLang(),\n );\n }\n\n protected userEntity(party: DelegationRow['delegator']) {\n return toDelegationUserEntity(party, { showEmail: false });\n }\n\n protected select(row: DelegationRow): void {\n this.ref.close(row);\n }\n\n protected close(): void {\n this.ref.close(null);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col gap-4 p-2\">\n <p class=\"text-sm leading-relaxed text-gray-600\">\n {{ t(\"delegations.session.promptBody\") }}\n </p>\n\n <div class=\"flex max-h-80 flex-col gap-2 overflow-y-auto pr-1\">\n @for (cand of candidates(); track cand.delegationId) {\n <button\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-between gap-3 rounded-2xl border border-solid border-surface-200 bg-surface-0 px-3 py-3 text-start transition-colors hover:border-primary-300 hover:bg-primary-50/50 focus-visible:border-primary-400 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n [attr.aria-label]=\"\n t('delegations.session.promptStartAria', {\n delegatorName: cand.delegator.displayName,\n })\n \"\n (click)=\"select(cand)\"\n >\n <span class=\"flex min-w-0 items-center gap-3\">\n <span class=\"flex min-w-0 flex-col\">\n <mt-entity-preview\n [data]=\"userEntity(cand.delegator)\"\n ></mt-entity-preview>\n @if (cand.scopeSummary) {\n @let summary = formatScopeSummary(cand.scopeSummary);\n <span class=\"truncate text-xs text-gray-500\" [title]=\"summary\">\n {{ summary }}\n </span>\n }\n </span>\n </span>\n <span class=\"inline-flex items-center gap-2 text-sm text-primary\">\n {{ t(\"delegations.action.startSession\") }}\n <mt-icon icon=\"arrow.arrow-right\" class=\"text-base\"></mt-icon>\n </span>\n </button>\n }\n </div>\n\n <div class=\"flex justify-end border-t border-gray-200 pt-3\">\n <mt-button\n variant=\"outlined\"\n color=\"secondary\"\n [label]=\"t('delegations.common.close')\"\n (click)=\"close()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n signal,\n viewChild,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { EntityPreview } from '@masterteam/components/entities';\nimport { ModalService } from '@masterteam/components/modal';\nimport { Icon } from '@masterteam/icons';\nimport { Popover } from 'primeng/popover';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\nimport DelegationCandidatesPromptDialog from '../delegation-candidates-prompt-dialog/delegation-candidates-prompt-dialog';\nimport { formatDelegationScopeSummary } from '../delegation-scope-display';\nimport { toDelegationUserEntity } from '../delegation-user-entity';\n\n/**\n * Topbar surface for the delegation runtime (doc 05, 09).\n *\n * State A — no candidates, no active session: renders nothing.\n * State B — candidates exist, no active session: lets the user start a session.\n * State C — active delegated session: shows \"Acting on behalf of {delegator}\" +\n * \"Executed by {actual user}\", plus Back / Switch.\n */\n@Component({\n selector: 'mt-topbar-delegation-menu',\n standalone: true,\n imports: [\n CommonModule,\n Button,\n EntityPreview,\n Icon,\n Popover,\n RouterLink,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './topbar-delegation-menu.html',\n styleUrls: ['./topbar-delegation-menu.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TopbarDelegationMenu implements OnInit {\n /** Path to the management page, e.g. `/control-panel/delegations` or `/delegations`. */\n readonly managePath = input<string>('/delegations');\n readonly compact = input<boolean>(false);\n readonly showManageLink = input<boolean>(true);\n readonly promptOnCandidates = input<boolean>(true);\n\n private readonly facade = inject(DelegationSessionFacade);\n private readonly modal = inject(ModalService);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly popover = viewChild.required<Popover>('popover');\n\n protected readonly active = this.facade.active;\n protected readonly candidates = this.facade.candidates;\n protected readonly hasCandidates = this.facade.hasCandidates;\n protected readonly onBehalfOf = this.facade.onBehalfOf;\n protected readonly executedBy = this.facade.executedBy;\n private readonly promptShown = signal(false);\n\n protected readonly mode = computed<'hidden' | 'candidates' | 'active'>(() => {\n if (this.active()) return 'active';\n if (this.hasCandidates()) return 'candidates';\n return 'hidden';\n });\n\n constructor() {\n effect(() => {\n const candidates = this.candidates();\n const shouldPrompt =\n this.promptOnCandidates() &&\n !this.promptShown() &&\n !this.active() &&\n candidates.length > 0;\n\n if (!shouldPrompt) {\n return;\n }\n\n this.promptShown.set(true);\n queueMicrotask(() => this.openCandidatesPrompt(candidates));\n });\n }\n\n ngOnInit(): void {\n this.facade.loadCandidates();\n }\n\n protected formatScopeSummary(summary: DelegationRow['scopeSummary']): string {\n return formatDelegationScopeSummary(\n summary,\n this.transloco.getActiveLang(),\n );\n }\n\n protected userEntity(\n party: DelegationRow['delegator'] | null | undefined,\n showEmail = false,\n ) {\n return toDelegationUserEntity(party, { showEmail });\n }\n\n togglePopover(event: Event): void {\n this.popover().toggle(event);\n }\n\n start(row: DelegationRow, event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.openConfirm(row, 'start');\n }\n\n switchTo(row: DelegationRow, event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.openConfirm(row, 'switch');\n }\n\n endSession(event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.facade.endSession('Manual').subscribe();\n }\n\n private openConfirm(row: DelegationRow, intent: 'start' | 'switch'): void {\n this.modal.openModal(StartSessionDialog, 'dialog', {\n header: this.transloco.translate(\n intent === 'switch'\n ? 'delegations.action.switchSession'\n : 'delegations.action.startSession',\n ),\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row, intent },\n });\n }\n\n private openCandidatesPrompt(candidates: DelegationRow[]): void {\n const ref = this.modal.openModal(\n DelegationCandidatesPromptDialog,\n 'dialog',\n {\n header: this.transloco.translate('delegations.session.availableTitle'),\n styleClass: '!w-[min(96vw,34rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { candidates },\n },\n );\n\n ref.onClose.subscribe((row: DelegationRow | null | undefined) => {\n if (row) {\n this.openConfirm(row, 'start');\n }\n });\n }\n}\n","<ng-container *transloco=\"let t\">\n @if (mode() !== \"hidden\") {\n @if (mode() === \"active\") {\n <span class=\"sr-only\" role=\"status\" aria-live=\"polite\">\n {{\n t(\"delegations.session.banner\", {\n delegatorName: onBehalfOf()?.displayName,\n })\n }}.\n {{\n t(\"delegations.session.executedBy\", {\n actualUserName: executedBy()?.displayName,\n })\n }}\n </span>\n }\n <div class=\"mt-delegation-trigger flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"mt-delegation-trigger__button flex min-w-0 max-w-full items-center gap-2 rounded-full px-2 py-1 hover:bg-surface-100 cursor-pointer\"\n [class.mt-delegation-trigger__button--active]=\"mode() === 'active'\"\n [attr.aria-label]=\"\n mode() === 'active'\n ? t('delegations.session.banner', {\n delegatorName: onBehalfOf()?.displayName,\n }) +\n '. ' +\n t('delegations.session.executedBy', {\n actualUserName: executedBy()?.displayName,\n })\n : t('delegations.session.availableTitle')\n \"\n [attr.title]=\"\n mode() === 'active'\n ? t('delegations.session.banner', {\n delegatorName: onBehalfOf()?.displayName,\n })\n : null\n \"\n (click)=\"togglePopover($event)\"\n >\n @if (mode() === \"active\") {\n <mt-icon\n icon=\"user.users-check\"\n styleClass=\"text-lg text-primary\"\n ></mt-icon>\n @if (!compact()) {\n <span\n class=\"mt-delegation-trigger__label flex min-w-0 flex-col text-start leading-tight\"\n >\n <span class=\"truncate text-sm font-medium\">\n {{\n t(\"delegations.session.banner\", {\n delegatorName: onBehalfOf()?.displayName,\n })\n }}\n </span>\n <span class=\"truncate text-[0.6875rem] font-normal text-gray-500\">\n {{\n t(\"delegations.session.executedBy\", {\n actualUserName: executedBy()?.displayName,\n })\n }}\n </span>\n </span>\n }\n <mt-delegation-status-chip\n status=\"Active\"\n ></mt-delegation-status-chip>\n } @else {\n <mt-icon\n icon=\"user.users-plus\"\n styleClass=\"text-lg text-primary\"\n ></mt-icon>\n @if (!compact()) {\n <span class=\"mt-delegation-trigger__label text-sm font-medium\">\n {{ t(\"delegations.session.availableTitle\") }}\n </span>\n }\n }\n </button>\n </div>\n\n <p-popover #popover [pt]=\"{ content: { class: 'p-0!' } }\">\n <div class=\"flex flex-col min-w-80 max-w-96 p-0\">\n @if (mode() === \"active\" && active(); as session) {\n <!-- STATE C — active session -->\n <div\n class=\"flex items-start gap-3 border-b border-gray-200 px-4 py-4\"\n >\n <div class=\"flex min-w-0 flex-1 flex-col\">\n <div class=\"text-xs text-gray-500\">\n {{ t(\"delegations.session.actingOnBehalfOf\") }}\n </div>\n <mt-entity-preview\n [data]=\"userEntity(onBehalfOf())\"\n ></mt-entity-preview>\n <div class=\"text-xs text-gray-500 mt-1\">\n {{\n t(\"delegations.session.executedBy\", {\n actualUserName: executedBy()?.displayName,\n })\n }}\n </div>\n @if (session.delegation.scopeSummary) {\n @let summary =\n formatScopeSummary(session.delegation.scopeSummary);\n <div\n class=\"text-xs text-gray-500 mt-1 truncate\"\n [title]=\"summary\"\n >\n {{ t(\"delegations.column.scopeSummary\") }}:\n {{ summary }}\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex flex-col gap-1 px-2 py-2\">\n <mt-button\n variant=\"text\"\n icon=\"arrow.arrow-left\"\n [label]=\"t('delegations.action.endSession')\"\n styleClass=\"w-full justify-start\"\n (click)=\"endSession($event)\"\n ></mt-button>\n </div>\n\n @if (candidates().length > 1) {\n <div class=\"border-t border-gray-200 pt-2 px-2 pb-2\">\n <div class=\"text-xs text-gray-500 px-2 pb-1\">\n {{ t(\"delegations.session.switchToAnother\") }}\n </div>\n @for (cand of candidates(); track cand.delegationId) {\n @if (cand.delegationId !== session.delegation.delegationId) {\n <button\n type=\"button\"\n class=\"flex items-center justify-between gap-2 w-full px-2 py-2 rounded-md hover:bg-surface-100 cursor-pointer\"\n [attr.aria-label]=\"\n t('delegations.action.switchSession') +\n ': ' +\n cand.delegator.displayName\n \"\n (click)=\"switchTo(cand, $event)\"\n >\n <div class=\"min-w-0 flex-1\">\n <mt-entity-preview\n [data]=\"userEntity(cand.delegator)\"\n ></mt-entity-preview>\n </div>\n <mt-icon\n icon=\"arrow.switch-horizontal-01\"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n </button>\n }\n }\n </div>\n }\n } @else if (mode() === \"candidates\") {\n <!-- STATE B — candidates available -->\n <div class=\"border-b border-gray-200 px-4 py-3\">\n <div class=\"text-sm font-medium text-gray-900\">\n {{ t(\"delegations.session.youCanActAs\") }}\n </div>\n <div class=\"text-xs text-gray-500 mt-1\">\n {{ t(\"delegations.session.chooseDelegatorHint\") }}\n </div>\n </div>\n <div class=\"flex flex-col gap-1 px-2 py-2 max-h-72 overflow-y-auto\">\n @for (cand of candidates(); track cand.delegationId) {\n <button\n type=\"button\"\n class=\"flex items-center justify-between gap-2 w-full px-2 py-2 rounded-md hover:bg-surface-100 cursor-pointer text-start\"\n [attr.aria-label]=\"\n t('delegations.action.startSession') +\n ': ' +\n cand.delegator.displayName\n \"\n (click)=\"start(cand, $event)\"\n >\n <div class=\"flex min-w-0 flex-1 flex-col gap-1\">\n <mt-entity-preview\n [data]=\"userEntity(cand.delegator)\"\n ></mt-entity-preview>\n @if (cand.scopeSummary) {\n @let summary = formatScopeSummary(cand.scopeSummary);\n <span\n class=\"text-xs text-gray-500 truncate\"\n [title]=\"summary\"\n >\n {{ summary }}\n </span>\n }\n </div>\n <mt-icon\n icon=\"arrow.arrow-right\"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n </button>\n }\n </div>\n }\n\n <!-- Footer -->\n @if (showManageLink()) {\n <div class=\"border-t border-gray-200 px-2 py-2\">\n <a\n [routerLink]=\"managePath()\"\n (click)=\"popover().hide()\"\n class=\"flex items-center gap-2 px-3 py-2 rounded-md text-gray-700 hover:bg-surface-100 text-sm cursor-pointer\"\n >\n <mt-icon\n icon=\"general.settings-02\"\n styleClass=\"text-base\"\n ></mt-icon>\n <span>{{ t(\"delegations.session.manage\") }}</span>\n </a>\n </div>\n }\n </div>\n </p-popover>\n }\n</ng-container>\n","import {\r\n AdminCreateDelegationV2Request,\r\n AdminUpdateDelegationV2Request,\r\n ApproveDelegationRequest,\r\n CreateDelegationLegacyRequest,\r\n CreateDelegationV2Request,\r\n DelegationListQuery,\r\n DelegationScopePreviewRequest,\r\n RejectDelegationRequest,\r\n UpdateDelegationLegacyRequest,\r\n UpdateDelegationV2Request,\r\n} from './delegations.model';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Lists / detail\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class GetMyDelegations {\r\n static readonly type = '[Delegations] Get My Delegations';\r\n constructor(public query: DelegationListQuery = {}) {}\r\n}\r\n\r\nexport class GetAssignedDelegations {\r\n static readonly type = '[Delegations] Get Assigned Delegations';\r\n constructor(public query: DelegationListQuery = {}) {}\r\n}\r\n\r\nexport class GetAdminDelegations {\r\n static readonly type = '[Delegations] Get Admin Delegations';\r\n constructor(public query: DelegationListQuery = {}) {}\r\n}\r\n\r\nexport class GetActiveAssignedDelegations {\r\n static readonly type = '[Delegations] Get Active Assigned Delegations';\r\n constructor(public query: DelegationListQuery = {}) {}\r\n}\r\n\r\nexport class GetDelegationDetail {\r\n static readonly type = '[Delegations] Get Delegation Detail';\r\n constructor(\r\n public id: number,\r\n public asAdmin: boolean = false,\r\n ) {}\r\n}\r\n\r\nexport class ClearDelegationDetail {\r\n static readonly type = '[Delegations] Clear Delegation Detail';\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Scope\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class GetScopeOptions {\r\n static readonly type = '[Delegations] Get Scope Options';\r\n constructor(\r\n public delegatorUserId?: string,\r\n public asAdmin: boolean = false,\r\n ) {}\r\n}\r\n\r\nexport class PreviewScope {\r\n static readonly type = '[Delegations] Preview Scope';\r\n constructor(\r\n public request: DelegationScopePreviewRequest,\r\n public asAdmin: boolean = false,\r\n ) {}\r\n}\r\n\r\nexport class ClearScopePreview {\r\n static readonly type = '[Delegations] Clear Scope Preview';\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Create / edit (legacy + v2)\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class CreateDelegationLegacy {\r\n static readonly type = '[Delegations] Create Delegation (legacy)';\r\n constructor(public request: CreateDelegationLegacyRequest) {}\r\n}\r\n\r\nexport class CreateDelegationV2 {\r\n static readonly type = '[Delegations] Create Delegation (v2)';\r\n constructor(\r\n public request: CreateDelegationV2Request | AdminCreateDelegationV2Request,\r\n public asAdmin: boolean = false,\r\n ) {}\r\n}\r\n\r\nexport class UpdateDelegationLegacy {\r\n static readonly type = '[Delegations] Update Delegation (legacy)';\r\n constructor(\r\n public id: number,\r\n public request: UpdateDelegationLegacyRequest,\r\n ) {}\r\n}\r\n\r\nexport class UpdateDelegationV2 {\r\n static readonly type = '[Delegations] Update Delegation (v2)';\r\n constructor(\r\n public id: number,\r\n public request: UpdateDelegationV2Request | AdminUpdateDelegationV2Request,\r\n public asAdmin: boolean = false,\r\n ) {}\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Decisions\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class ApproveDelegation {\r\n static readonly type = '[Delegations] Approve Delegation';\r\n constructor(\r\n public id: number,\r\n public request: ApproveDelegationRequest,\r\n ) {}\r\n}\r\n\r\nexport class RejectDelegation {\r\n static readonly type = '[Delegations] Reject Delegation';\r\n constructor(\r\n public id: number,\r\n public request: RejectDelegationRequest,\r\n ) {}\r\n}\r\n\r\nexport class CancelDelegation {\r\n static readonly type = '[Delegations] Cancel Delegation';\r\n constructor(\r\n public id: number,\r\n public rowVersion: string,\r\n public asAdmin: boolean = false,\r\n ) {}\r\n}\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\n// ============================================================================\r\n// Status / approval / actions (doc 01, 16)\r\n// ============================================================================\r\n\r\nexport type DelegationEffectiveStatus =\r\n | 'PendingApproval'\r\n | 'Scheduled'\r\n | 'Active'\r\n | 'InactiveToday'\r\n | 'Expired'\r\n | 'Rejected'\r\n | 'Cancelled';\r\n\r\nexport type DelegationApprovalStatus =\r\n | 'NotRequired'\r\n | 'Pending'\r\n | 'Approved'\r\n | 'Rejected';\r\n\r\nexport type DelegationAllowedAction =\r\n | 'View'\r\n | 'Edit'\r\n | 'Approve'\r\n | 'Reject'\r\n | 'Cancel'\r\n | 'StartSession'\r\n | 'EndSession';\r\n\r\nexport type DelegationDayRuleMode = 'FullRange' | 'SpecificDays';\r\nexport type DelegationDisplayValue =\r\n | string\r\n | {\r\n ar?: string | null;\r\n en?: string | null;\r\n defaultAr?: string | null;\r\n defaultEn?: string | null;\r\n [locale: string]: unknown;\r\n }\r\n | null;\r\n\r\n// ============================================================================\r\n// Parties + row (doc 02)\r\n// ============================================================================\r\n\r\nexport interface DelegationParty {\r\n userId: string;\r\n displayName: string;\r\n email?: string | null;\r\n}\r\n\r\nexport interface DelegationApprovalInfo {\r\n requiresApproval: boolean;\r\n approvalStatus: DelegationApprovalStatus;\r\n}\r\n\r\nexport interface DelegationCancellationInfo {\r\n cancelledBy?: DelegationParty | null;\r\n cancelledAtUtc?: string | null;\r\n cancellationReason?: string | null;\r\n}\r\n\r\nexport interface DelegationRow {\r\n delegationId: number;\r\n delegator: DelegationParty;\r\n delegatedUser: DelegationParty;\r\n startsAtUtc: string;\r\n endsAtUtc: string;\r\n timeZoneId: string;\r\n dayRuleMode: DelegationDayRuleMode;\r\n specificDays: number[];\r\n effectiveStatus: DelegationEffectiveStatus;\r\n statusReasonCode: string;\r\n createdBy: DelegationParty;\r\n createdAtUtc: string;\r\n approval: DelegationApprovalInfo;\r\n cancellation: DelegationCancellationInfo;\r\n allowedActions: DelegationAllowedAction[];\r\n scopeSummary: DelegationDisplayValue;\r\n rowVersion: string;\r\n}\r\n\r\nexport interface DelegationPage<T> {\r\n items: T[];\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n}\r\n\r\n// ============================================================================\r\n// Scope — grants based (doc 03, 04)\r\n// ============================================================================\r\n\r\nexport interface DelegationScopeTarget {\r\n applicationKey: string;\r\n targetType: string;\r\n targetKey: string;\r\n parentTargetType?: string | null;\r\n parentTargetKey?: string | null;\r\n parentDisplayName?: DelegationDisplayValue;\r\n parentLevelId?: number | null;\r\n legacyModuleId?: number | null;\r\n targetId?: number | null;\r\n levelId?: number | null;\r\n levelModuleId?: number | null;\r\n domainModuleId?: number | null;\r\n moduleKey?: string | null;\r\n permissionModuleType?: string | null;\r\n permissionTargetId?: number | null;\r\n isDelegable?: boolean;\r\n displayName?: DelegationDisplayValue;\r\n displayLabel?: DelegationDisplayValue;\r\n label?: DelegationDisplayValue;\r\n}\r\n\r\nexport interface DelegationScopeAction {\r\n applicationKey: string;\r\n operationKey: string;\r\n operationKind: string;\r\n displayName?: DelegationDisplayValue;\r\n displayLabel?: DelegationDisplayValue;\r\n operationDisplayName?: DelegationDisplayValue;\r\n operationLabel?: DelegationDisplayValue;\r\n label?: DelegationDisplayValue;\r\n permissionCommand?: string | null;\r\n businessActionCode?: string | null;\r\n isHighRisk?: boolean;\r\n isDelegable?: boolean;\r\n isDelegableSnapshot?: boolean;\r\n sortOrder?: number | null;\r\n}\r\n\r\nexport interface DelegationScopeFact {\r\n key?: string | null;\r\n code?: string | null;\r\n id?: string | number | null;\r\n displayName?: DelegationDisplayValue;\r\n displayLabel?: DelegationDisplayValue;\r\n label?: DelegationDisplayValue;\r\n [extra: string]: unknown;\r\n}\r\n\r\nexport interface DelegationGrant {\r\n /** Optional backend-provided stable grant identity; preferred for de-dup when present. */\r\n key?: string;\r\n applicationKey: string;\r\n target: DelegationScopeTarget;\r\n action: DelegationScopeAction;\r\n accessibilities: DelegationScopeFact[];\r\n dataFilters: DelegationScopeFact[];\r\n constraints: DelegationScopeFact[];\r\n}\r\n\r\nexport interface DelegationScopeSelection {\r\n grants: DelegationGrant[];\r\n metadata: Record<string, unknown>;\r\n}\r\n\r\nexport interface DelegationScopeCombinationRule {\r\n applicationKey?: string | null;\r\n targetType: string;\r\n targetKey: string;\r\n operationKey: string;\r\n accessibilityKeys?: string[] | null;\r\n dataFilterKeys?: string[] | null;\r\n constraintKeys?: string[] | null;\r\n [extra: string]: unknown;\r\n}\r\n\r\n/**\r\n * `scope/options` now prefers backend-owned `hierarchy` for FE rendering.\r\n * Flat `grants[]` / `targets + operations + combinationRules` remain for\r\n * compatibility and diagnostics while older environments catch up.\r\n */\r\nexport interface DelegationScopeHierarchyTarget {\r\n target: DelegationScopeTarget;\r\n operations: DelegationScopeAction[];\r\n sortOrder?: number | null;\r\n}\r\n\r\nexport interface DelegationScopeHierarchyGroup {\r\n groupType: string;\r\n groupKey: string;\r\n displayName?: DelegationDisplayValue;\r\n levelId?: number | null;\r\n sortOrder?: number | null;\r\n targets: DelegationScopeHierarchyTarget[];\r\n}\r\n\r\nexport interface DelegationScopeOptions {\r\n hierarchy?: DelegationScopeHierarchyGroup[] | null;\r\n grants?: DelegationGrant[] | null;\r\n metadata?: Record<string, unknown>;\r\n targets?: DelegationScopeTarget[] | null;\r\n operations?: DelegationScopeAction[] | null;\r\n accessibilities?: DelegationScopeFact[] | null;\r\n presets?: Record<string, unknown>[] | null;\r\n combinationRules?: DelegationScopeCombinationRule[] | null;\r\n nonDelegableOperations?: (string | DelegationScopeFact)[] | null;\r\n dataFilters?: DelegationScopeFact[] | null;\r\n constraints?: DelegationScopeFact[] | null;\r\n}\r\n\r\nexport interface DelegationScopeWarning {\r\n code?: string;\r\n message: string;\r\n}\r\n\r\nexport interface DelegationScopeDeniedItem {\r\n applicationKey: string;\r\n targetType: string;\r\n targetKey: string;\r\n operationKey: string;\r\n permissionCommand?: string;\r\n reasonCode: string;\r\n}\r\n\r\nexport interface DelegationScopePreview {\r\n isValid: boolean;\r\n normalizedScope: DelegationScopeSelection;\r\n scopeHash: string;\r\n summary: DelegationDisplayValue;\r\n warnings: DelegationScopeWarning[];\r\n deniedItems: DelegationScopeDeniedItem[];\r\n}\r\n\r\n// ============================================================================\r\n// Detail (doc 02)\r\n// ============================================================================\r\n\r\nexport interface DelegationStatusInfo {\r\n effectiveStatus: DelegationEffectiveStatus;\r\n reasonCode: string;\r\n calculatedAtUtc: string;\r\n}\r\n\r\nexport interface DelegationDetail {\r\n row: DelegationRow;\r\n scope: DelegationScopeSelection;\r\n status: DelegationStatusInfo;\r\n}\r\n\r\n// ============================================================================\r\n// Legacy create/edit DTO returned by create/edit (doc 02)\r\n// ============================================================================\r\n\r\nexport interface DelegationDto {\r\n id: number;\r\n fromUserId: string;\r\n toUserId: string;\r\n description?: string;\r\n isActive?: boolean;\r\n delegationDaysType: DelegationDayRuleMode;\r\n specificDays: number[];\r\n applicationId?: number;\r\n requiresApproval?: boolean;\r\n effectiveStatus: DelegationEffectiveStatus;\r\n statusReasonCode: string;\r\n allowedActions: DelegationAllowedAction[];\r\n rowVersion: string;\r\n [extra: string]: unknown;\r\n}\r\n\r\n// ============================================================================\r\n// List query (doc 02)\r\n// ============================================================================\r\n\r\nexport type DelegationSortDirection =\r\n | 'asc'\r\n | 'ascending'\r\n | 'desc'\r\n | 'descending';\r\n\r\nexport interface DelegationListQuery {\r\n activeOnly?: boolean;\r\n status?: DelegationEffectiveStatus;\r\n search?: string;\r\n fromUtc?: string;\r\n toUtc?: string;\r\n sortBy?: string;\r\n sortDirection?: DelegationSortDirection;\r\n page?: number;\r\n pageSize?: number;\r\n // admin only\r\n delegatorUserId?: string;\r\n delegatedUserId?: string;\r\n}\r\n\r\n// ============================================================================\r\n// Create / edit / decision requests (doc 04)\r\n// ============================================================================\r\n\r\nexport interface CreateDelegationLegacyRequest {\r\n delegateFrom?: string | null;\r\n delegateTo: string;\r\n description?: string;\r\n delegateFromDateTime: string;\r\n delegateToDateTime: string;\r\n accessibilityIds?: number[];\r\n moduleIds?: number[];\r\n delegationDaysType: DelegationDayRuleMode;\r\n specificDays?: number[];\r\n isActive?: boolean;\r\n requiresApproval?: boolean;\r\n}\r\n\r\nexport interface CreateDelegationV2Request {\r\n delegateFrom?: string | null;\r\n delegateTo: string;\r\n description?: string;\r\n delegateFromDateTime: string;\r\n delegateToDateTime: string;\r\n delegationDaysType: DelegationDayRuleMode;\r\n specificDays?: number[];\r\n requiresApproval: boolean;\r\n scope: DelegationScopeSelection;\r\n}\r\n\r\nexport interface AdminCreateDelegationV2Request {\r\n delegatorUserId: string;\r\n delegatedUserId: string;\r\n description?: string;\r\n delegateFromDateTime: string;\r\n delegateToDateTime: string;\r\n delegationDaysType: DelegationDayRuleMode;\r\n specificDays?: number[];\r\n requiresApproval: boolean;\r\n scope: DelegationScopeSelection;\r\n}\r\n\r\nexport type UpdateDelegationLegacyRequest = CreateDelegationLegacyRequest & {\r\n rowVersion: string;\r\n};\r\n\r\nexport type UpdateDelegationV2Request = CreateDelegationV2Request & {\r\n rowVersion: string;\r\n};\r\n\r\nexport type AdminUpdateDelegationV2Request = AdminCreateDelegationV2Request & {\r\n rowVersion: string;\r\n};\r\n\r\nexport interface DelegationScopePreviewRequest {\r\n scope: DelegationScopeSelection;\r\n delegatorUserId?: string | null;\r\n}\r\n\r\nexport interface ApproveDelegationRequest {\r\n rowVersion: string;\r\n reason?: string;\r\n}\r\n\r\nexport interface RejectDelegationRequest {\r\n rowVersion: string;\r\n reason: string;\r\n}\r\n\r\n// ============================================================================\r\n// NGXS state shape + action keys\r\n// ============================================================================\r\n\r\nexport enum DelegationsActionKey {\r\n GetMy = 'getMy',\r\n GetAssigned = 'getAssigned',\r\n GetAdmin = 'getAdmin',\r\n GetActive = 'getActive',\r\n GetDetail = 'getDetail',\r\n GetScopeOptions = 'getScopeOptions',\r\n PreviewScope = 'previewScope',\r\n Create = 'create',\r\n Update = 'update',\r\n Approve = 'approve',\r\n Reject = 'reject',\r\n Cancel = 'cancel',\r\n}\r\n\r\nexport interface DelegationsStateModel extends LoadingStateShape<DelegationsActionKey> {\r\n my: DelegationPage<DelegationRow> | null;\r\n assigned: DelegationPage<DelegationRow> | null;\r\n admin: DelegationPage<DelegationRow> | null;\r\n active: DelegationPage<DelegationRow> | null;\r\n detail: DelegationDetail | null;\r\n scopeOptions: DelegationScopeOptions | null;\r\n scopePreview: DelegationScopePreview | null;\r\n}\r\n","import { HttpClient, HttpParams } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { handleApiRequest } from '@masterteam/components';\r\nimport { Response } from './api.model';\r\nimport {\r\n ApproveDelegation,\r\n CancelDelegation,\r\n ClearDelegationDetail,\r\n ClearScopePreview,\r\n CreateDelegationLegacy,\r\n CreateDelegationV2,\r\n GetActiveAssignedDelegations,\r\n GetAdminDelegations,\r\n GetAssignedDelegations,\r\n GetDelegationDetail,\r\n GetMyDelegations,\r\n GetScopeOptions,\r\n PreviewScope,\r\n RejectDelegation,\r\n UpdateDelegationLegacy,\r\n UpdateDelegationV2,\r\n} from './delegations.actions';\r\nimport {\r\n AdminCreateDelegationV2Request,\r\n AdminUpdateDelegationV2Request,\r\n DelegationDetail,\r\n DelegationDto,\r\n DelegationListQuery,\r\n DelegationPage,\r\n DelegationRow,\r\n DelegationScopeOptions,\r\n DelegationScopePreviewRequest,\r\n DelegationScopePreview,\r\n DelegationsActionKey,\r\n DelegationsStateModel,\r\n} from './delegations.model';\r\n\r\nconst BASE = 'identity/delegations';\r\n\r\nfunction buildListParams(query: DelegationListQuery): HttpParams {\r\n let params = new HttpParams();\r\n if (query.activeOnly != null)\r\n params = params.set('activeOnly', query.activeOnly);\r\n if (query.status) params = params.set('status', query.status);\r\n if (query.search) params = params.set('search', query.search);\r\n if (query.fromUtc) params = params.set('fromUtc', query.fromUtc);\r\n if (query.toUtc) params = params.set('toUtc', query.toUtc);\r\n if (query.sortBy) params = params.set('sortBy', query.sortBy);\r\n if (query.sortDirection)\r\n params = params.set('sortDirection', query.sortDirection);\r\n params = params.set('page', query.page ?? 1);\r\n params = params.set('pageSize', query.pageSize ?? 25);\r\n if (query.delegatorUserId)\r\n params = params.set('delegatorUserId', query.delegatorUserId);\r\n if (query.delegatedUserId)\r\n params = params.set('delegatedUserId', query.delegatedUserId);\r\n return params;\r\n}\r\n\r\n@State<DelegationsStateModel>({\r\n name: 'delegations',\r\n defaults: {\r\n my: null,\r\n assigned: null,\r\n admin: null,\r\n active: null,\r\n detail: null,\r\n scopeOptions: null,\r\n scopePreview: null,\r\n loadingActive: [],\r\n errors: {},\r\n },\r\n})\r\n@Injectable()\r\nexport class DelegationsState {\r\n private http = inject(HttpClient);\r\n\r\n // ============================================================================\r\n // Selectors\r\n // ============================================================================\r\n\r\n @Selector()\r\n static getMy(\r\n state: DelegationsStateModel,\r\n ): DelegationPage<DelegationRow> | null {\r\n return state.my;\r\n }\r\n\r\n @Selector()\r\n static getAssigned(\r\n state: DelegationsStateModel,\r\n ): DelegationPage<DelegationRow> | null {\r\n return state.assigned;\r\n }\r\n\r\n @Selector()\r\n static getAdmin(\r\n state: DelegationsStateModel,\r\n ): DelegationPage<DelegationRow> | null {\r\n return state.admin;\r\n }\r\n\r\n @Selector()\r\n static getActive(\r\n state: DelegationsStateModel,\r\n ): DelegationPage<DelegationRow> | null {\r\n return state.active;\r\n }\r\n\r\n @Selector()\r\n static getDetail(state: DelegationsStateModel): DelegationDetail | null {\r\n return state.detail;\r\n }\r\n\r\n @Selector()\r\n static getScopeOptions(\r\n state: DelegationsStateModel,\r\n ): DelegationScopeOptions | null {\r\n return state.scopeOptions;\r\n }\r\n\r\n @Selector()\r\n static getScopePreview(\r\n state: DelegationsStateModel,\r\n ): DelegationScopePreview | null {\r\n return state.scopePreview;\r\n }\r\n\r\n @Selector()\r\n static getLoadingActive(state: DelegationsStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: DelegationsStateModel,\r\n ): Record<string, string | null | undefined> {\r\n return state.errors;\r\n }\r\n\r\n // ============================================================================\r\n // Lists\r\n // ============================================================================\r\n\r\n @Action(GetMyDelegations)\r\n getMy(ctx: StateContext<DelegationsStateModel>, { query }: GetMyDelegations) {\r\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(BASE, {\r\n params: buildListParams(query),\r\n });\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetMy,\r\n request$: req$,\r\n onSuccess: (response) => ({ my: response.data }),\r\n });\r\n }\r\n\r\n @Action(GetAssignedDelegations)\r\n getAssigned(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { query }: GetAssignedDelegations,\r\n ) {\r\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\r\n `${BASE}/assigned`,\r\n { params: buildListParams(query) },\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetAssigned,\r\n request$: req$,\r\n onSuccess: (response) => ({ assigned: response.data }),\r\n });\r\n }\r\n\r\n @Action(GetAdminDelegations)\r\n getAdmin(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { query }: GetAdminDelegations,\r\n ) {\r\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\r\n `${BASE}/All`,\r\n { params: buildListParams(query) },\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetAdmin,\r\n request$: req$,\r\n onSuccess: (response) => ({ admin: response.data }),\r\n });\r\n }\r\n\r\n @Action(GetActiveAssignedDelegations)\r\n getActive(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { query }: GetActiveAssignedDelegations,\r\n ) {\r\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\r\n `${BASE}/user/activedelegations`,\r\n { params: buildListParams(query) },\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetActive,\r\n request$: req$,\r\n onSuccess: (response) => ({ active: response.data }),\r\n });\r\n }\r\n\r\n @Action(GetDelegationDetail)\r\n getDetail(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, asAdmin }: GetDelegationDetail,\r\n ) {\r\n const path = asAdmin ? `${BASE}/Admin/${id}` : `${BASE}/${id}`;\r\n const req$ = this.http.get<Response<DelegationDetail>>(path);\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetDetail,\r\n request$: req$,\r\n onSuccess: (response) => ({ detail: response.data ?? null }),\r\n });\r\n }\r\n\r\n @Action(ClearDelegationDetail)\r\n clearDetail(ctx: StateContext<DelegationsStateModel>) {\r\n ctx.patchState({ detail: null });\r\n }\r\n\r\n // ============================================================================\r\n // Scope\r\n // ============================================================================\r\n\r\n @Action(GetScopeOptions)\r\n getScopeOptions(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { delegatorUserId, asAdmin }: GetScopeOptions,\r\n ) {\r\n ctx.patchState({ scopeOptions: null, scopePreview: null });\r\n\r\n let params = new HttpParams();\r\n if (delegatorUserId)\r\n params = params.set('delegatorUserId', delegatorUserId);\r\n const path = asAdmin\r\n ? `${BASE}/Admin/scope/options`\r\n : `${BASE}/scope/options`;\r\n const req$ = this.http.get<Response<DelegationScopeOptions>>(path, {\r\n params,\r\n });\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetScopeOptions,\r\n request$: req$,\r\n onSuccess: (response) => ({ scopeOptions: response.data ?? null }),\r\n });\r\n }\r\n\r\n @Action(PreviewScope)\r\n previewScope(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { request, asAdmin }: PreviewScope,\r\n ) {\r\n const path = asAdmin\r\n ? `${BASE}/Admin/scope/preview`\r\n : `${BASE}/scope/preview`;\r\n const req$ = this.http.post<Response<DelegationScopePreview>>(\r\n path,\r\n this.buildScopePreviewRequest(request, asAdmin),\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.PreviewScope,\r\n request$: req$,\r\n onSuccess: (response) => ({ scopePreview: response.data ?? null }),\r\n });\r\n }\r\n\r\n @Action(ClearScopePreview)\r\n clearScopePreview(ctx: StateContext<DelegationsStateModel>) {\r\n ctx.patchState({ scopePreview: null });\r\n }\r\n\r\n // ============================================================================\r\n // Create / edit (response is legacy DelegationDto — clients reload list/detail)\r\n // ============================================================================\r\n\r\n @Action(CreateDelegationLegacy)\r\n createLegacy(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { request }: CreateDelegationLegacy,\r\n ) {\r\n const req$ = this.http.post<Response<DelegationDto>>(BASE, request);\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.Create,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n });\r\n }\r\n\r\n @Action(CreateDelegationV2)\r\n createV2(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { request, asAdmin }: CreateDelegationV2,\r\n ) {\r\n const path = asAdmin ? `${BASE}/Admin/v2` : `${BASE}/v2`;\r\n const body = asAdmin\r\n ? this.buildAdminSaveRequest(request as AdminCreateDelegationV2Request)\r\n : request;\r\n const req$ = this.http.post<Response<DelegationDto>>(path, body);\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.Create,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n });\r\n }\r\n\r\n @Action(UpdateDelegationLegacy)\r\n updateLegacy(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: UpdateDelegationLegacy,\r\n ) {\r\n const req$ = this.http.put<Response<DelegationDto>>(\r\n `${BASE}/${id}`,\r\n request,\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.Update,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n });\r\n }\r\n\r\n @Action(UpdateDelegationV2)\r\n updateV2(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request, asAdmin }: UpdateDelegationV2,\r\n ) {\r\n const path = asAdmin ? `${BASE}/Admin/v2/${id}` : `${BASE}/v2/${id}`;\r\n const body = asAdmin\r\n ? this.buildAdminSaveRequest(request as AdminUpdateDelegationV2Request)\r\n : request;\r\n const req$ = this.http.put<Response<DelegationDto>>(path, body);\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.Update,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n });\r\n }\r\n\r\n // ============================================================================\r\n // Decisions\r\n // ============================================================================\r\n\r\n @Action(ApproveDelegation)\r\n approve(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: ApproveDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<DelegationDto>>(\r\n `${BASE}/${id}/approve`,\r\n request,\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.Approve,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n });\r\n }\r\n\r\n @Action(RejectDelegation)\r\n reject(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: RejectDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<DelegationDto>>(\r\n `${BASE}/${id}/reject`,\r\n request,\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.Reject,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n });\r\n }\r\n\r\n @Action(CancelDelegation)\r\n cancel(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, rowVersion, asAdmin }: CancelDelegation,\r\n ) {\r\n const path = asAdmin ? `${BASE}/Admin/${id}` : `${BASE}/${id}`;\r\n const req$ = this.http.delete<Response<boolean>>(path, {\r\n params: new HttpParams().set('rowVersion', rowVersion),\r\n });\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.Cancel,\r\n request$: req$,\r\n onSuccess: () => ({}),\r\n });\r\n }\r\n\r\n private buildScopePreviewRequest(\r\n request: DelegationScopePreviewRequest,\r\n asAdmin: boolean,\r\n ): DelegationScopePreviewRequest {\r\n if (!asAdmin) {\r\n return { scope: request.scope };\r\n }\r\n\r\n return {\r\n delegatorUserId: request.delegatorUserId ?? null,\r\n scope: request.scope,\r\n };\r\n }\r\n\r\n private buildAdminSaveRequest(\r\n request: AdminCreateDelegationV2Request | AdminUpdateDelegationV2Request,\r\n ): AdminCreateDelegationV2Request | AdminUpdateDelegationV2Request {\r\n return {\r\n ...request,\r\n specificDays: request.specificDays ?? [],\r\n };\r\n }\r\n}\r\n","import { computed, inject, Injectable } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\nimport {\r\n ApproveDelegation,\r\n CancelDelegation,\r\n ClearDelegationDetail,\r\n ClearScopePreview,\r\n CreateDelegationLegacy,\r\n CreateDelegationV2,\r\n GetActiveAssignedDelegations,\r\n GetAdminDelegations,\r\n GetAssignedDelegations,\r\n GetDelegationDetail,\r\n GetMyDelegations,\r\n GetScopeOptions,\r\n PreviewScope,\r\n RejectDelegation,\r\n UpdateDelegationLegacy,\r\n UpdateDelegationV2,\r\n} from './delegations.actions';\r\nimport {\r\n AdminCreateDelegationV2Request,\r\n AdminUpdateDelegationV2Request,\r\n ApproveDelegationRequest,\r\n CreateDelegationLegacyRequest,\r\n CreateDelegationV2Request,\r\n DelegationListQuery,\r\n DelegationScopePreviewRequest,\r\n DelegationScopeSelection,\r\n DelegationsActionKey,\r\n RejectDelegationRequest,\r\n UpdateDelegationLegacyRequest,\r\n UpdateDelegationV2Request,\r\n} from './delegations.model';\r\nimport { DelegationsState } from './delegations.state';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DelegationsFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ---------------------------------------------------------------------------\r\n // Data slices\r\n // ---------------------------------------------------------------------------\r\n readonly myPage = select(DelegationsState.getMy);\r\n readonly assignedPage = select(DelegationsState.getAssigned);\r\n readonly adminPage = select(DelegationsState.getAdmin);\r\n readonly activePage = select(DelegationsState.getActive);\r\n readonly detail = select(DelegationsState.getDetail);\r\n readonly scopeOptions = select(DelegationsState.getScopeOptions);\r\n readonly scopePreview = select(DelegationsState.getScopePreview);\r\n\r\n private readonly loadingActive = select(DelegationsState.getLoadingActive);\r\n private readonly errors = select(DelegationsState.getErrors);\r\n\r\n // ---------------------------------------------------------------------------\r\n // Derived\r\n // ---------------------------------------------------------------------------\r\n readonly myItems = computed(() => this.myPage()?.items ?? []);\r\n readonly assignedItems = computed(() => this.assignedPage()?.items ?? []);\r\n readonly adminItems = computed(() => this.adminPage()?.items ?? []);\r\n readonly activeItems = computed(() => this.activePage()?.items ?? []);\r\n\r\n // ---------------------------------------------------------------------------\r\n // Loading\r\n // ---------------------------------------------------------------------------\r\n readonly isLoadingMy = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetMy),\r\n );\r\n readonly isLoadingAssigned = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetAssigned),\r\n );\r\n readonly isLoadingAdmin = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetAdmin),\r\n );\r\n readonly isLoadingActive = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetActive),\r\n );\r\n readonly isLoadingDetail = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetDetail),\r\n );\r\n readonly isLoadingScopeOptions = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetScopeOptions),\r\n );\r\n readonly isPreviewingScope = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.PreviewScope),\r\n );\r\n readonly isSaving = computed(\r\n () =>\r\n this.loadingActive().includes(DelegationsActionKey.Create) ||\r\n this.loadingActive().includes(DelegationsActionKey.Update),\r\n );\r\n readonly isApproving = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.Approve),\r\n );\r\n readonly isRejecting = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.Reject),\r\n );\r\n readonly isCancelling = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.Cancel),\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Errors\r\n // ---------------------------------------------------------------------------\r\n readonly errorMy = computed(\r\n () => this.errors()[DelegationsActionKey.GetMy] ?? null,\r\n );\r\n readonly errorAssigned = computed(\r\n () => this.errors()[DelegationsActionKey.GetAssigned] ?? null,\r\n );\r\n readonly errorAdmin = computed(\r\n () => this.errors()[DelegationsActionKey.GetAdmin] ?? null,\r\n );\r\n readonly errorDetail = computed(\r\n () => this.errors()[DelegationsActionKey.GetDetail] ?? null,\r\n );\r\n readonly errorScopeOptions = computed(\r\n () => this.errors()[DelegationsActionKey.GetScopeOptions] ?? null,\r\n );\r\n readonly errorSave = computed(\r\n () =>\r\n this.errors()[DelegationsActionKey.Create] ??\r\n this.errors()[DelegationsActionKey.Update] ??\r\n null,\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Dispatchers\r\n // ---------------------------------------------------------------------------\r\n getMy(query: DelegationListQuery = {}) {\r\n return this.store.dispatch(new GetMyDelegations(query));\r\n }\r\n getAssigned(query: DelegationListQuery = {}) {\r\n return this.store.dispatch(new GetAssignedDelegations(query));\r\n }\r\n getAdmin(query: DelegationListQuery = {}) {\r\n return this.store.dispatch(new GetAdminDelegations(query));\r\n }\r\n getActive(query: DelegationListQuery = {}) {\r\n return this.store.dispatch(new GetActiveAssignedDelegations(query));\r\n }\r\n getDetail(id: number, asAdmin = false) {\r\n return this.store.dispatch(new GetDelegationDetail(id, asAdmin));\r\n }\r\n clearDetail() {\r\n return this.store.dispatch(new ClearDelegationDetail());\r\n }\r\n loadScopeOptions(delegatorUserId?: string, asAdmin = false) {\r\n return this.store.dispatch(new GetScopeOptions(delegatorUserId, asAdmin));\r\n }\r\n previewScope(\r\n scope: DelegationScopeSelection,\r\n options?: {\r\n delegatorUserId?: string;\r\n asAdmin?: boolean;\r\n },\r\n ) {\r\n const request: DelegationScopePreviewRequest = {\r\n delegatorUserId: options?.delegatorUserId,\r\n scope,\r\n };\r\n return this.store.dispatch(\r\n new PreviewScope(request, options?.asAdmin ?? false),\r\n );\r\n }\r\n clearScopePreview() {\r\n return this.store.dispatch(new ClearScopePreview());\r\n }\r\n createLegacy(request: CreateDelegationLegacyRequest) {\r\n return this.store.dispatch(new CreateDelegationLegacy(request));\r\n }\r\n createV2(\r\n request: CreateDelegationV2Request | AdminCreateDelegationV2Request,\r\n asAdmin = false,\r\n ) {\r\n return this.store.dispatch(new CreateDelegationV2(request, asAdmin));\r\n }\r\n updateLegacy(id: number, request: UpdateDelegationLegacyRequest) {\r\n return this.store.dispatch(new UpdateDelegationLegacy(id, request));\r\n }\r\n updateV2(\r\n id: number,\r\n request: UpdateDelegationV2Request | AdminUpdateDelegationV2Request,\r\n asAdmin = false,\r\n ) {\r\n return this.store.dispatch(new UpdateDelegationV2(id, request, asAdmin));\r\n }\r\n approve(id: number, request: ApproveDelegationRequest) {\r\n return this.store.dispatch(new ApproveDelegation(id, request));\r\n }\r\n reject(id: number, request: RejectDelegationRequest) {\r\n return this.store.dispatch(new RejectDelegation(id, request));\r\n }\r\n cancel(id: number, rowVersion: string, asAdmin = false) {\r\n return this.store.dispatch(new CancelDelegation(id, rowVersion, asAdmin));\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { EntityPreview } from '@masterteam/components/entities';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\nimport { toDelegationUserEntity } from '../delegation-user-entity';\n\n/**\n * Collects a required rejection reason before calling\n * POST identity/delegations/{id}/reject (doc 04 — reject requires a non-empty\n * reason for audit/governance). Closes with `true` on success so the caller\n * can reload the row.\n */\n@Component({\n selector: 'mt-reject-delegation-dialog',\n imports: [CommonModule, Button, EntityPreview, TranslocoDirective],\n templateUrl: './reject-delegation-dialog.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class RejectDelegationDialog {\n readonly delegation = input.required<DelegationRow>();\n\n private readonly ref: ModalRef = inject(ModalRef);\n private readonly facade = inject(DelegationsFacade);\n\n protected readonly reason = signal('');\n protected readonly submitted = signal(false);\n protected readonly isBusy = this.facade.isRejecting;\n\n protected readonly isValid = computed(() => this.reason().trim().length > 0);\n\n protected onReasonInput(event: Event): void {\n this.reason.set((event.target as HTMLTextAreaElement).value);\n }\n\n protected userEntity(party: DelegationRow['delegator']) {\n return toDelegationUserEntity(party, { showEmail: false });\n }\n\n confirm(): void {\n this.submitted.set(true);\n if (!this.isValid()) return;\n const row = this.delegation();\n this.facade\n .reject(row.delegationId, {\n rowVersion: row.rowVersion,\n reason: this.reason().trim(),\n })\n .subscribe({\n next: () => this.ref.close(true),\n error: () => {\n /* error surfaced via shared toast pipeline; keep dialog open */\n },\n });\n }\n\n cancel(): void {\n this.ref.close(false);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col gap-4 p-2\">\n <div class=\"flex flex-col gap-1\">\n <div class=\"text-sm text-gray-700\">\n {{ t(\"delegations.confirm.reject\") }}\n </div>\n <mt-entity-preview\n [data]=\"userEntity(delegation().delegator)\"\n ></mt-entity-preview>\n </div>\n\n <div class=\"flex flex-col gap-1\">\n <label class=\"text-sm font-medium text-gray-800\" for=\"mt-reject-reason\">\n {{ t(\"delegations.form.rejectionReason\") }}\n <span class=\"text-red-600\">*</span>\n </label>\n <textarea\n id=\"mt-reject-reason\"\n rows=\"3\"\n class=\"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-primary focus:outline-none\"\n [class.border-red-400]=\"submitted() && !isValid()\"\n [value]=\"reason()\"\n (input)=\"onReasonInput($event)\"\n [attr.aria-invalid]=\"submitted() && !isValid()\"\n [placeholder]=\"t('delegations.form.rejectionReason')\"\n ></textarea>\n @if (submitted() && !isValid()) {\n <span class=\"text-xs text-red-600\">\n {{ t(\"delegations.form.rejectReasonRequired\") }}\n </span>\n }\n </div>\n\n <div class=\"flex justify-end gap-2 pt-2 border-t border-gray-200\">\n <mt-button\n variant=\"outlined\"\n color=\"secondary\"\n [label]=\"t('delegations.common.cancel')\"\n [disabled]=\"isBusy()\"\n (click)=\"cancel()\"\n ></mt-button>\n <mt-button\n color=\"danger\"\n icon=\"general.x-close\"\n [label]=\"t('delegations.action.reject')\"\n [loading]=\"isBusy()\"\n [disabled]=\"!isValid()\"\n (click)=\"confirm()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n OnInit,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ActivatedRoute,\n NavigationEnd,\n Router,\n RouterOutlet,\n} from '@angular/router';\nimport { filter } from 'rxjs';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Page } from '@masterteam/components/page';\nimport { PageHeaderTab } from '@masterteam/components/page-header';\n\ninterface DelegationRouteTab {\n label: string;\n path: string;\n}\n\n@Component({\n selector: 'mt-delegations',\n imports: [Page, RouterOutlet, TranslocoDirective],\n templateUrl: './delegations.html',\n styleUrl: './delegations.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class Delegations implements OnInit {\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly transloco = inject(TranslocoService);\n protected readonly tabs = signal<PageHeaderTab[]>([]);\n protected readonly activeTab = signal<string>('');\n\n constructor() {\n this.router.events\n .pipe(\n filter(\n (event): event is NavigationEnd => event instanceof NavigationEnd,\n ),\n takeUntilDestroyed(),\n )\n .subscribe(() => this.syncSelectedTabFromRoute());\n }\n\n ngOnInit(): void {\n this.tabs.set(\n this.getRouteTabs().map((tab) => ({\n label: tab.label,\n value: tab.path,\n })),\n );\n this.syncSelectedTabFromRoute();\n }\n\n goBack() {\n void this.router.navigate(['control-panel/product-settings']);\n }\n\n protected onTabChange(value: string | number): void {\n if (typeof value !== 'string') {\n return;\n }\n\n const tab = this.getRouteTabs().find((item) => item.path === value);\n if (!tab) {\n return;\n }\n\n void this.router.navigate([tab.path], { relativeTo: this.route });\n }\n\n private syncSelectedTabFromRoute(): void {\n const currentPath = this.route.snapshot.firstChild?.routeConfig?.path;\n this.activeTab.set(currentPath || this.tabs()[0]?.value?.toString() || '');\n }\n\n private getRouteTabs(): DelegationRouteTab[] {\n return (this.route.routeConfig?.children ?? []).flatMap((childRoute) => {\n const path = childRoute.path?.trim();\n const label = childRoute.data?.['tabLabel'];\n\n if (!path || typeof label !== 'string') {\n return [];\n }\n\n return [{ path, label: this.transloco.translate(label) }];\n });\n }\n}\n","<ng-container *transloco=\"let t\">\n <mt-page\n [title]=\"t('delegations.title')\"\n [avatarIcon]=\"'custom.hierarchy-structure'\"\n [tabs]=\"tabs()\"\n [activeTab]=\"activeTab()\"\n [contentClass]=\"'max-[1025px]:p-4 max-[640px]:p-3'\"\n [avatarStyle]=\"{\n '--p-avatar-background': 'var(--p-indigo-50)',\n '--p-avatar-color': 'var(--p-indigo-700)',\n }\"\n (tabChange)=\"onTabChange($event)\"\n (backButtonClick)=\"goBack()\"\n backButton\n >\n <router-outlet />\n </mt-page>\n</ng-container>\n","import type {\n DelegationDisplayValue,\n DelegationGrant,\n DelegationScopeAction,\n DelegationScopeCombinationRule,\n DelegationScopeFact,\n DelegationScopeHierarchyGroup,\n DelegationScopeHierarchyTarget,\n DelegationScopeOptions,\n DelegationScopeTarget,\n} from '../../store/delegations/delegations.model';\n\nconst DEFAULT_SORT_ORDER = Number.MAX_SAFE_INTEGER;\n\nexport interface DelegationGrantableTargetGroup {\n key: string;\n target: DelegationScopeTarget;\n grants: DelegationGrant[];\n sortOrder: number;\n}\n\nexport interface DelegationGrantableHierarchyGroup {\n key: string;\n groupType: string;\n displayName?: DelegationDisplayValue;\n sortOrder: number;\n targets: DelegationGrantableTargetGroup[];\n}\n\nfunction toArray<T>(value?: T[] | null): T[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction normalizeGrant(grant: DelegationGrant): DelegationGrant {\n return {\n ...grant,\n action: normalizeAction(grant.action),\n accessibilities: toArray(grant.accessibilities),\n dataFilters: toArray(grant.dataFilters),\n constraints: toArray(grant.constraints),\n };\n}\n\nfunction normalizeAction(action: DelegationScopeAction): DelegationScopeAction {\n return {\n ...action,\n isDelegableSnapshot:\n action.isDelegableSnapshot ?? action.isDelegable ?? undefined,\n };\n}\n\nfunction normalizeKey(value: unknown): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed || null;\n }\n\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n\n return null;\n}\n\nfunction normalizeSortOrder(value: unknown): number {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n const numericValue = Number(value);\n return Number.isFinite(numericValue) ? numericValue : DEFAULT_SORT_ORDER;\n}\n\nfunction compareBySortThenKey(\n left: number,\n right: number,\n leftKey: string,\n rightKey: string,\n): number {\n if (left !== right) {\n return left - right;\n }\n\n return leftKey.localeCompare(rightKey);\n}\n\nfunction targetIdentity(target: DelegationScopeTarget): string {\n return `${target.applicationKey}::${target.targetType}::${target.targetKey}`;\n}\n\nfunction groupIdentity(\n groupType: string,\n groupKey: string,\n fallbackTargetKey?: string,\n): string {\n return `${groupType}::${groupKey || fallbackTargetKey || 'group'}`;\n}\n\nfunction buildHierarchyGrant(\n target: DelegationScopeTarget,\n action: DelegationScopeAction,\n): DelegationGrant {\n return normalizeGrant({\n applicationKey:\n normalizeKey(target.applicationKey) ??\n normalizeKey(action.applicationKey) ??\n '',\n target,\n action: normalizeAction(action),\n accessibilities: [],\n dataFilters: [],\n constraints: [],\n });\n}\n\nfunction factLookupKeys(fact: DelegationScopeFact): string[] {\n const candidates = [\n fact.key,\n fact.code,\n fact.id,\n fact['accessibilityKey'],\n fact['dataFilterKey'],\n fact['constraintKey'],\n fact['permissionKey'],\n fact['pageKey'],\n fact['value'],\n ];\n\n return candidates\n .map(normalizeKey)\n .filter((value): value is string => !!value);\n}\n\nfunction buildFactIndex(\n facts: DelegationScopeFact[],\n): Map<string, DelegationScopeFact> {\n const index = new Map<string, DelegationScopeFact>();\n\n for (const fact of facts) {\n for (const key of factLookupKeys(fact)) {\n if (!index.has(key)) {\n index.set(key, fact);\n }\n }\n }\n\n return index;\n}\n\nfunction lookupFacts(\n keys: string[] | null | undefined,\n index: Map<string, DelegationScopeFact>,\n): DelegationScopeFact[] {\n if (!Array.isArray(keys) || keys.length === 0) {\n return [];\n }\n\n const resolved: DelegationScopeFact[] = [];\n const seen = new Set<string>();\n\n for (const rawKey of keys) {\n const key = normalizeKey(rawKey);\n if (!key || seen.has(key)) {\n continue;\n }\n\n const match = index.get(key);\n if (!match) {\n continue;\n }\n\n seen.add(key);\n resolved.push(match);\n }\n\n return resolved;\n}\n\nfunction ruleKeys(\n rule: DelegationScopeCombinationRule,\n preferredKeys: string[],\n): string[] | null {\n for (const preferredKey of preferredKeys) {\n const value = rule[preferredKey];\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n }\n\n return null;\n}\n\nfunction matchesTarget(\n target: DelegationScopeTarget,\n rule: DelegationScopeCombinationRule,\n): boolean {\n return (\n target.targetType === rule.targetType &&\n target.targetKey === rule.targetKey &&\n (!rule.applicationKey ||\n !target.applicationKey ||\n target.applicationKey === rule.applicationKey)\n );\n}\n\nfunction matchesAction(\n action: DelegationScopeAction,\n rule: DelegationScopeCombinationRule,\n applicationKey?: string,\n): boolean {\n return (\n action.operationKey === rule.operationKey &&\n (!rule.applicationKey ||\n !action.applicationKey ||\n action.applicationKey === rule.applicationKey) &&\n (!applicationKey ||\n !action.applicationKey ||\n action.applicationKey === applicationKey)\n );\n}\n\nfunction grantIdentity(grant: DelegationGrant): string {\n return JSON.stringify({\n app: grant.applicationKey,\n target: [\n grant.target.applicationKey,\n grant.target.targetType,\n grant.target.targetKey,\n grant.target.moduleKey ?? null,\n grant.target.permissionModuleType ?? null,\n grant.target.permissionTargetId ?? null,\n ],\n action: [\n grant.action.applicationKey,\n grant.action.operationKey,\n grant.action.operationKind,\n grant.action.permissionCommand ?? null,\n grant.action.businessActionCode ?? null,\n ],\n accessibilities: grant.accessibilities.map(factLookupKeys),\n dataFilters: grant.dataFilters.map(factLookupKeys),\n constraints: grant.constraints.map(factLookupKeys),\n });\n}\n\nfunction buildGroupsFromHierarchy(\n hierarchy: DelegationScopeHierarchyGroup[],\n): DelegationGrantableHierarchyGroup[] {\n return hierarchy\n .map((group) => {\n const targets = toArray(group.targets)\n .map((targetNode: DelegationScopeHierarchyTarget) => {\n const grants = toArray(targetNode.operations)\n .map((operation) =>\n buildHierarchyGrant(targetNode.target, operation),\n )\n .sort((left, right) =>\n compareBySortThenKey(\n normalizeSortOrder(left.action.sortOrder),\n normalizeSortOrder(right.action.sortOrder),\n left.action.operationKey,\n right.action.operationKey,\n ),\n );\n\n return {\n key: targetIdentity(targetNode.target),\n target: targetNode.target,\n grants,\n sortOrder: normalizeSortOrder(\n targetNode.sortOrder ?? targetNode.target.levelModuleId,\n ),\n };\n })\n .filter((targetNode) => targetNode.grants.length > 0)\n .sort((left, right) =>\n compareBySortThenKey(\n left.sortOrder,\n right.sortOrder,\n left.key,\n right.key,\n ),\n );\n\n return {\n key: groupIdentity(group.groupType, group.groupKey),\n groupType: group.groupType,\n displayName: group.displayName,\n sortOrder: normalizeSortOrder(group.sortOrder ?? group.levelId),\n targets,\n };\n })\n .filter((group) => group.targets.length > 0)\n .sort((left, right) =>\n compareBySortThenKey(\n left.sortOrder,\n right.sortOrder,\n left.key,\n right.key,\n ),\n );\n}\n\nfunction getLegacyGrantableGrants(\n options: DelegationScopeOptions | null | undefined,\n): DelegationGrant[] {\n if (!options) {\n return [];\n }\n\n const legacyGrants = toArray(options.grants).map(normalizeGrant);\n if (legacyGrants.length > 0) {\n return legacyGrants;\n }\n\n const targets = toArray(options.targets);\n const operations = toArray(options.operations);\n const combinationRules = toArray(options.combinationRules);\n\n if (\n targets.length === 0 ||\n operations.length === 0 ||\n combinationRules.length === 0\n ) {\n return [];\n }\n\n const accessibilityIndex = buildFactIndex(toArray(options.accessibilities));\n const dataFilterIndex = buildFactIndex(toArray(options.dataFilters));\n const constraintIndex = buildFactIndex(toArray(options.constraints));\n const grants: DelegationGrant[] = [];\n const seen = new Set<string>();\n\n for (const rule of combinationRules) {\n const target = targets.find((item) => matchesTarget(item, rule));\n if (!target) {\n continue;\n }\n\n const applicationKey =\n normalizeKey(rule.applicationKey) ??\n normalizeKey(target.applicationKey) ??\n null;\n\n const action = operations.find((item) =>\n matchesAction(item, rule, applicationKey ?? undefined),\n );\n if (!action) {\n continue;\n }\n\n const grant: DelegationGrant = normalizeGrant({\n applicationKey:\n applicationKey ??\n normalizeKey(action.applicationKey) ??\n normalizeKey(target.applicationKey) ??\n '',\n target,\n action: normalizeAction(action),\n accessibilities: lookupFacts(\n ruleKeys(rule, ['accessibilityKeys', 'accessibilities']),\n accessibilityIndex,\n ),\n dataFilters: lookupFacts(\n ruleKeys(rule, ['dataFilterKeys', 'dataFilters', 'filterKeys']),\n dataFilterIndex,\n ),\n constraints: lookupFacts(\n ruleKeys(rule, ['constraintKeys', 'constraints']),\n constraintIndex,\n ),\n });\n\n const identity = grantIdentity(grant);\n if (seen.has(identity)) {\n continue;\n }\n\n seen.add(identity);\n grants.push(grant);\n }\n\n return grants;\n}\n\nfunction buildGroupsFromGrants(\n grants: DelegationGrant[],\n): DelegationGrantableHierarchyGroup[] {\n const groups = new Map<\n string,\n {\n groupType: string;\n displayName?: DelegationDisplayValue;\n sortOrder: number;\n targets: Map<string, DelegationGrantableTargetGroup>;\n }\n >();\n\n for (const grant of grants) {\n const parentGroupKey =\n normalizeKey(grant.target.parentTargetKey) ?? grant.target.targetKey;\n const parentGroupType =\n grant.target.parentTargetType ?? grant.target.targetType;\n const groupKey = groupIdentity(\n parentGroupType,\n parentGroupKey,\n grant.target.targetKey,\n );\n\n let group = groups.get(groupKey);\n if (!group) {\n group = {\n groupType: parentGroupType,\n displayName:\n grant.target.parentDisplayName ?? grant.target.displayName ?? null,\n sortOrder: normalizeSortOrder(\n grant.target.parentLevelId ?? grant.target.levelId,\n ),\n targets: new Map<string, DelegationGrantableTargetGroup>(),\n };\n groups.set(groupKey, group);\n }\n\n const targetKey = targetIdentity(grant.target);\n const existingTarget = group.targets.get(targetKey);\n\n if (existingTarget) {\n existingTarget.grants.push(grant);\n continue;\n }\n\n group.targets.set(targetKey, {\n key: targetKey,\n target: grant.target,\n grants: [grant],\n sortOrder: normalizeSortOrder(\n grant.target.levelModuleId ?? grant.target.targetId,\n ),\n });\n }\n\n return Array.from(groups.entries())\n .map(([key, value]) => ({\n key,\n groupType: value.groupType,\n displayName: value.displayName,\n sortOrder: value.sortOrder,\n targets: Array.from(value.targets.values())\n .map((targetGroup) => ({\n ...targetGroup,\n grants: [...targetGroup.grants].sort((left, right) =>\n compareBySortThenKey(\n normalizeSortOrder(left.action.sortOrder),\n normalizeSortOrder(right.action.sortOrder),\n left.action.operationKey,\n right.action.operationKey,\n ),\n ),\n }))\n .sort((left, right) =>\n compareBySortThenKey(\n left.sortOrder,\n right.sortOrder,\n left.key,\n right.key,\n ),\n ),\n }))\n .sort((left, right) =>\n compareBySortThenKey(\n left.sortOrder,\n right.sortOrder,\n left.key,\n right.key,\n ),\n );\n}\n\nexport function getDelegationGrantableGroups(\n options: DelegationScopeOptions | null | undefined,\n): DelegationGrantableHierarchyGroup[] {\n const hierarchyGroups = buildGroupsFromHierarchy(toArray(options?.hierarchy));\n if (hierarchyGroups.length > 0) {\n return hierarchyGroups;\n }\n\n return buildGroupsFromGrants(getLegacyGrantableGrants(options));\n}\n\nexport function getDelegationGrantableGrants(\n options: DelegationScopeOptions | null | undefined,\n): DelegationGrant[] {\n return getDelegationGrantableGroups(options).flatMap((group) =>\n group.targets.flatMap((targetGroup) => targetGroup.grants),\n );\n}\n\nexport function hasDelegationGrantableScope(\n options: DelegationScopeOptions | null | undefined,\n): boolean {\n return getDelegationGrantableGroups(options).length > 0;\n}\n","import { CommonModule } from '@angular/common';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport {\r\n Tree,\r\n TreeActionEvent,\r\n type TreeNode,\r\n} from '@masterteam/components/tree';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { DelegationsFacade } from '../../../../store/delegations/delegations.facade';\r\nimport {\r\n DelegationDisplayValue,\r\n DelegationGrant,\r\n DelegationScopeSelection,\r\n} from '../../../../store/delegations/delegations.model';\r\nimport {\r\n formatDelegationActionLabel,\r\n formatDelegationScopeSummary,\r\n formatDelegationTargetLabel,\r\n humanizeDelegationKey,\r\n} from '../../delegation-scope-display';\r\nimport {\r\n DelegationGrantableHierarchyGroup,\r\n DelegationGrantableTargetGroup,\r\n getDelegationGrantableGroups,\r\n} from '../../delegation-scope-options';\r\n\r\nconst EMPTY_SCOPE: DelegationScopeSelection = { grants: [], metadata: {} };\r\n\r\n/**\r\n * Full grant identity. Two grants with the same target/action but different\r\n * accessibilities, data filters, or constraints are DIFFERENT grants and must\r\n * not collapse (backend scope contract). Prefer a backend-provided stable\r\n * `key`; otherwise hash the complete grant shape.\r\n */\r\nfunction grantKey(g: DelegationGrant): string {\r\n if (g.key) return g.key;\r\n return JSON.stringify({\r\n app: g.applicationKey,\r\n target: [\r\n g.target.applicationKey,\r\n g.target.targetType,\r\n g.target.targetKey,\r\n g.target.permissionModuleType ?? null,\r\n g.target.permissionTargetId ?? null,\r\n g.target.legacyModuleId ?? null,\r\n g.target.levelId ?? null,\r\n g.target.levelModuleId ?? null,\r\n g.target.domainModuleId ?? null,\r\n g.target.moduleKey ?? null,\r\n ],\r\n action: [\r\n g.action.applicationKey,\r\n g.action.operationKey,\r\n g.action.operationKind,\r\n g.action.permissionCommand ?? null,\r\n g.action.businessActionCode ?? null,\r\n ],\r\n accessibilities: g.accessibilities ?? [],\r\n dataFilters: g.dataFilters ?? [],\r\n constraints: g.constraints ?? [],\r\n });\r\n}\r\n\r\nfunction normalizeGrant(g: DelegationGrant): DelegationGrant {\r\n return {\r\n ...g,\r\n accessibilities: g.accessibilities ?? [],\r\n dataFilters: g.dataFilters ?? [],\r\n constraints: g.constraints ?? [],\r\n };\r\n}\r\n\r\nfunction sameSelectionKeys(left: TreeNode[] | null, right: string[]): boolean {\r\n const leftKeys = (left ?? [])\r\n .map((node) => node.key)\r\n .filter((key): key is string => !!key);\r\n\r\n if (leftKeys.length !== right.length) {\r\n return false;\r\n }\r\n\r\n const rightSet = new Set(right);\r\n return leftKeys.every((key) => rightSet.has(key));\r\n}\r\n\r\n/**\r\n * Hierarchy-based scope picker (doc 03). Driven entirely by `scope/options`:\r\n * - renders backend-owned Level -> Level Module -> operations hierarchy,\r\n * - lets the user toggle each explicit grant,\r\n * - calls `scope/preview` (debounced) and surfaces summary / warnings / denied.\r\n *\r\n * `[(scope)]` two-way binds a `DelegationScopeSelection`. The component never\r\n * invents permission metadata — it only echoes targets/actions returned by\r\n * options.\r\n */\r\n@Component({\r\n selector: 'mt-scope-picker',\r\n imports: [CommonModule, Tree, SkeletonModule, TranslocoDirective],\r\n templateUrl: './scope-picker.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ScopePicker {\r\n readonly scope = model<DelegationScopeSelection>(EMPTY_SCOPE);\r\n readonly readonly = input<boolean>(false);\r\n readonly adminMode = input<boolean>(false);\r\n /**\r\n * Delegator whose grantable scope is loaded. Undefined = current user\r\n * (self-service). In admin mode the host rebinds this as the selected\r\n * delegator changes, and options reload reactively.\r\n */\r\n readonly delegatorUserId = input<string | undefined>(undefined);\r\n\r\n private readonly facade = inject(DelegationsFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n protected readonly options = this.facade.scopeOptions;\r\n protected readonly preview = this.facade.scopePreview;\r\n protected readonly isLoadingOptions = this.facade.isLoadingScopeOptions;\r\n protected readonly isPreviewing = this.facade.isPreviewingScope;\r\n protected readonly errorOptions = this.facade.errorScopeOptions;\r\n protected readonly groups = computed<DelegationGrantableHierarchyGroup[]>(\r\n () => getDelegationGrantableGroups(this.options()),\r\n );\r\n protected readonly activeLang = toSignal(this.transloco.langChanges$, {\r\n initialValue: this.transloco.getActiveLang(),\r\n });\r\n\r\n /** Selected grant keys for O(1) checkbox state. */\r\n protected readonly selectedKeys = computed(\r\n () => new Set(this.scope().grants.map(grantKey)),\r\n );\r\n protected readonly treeSelection = signal<TreeNode[] | null>([]);\r\n protected readonly treeNodes = computed<TreeNode[]>(() =>\r\n this.buildTreeNodes(this.groups()),\r\n );\r\n protected readonly grantIndex = computed(() => {\r\n const index = new Map<string, DelegationGrant>();\r\n\r\n for (const group of this.groups()) {\r\n for (const targetGroup of group.targets) {\r\n for (const grant of targetGroup.grants) {\r\n index.set(grantKey(grant), normalizeGrant(grant));\r\n }\r\n }\r\n }\r\n\r\n return index;\r\n });\r\n\r\n constructor() {\r\n // Load (and reload) grantable options whenever the delegator changes.\r\n let initialized = false;\r\n let lastDelegatorUserId: string | undefined;\r\n effect(() => {\r\n const delegator = this.delegatorUserId();\r\n const asAdmin = this.adminMode();\r\n untracked(() => this.facade.loadScopeOptions(delegator, asAdmin));\r\n\r\n if (!initialized) {\r\n initialized = true;\r\n lastDelegatorUserId = delegator;\r\n return;\r\n }\r\n\r\n if (lastDelegatorUserId !== delegator) {\r\n lastDelegatorUserId = delegator;\r\n this.scope.set(EMPTY_SCOPE);\r\n this.treeSelection.set([]);\r\n this.facade.clearScopePreview();\r\n }\r\n });\r\n\r\n let timer: ReturnType<typeof setTimeout> | null = null;\r\n effect(() => {\r\n const s = this.scope();\r\n const delegator = this.delegatorUserId();\r\n const asAdmin = this.adminMode();\r\n untracked(() => {\r\n if (!s.grants.length) {\r\n this.facade.clearScopePreview();\r\n return;\r\n }\r\n if (timer) clearTimeout(timer);\r\n timer = setTimeout(\r\n () =>\r\n this.facade.previewScope(s, {\r\n delegatorUserId: delegator,\r\n asAdmin,\r\n }),\r\n 300,\r\n );\r\n });\r\n });\r\n\r\n effect(() => {\r\n const selectedKeys = Array.from(this.selectedKeys());\r\n const selection = this.treeSelection();\r\n\r\n if (sameSelectionKeys(selection, selectedKeys)) {\r\n return;\r\n }\r\n\r\n this.treeSelection.set(\r\n selectedKeys.map((key) => ({\r\n key,\r\n })),\r\n );\r\n });\r\n }\r\n\r\n protected onTreeAction(event: TreeActionEvent): void {\r\n if (event.action !== 'selectionChange' || this.readonly()) {\r\n return;\r\n }\r\n\r\n const index = this.grantIndex();\r\n const grants = (this.treeSelection() ?? [])\r\n .map((node) => (node.key ? index.get(node.key) : undefined))\r\n .filter((grant): grant is DelegationGrant => !!grant);\r\n\r\n this.scope.update((scope) => ({\r\n ...scope,\r\n grants,\r\n }));\r\n }\r\n\r\n protected getPreviewSummary(\r\n summary: DelegationDisplayValue | undefined,\r\n ): string {\r\n return formatDelegationScopeSummary(summary, this.currentLanguage());\r\n }\r\n\r\n protected formatDeniedOperation(value?: string | null): string {\r\n return humanizeDelegationKey(value);\r\n }\r\n\r\n protected formatDeniedTarget(value?: string | null): string {\r\n return humanizeDelegationKey(value);\r\n }\r\n\r\n protected groupTargetCount(group: DelegationGrantableHierarchyGroup): number {\r\n return group.targets.length;\r\n }\r\n\r\n protected targetGrantCount(\r\n targetGroup: DelegationGrantableTargetGroup,\r\n ): number {\r\n return targetGroup.grants.length;\r\n }\r\n\r\n private buildTreeNodes(\r\n groups: DelegationGrantableHierarchyGroup[],\r\n ): TreeNode[] {\r\n return groups.map((group) => ({\r\n key: `group:${group.key}`,\r\n label: `${this.getGroupLabel(group)} (${this.groupTargetCount(group)})`,\r\n selectable: !this.readonly(),\r\n expanded: true,\r\n children: group.targets.map((targetGroup) =>\r\n this.buildTargetNode(targetGroup),\r\n ),\r\n }));\r\n }\r\n\r\n private buildTargetNode(\r\n targetGroup: DelegationGrantableTargetGroup,\r\n ): TreeNode {\r\n return {\r\n key: `target:${targetGroup.key}`,\r\n label: `${this.getTargetLabel(targetGroup)} (${this.targetGrantCount(targetGroup)})`,\r\n selectable: !this.readonly(),\r\n expanded: true,\r\n children: targetGroup.grants.map((grant) => ({\r\n key: grantKey(grant),\r\n label: this.getActionLabel(grant),\r\n selectable: !this.readonly(),\r\n })),\r\n };\r\n }\r\n\r\n private getGroupLabel(group: DelegationGrantableHierarchyGroup): string {\r\n return group.displayName\r\n ? humanizeDelegationDisplay(group.displayName, this.currentLanguage())\r\n : humanizeDelegationKey(group.groupType);\r\n }\r\n\r\n private getTargetLabel(targetGroup: DelegationGrantableTargetGroup): string {\r\n return formatDelegationTargetLabel(\r\n targetGroup.target,\r\n this.currentLanguage(),\r\n );\r\n }\r\n\r\n private getActionLabel(grant: DelegationGrant): string {\r\n return formatDelegationActionLabel(grant.action, this.currentLanguage());\r\n }\r\n\r\n private currentLanguage(): string {\r\n return this.activeLang() ?? this.transloco.getActiveLang();\r\n }\r\n}\r\n\r\nfunction humanizeDelegationDisplay(\r\n value: DelegationDisplayValue,\r\n language: string,\r\n): string {\r\n return (\r\n formatDelegationScopeSummary(value, language) ||\r\n humanizeDelegationKey(typeof value === 'string' ? value : null)\r\n );\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <div class=\"flex flex-col gap-4\">\r\n @if (isLoadingOptions()) {\r\n <div class=\"grid gap-4 2xl:grid-cols-[minmax(0,1fr)_20rem]\">\r\n <section\r\n class=\"flex flex-col gap-4 rounded-3xl border border-surface-200 bg-surface-0 p-4 shadow-xs\"\r\n >\r\n <div class=\"flex flex-col gap-2\">\r\n <p-skeleton width=\"9rem\" height=\"1rem\"></p-skeleton>\r\n <p-skeleton width=\"20rem\" height=\"0.9rem\"></p-skeleton>\r\n </div>\r\n\r\n <p-skeleton height=\"3rem\"></p-skeleton>\r\n\r\n <div class=\"grid gap-3\">\r\n @for (item of [0, 1, 2, 3]; track item) {\r\n <div class=\"rounded-2xl border border-surface-200 p-4\">\r\n <div class=\"flex items-center justify-between gap-3\">\r\n <p-skeleton width=\"12rem\" height=\"1rem\"></p-skeleton>\r\n <p-skeleton width=\"1.5rem\" height=\"1.5rem\"></p-skeleton>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </section>\r\n\r\n <section\r\n class=\"flex flex-col gap-4 rounded-3xl border border-dashed border-surface-300 bg-surface-50 p-4\"\r\n >\r\n <div class=\"flex flex-col gap-2\">\r\n <p-skeleton width=\"8rem\" height=\"1rem\"></p-skeleton>\r\n <p-skeleton width=\"100%\" height=\"0.85rem\"></p-skeleton>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-3\">\r\n @for (item of [0, 1, 2]; track item) {\r\n <p-skeleton height=\"1rem\"></p-skeleton>\r\n }\r\n </div>\r\n </section>\r\n </div>\r\n } @else {\r\n <section class=\"flex flex-col gap-3\">\r\n @if (errorOptions(); as errorMessage) {\r\n <div\r\n class=\"rounded-2xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\"\r\n >\r\n {{ errorMessage }}\r\n </div>\r\n }\r\n\r\n @if (groups().length === 0 && !errorOptions()) {\r\n <div\r\n class=\"flex min-h-72 flex-col items-center justify-center gap-4 rounded-3xl border border-dashed border-surface-300 bg-surface-50 px-6 py-8 text-center\"\r\n >\r\n <div\r\n class=\"flex size-18 items-center justify-center rounded-3xl bg-surface-0 text-primary shadow-sm\"\r\n >\r\n <svg\r\n viewBox=\"0 0 64 64\"\r\n class=\"size-10\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-hidden=\"true\"\r\n >\r\n <rect\r\n x=\"10\"\r\n y=\"12\"\r\n width=\"44\"\r\n height=\"38\"\r\n rx=\"12\"\r\n class=\"fill-primary/10 stroke-primary/35\"\r\n stroke-width=\"2\"\r\n />\r\n <path\r\n d=\"M21 27H43\"\r\n class=\"stroke-primary\"\r\n stroke-width=\"3\"\r\n stroke-linecap=\"round\"\r\n />\r\n <path\r\n d=\"M21 35H37\"\r\n class=\"stroke-primary/70\"\r\n stroke-width=\"3\"\r\n stroke-linecap=\"round\"\r\n />\r\n <circle\r\n cx=\"46\"\r\n cy=\"19\"\r\n r=\"6\"\r\n class=\"fill-surface-0 stroke-primary\"\r\n stroke-width=\"2\"\r\n />\r\n <path\r\n d=\"M43 16L49 22\"\r\n class=\"stroke-primary\"\r\n stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"\r\n />\r\n <path\r\n d=\"M49 16L43 22\"\r\n class=\"stroke-primary\"\r\n stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"space-y-1\">\r\n <p class=\"text-base font-medium text-surface-900\">\r\n {{ t(\"delegations.scope.permissionsTitle\") }}\r\n </p>\r\n <p class=\"text-sm text-surface-500\">\r\n {{ t(\"delegations.scope.noGrantableOptions\") }}\r\n </p>\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (groups().length > 0) {\r\n <div\r\n class=\"rounded-3xl border border-surface-200 bg-surface-0 p-3 shadow-xs\"\r\n >\r\n <mt-tree\r\n [value]=\"treeNodes()\"\r\n [(selection)]=\"treeSelection\"\r\n selectionMode=\"checkbox\"\r\n [loading]=\"isLoadingOptions()\"\r\n [propagateSelectionDown]=\"true\"\r\n [propagateSelectionUp]=\"true\"\r\n (action)=\"onTreeAction($event)\"\r\n [filter]=\"true\"\r\n filterMode=\"lenient\"\r\n scrollHeight=\"28rem\"\r\n [virtualScroll]=\"true\"\r\n [virtualScrollItemSize]=\"72\"\r\n />\r\n </div>\r\n }\r\n </section>\r\n\r\n <section\r\n class=\"flex flex-col gap-3 rounded-3xl border border-dashed border-surface-300 bg-surface-50 px-4 py-4\"\r\n >\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <div class=\"text-base font-medium text-surface-800\">\r\n {{ t(\"delegations.scope.previewTitle\") }}\r\n </div>\r\n @if (isPreviewing()) {\r\n <p-skeleton width=\"6rem\" height=\"0.75rem\"></p-skeleton>\r\n }\r\n </div>\r\n @if (preview(); as p) {\r\n @if (p.isValid) {\r\n <div class=\"text-sm font-medium text-surface-900\">\r\n {{\r\n getPreviewSummary(p.summary) ||\r\n t(\"delegations.column.scopeSummary\")\r\n }}\r\n </div>\r\n } @else {\r\n <div class=\"text-sm font-medium text-red-700\">\r\n {{ t(\"delegations.scope.previewInvalid\") }}\r\n </div>\r\n }\r\n @if (p.warnings.length > 0) {\r\n <ul class=\"list-inside list-disc space-y-1 text-xs text-amber-700\">\r\n @for (w of p.warnings; track w.message) {\r\n <li>{{ w.message }}</li>\r\n }\r\n </ul>\r\n }\r\n @if (p.deniedItems.length > 0) {\r\n <ul class=\"list-inside list-disc space-y-1 text-xs text-red-700\">\r\n @for (d of p.deniedItems; track d.operationKey) {\r\n <li>\r\n {{ formatDeniedTarget(d.targetKey) }} /\r\n {{ formatDeniedOperation(d.operationKey) }} -\r\n {{ d.reasonCode }}\r\n </li>\r\n }\r\n </ul>\r\n }\r\n } @else {\r\n <div class=\"text-xs text-surface-500\">\r\n {{ t(\"delegations.scope.noSelection\") }}\r\n </div>\r\n }\r\n </section>\r\n }\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Button } from '@masterteam/components/button';\r\nimport {\r\n DateFieldConfig,\r\n DynamicFormConfig,\r\n MultiSelectFieldConfig,\r\n RadioButtonFieldConfig,\r\n REQUEST_CONTEXT,\r\n TextareaFieldConfig,\r\n ToggleFieldConfig,\r\n UserSearchFieldConfig,\r\n ValidatorConfig,\r\n} from '@masterteam/components';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { ScopePicker } from './scope-picker/scope-picker';\r\nimport {\r\n AdminCreateDelegationV2Request,\r\n AdminUpdateDelegationV2Request,\r\n CreateDelegationV2Request,\r\n DelegationRow,\r\n DelegationScopeSelection,\r\n UpdateDelegationV2Request,\r\n} from '../../../store/delegations/delegations.model';\r\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\r\n\r\nconst EMPTY_SCOPE: DelegationScopeSelection = { grants: [], metadata: {} };\r\n\r\ninterface DelegationFormUserValue {\r\n id: string;\r\n userId: string;\r\n displayName: string;\r\n userName: string;\r\n email?: string | null;\r\n photo?: string | null;\r\n isExternal: boolean;\r\n}\r\n\r\nfunction getCurrentDelegatorFromLocalStorage(): DelegationFormUserValue | null {\r\n if (typeof localStorage === 'undefined') {\r\n return null;\r\n }\r\n\r\n try {\r\n const raw = localStorage.getItem('auth');\r\n if (!raw) return null;\r\n\r\n const parsed = JSON.parse(raw) as Record<string, unknown> | null;\r\n if (!parsed || typeof parsed !== 'object') return null;\r\n\r\n const state =\r\n ((parsed['state'] as Record<string, unknown> | undefined) ?? parsed) ||\r\n null;\r\n const userWrapper = state?.['user'] as Record<string, unknown> | undefined;\r\n const user =\r\n (userWrapper?.['user'] as Record<string, unknown> | undefined) ??\r\n userWrapper;\r\n\r\n if (!user || typeof user !== 'object') return null;\r\n\r\n const id =\r\n (user['id'] as string | undefined) ??\r\n (user['userId'] as string | undefined);\r\n if (!id) return null;\r\n\r\n const photo = user['photo'];\r\n const photoPath =\r\n typeof photo === 'string'\r\n ? photo\r\n : ((photo as { fileName?: string } | undefined)?.fileName ?? null);\r\n\r\n return {\r\n id,\r\n userId: id,\r\n displayName:\r\n (user['displayName'] as string | undefined) ??\r\n (user['name'] as string | undefined) ??\r\n (user['userName'] as string | undefined) ??\r\n '',\r\n userName: (user['userName'] as string | undefined) ?? '',\r\n email: (user['email'] as string | undefined) ?? null,\r\n photo: photoPath,\r\n isExternal: !!user['isExternal'],\r\n };\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction extractUserId(value: unknown): string | undefined {\r\n if (typeof value === 'string') {\r\n return value.trim() || undefined;\r\n }\r\n\r\n if (!value || typeof value !== 'object') {\r\n return undefined;\r\n }\r\n\r\n const record = value as Record<string, unknown>;\r\n for (const key of ['userId', 'id']) {\r\n const candidate = record[key];\r\n if (typeof candidate === 'string' && candidate.trim()) {\r\n return candidate.trim();\r\n }\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Delegation create/edit form (doc 04). Uses the v2 explicit-scope endpoints so\r\n * the persisted `DelegationScopeSelection` matches what scope/preview validated.\r\n *\r\n * - Delegator is server-derived; only the delegated user is collected.\r\n * - On edit, scope grants + rowVersion come from the loaded detail.\r\n * - Times are sent in UTC ISO; wrappers set timeZoneId = UTC.\r\n */\r\n@Component({\r\n selector: 'mt-delegation-form',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n DynamicForm,\r\n ReactiveFormsModule,\r\n ScopePicker,\r\n TranslocoDirective,\r\n ],\r\n templateUrl: './delegation-form.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class DelegationForm implements OnInit {\r\n readonly delegationForEdit = input<DelegationRow | null>(null);\r\n readonly readonly = input<boolean>(false);\r\n /**\r\n * Admin-managed mode: also collect the Delegator / From user, so an admin can\r\n * create a delegation between two selected users (Ahmed → Sara). Self-service\r\n * leaves this false; the delegator defaults to the current user server-side.\r\n */\r\n readonly adminMode = input<boolean>(false);\r\n\r\n private readonly halfWidth = 'flex flex-col gap-1 lg:col-span-6';\r\n private readonly fullWidth = 'flex flex-col gap-1 lg:col-span-12';\r\n\r\n modal = inject(ModalService);\r\n ref: ModalRef = inject(ModalRef);\r\n private readonly transloco = inject(TranslocoService);\r\n private readonly facade = inject(DelegationsFacade);\r\n\r\n delegationFormControl = new FormControl();\r\n formValue = toSignal(this.delegationFormControl.valueChanges);\r\n\r\n detail = this.facade.detail;\r\n isDetailLoading = this.facade.isLoadingDetail;\r\n scopePreview = this.facade.scopePreview;\r\n isPreviewingScope = this.facade.isPreviewingScope;\r\n isSaving = this.facade.isSaving;\r\n\r\n context = new HttpContext().set(REQUEST_CONTEXT, { useBaseUrl: false });\r\n\r\n protected readonly scope = signal<DelegationScopeSelection>(EMPTY_SCOPE);\r\n protected readonly currentDelegator = signal<DelegationFormUserValue | null>(\r\n getCurrentDelegatorFromLocalStorage(),\r\n );\r\n\r\n /** Selected delegator id drives scope/options loading and the admin payload. */\r\n protected readonly selectedDelegatorId = computed<string | undefined>(() => {\r\n if (this.adminMode()) {\r\n return extractUserId(this.formValue()?.delegateFrom);\r\n }\r\n return this.currentDelegator()?.id;\r\n });\r\n\r\n /** Admin mode waits for a chosen delegator; self-service always has one. */\r\n protected readonly showScopePicker = computed(\r\n () => !this.adminMode() || !!this.selectedDelegatorId(),\r\n );\r\n\r\n protected readonly specificDaysOptions = signal([\r\n { label: this.transloco.translate('delegations.days.sunday'), value: 0 },\r\n { label: this.transloco.translate('delegations.days.monday'), value: 1 },\r\n { label: this.transloco.translate('delegations.days.tuesday'), value: 2 },\r\n { label: this.transloco.translate('delegations.days.wednesday'), value: 3 },\r\n { label: this.transloco.translate('delegations.days.thursday'), value: 4 },\r\n { label: this.transloco.translate('delegations.days.friday'), value: 5 },\r\n { label: this.transloco.translate('delegations.days.saturday'), value: 6 },\r\n ]);\r\n\r\n protected readonly formConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'delegationForm',\r\n type: 'header',\r\n bodyClass: 'grid grid-cols-1 gap-4 items-start lg:grid-cols-12',\r\n order: 1,\r\n fields: [\r\n new UserSearchFieldConfig({\r\n key: 'delegateFrom',\r\n label: this.transloco.translate('delegations.column.delegatorName'),\r\n apiUrl: 'Identity/users',\r\n context: this.context,\r\n validators: [ValidatorConfig.required()],\r\n cssClass: this.halfWidth,\r\n colSpan: 6,\r\n order: 0,\r\n disabled:\r\n this.readonly() ||\r\n !this.adminMode() ||\r\n !!this.delegationForEdit(),\r\n }),\r\n new UserSearchFieldConfig({\r\n key: 'delegateTo',\r\n label: this.transloco.translate('delegations.column.delegatedTo'),\r\n apiUrl: 'Identity/users',\r\n context: this.context,\r\n validators: [ValidatorConfig.required()],\r\n cssClass: this.halfWidth,\r\n colSpan: 6,\r\n order: 1,\r\n disabled: this.readonly() || !!this.delegationForEdit(),\r\n }),\r\n new TextareaFieldConfig({\r\n key: 'description',\r\n label: this.transloco.translate('delegations.form.description'),\r\n placeholder: this.transloco.translate(\r\n 'delegations.form.description',\r\n ),\r\n cssClass: this.fullWidth,\r\n colSpan: 12,\r\n order: 2,\r\n disabled: this.readonly(),\r\n }),\r\n new DateFieldConfig({\r\n key: 'delegateFromDateTime',\r\n label: this.transloco.translate('delegations.column.startDate'),\r\n placeholder: this.transloco.translate(\r\n 'delegations.column.startDate',\r\n ),\r\n validators: [ValidatorConfig.required()],\r\n showTime: true,\r\n cssClass: this.halfWidth,\r\n colSpan: 6,\r\n order: 3,\r\n disabled: this.readonly(),\r\n }),\r\n new DateFieldConfig({\r\n key: 'delegateToDateTime',\r\n label: this.transloco.translate('delegations.column.endDate'),\r\n placeholder: this.transloco.translate('delegations.column.endDate'),\r\n validators: [ValidatorConfig.required()],\r\n showTime: true,\r\n cssClass: this.halfWidth,\r\n colSpan: 6,\r\n order: 4,\r\n disabled: this.readonly(),\r\n }),\r\n new RadioButtonFieldConfig({\r\n key: 'delegationDaysType',\r\n label: this.transloco.translate('delegations.form.daysApply'),\r\n options: [\r\n {\r\n label: this.transloco.translate('delegations.form.fullRange'),\r\n value: 'FullRange',\r\n },\r\n {\r\n label: this.transloco.translate(\r\n 'delegations.form.specificDays',\r\n ),\r\n value: 'SpecificDays',\r\n },\r\n ],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n validators: [ValidatorConfig.required()],\r\n cssClass: this.fullWidth,\r\n colSpan: 12,\r\n order: 5,\r\n disabled: this.readonly(),\r\n }),\r\n new MultiSelectFieldConfig({\r\n key: 'specificDays',\r\n label: this.transloco.translate('delegations.form.specificDays'),\r\n options: this.specificDaysOptions(),\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n maxSelectedLabels: 7,\r\n relations: [\r\n {\r\n key: 'delegationDaysType',\r\n value: 'SpecificDays',\r\n action: 'show',\r\n },\r\n ],\r\n cssClass: this.fullWidth,\r\n colSpan: 12,\r\n order: 6,\r\n disabled: this.readonly(),\r\n }),\r\n new ToggleFieldConfig({\r\n key: 'requiresApproval',\r\n label: this.transloco.translate(\r\n 'delegations.form.requiresApproval',\r\n ),\r\n cssClass: `${this.fullWidth} mt-2`,\r\n order: 7,\r\n disabled: this.readonly(),\r\n }),\r\n ],\r\n },\r\n ],\r\n }));\r\n\r\n constructor() {\r\n effect(() => {\r\n const editing = this.delegationForEdit();\r\n const d = this.detail();\r\n if (editing && d && d.row.delegationId === editing.delegationId) {\r\n this.delegationFormControl.patchValue({\r\n delegateFrom: this.mapPartyToUserValue(d.row.delegator),\r\n delegateTo: d.row.delegatedUser,\r\n description: '',\r\n delegateFromDateTime: d.row.startsAtUtc,\r\n delegateToDateTime: d.row.endsAtUtc,\r\n delegationDaysType: d.row.dayRuleMode,\r\n specificDays: d.row.specificDays ?? [],\r\n requiresApproval: d.row.approval?.requiresApproval ?? false,\r\n });\r\n this.scope.set({\r\n grants: d.scope?.grants ?? [],\r\n metadata: d.scope?.metadata ?? {},\r\n });\r\n } else if (!editing) {\r\n this.delegationFormControl.reset({\r\n delegateFrom: null,\r\n delegationDaysType: 'FullRange',\r\n requiresApproval: true,\r\n });\r\n this.scope.set(EMPTY_SCOPE);\r\n }\r\n });\r\n\r\n effect(() => {\r\n const currentDelegator = this.currentDelegator();\r\n if (this.adminMode() || this.delegationForEdit() || !currentDelegator) {\r\n return;\r\n }\r\n\r\n const existingDelegator = extractUserId(\r\n this.delegationFormControl.getRawValue()?.delegateFrom,\r\n );\r\n if (existingDelegator === currentDelegator.id) {\r\n return;\r\n }\r\n\r\n this.delegationFormControl.patchValue({\r\n delegateFrom: currentDelegator,\r\n });\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const editing = this.delegationForEdit();\r\n if (editing) {\r\n this.facade.getDetail(editing.delegationId, this.adminMode());\r\n }\r\n }\r\n\r\n protected readonly canSubmit = computed(\r\n () =>\r\n !this.readonly() &&\r\n this.scope().grants.length > 0 &&\r\n !!this.scopePreview() &&\r\n this.scopePreview()!.isValid &&\r\n !this.isPreviewingScope(),\r\n );\r\n\r\n onSubmit(): void {\r\n if (this.readonly() || !this.delegationFormControl.valid) return;\r\n if (!this.canSubmit()) return;\r\n\r\n const value = this.delegationFormControl.getRawValue();\r\n const scope = this.scope();\r\n const delegationDaysType = (value?.delegationDaysType ?? 'FullRange') as\r\n | 'FullRange'\r\n | 'SpecificDays';\r\n const specificDays =\r\n delegationDaysType === 'SpecificDays' ? (value?.specificDays ?? []) : [];\r\n const description = value?.description;\r\n const delegateFromDateTime = value?.delegateFromDateTime;\r\n const delegateToDateTime = value?.delegateToDateTime;\r\n const requiresApproval = !!value?.requiresApproval;\r\n const delegatedUserId = extractUserId(value?.delegateTo) ?? '';\r\n const selectedDelegatorId = this.selectedDelegatorId();\r\n\r\n const editing = this.delegationForEdit();\r\n if (this.adminMode()) {\r\n if (!selectedDelegatorId || !delegatedUserId) {\r\n return;\r\n }\r\n\r\n const base: AdminCreateDelegationV2Request = {\r\n delegatorUserId: selectedDelegatorId,\r\n delegatedUserId,\r\n description,\r\n delegateFromDateTime,\r\n delegateToDateTime,\r\n delegationDaysType,\r\n specificDays,\r\n requiresApproval,\r\n scope,\r\n };\r\n\r\n if (editing) {\r\n const latestRowVersion =\r\n this.detail()?.row?.rowVersion ?? editing.rowVersion;\r\n const req: AdminUpdateDelegationV2Request = {\r\n ...base,\r\n rowVersion: latestRowVersion,\r\n };\r\n this.facade.updateV2(editing.delegationId, req, true).subscribe({\r\n next: () => this.ref.close(true),\r\n });\r\n return;\r\n }\r\n\r\n this.facade.createV2(base, true).subscribe({\r\n next: () => this.ref.close(true),\r\n });\r\n return;\r\n }\r\n\r\n const base: CreateDelegationV2Request = {\r\n delegateFrom: null,\r\n delegateTo: delegatedUserId,\r\n description,\r\n delegateFromDateTime,\r\n delegateToDateTime,\r\n delegationDaysType,\r\n specificDays,\r\n requiresApproval,\r\n scope,\r\n };\r\n\r\n if (editing) {\r\n // Prefer the freshest rowVersion from the loaded detail (the form loads\r\n // detail on open); fall back to the list row only if detail is absent.\r\n const latestRowVersion =\r\n this.detail()?.row?.rowVersion ?? editing.rowVersion;\r\n const req: UpdateDelegationV2Request = {\r\n ...base,\r\n rowVersion: latestRowVersion,\r\n };\r\n this.facade.updateV2(editing.delegationId, req).subscribe({\r\n next: () => this.ref.close(true),\r\n });\r\n } else {\r\n const req: CreateDelegationV2Request = base;\r\n this.facade.createV2(req).subscribe({\r\n next: () => this.ref.close(true),\r\n });\r\n }\r\n }\r\n\r\n private mapPartyToUserValue(\r\n party: DelegationRow['delegator'],\r\n ): DelegationFormUserValue {\r\n return {\r\n id: party.userId,\r\n userId: party.userId,\r\n displayName: party.displayName,\r\n userName: party.email || party.displayName,\r\n email: party.email ?? null,\r\n photo: null,\r\n isExternal: false,\r\n };\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <div\r\n [class]=\"\r\n 'flex h-full min-h-0 min-w-0 flex-col overflow-hidden ' +\r\n modal.contentClass\r\n \"\r\n >\r\n <div\r\n class=\"grid min-h-0 flex-1 gap-4 overflow-y-auto p-4 max-[640px]:p-3 lg:grid-cols-[minmax(0,28rem)_minmax(0,1fr)] lg:items-start\"\r\n >\r\n <section\r\n class=\"flex flex-col gap-4 rounded-3xl border border-surface-200 bg-surface-0 p-4 shadow-xs lg:sticky lg:top-0\"\r\n >\r\n <mt-dynamic-form\r\n [formConfig]=\"formConfig()\"\r\n [formControl]=\"delegationFormControl\"\r\n />\r\n </section>\r\n\r\n <section\r\n class=\"flex min-h-0 flex-col gap-4 rounded-3xl border border-surface-200 bg-surface-0 p-4 shadow-xs\"\r\n >\r\n <div class=\"flex flex-col gap-2\">\r\n <div\r\n class=\"inline-flex w-fit items-center gap-2 rounded-full bg-primary-50 px-3 py-1 text-xs font-medium text-primary-700\"\r\n >\r\n <span class=\"inline-flex size-2 rounded-full bg-primary-500\"></span>\r\n {{ t(\"delegations.scope.previewTitle\") }}\r\n </div>\r\n <h3 class=\"text-xl font-semibold text-surface-900\">\r\n {{ t(\"delegations.scope.permissionsTitle\") }}\r\n </h3>\r\n @if (adminMode() && !showScopePicker()) {\r\n <p class=\"text-sm text-surface-500\">\r\n {{ t(\"delegations.form.selectDelegatorFirst\") }}\r\n </p>\r\n } @else {\r\n <p class=\"text-sm text-surface-500\">\r\n {{ t(\"delegations.scope.noSelection\") }}\r\n </p>\r\n }\r\n </div>\r\n\r\n @if (showScopePicker()) {\r\n <mt-scope-picker\r\n [(scope)]=\"scope\"\r\n [readonly]=\"readonly()\"\r\n [adminMode]=\"adminMode()\"\r\n [delegatorUserId]=\"selectedDelegatorId()\"\r\n ></mt-scope-picker>\r\n } @else {\r\n <div\r\n class=\"flex min-h-72 flex-col items-center justify-center gap-4 rounded-3xl border border-dashed border-surface-300 bg-surface-50 px-6 py-8 text-center\"\r\n >\r\n <div\r\n class=\"flex size-18 items-center justify-center rounded-3xl bg-surface-0 text-primary shadow-sm\"\r\n >\r\n <svg\r\n viewBox=\"0 0 64 64\"\r\n class=\"size-10\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-hidden=\"true\"\r\n >\r\n <rect\r\n x=\"10\"\r\n y=\"12\"\r\n width=\"44\"\r\n height=\"40\"\r\n rx=\"12\"\r\n class=\"fill-primary/10 stroke-primary/35\"\r\n stroke-width=\"2\"\r\n />\r\n <path\r\n d=\"M22 28H42\"\r\n class=\"stroke-primary\"\r\n stroke-width=\"3\"\r\n stroke-linecap=\"round\"\r\n />\r\n <path\r\n d=\"M22 36H34\"\r\n class=\"stroke-primary/70\"\r\n stroke-width=\"3\"\r\n stroke-linecap=\"round\"\r\n />\r\n <circle\r\n cx=\"45\"\r\n cy=\"20\"\r\n r=\"7\"\r\n class=\"fill-surface-0 stroke-primary\"\r\n stroke-width=\"2\"\r\n />\r\n <path\r\n d=\"M45 17V23\"\r\n class=\"stroke-primary\"\r\n stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"\r\n />\r\n <path\r\n d=\"M42 20H48\"\r\n class=\"stroke-primary\"\r\n stroke-width=\"2.5\"\r\n stroke-linecap=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n <div class=\"space-y-1\">\r\n <p class=\"text-base font-medium text-surface-900\">\r\n {{ t(\"delegations.scope.permissionsTitle\") }}\r\n </p>\r\n <p class=\"text-sm text-surface-500\">\r\n {{ t(\"delegations.form.selectDelegatorFirst\") }}\r\n </p>\r\n </div>\r\n </div>\r\n }\r\n </section>\r\n </div>\r\n\r\n <div [class]=\"modal.footerClass\">\r\n <mt-button\r\n [label]=\"t('delegations.common.cancel')\"\r\n variant=\"outlined\"\r\n (click)=\"ref.close()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n />\r\n @if (!readonly()) {\r\n <mt-button\r\n [label]=\"\r\n delegationForEdit()\r\n ? t('delegations.common.update')\r\n : t('delegations.common.create')\r\n \"\r\n [loading]=\"isSaving()\"\r\n [disabled]=\"!delegationFormControl.valid || !canSubmit()\"\r\n (click)=\"onSubmit()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n />\r\n }\r\n </div>\r\n </div>\r\n</ng-container>\r\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { EntityPreview } from '@masterteam/components/entities';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport type {\n DelegationDisplayValue,\n DelegationParty,\n DelegationScopeAction,\n DelegationScopeTarget,\n} from '../../../store/delegations/delegations.model';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\nimport {\n formatDelegationActionLabel,\n formatDelegationScopeSummary,\n formatDelegationTargetLabel,\n} from '../delegation-scope-display';\nimport { toDelegationUserEntity } from '../delegation-user-entity';\n\ntype DetailTab = 'overview' | 'scope';\n\n/**\n * Read-only drawer that shows the full `DelegationDetail` ({ row, scope, status }).\n */\n@Component({\n selector: 'mt-delegation-detail-drawer',\n standalone: true,\n imports: [\n CommonModule,\n Button,\n EntityPreview,\n SkeletonModule,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './delegation-detail-drawer.html',\n styleUrls: ['./delegation-detail-drawer.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationDetailDrawer implements OnInit {\n readonly delegationId = input.required<number>();\n readonly adminMode = input<boolean>(false);\n\n private readonly facade = inject(DelegationsFacade);\n private readonly transloco = inject(TranslocoService);\n protected readonly ref: ModalRef = inject(ModalRef);\n\n protected readonly tabs: { key: DetailTab; i18n: string }[] = [\n { key: 'overview', i18n: 'delegations.action.view' },\n { key: 'scope', i18n: 'delegations.column.scopeSummary' },\n ];\n protected readonly activeTab = signal<DetailTab>('overview');\n\n protected readonly isLoading = this.facade.isLoadingDetail;\n protected readonly detail = this.facade.detail;\n protected readonly row = computed(() => this.detail()?.row ?? null);\n\n ngOnInit(): void {\n this.facade.getDetail(this.delegationId(), this.adminMode());\n }\n\n protected setTab(tab: DetailTab): void {\n this.activeTab.set(tab);\n }\n\n protected approvalLabel(): string {\n const s = this.row()?.approval?.approvalStatus ?? 'NotRequired';\n return this.transloco.translate(`delegations.approvalStatus.${s}`);\n }\n\n protected getScopeTargetLabel(target: DelegationScopeTarget): string {\n return formatDelegationTargetLabel(target, this.transloco.getActiveLang());\n }\n\n protected getScopeActionLabel(action: DelegationScopeAction): string {\n return formatDelegationActionLabel(action, this.transloco.getActiveLang());\n }\n\n protected formatScopeSummary(\n summary: DelegationDisplayValue | undefined,\n ): string {\n return formatDelegationScopeSummary(\n summary,\n this.transloco.getActiveLang(),\n );\n }\n\n protected userEntity(party: DelegationParty, label?: string) {\n return toDelegationUserEntity(party, { label });\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col h-full\">\n <!-- Tabs -->\n <div class=\"flex border-b border-gray-200 px-4\">\n @for (tab of tabs; track tab.key) {\n <button\n type=\"button\"\n class=\"px-3 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\n [class.border-primary]=\"activeTab() === tab.key\"\n [class.text-primary]=\"activeTab() === tab.key\"\n [class.border-transparent]=\"activeTab() !== tab.key\"\n [class.text-gray-500]=\"activeTab() !== tab.key\"\n (click)=\"setTab(tab.key)\"\n >\n {{ t(tab.i18n) }}\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto p-4\">\n @if (isLoading() && !detail()) {\n <p-skeleton height=\"2rem\" class=\"mb-3\"></p-skeleton>\n <p-skeleton height=\"6rem\" class=\"mb-3\"></p-skeleton>\n <p-skeleton height=\"6rem\"></p-skeleton>\n } @else if (detail(); as d) {\n @if (activeTab() === \"overview\") {\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-3 min-w-0\">\n <mt-entity-preview\n [data]=\"\n userEntity(\n d.row.delegator,\n t('delegations.column.delegatorName')\n )\n \"\n ></mt-entity-preview>\n </div>\n <mt-delegation-status-chip\n [status]=\"d.status.effectiveStatus\"\n ></mt-delegation-status-chip>\n </div>\n\n <div class=\"grid grid-cols-2 gap-4\">\n <div class=\"flex flex-col\">\n <mt-entity-preview\n [data]=\"\n userEntity(\n d.row.delegatedUser,\n t('delegations.column.delegatedTo')\n )\n \"\n ></mt-entity-preview>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.approval\") }}\n </span>\n <span class=\"text-sm text-gray-900\">{{ approvalLabel() }}</span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.startDate\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.startsAtUtc | date: \"medium\" }}\n </span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.endDate\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.endsAtUtc | date: \"medium\" }}\n </span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.form.timeZone\") }}\n </span>\n <span class=\"text-sm text-gray-900\">{{\n d.row.timeZoneId\n }}</span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.days\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n @if (d.row.dayRuleMode === \"FullRange\") {\n {{ t(\"delegations.form.fullRange\") }}\n } @else {\n {{ d.row.specificDays.join(\", \") }}\n }\n </span>\n </div>\n </div>\n\n @if (d.row.cancellation?.cancellationReason) {\n <div\n class=\"rounded-md border border-gray-200 bg-surface-50 p-3 text-sm text-gray-800\"\n >\n <div class=\"font-medium\">\n {{ t(\"delegations.form.cancellationReason\") }}\n </div>\n <div>{{ d.row.cancellation.cancellationReason }}</div>\n </div>\n }\n </div>\n } @else {\n <!-- Scope tab -->\n <div class=\"flex flex-col gap-3\">\n <div class=\"text-sm text-gray-900\">\n {{\n formatScopeSummary(d.row.scopeSummary) ||\n t(\"delegations.column.scopeSummary\")\n }}\n </div>\n <div class=\"flex flex-col gap-2\">\n @for (grant of d.scope.grants; track $index) {\n <div\n class=\"border border-gray-200 rounded-md px-3 py-2 flex flex-col gap-1\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-sm font-medium text-gray-900\">\n {{ getScopeTargetLabel(grant.target) }}\n </span>\n <span class=\"text-xs text-gray-500\">\n {{ grant.target.targetType }}\n </span>\n </div>\n <span\n class=\"text-xs px-2 py-0.5 rounded-md bg-primary-50 text-primary w-fit\"\n >\n {{ getScopeActionLabel(grant.action) }}\n </span>\n </div>\n }\n @if (d.scope.grants.length === 0) {\n <p class=\"text-xs text-gray-500\">\n {{ t(\"delegations.scope.noSelection\") }}\n </p>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n <div\n class=\"border-t border-gray-200 px-4 py-3 flex items-center justify-end\"\n >\n <mt-button\n [label]=\"t('delegations.common.cancel')\"\n variant=\"outlined\"\n (click)=\"ref.close()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import { CommonModule, Location } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n linkedSignal,\n OnInit,\n signal,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\nimport { Card } from '@masterteam/components/card';\nimport { ModalService } from '@masterteam/components/modal';\nimport { Page } from '@masterteam/components/page';\nimport { Tabs } from '@masterteam/components/tabs';\nimport { Table } from '@masterteam/components/table';\nimport type {\n ColumnDef,\n TableAction,\n TableStatusMapValue,\n} from '@masterteam/components/table';\nimport { finalize } from 'rxjs';\nimport {\n DelegationAllowedAction,\n DelegationEffectiveStatus,\n DelegationListQuery,\n DelegationRow,\n} from '../../../store/delegations/delegations.model';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport DelegationForm from '../delegation-form/delegation-form';\nimport DelegationDetailDrawer from '../delegation-detail-drawer/delegation-detail-drawer';\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\nimport RejectDelegationDialog from '../reject-delegation-dialog/reject-delegation-dialog';\nimport { toDelegationUserValue } from '../delegation-user-entity';\n\ntype DelegationTab = 'my' | 'assigned' | 'approvals';\n\ntype DelegationTableRow = DelegationRow & {\n listedUser: ReturnType<typeof toDelegationUserValue>;\n delegatorUser: ReturnType<typeof toDelegationUserValue>;\n delegatedToUser: ReturnType<typeof toDelegationUserValue>;\n daysText: string;\n};\n\n/**\n * Delegations portal page (doc 02, 09): two lists — My Delegations (current user\n * is delegator) and Delegated To Me (current user is delegate). Rows render only\n * the BE-returned `allowedActions`; status comes from `effectiveStatus`.\n */\n@Component({\n selector: 'mt-delegations-list',\n standalone: true,\n imports: [\n CommonModule,\n Breadcrumb,\n Card,\n Page,\n Table,\n Tabs,\n TranslocoDirective,\n ],\n templateUrl: './delegations-list.html',\n styleUrl: './delegations-list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationsList implements OnInit {\n /**\n * Admin/control-panel breadcrumb. Hidden on the client self-service surface\n * (its links point at /control-panel/*). Bound from route data via\n * `withComponentInputBinding()` — admin leaves it default; client passes\n * `data: { showBreadcrumb: false }`.\n */\n readonly showBreadcrumb = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * Admin routes can embed the list under `mt-delegations`, which already owns\n * the page title, back button, and route tabs.\n */\n readonly showPageShell = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * Admin-managed surface: the create/edit form also collects the Delegator /\n * From user (admin creates a delegation between two users). Client\n * self-service leaves this false. Bound from route data via\n * `withComponentInputBinding()` — admin passes `data: { adminMode: true }`.\n */\n readonly adminMode = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n readonly surfaceTitleKey = input<string>('delegations.title');\n readonly assignedTabLabelKey = input<string>('delegations.delegatedToMe');\n readonly assignedDecisionTab = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n readonly assignedEmptyStateKey = input<string>('delegations.empty.assigned');\n readonly assignedStatus = input<DelegationEffectiveStatus | null>(null);\n readonly showApprovalTab = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n readonly approvalTabLabelKey = input<string>('delegations.tabs.approvals');\n readonly approvalEmptyStateKey = input<string>('delegations.empty.pending');\n readonly approvalStatus = input<DelegationEffectiveStatus>('PendingApproval');\n\n private readonly facade = inject(DelegationsFacade);\n private readonly location = inject(Location);\n private readonly modal = inject(ModalService);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly breadcrumbItems = linkedSignal(() => [\n {\n label: '',\n icon: 'general.home-line',\n routerLink: '/control-panel/workspaces',\n },\n {\n label: this.transloco.translate('product-settings.product-settings'),\n routerLink: '/control-panel/product-settings',\n },\n {\n label: this.transloco.translate('delegations.title'),\n },\n ]);\n\n protected readonly activeTab = signal<DelegationTab>('my');\n protected readonly surfaceTitle = computed(() =>\n this.transloco.translate(this.surfaceTitleKey()),\n );\n protected readonly tabs = computed(() => {\n const tabs = [\n {\n value: 'my' as DelegationTab,\n label: this.translateTab('delegations.myDelegations', 'My Delegations'),\n },\n {\n value: 'assigned' as DelegationTab,\n label: this.assignedDecisionTab()\n ? `${this.translateTab('delegations.action.approve', 'Approve')} / ${this.translateTab('delegations.action.reject', 'Reject')}`\n : this.translateTab(this.assignedTabLabelKey(), 'Delegated To Me'),\n },\n ];\n\n if (this.showApprovalTab()) {\n tabs.push({\n value: 'approvals' as DelegationTab,\n label: this.translateTab(this.approvalTabLabelKey(), 'Approvals'),\n });\n }\n\n return tabs;\n });\n\n protected readonly isLoading = computed(() =>\n this.adminMode()\n ? this.facade.isLoadingAdmin()\n : this.activeTab() === 'my'\n ? this.facade.isLoadingMy()\n : this.facade.isLoadingAssigned(),\n );\n protected readonly rows = computed(() =>\n this.adminMode()\n ? this.facade.adminItems()\n : this.activeTab() === 'my'\n ? this.facade.myItems()\n : this.facade.assignedItems(),\n );\n protected readonly tableRows = computed<DelegationTableRow[]>(() =>\n this.rows().map((row) => ({\n ...row,\n listedUser: toDelegationUserValue(this.getListedParty(row)),\n delegatorUser: toDelegationUserValue(row.delegator),\n delegatedToUser: toDelegationUserValue(row.delegatedUser),\n daysText: this.formatDays(row),\n })),\n );\n protected readonly emptyStateKey = computed(() =>\n this.adminMode()\n ? 'components.table.no-data-found'\n : this.activeTab() === 'my'\n ? 'delegations.empty.my'\n : this.activeTab() === 'approvals'\n ? this.approvalEmptyStateKey()\n : this.assignedEmptyStateKey(),\n );\n\n protected readonly tableActions = computed<TableAction[]>(() => [\n {\n icon: 'general.plus',\n label: this.transloco.translate('delegations.action.create'),\n color: 'primary',\n action: () => this.openForm(null),\n },\n ]);\n\n protected readonly rowActions = signal<TableAction[]>([\n {\n icon: 'general.eye',\n tooltip: this.transloco.translate('delegations.action.view'),\n color: 'primary',\n variant: 'outlined',\n action: (row: DelegationRow) => this.viewDetails(row),\n hidden: (row: DelegationRow) => !this.has(row, 'View'),\n },\n {\n icon: 'custom.pencil',\n tooltip: this.transloco.translate('delegations.action.edit'),\n color: 'primary',\n action: (row: DelegationRow) => this.openForm(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Edit'),\n },\n {\n icon: 'general.check',\n tooltip: this.transloco.translate('delegations.action.approve'),\n color: 'primary',\n action: (row: DelegationRow) => this.approve(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Approve'),\n loading: (row: DelegationRow) =>\n this.busyIds().includes(`approve:${row.delegationId}`),\n confirmation: { type: 'popup' },\n },\n {\n icon: 'general.x-close',\n tooltip: this.transloco.translate('delegations.action.reject'),\n color: 'danger',\n variant: 'outlined',\n // Opens a dialog that collects a required reason (no inline popup confirm).\n action: (row: DelegationRow) => this.reject(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Reject'),\n },\n {\n icon: 'general.trash-01',\n tooltip: this.transloco.translate('delegations.action.cancel'),\n color: 'danger',\n variant: 'outlined',\n action: (row: DelegationRow) => this.cancel(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Cancel'),\n loading: (row: DelegationRow) =>\n this.busyIds().includes(`cancel:${row.delegationId}`),\n confirmation: { type: 'popup', confirmationType: 'delete' },\n },\n {\n icon: 'arrow.arrow-right',\n tooltip: this.transloco.translate('delegations.action.startSession'),\n color: 'primary',\n action: (row: DelegationRow) => this.startSession(row),\n hidden: (row: DelegationRow) => !this.has(row, 'StartSession'),\n },\n ]);\n\n private readonly statusColors: Record<DelegationEffectiveStatus, string> = {\n Active: '#047857',\n Scheduled: '#1d4ed8',\n PendingApproval: '#b45309',\n InactiveToday: '#1d4ed8',\n Expired: '#4b5563',\n Rejected: '#b91c1c',\n Cancelled: '#4b5563',\n };\n\n protected readonly statusMap = linkedSignal<\n Record<DelegationEffectiveStatus, TableStatusMapValue>\n >(() => ({\n Active: {\n display: this.transloco.translate('delegations.status.active'),\n color: this.statusColors.Active,\n },\n Scheduled: {\n display: this.transloco.translate('delegations.status.scheduled'),\n color: this.statusColors.Scheduled,\n },\n PendingApproval: {\n display: this.transloco.translate('delegations.status.pendingApproval'),\n color: this.statusColors.PendingApproval,\n },\n InactiveToday: {\n display: this.transloco.translate('delegations.status.inactiveToday'),\n color: this.statusColors.InactiveToday,\n },\n Expired: {\n display: this.transloco.translate('delegations.status.expired'),\n color: this.statusColors.Expired,\n },\n Rejected: {\n display: this.transloco.translate('delegations.status.rejected'),\n color: this.statusColors.Rejected,\n },\n Cancelled: {\n display: this.transloco.translate('delegations.status.cancelled'),\n color: this.statusColors.Cancelled,\n },\n }));\n\n protected readonly tableColumns = linkedSignal<ColumnDef[]>(() => {\n const baseColumns: ColumnDef[] = [\n {\n key: 'effectiveStatus',\n label: this.transloco.translate('delegations.column.status'),\n type: 'status',\n statusMap: this.statusMap(),\n },\n {\n key: 'startsAtUtc',\n label: this.transloco.translate('delegations.column.startDate'),\n type: 'dateTime',\n },\n {\n key: 'endsAtUtc',\n label: this.transloco.translate('delegations.column.endDate'),\n type: 'dateTime',\n },\n {\n key: 'createdAtUtc',\n label: this.transloco.translate('delegations.column.createdDate'),\n type: 'dateTime',\n },\n {\n key: 'daysText',\n label: this.transloco.translate('delegations.column.days'),\n type: 'text',\n },\n ];\n\n if (this.adminMode()) {\n return [\n {\n key: 'delegatorUser',\n label: this.transloco.translate('delegations.column.delegatorName'),\n type: 'user',\n },\n {\n key: 'delegatedToUser',\n label: this.transloco.translate('delegations.column.delegatedTo'),\n type: 'user',\n },\n ...baseColumns,\n ];\n }\n\n return [\n {\n key: 'listedUser',\n label: this.transloco.translate(\n this.activeTab() === 'my'\n ? 'delegations.column.delegatedTo'\n : 'delegations.column.delegatorName',\n ),\n type: 'user',\n },\n ...baseColumns,\n ];\n });\n\n private readonly busyIds = signal<string[]>([]);\n\n private readonly weekdayKeys = [\n 'sunday',\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n ] as const;\n\n ngOnInit(): void {\n this.loadCurrentTab();\n }\n\n protected switchTab(tab: DelegationTab): void {\n this.activeTab.set(tab);\n this.loadCurrentTab();\n }\n\n protected goBack(): void {\n this.location.back();\n }\n\n private loadCurrentTab(\n query: DelegationListQuery = { page: 1, pageSize: 25 },\n ): void {\n if (this.adminMode()) {\n this.facade.getAdmin(query);\n return;\n }\n\n if (this.activeTab() === 'my') {\n this.facade.getMy(query);\n } else if (this.activeTab() === 'approvals') {\n this.facade.getAssigned({\n ...query,\n status: query.status ?? this.approvalStatus(),\n });\n } else {\n this.facade.getAssigned({\n ...query,\n status: query.status ?? this.assignedStatus() ?? undefined,\n });\n }\n }\n\n private reloadCurrentTab(): void {\n this.loadCurrentTab();\n }\n\n protected has(row: DelegationRow, action: DelegationAllowedAction): boolean {\n return row.allowedActions?.includes(action) ?? false;\n }\n\n protected formatDays(row: DelegationRow): string {\n if (row.dayRuleMode === 'SpecificDays' && row.specificDays?.length) {\n return row.specificDays\n .filter((d) => d >= 0 && d < this.weekdayKeys.length)\n .map((d) =>\n this.transloco.translate(`delegations.days.${this.weekdayKeys[d]}`),\n )\n .join(', ');\n }\n return this.transloco.translate('delegations.form.fullRange');\n }\n\n protected getListedParty(row: DelegationRow) {\n return this.activeTab() === 'my' ? row.delegatedUser : row.delegator;\n }\n\n private translateTab(key: string, fallback: string): string {\n const translated = this.transloco.translate(key).trim();\n return translated && translated !== key ? translated : fallback;\n }\n\n private viewDetails(row: DelegationRow): void {\n this.modal.openModal(DelegationDetailDrawer, 'drawer', {\n header: this.transloco.translate('delegations.action.view'),\n styleClass:\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]',\n position: 'end',\n appendTo: 'page-content',\n dismissableMask: true,\n dismissible: true,\n inputValues: {\n delegationId: row.delegationId,\n adminMode: this.adminMode(),\n },\n });\n }\n\n private openForm(row: DelegationRow | null): void {\n const ref = this.modal.openModal(\n DelegationForm,\n row ? 'drawer' : 'dialog',\n {\n header: this.transloco.translate(\n row ? 'delegations.action.edit' : 'delegations.action.create',\n ),\n styleClass: row\n ? '!absolute !shadow-none !w-full !max-w-full sm:!w-[56rem] xl:!w-[68rem]'\n : '!w-[min(98vw,88rem)] !max-w-[98vw] !h-[min(94vh,56rem)] !max-h-[94vh] !overflow-hidden',\n position: row ? 'end' : '',\n appendTo: row ? 'page-content' : 'body',\n dismissableMask: true,\n dismissible: true,\n inputValues: {\n delegationForEdit: row,\n readonly: false,\n adminMode: this.adminMode(),\n },\n },\n );\n ref.onClose.subscribe((saved: boolean) => {\n if (saved) this.reloadCurrentTab();\n });\n }\n\n private approve(row: DelegationRow): void {\n this.mark(`approve:${row.delegationId}`, true);\n this.facade\n .approve(row.delegationId, { rowVersion: row.rowVersion })\n .pipe(finalize(() => this.mark(`approve:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private reject(row: DelegationRow): void {\n const ref = this.modal.openModal(RejectDelegationDialog, 'dialog', {\n header: this.transloco.translate('delegations.action.reject'),\n styleClass: '!w-[min(96vw,30rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row },\n });\n ref.onClose.subscribe((rejected: boolean) => {\n if (rejected) this.reloadCurrentTab();\n });\n }\n\n private cancel(row: DelegationRow): void {\n this.mark(`cancel:${row.delegationId}`, true);\n this.facade\n .cancel(row.delegationId, row.rowVersion, this.adminMode())\n .pipe(finalize(() => this.mark(`cancel:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private startSession(row: DelegationRow): void {\n const ref = this.modal.openModal(StartSessionDialog, 'dialog', {\n header: this.transloco.translate('delegations.action.startSession'),\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row, intent: 'start' },\n });\n ref.onClose.subscribe((started: boolean) => {\n if (started) this.reloadCurrentTab();\n });\n }\n\n private mark(key: string, on: boolean): void {\n this.busyIds.update((ids) =>\n on ? [...ids, key] : ids.filter((id) => id !== key),\n );\n }\n}\n","<ng-container *transloco=\"let t\">\n <ng-template #tableContent>\n <div class=\"flex flex-col gap-4\">\n @if (!adminMode()) {\n <mt-tabs\n mode=\"underline\"\n [(active)]=\"activeTab\"\n [options]=\"tabs()\"\n fluid\n (onChange)=\"switchTab($event)\"\n ></mt-tabs>\n }\n\n <mt-table\n [data]=\"tableRows()\"\n [columns]=\"tableColumns()\"\n [actions]=\"tableActions()\"\n [rowActions]=\"rowActions()\"\n [loading]=\"isLoading()\"\n [noCard]=\"true\"\n >\n <ng-template #empty>\n <p class=\"text-sm text-surface-500\">\n {{ t(emptyStateKey()) }}\n </p>\n </ng-template>\n </mt-table>\n </div>\n </ng-template>\n\n <ng-template #adminContent>\n <div class=\"flex min-h-full flex-col gap-4\">\n @if (showBreadcrumb()) {\n <mt-breadcrumb [items]=\"breadcrumbItems()\"></mt-breadcrumb>\n }\n <ng-container *ngTemplateOutlet=\"tableContent\"></ng-container>\n </div>\n </ng-template>\n\n @if (adminMode()) {\n @if (showPageShell()) {\n <mt-page\n [title]=\"surfaceTitle()\"\n [avatarIcon]=\"'custom.hierarchy-structure'\"\n [contentClass]=\"'max-[1025px]:p-4 max-[640px]:p-3'\"\n [avatarStyle]=\"{\n '--p-avatar-background': 'var(--p-indigo-50)',\n '--p-avatar-color': 'var(--p-indigo-700)',\n }\"\n (backButtonClick)=\"goBack()\"\n backButton\n >\n <ng-container *ngTemplateOutlet=\"adminContent\"></ng-container>\n </mt-page>\n } @else {\n <ng-container *ngTemplateOutlet=\"adminContent\"></ng-container>\n }\n } @else {\n <div class=\"flex h-full flex-col gap-4 p-4\">\n <mt-card [title]=\"surfaceTitle()\">\n <ng-container *ngTemplateOutlet=\"tableContent\"></ng-container>\n </mt-card>\n </div>\n }\n</ng-container>\n","import { HttpErrorResponse, HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, throwError } from 'rxjs';\nimport { DelegationSessionFacade } from '../store/session/delegation-session.facade';\nimport type { DelegationSessionInvalidationReason } from '../store/session/delegation-session.model';\n\n/**\n * Endpoints that must NEVER carry the `app-delegation` header.\n * Starting a delegated session uses only the normal `Authorization` token\n * (doc 05). All other `identity/delegations` management calls are normal\n * (non-delegated) actions too, so the whole namespace is excluded.\n */\nconst EXCLUDE = /\\bidentity\\/delegations\\b/i;\n\nconst SESSION_RELATED_MARKERS = [\n 'Delegation.Token.',\n 'Delegation.Session.ActorRequired',\n 'Delegation.Session.AuthSessionRequired',\n 'Delegation.Authorization.SessionMismatch',\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction getStringField(value: unknown, field: string): string | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const fieldValue = value[field];\n return typeof fieldValue === 'string' ? fieldValue : null;\n}\n\nfunction getField(value: unknown, field: string): unknown {\n return isRecord(value) ? value[field] : null;\n}\n\nfunction readDelegationErrorText(error: HttpErrorResponse): string {\n const body = error.error;\n const errors = getField(body, 'errors');\n\n return [\n getStringField(body, 'message'),\n getStringField(body, 'code'),\n getStringField(body, 'error'),\n getStringField(errors, 'code'),\n getStringField(errors, 'message'),\n typeof body === 'string' ? body : null,\n error.message,\n ]\n .filter((value): value is string => !!value)\n .join(' ');\n}\n\nfunction isSessionInvalidationText(errorText: string): boolean {\n if (SESSION_RELATED_MARKERS.some((marker) => errorText.includes(marker))) {\n return true;\n }\n\n const normalized = errorText.toLowerCase();\n if (\n !normalized.includes('delegated session') &&\n !normalized.includes('delegation scope changed') &&\n !normalized.includes('delegation changed')\n ) {\n return false;\n }\n\n return [\n 'not valid',\n 'could not be verified',\n 'does not match',\n 'scope changed',\n 'changed after the session started',\n 'start the delegated session again',\n 'restart the delegation session',\n ].some((marker) => normalized.includes(marker));\n}\n\nfunction resolveInvalidationReason(\n error: HttpErrorResponse,\n): DelegationSessionInvalidationReason | null {\n const errorText = readDelegationErrorText(error);\n if (!isSessionInvalidationText(errorText)) {\n return null;\n }\n\n const normalized = errorText.toLowerCase();\n\n if (\n errorText.includes('SessionMismatch') ||\n normalized.includes('does not match')\n ) {\n return 'SessionMismatch';\n }\n\n if (\n errorText.includes('ScopeChanged') ||\n errorText.includes('VersionChanged') ||\n normalized.includes('scope changed') ||\n normalized.includes('changed after the session started')\n ) {\n return 'ScopeChanged';\n }\n\n return 'TokenInvalid';\n}\n\n/**\n * Adds `app-delegation: Bearer <token>` to outgoing requests while a delegated\n * session is active. Register AFTER the gateway-auth interceptor (so the normal\n * `Authorization` header is set first) and BEFORE the message interceptor.\n */\nexport const appDelegationInterceptor: HttpInterceptorFn = (req, next) => {\n if (EXCLUDE.test(req.url)) {\n return next(req);\n }\n\n const facade = inject(DelegationSessionFacade);\n const token = facade.token();\n if (!token) {\n return next(req);\n }\n\n return next(\n req.clone({ setHeaders: { 'app-delegation': `Bearer ${token}` } }),\n ).pipe(\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse && error.status === 403) {\n const reason = resolveInvalidationReason(error);\n if (reason) {\n facade.endSession(reason);\n facade.loadCandidates();\n }\n }\n\n return throwError(() => error);\n }),\n );\n};\n","// store/index.ts\nexport * from './delegations';\nexport * from './session';\n","// Runtime UI surfaces — projected into host topbars + opened via ModalService.\nexport { TopbarDelegationMenu } from './lib/delegations/topbar-delegation-menu/topbar-delegation-menu';\nexport { DelegationStatusChip } from './lib/delegations/delegation-status-chip/delegation-status-chip';\nexport { default as StartSessionDialog } from './lib/delegations/start-session-dialog/start-session-dialog';\nexport { default as RejectDelegationDialog } from './lib/delegations/reject-delegation-dialog/reject-delegation-dialog';\n\n// Management UI — portal page (My Delegations / Delegated To Me) + form + detail drawer.\nexport { default as Delegations } from './lib/delegations/delegations';\nexport { default as DelegationsList } from './lib/delegations/delegations-list/delegations-list';\nexport { default as DelegationForm } from './lib/delegations/delegation-form/delegation-form';\nexport { default as DelegationDetailDrawer } from './lib/delegations/delegation-detail-drawer/delegation-detail-drawer';\nexport { ScopePicker } from './lib/delegations/delegation-form/scope-picker/scope-picker';\n\n// HTTP\nexport { appDelegationInterceptor } from './interceptors/app-delegation.interceptor';\n\n// Store (models, actions, state, facades — both delegations and session)\nexport * from './store';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BASE","__decorate","isRecord","normalizeGrant","EMPTY_SCOPE","i1"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-delegations.mjs","sources":["../../../../packages/masterteam/delegations/src/lib/delegations/delegation-status-chip/delegation-status-chip.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.actions.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.model.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.state.ts","../../../../packages/masterteam/delegations/src/store/session/delegation-session.facade.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-scope-display.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-user-entity.ts","../../../../packages/masterteam/delegations/src/lib/delegations/start-session-dialog/start-session-dialog.ts","../../../../packages/masterteam/delegations/src/lib/delegations/start-session-dialog/start-session-dialog.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-candidates-prompt-dialog/delegation-candidates-prompt-dialog.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-candidates-prompt-dialog/delegation-candidates-prompt-dialog.html","../../../../packages/masterteam/delegations/src/lib/delegations/topbar-delegation-menu/topbar-delegation-menu.ts","../../../../packages/masterteam/delegations/src/lib/delegations/topbar-delegation-menu/topbar-delegation-menu.html","../../../../packages/masterteam/delegations/src/store/delegations/delegations.actions.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.model.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.state.ts","../../../../packages/masterteam/delegations/src/store/delegations/delegations.facade.ts","../../../../packages/masterteam/delegations/src/lib/delegations/reject-delegation-dialog/reject-delegation-dialog.ts","../../../../packages/masterteam/delegations/src/lib/delegations/reject-delegation-dialog/reject-delegation-dialog.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-scope-options.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/scope-picker/scope-picker.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/scope-picker/scope-picker.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/delegation-form.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-form/delegation-form.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-detail-drawer/delegation-detail-drawer.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegation-detail-drawer/delegation-detail-drawer.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegations-list/delegations-list.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations-list/delegations-list.html","../../../../packages/masterteam/delegations/src/interceptors/app-delegation.interceptor.ts","../../../../packages/masterteam/delegations/src/store/index.ts","../../../../packages/masterteam/delegations/src/public-api.ts","../../../../packages/masterteam/delegations/src/masterteam-delegations.ts"],"sourcesContent":["import { Component, computed, input } from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Chip } from '@masterteam/components/chip';\nimport { DelegationEffectiveStatus } from '../../../store/delegations/delegations.model';\n\ninterface StatusVisual {\n i18nKey: string;\n styleClass: string;\n}\n\nconst STATUS_VISUAL: Record<DelegationEffectiveStatus, StatusVisual> = {\n Active: {\n i18nKey: 'delegations.status.active',\n styleClass: 'mt-status-chip mt-status-chip--active',\n },\n Scheduled: {\n i18nKey: 'delegations.status.scheduled',\n styleClass: 'mt-status-chip mt-status-chip--scheduled',\n },\n PendingApproval: {\n i18nKey: 'delegations.status.pendingApproval',\n styleClass: 'mt-status-chip mt-status-chip--pending',\n },\n InactiveToday: {\n i18nKey: 'delegations.status.inactiveToday',\n styleClass: 'mt-status-chip mt-status-chip--scheduled',\n },\n Expired: {\n i18nKey: 'delegations.status.expired',\n styleClass: 'mt-status-chip mt-status-chip--expired',\n },\n Rejected: {\n i18nKey: 'delegations.status.rejected',\n styleClass: 'mt-status-chip mt-status-chip--rejected',\n },\n Cancelled: {\n i18nKey: 'delegations.status.cancelled',\n styleClass: 'mt-status-chip mt-status-chip--cancelled',\n },\n};\n\n@Component({\n selector: 'mt-delegation-status-chip',\n standalone: true,\n imports: [Chip, TranslocoDirective],\n template: `\n <ng-container *transloco=\"let t\">\n @let v = visual();\n <mt-chip [label]=\"t(v.i18nKey)\" [styleClass]=\"v.styleClass\"></mt-chip>\n </ng-container>\n `,\n styles: [\n `\n :host {\n display: inline-flex;\n }\n :host ::ng-deep .mt-status-chip {\n font-weight: 500;\n font-size: 0.75rem;\n border-radius: 9999px;\n padding-inline: 0.625rem;\n padding-block: 0.125rem;\n }\n :host ::ng-deep .mt-status-chip--active {\n background-color: rgb(220 252 231);\n color: rgb(22 101 52);\n }\n :host ::ng-deep .mt-status-chip--scheduled {\n background-color: rgb(219 234 254);\n color: rgb(30 64 175);\n }\n :host ::ng-deep .mt-status-chip--pending {\n background-color: rgb(254 249 195);\n color: rgb(133 77 14);\n }\n :host ::ng-deep .mt-status-chip--expired {\n background-color: rgb(243 244 246);\n color: rgb(75 85 99);\n }\n :host ::ng-deep .mt-status-chip--rejected {\n background-color: rgb(254 226 226);\n color: rgb(153 27 27);\n }\n :host ::ng-deep .mt-status-chip--cancelled {\n background-color: rgb(229 231 235);\n color: rgb(55 65 81);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--active {\n background-color: rgba(34, 197, 94, 0.2);\n color: rgb(134 239 172);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--scheduled {\n background-color: rgba(59, 130, 246, 0.2);\n color: rgb(147 197 253);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--pending {\n background-color: rgba(234, 179, 8, 0.2);\n color: rgb(253 224 71);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--expired {\n background-color: rgba(148, 163, 184, 0.2);\n color: rgb(203 213 225);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--rejected {\n background-color: rgba(239, 68, 68, 0.2);\n color: rgb(252 165 165);\n }\n :host-context(.dark) ::ng-deep .mt-status-chip--cancelled {\n background-color: rgba(148, 163, 184, 0.15);\n color: rgb(203 213 225);\n }\n `,\n ],\n})\nexport class DelegationStatusChip {\n readonly status = input.required<DelegationEffectiveStatus>();\n\n protected readonly visual = computed<StatusVisual>(\n () => STATUS_VISUAL[this.status()] ?? STATUS_VISUAL.Scheduled,\n );\n}\n","import { DelegationRow } from '../delegations/delegations.model';\nimport { DelegationSessionInvalidationReason } from './delegation-session.model';\n\n/** Fetch the active delegations the current user may start (user/activedelegations). */\nexport class LoadDelegationCandidates {\n static readonly type = '[DelegationSession] Load Candidates';\n}\n\n/** Start a delegated session for the given assignment row. */\nexport class StartDelegationSession {\n static readonly type = '[DelegationSession] Start';\n constructor(public delegation: DelegationRow) {}\n}\n\n/** End the current delegated session. Client-local only (doc 05). */\nexport class EndDelegationSession {\n static readonly type = '[DelegationSession] End';\n constructor(public reason: DelegationSessionInvalidationReason = 'Manual') {}\n}\n\n/** Switch directly from the current session to another delegation. */\nexport class SwitchDelegationSession {\n static readonly type = '[DelegationSession] Switch';\n constructor(public delegation: DelegationRow) {}\n}\n","import { LoadingStateShape } from '../utils/state-helpers';\nimport { DelegationRow } from '../delegations/delegations.model';\n\n/**\n * Active delegated session. Memory-only by design (doc 05):\n * the delegation token is never persisted to long-lived storage.\n *\n * `delegation.delegatedUser` is the executed-by (actual logged-in) user and\n * `delegation.delegator` is the on-behalf-of user — both already present on the\n * row from the active-delegations endpoint.\n */\nexport interface ActiveDelegationSession {\n token: string;\n delegation: DelegationRow;\n}\n\nexport type DelegationSessionInvalidationReason =\n | 'TokenInvalid'\n | 'SessionMismatch'\n | 'ScopeChanged'\n | 'Forbidden'\n | 'Logout'\n | 'UserSwitch'\n | 'TenantSwitch'\n | 'AppSwitch'\n | 'Manual';\n\nexport enum DelegationSessionActionKey {\n LoadCandidates = 'loadCandidates',\n StartSession = 'startSession',\n}\n\nexport interface DelegationSessionStateModel extends LoadingStateShape<DelegationSessionActionKey> {\n active: ActiveDelegationSession | null;\n candidates: DelegationRow[];\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport {\n Action,\n Actions,\n ofActionDispatched,\n ofActionSuccessful,\n Selector,\n State,\n StateContext,\n Store,\n} from '@ngxs/store';\nimport { handleApiRequest } from '@masterteam/components';\nimport { EMPTY, switchMap } from 'rxjs';\nimport { Response } from '../delegations/api.model';\nimport {\n DelegationPage,\n DelegationRow,\n} from '../delegations/delegations.model';\nimport {\n EndDelegationSession,\n LoadDelegationCandidates,\n StartDelegationSession,\n SwitchDelegationSession,\n} from './delegation-session.actions';\nimport {\n ActiveDelegationSession,\n DelegationSessionActionKey,\n DelegationSessionStateModel,\n} from './delegation-session.model';\n\nconst BASE = 'identity/delegations';\n\n// Action shells matching gateway-auth type strings - loose coupling, matched by\n// `type` only so this package does not depend on @masterteam/gateway-auth.\nclass GatewayLoginSuccessShell {\n static readonly type = '[Auth] Login Success';\n}\nclass GatewayLogoutShell {\n static readonly type = '[Auth] Logout';\n}\nclass GatewayLaunchApplicationShell {\n static readonly type = '[Auth] Launch Application';\n}\nclass GatewaySetAppSessionShell {\n static readonly type = '[Auth] Set App Session';\n}\nclass GatewayClearAppSessionShell {\n static readonly type = '[Auth] Clear App Session';\n}\nclass GatewayClearAllAppSessionsShell {\n static readonly type = '[Auth] Clear All App Sessions';\n}\n\nconst CLEAR_CANDIDATE_REASONS = [\n 'Logout',\n 'UserSwitch',\n 'TenantSwitch',\n 'AppSwitch',\n] as const;\n\nfunction shouldClearCandidates(reason: string): boolean {\n return CLEAR_CANDIDATE_REASONS.some((candidate) => candidate === reason);\n}\n\nfunction canStart(row: DelegationRow): boolean {\n return (\n row.effectiveStatus === 'Active' &&\n row.allowedActions?.includes('StartSession')\n );\n}\n\n@State<DelegationSessionStateModel>({\n name: 'delegationSession',\n defaults: {\n active: null,\n candidates: [],\n loadingActive: [],\n errors: {},\n },\n})\n@Injectable()\nexport class DelegationSessionState {\n private http = inject(HttpClient);\n private actions$ = inject(Actions);\n private store = inject(Store);\n\n constructor() {\n this.actions$\n .pipe(ofActionSuccessful(GatewayLoginSuccessShell))\n .subscribe(() => this.store.dispatch(new LoadDelegationCandidates()));\n\n this.actions$\n .pipe(ofActionDispatched(GatewayLogoutShell))\n .subscribe(() => this.store.dispatch(new EndDelegationSession('Logout')));\n\n this.actions$\n .pipe(\n ofActionDispatched(\n GatewayLaunchApplicationShell,\n GatewaySetAppSessionShell,\n GatewayClearAppSessionShell,\n GatewayClearAllAppSessionsShell,\n ),\n )\n .subscribe(() =>\n this.store.dispatch(new EndDelegationSession('AppSwitch')),\n );\n\n this.actions$\n .pipe(\n ofActionSuccessful(\n GatewayLaunchApplicationShell,\n GatewaySetAppSessionShell,\n ),\n )\n .subscribe(() => this.store.dispatch(new LoadDelegationCandidates()));\n }\n\n // ---------------------------------------------------------------------------\n // Selectors\n // ---------------------------------------------------------------------------\n\n @Selector()\n static getActive(\n state: DelegationSessionStateModel,\n ): ActiveDelegationSession | null {\n return state.active;\n }\n\n @Selector()\n static getCandidates(state: DelegationSessionStateModel): DelegationRow[] {\n return state.candidates;\n }\n\n @Selector()\n static isDelegated(state: DelegationSessionStateModel): boolean {\n return !!state.active;\n }\n\n @Selector()\n static getLoadingActive(state: DelegationSessionStateModel): string[] {\n return state.loadingActive;\n }\n\n @Selector()\n static getErrors(\n state: DelegationSessionStateModel,\n ): Record<string, string | null | undefined> {\n return state.errors;\n }\n\n // ---------------------------------------------------------------------------\n // Actions\n // ---------------------------------------------------------------------------\n\n @Action(LoadDelegationCandidates)\n loadCandidates(ctx: StateContext<DelegationSessionStateModel>) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/user/activedelegations`,\n );\n return handleApiRequest({\n ctx,\n key: DelegationSessionActionKey.LoadCandidates,\n request$: req$,\n onSuccess: (response) => ({\n candidates: (response.data?.items ?? []).filter(canStart),\n }),\n });\n }\n\n @Action(StartDelegationSession)\n start(\n ctx: StateContext<DelegationSessionStateModel>,\n { delegation }: StartDelegationSession,\n ) {\n const req$ = this.http.post<Response<string>>(\n `${BASE}/delegationToken/${delegation.delegationId}`,\n {},\n {\n headers: new HttpHeaders({ noMessage: 'true' }),\n },\n );\n return handleApiRequest({\n ctx,\n key: DelegationSessionActionKey.StartSession,\n request$: req$,\n onSuccess: (response) => ({\n active: { token: response.data, delegation } as ActiveDelegationSession,\n }),\n });\n }\n\n @Action(EndDelegationSession)\n end(\n ctx: StateContext<DelegationSessionStateModel>,\n { reason }: EndDelegationSession,\n ) {\n // Client-local only — there is no server end-session endpoint (doc 05).\n ctx.patchState({\n active: null,\n ...(shouldClearCandidates(reason) ? { candidates: [] } : {}),\n });\n return EMPTY;\n }\n\n @Action(SwitchDelegationSession)\n switch(\n ctx: StateContext<DelegationSessionStateModel>,\n { delegation }: SwitchDelegationSession,\n ) {\n return this.store\n .dispatch(new EndDelegationSession('Manual'))\n .pipe(\n switchMap(() =>\n this.store.dispatch(new StartDelegationSession(delegation)),\n ),\n );\n }\n}\n","import { computed, inject, Injectable } from '@angular/core';\nimport { select, Store } from '@ngxs/store';\nimport {\n EndDelegationSession,\n LoadDelegationCandidates,\n StartDelegationSession,\n SwitchDelegationSession,\n} from './delegation-session.actions';\nimport {\n DelegationSessionActionKey,\n DelegationSessionInvalidationReason,\n} from './delegation-session.model';\nimport { DelegationSessionState } from './delegation-session.state';\nimport { DelegationRow } from '../delegations/delegations.model';\n\n@Injectable({ providedIn: 'root' })\nexport class DelegationSessionFacade {\n private readonly store = inject(Store);\n\n // ---------------------------------------------------------------------------\n // Data slices\n // ---------------------------------------------------------------------------\n readonly active = select(DelegationSessionState.getActive);\n readonly candidates = select(DelegationSessionState.getCandidates);\n readonly isDelegated = select(DelegationSessionState.isDelegated);\n\n private readonly loadingActive = select(\n DelegationSessionState.getLoadingActive,\n );\n\n // ---------------------------------------------------------------------------\n // Derived (interceptor + topbar)\n // ---------------------------------------------------------------------------\n /** Raw delegation token for the `app-delegation` header. */\n readonly token = computed(() => this.active()?.token ?? null);\n /** On-behalf-of (delegator). */\n readonly onBehalfOf = computed(\n () => this.active()?.delegation.delegator ?? null,\n );\n /** Executed-by (actual logged-in / delegated user). */\n readonly executedBy = computed(\n () => this.active()?.delegation.delegatedUser ?? null,\n );\n readonly hasCandidates = computed(() => this.candidates().length > 0);\n\n readonly isStarting = computed(() =>\n this.loadingActive().includes(DelegationSessionActionKey.StartSession),\n );\n readonly isLoadingCandidates = computed(() =>\n this.loadingActive().includes(DelegationSessionActionKey.LoadCandidates),\n );\n\n // ---------------------------------------------------------------------------\n // Dispatchers\n // ---------------------------------------------------------------------------\n loadCandidates() {\n return this.store.dispatch(new LoadDelegationCandidates());\n }\n startSession(delegation: DelegationRow) {\n return this.store.dispatch(new StartDelegationSession(delegation));\n }\n switchSession(delegation: DelegationRow) {\n return this.store.dispatch(new SwitchDelegationSession(delegation));\n }\n endSession(reason: DelegationSessionInvalidationReason = 'Manual') {\n return this.store.dispatch(new EndDelegationSession(reason));\n }\n}\n","import type {\n DelegationDisplayValue,\n DelegationScopeAction,\n DelegationScopeTarget,\n} from '../../store/delegations/delegations.model';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction readLocalizedValue(\n source: Record<string, unknown>,\n preferredLanguage: string,\n): string | null {\n const normalizedLanguage = preferredLanguage.toLowerCase();\n const baseLanguage = normalizedLanguage.split('-')[0];\n const preferredKeys = normalizedLanguage.startsWith('ar')\n ? ['defaultAr', 'ar', normalizedLanguage, baseLanguage, 'defaultEn', 'en']\n : ['defaultEn', 'en', normalizedLanguage, baseLanguage, 'defaultAr', 'ar'];\n\n for (const key of preferredKeys) {\n const value = source[key];\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n\n for (const key of ['en', 'ar', 'defaultEn', 'defaultAr']) {\n const value = source[key];\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n\n return null;\n}\n\nfunction parseJsonRecord(value: string): Record<string, unknown> | null {\n const trimmed = value.trim();\n\n if (!trimmed.startsWith('{') || !trimmed.endsWith('}')) {\n return null;\n }\n\n try {\n const parsed = JSON.parse(trimmed);\n return isRecord(parsed) ? parsed : null;\n } catch {\n return null;\n }\n}\n\nfunction resolveDisplayValue(\n value: unknown,\n preferredLanguage: string,\n): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n if (!trimmed) {\n return null;\n }\n\n const parsed = parseJsonRecord(trimmed);\n if (parsed) {\n return (\n readLocalizedValue(parsed, preferredLanguage) ??\n readDisplayValue(\n parsed,\n ['displayName', 'displayLabel', 'label'],\n preferredLanguage,\n ) ??\n trimmed\n );\n }\n\n return trimmed;\n }\n\n if (!isRecord(value)) {\n return null;\n }\n\n return (\n readLocalizedValue(value, preferredLanguage) ??\n readDisplayValue(\n value,\n [\n 'displayName',\n 'displayLabel',\n 'operationDisplayName',\n 'operationLabel',\n 'label',\n 'name',\n 'value',\n ],\n preferredLanguage,\n )\n );\n}\n\nfunction readDisplayValue(\n source: Record<string, unknown>,\n keys: string[],\n preferredLanguage: string,\n): string | null {\n for (const key of keys) {\n const value = resolveDisplayValue(source[key], preferredLanguage);\n if (value) {\n return value;\n }\n }\n\n return null;\n}\n\nfunction resolveDisplayOrHumanizedKey(\n source: Record<string, unknown>,\n displayKeys: string[],\n fallbackKey?: string | null,\n preferredLanguage = 'en',\n): string {\n const displayValue = readDisplayValue(source, displayKeys, preferredLanguage);\n if (displayValue) {\n return displayValue;\n }\n\n return humanizeDelegationKey(fallbackKey);\n}\n\nexport function humanizeDelegationKey(value?: string | null): string {\n if (!value) {\n return '';\n }\n\n const normalized = value\n .replace(/([a-z\\d])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/[._-]+/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n\n if (!normalized) {\n return '';\n }\n\n return normalized.replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nexport function formatDelegationDisplayValue(\n value: DelegationDisplayValue | undefined,\n preferredLanguage = 'en',\n): string {\n return resolveDisplayValue(value, preferredLanguage) ?? '';\n}\n\nexport function formatDelegationTargetLabel(\n target: DelegationScopeTarget,\n preferredLanguage = 'en',\n): string {\n return resolveDisplayOrHumanizedKey(\n target as unknown as Record<string, unknown>,\n ['displayName', 'displayLabel', 'label'],\n target.targetKey,\n preferredLanguage,\n );\n}\n\nexport function formatDelegationActionLabel(\n action: DelegationScopeAction,\n preferredLanguage = 'en',\n): string {\n return resolveDisplayOrHumanizedKey(\n action as unknown as Record<string, unknown>,\n [\n 'displayName',\n 'displayLabel',\n 'operationDisplayName',\n 'operationLabel',\n 'label',\n ],\n action.operationKey,\n preferredLanguage,\n );\n}\n\nexport function formatDelegationScopeSummary(\n value: DelegationDisplayValue | undefined,\n preferredLanguage = 'en',\n): string {\n return formatDelegationDisplayValue(value, preferredLanguage);\n}\n","import type {\n EntityData,\n EntityUserValue,\n} from '@masterteam/components/entities';\nimport type { DelegationParty } from '../../store/delegations/delegations.model';\n\nexport function toDelegationUserValue(\n party: DelegationParty | null | undefined,\n): EntityUserValue {\n const displayName = party?.displayName?.trim() || party?.email?.trim() || '';\n\n return {\n id: party?.userId,\n displayName,\n email: party?.email ?? undefined,\n };\n}\n\nexport function toDelegationUserEntity(\n party: DelegationParty | null | undefined,\n options: { showEmail?: boolean; label?: string } = {},\n): EntityData {\n return {\n name: options.label ?? '',\n viewType: 'User',\n value: toDelegationUserValue(party),\n configuration: {\n hideLabel: !options.label,\n showDisplayName: true,\n showEmail: options.showEmail ?? true,\n },\n };\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { EntityPreview } from '@masterteam/components/entities';\nimport { ToastService } from '@masterteam/components/toast';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\nimport { formatDelegationScopeSummary } from '../delegation-scope-display';\nimport { toDelegationUserEntity } from '../delegation-user-entity';\n\n/**\n * Confirmation dialog before starting (or switching to) a delegated session.\n * Calls the facade, which POSTs to `delegationToken/{id}` and stores the raw\n * token in memory only.\n */\n@Component({\n selector: 'mt-start-session-dialog',\n imports: [CommonModule, Button, EntityPreview, TranslocoDirective],\n templateUrl: './start-session-dialog.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class StartSessionDialog {\n readonly delegation = input.required<DelegationRow>();\n readonly intent = input<'start' | 'switch'>('start');\n\n private readonly ref: ModalRef = inject(ModalRef);\n private readonly facade = inject(DelegationSessionFacade);\n private readonly toast = inject(ToastService);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly isBusy = this.facade.isStarting;\n\n protected readonly bodyKey = computed(() =>\n this.intent() === 'switch'\n ? 'delegations.session.switchConfirmBody'\n : 'delegations.session.startConfirmBody',\n );\n protected readonly confirmLabelKey = computed(() =>\n this.intent() === 'switch'\n ? 'delegations.action.switchSession'\n : 'delegations.action.startSession',\n );\n protected readonly successMessageKey = computed(() =>\n this.intent() === 'switch'\n ? 'delegations.session.switched'\n : 'delegations.session.started',\n );\n\n protected formatScopeSummary(summary: DelegationRow['scopeSummary']): string {\n return formatDelegationScopeSummary(\n summary,\n this.transloco.getActiveLang(),\n );\n }\n\n protected userEntity(party: DelegationRow['delegator']) {\n return toDelegationUserEntity(party, { showEmail: false });\n }\n\n confirm(): void {\n const row = this.delegation();\n const op$ =\n this.intent() === 'switch'\n ? this.facade.switchSession(row)\n : this.facade.startSession(row);\n op$.subscribe({\n next: () => {\n this.toast.success(this.transloco.translate(this.successMessageKey()));\n this.ref.close(true);\n },\n error: () => {\n /* error surfaced via shared toast pipeline; keep dialog open */\n },\n });\n }\n\n cancel(): void {\n this.ref.close(false);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col gap-4 p-2\">\n <div class=\"flex items-start gap-3\">\n <div class=\"flex flex-col min-w-0\">\n <mt-entity-preview\n [data]=\"userEntity(delegation().delegator)\"\n ></mt-entity-preview>\n @if (delegation().scopeSummary) {\n <div class=\"text-xs text-gray-500 mt-1\">\n {{ t(\"delegations.column.scopeSummary\") }}:\n {{ formatScopeSummary(delegation().scopeSummary) }}\n </div>\n }\n </div>\n </div>\n\n <p class=\"text-sm text-gray-600 leading-relaxed\">\n {{ t(bodyKey()) }}\n </p>\n\n <div class=\"flex justify-end gap-2 pt-2 border-t border-gray-200\">\n <mt-button\n variant=\"outlined\"\n color=\"secondary\"\n [label]=\"t('delegations.common.cancel')\"\n [disabled]=\"isBusy()\"\n (click)=\"cancel()\"\n ></mt-button>\n <mt-button\n color=\"primary\"\n icon=\"user.users-check\"\n [label]=\"t(confirmLabelKey())\"\n [loading]=\"isBusy()\"\n (click)=\"confirm()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { EntityPreview } from '@masterteam/components/entities';\nimport { Icon } from '@masterteam/icons';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\nimport { formatDelegationScopeSummary } from '../delegation-scope-display';\nimport { toDelegationUserEntity } from '../delegation-user-entity';\n\n/**\n * Post-login candidate prompt. It intentionally only lets the user choose a\n * delegation; the existing StartSessionDialog still performs explicit consent.\n */\n@Component({\n selector: 'mt-delegation-candidates-prompt-dialog',\n imports: [CommonModule, Button, EntityPreview, Icon, TranslocoDirective],\n templateUrl: './delegation-candidates-prompt-dialog.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationCandidatesPromptDialog {\n readonly candidates = input.required<DelegationRow[]>();\n\n private readonly ref: ModalRef = inject(ModalRef);\n private readonly transloco = inject(TranslocoService);\n\n protected formatScopeSummary(summary: DelegationRow['scopeSummary']): string {\n return formatDelegationScopeSummary(\n summary,\n this.transloco.getActiveLang(),\n );\n }\n\n protected userEntity(party: DelegationRow['delegator']) {\n return toDelegationUserEntity(party, { showEmail: false });\n }\n\n protected select(row: DelegationRow): void {\n this.ref.close(row);\n }\n\n protected close(): void {\n this.ref.close(null);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col gap-4 p-2\">\n <p class=\"text-sm leading-relaxed text-gray-600\">\n {{ t(\"delegations.session.promptBody\") }}\n </p>\n\n <div class=\"flex max-h-80 flex-col gap-2 overflow-y-auto pr-1\">\n @for (cand of candidates(); track $index) {\n <button\n type=\"button\"\n class=\"flex w-full cursor-pointer items-center justify-between gap-3 rounded-2xl border border-solid border-surface-200 bg-surface-0 px-3 py-3 text-start transition-colors hover:border-primary-300 hover:bg-primary-50/50 focus-visible:border-primary-400 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n [attr.aria-label]=\"\n t('delegations.session.promptStartAria', {\n delegatorName: cand.delegator.displayName,\n })\n \"\n (click)=\"select(cand)\"\n >\n <span class=\"flex min-w-0 items-center gap-3\">\n <span class=\"flex min-w-0 flex-col\">\n <mt-entity-preview\n [data]=\"userEntity(cand.delegator)\"\n ></mt-entity-preview>\n @if (cand.scopeSummary) {\n @let summary = formatScopeSummary(cand.scopeSummary);\n <span class=\"truncate text-xs text-gray-500\" [title]=\"summary\">\n {{ summary }}\n </span>\n }\n </span>\n </span>\n <span class=\"inline-flex items-center gap-2 text-sm text-primary\">\n {{ t(\"delegations.action.startSession\") }}\n <mt-icon icon=\"arrow.arrow-right\" class=\"text-base\"></mt-icon>\n </span>\n </button>\n }\n </div>\n\n <div class=\"flex justify-end border-t border-gray-200 pt-3\">\n <mt-button\n variant=\"outlined\"\n color=\"secondary\"\n [label]=\"t('delegations.common.close')\"\n (click)=\"close()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n signal,\n viewChild,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { EntityPreview } from '@masterteam/components/entities';\nimport { ModalService } from '@masterteam/components/modal';\nimport { Icon } from '@masterteam/icons';\nimport { Popover } from 'primeng/popover';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\nimport DelegationCandidatesPromptDialog from '../delegation-candidates-prompt-dialog/delegation-candidates-prompt-dialog';\nimport { formatDelegationScopeSummary } from '../delegation-scope-display';\nimport { toDelegationUserEntity } from '../delegation-user-entity';\n\n/**\n * Topbar surface for the delegation runtime (doc 05, 09).\n *\n * State A — no candidates, no active session: renders nothing.\n * State B — candidates exist, no active session: lets the user start a session.\n * State C — active delegated session: shows \"Acting on behalf of {delegator}\" +\n * \"Executed by {actual user}\", plus Back / Switch.\n */\n@Component({\n selector: 'mt-topbar-delegation-menu',\n standalone: true,\n imports: [\n CommonModule,\n Button,\n EntityPreview,\n Icon,\n Popover,\n RouterLink,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './topbar-delegation-menu.html',\n styleUrls: ['./topbar-delegation-menu.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TopbarDelegationMenu implements OnInit {\n /** Path to the management page, e.g. `/control-panel/delegations` or `/delegations`. */\n readonly managePath = input<string>('/delegations');\n readonly compact = input<boolean>(false);\n readonly showManageLink = input<boolean>(true);\n readonly promptOnCandidates = input<boolean>(true);\n\n private readonly facade = inject(DelegationSessionFacade);\n private readonly modal = inject(ModalService);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly popover = viewChild.required<Popover>('popover');\n\n protected readonly active = this.facade.active;\n protected readonly candidates = this.facade.candidates;\n protected readonly hasCandidates = this.facade.hasCandidates;\n protected readonly onBehalfOf = this.facade.onBehalfOf;\n protected readonly executedBy = this.facade.executedBy;\n private readonly promptShown = signal(false);\n\n protected readonly mode = computed<'hidden' | 'candidates' | 'active'>(() => {\n if (this.active()) return 'active';\n if (this.hasCandidates()) return 'candidates';\n return 'hidden';\n });\n\n constructor() {\n effect(() => {\n const candidates = this.candidates();\n const shouldPrompt =\n this.promptOnCandidates() &&\n !this.promptShown() &&\n !this.active() &&\n candidates.length > 0;\n\n if (!shouldPrompt) {\n return;\n }\n\n this.promptShown.set(true);\n queueMicrotask(() => this.openCandidatesPrompt(candidates));\n });\n }\n\n ngOnInit(): void {\n this.facade.loadCandidates();\n }\n\n protected formatScopeSummary(summary: DelegationRow['scopeSummary']): string {\n return formatDelegationScopeSummary(\n summary,\n this.transloco.getActiveLang(),\n );\n }\n\n protected userEntity(\n party: DelegationRow['delegator'] | null | undefined,\n showEmail = false,\n ) {\n return toDelegationUserEntity(party, { showEmail });\n }\n\n togglePopover(event: Event): void {\n this.popover().toggle(event);\n }\n\n start(row: DelegationRow, event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.openConfirm(row, 'start');\n }\n\n switchTo(row: DelegationRow, event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.openConfirm(row, 'switch');\n }\n\n endSession(event: MouseEvent): void {\n event.stopPropagation();\n this.popover().hide();\n this.facade.endSession('Manual').subscribe();\n }\n\n private openConfirm(row: DelegationRow, intent: 'start' | 'switch'): void {\n this.modal.openModal(StartSessionDialog, 'dialog', {\n header: this.transloco.translate(\n intent === 'switch'\n ? 'delegations.action.switchSession'\n : 'delegations.action.startSession',\n ),\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row, intent },\n });\n }\n\n private openCandidatesPrompt(candidates: DelegationRow[]): void {\n const ref = this.modal.openModal(\n DelegationCandidatesPromptDialog,\n 'dialog',\n {\n header: this.transloco.translate('delegations.session.availableTitle'),\n styleClass: '!w-[min(96vw,34rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { candidates },\n },\n );\n\n ref.onClose.subscribe((row: DelegationRow | null | undefined) => {\n if (row) {\n this.openConfirm(row, 'start');\n }\n });\n }\n}\n","<ng-container *transloco=\"let t\">\n @if (mode() !== \"hidden\") {\n @if (mode() === \"active\") {\n <span class=\"sr-only\" role=\"status\" aria-live=\"polite\">\n {{\n t(\"delegations.session.banner\", {\n delegatorName: onBehalfOf()?.displayName,\n })\n }}.\n {{\n t(\"delegations.session.executedBy\", {\n actualUserName: executedBy()?.displayName,\n })\n }}\n </span>\n }\n <div class=\"mt-delegation-trigger flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"mt-delegation-trigger__button flex min-w-0 max-w-full items-center gap-2 rounded-full px-2 py-1 hover:bg-surface-100 cursor-pointer\"\n [class.mt-delegation-trigger__button--active]=\"mode() === 'active'\"\n [attr.aria-label]=\"\n mode() === 'active'\n ? t('delegations.session.banner', {\n delegatorName: onBehalfOf()?.displayName,\n }) +\n '. ' +\n t('delegations.session.executedBy', {\n actualUserName: executedBy()?.displayName,\n })\n : t('delegations.session.availableTitle')\n \"\n [attr.title]=\"\n mode() === 'active'\n ? t('delegations.session.banner', {\n delegatorName: onBehalfOf()?.displayName,\n })\n : null\n \"\n (click)=\"togglePopover($event)\"\n >\n @if (mode() === \"active\") {\n <mt-icon\n icon=\"user.users-check\"\n styleClass=\"text-lg text-primary\"\n ></mt-icon>\n @if (!compact()) {\n <span\n class=\"mt-delegation-trigger__label flex min-w-0 flex-col text-start leading-tight\"\n >\n <span class=\"truncate text-sm font-medium\">\n {{\n t(\"delegations.session.banner\", {\n delegatorName: onBehalfOf()?.displayName,\n })\n }}\n </span>\n <span class=\"truncate text-[0.6875rem] font-normal text-gray-500\">\n {{\n t(\"delegations.session.executedBy\", {\n actualUserName: executedBy()?.displayName,\n })\n }}\n </span>\n </span>\n }\n <mt-delegation-status-chip\n status=\"Active\"\n ></mt-delegation-status-chip>\n } @else {\n <mt-icon\n icon=\"user.users-plus\"\n styleClass=\"text-lg text-primary\"\n ></mt-icon>\n @if (!compact()) {\n <span class=\"mt-delegation-trigger__label text-sm font-medium\">\n {{ t(\"delegations.session.availableTitle\") }}\n </span>\n }\n }\n </button>\n </div>\n\n <p-popover #popover [pt]=\"{ content: { class: 'p-0!' } }\">\n <div class=\"flex flex-col min-w-80 max-w-96 p-0\">\n @if (mode() === \"active\" && active(); as session) {\n <!-- STATE C — active session -->\n <div\n class=\"flex items-start gap-3 border-b border-gray-200 px-4 py-4\"\n >\n <div class=\"flex min-w-0 flex-1 flex-col\">\n <div class=\"text-xs text-gray-500\">\n {{ t(\"delegations.session.actingOnBehalfOf\") }}\n </div>\n <mt-entity-preview\n [data]=\"userEntity(onBehalfOf())\"\n ></mt-entity-preview>\n <div class=\"text-xs text-gray-500 mt-1\">\n {{\n t(\"delegations.session.executedBy\", {\n actualUserName: executedBy()?.displayName,\n })\n }}\n </div>\n @if (session.delegation.scopeSummary) {\n @let summary =\n formatScopeSummary(session.delegation.scopeSummary);\n <div\n class=\"text-xs text-gray-500 mt-1 truncate\"\n [title]=\"summary\"\n >\n {{ t(\"delegations.column.scopeSummary\") }}:\n {{ summary }}\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex flex-col gap-1 px-2 py-2\">\n <mt-button\n variant=\"text\"\n icon=\"arrow.arrow-left\"\n [label]=\"t('delegations.action.endSession')\"\n styleClass=\"w-full justify-start\"\n (click)=\"endSession($event)\"\n ></mt-button>\n </div>\n\n @if (candidates().length > 1) {\n <div class=\"border-t border-gray-200 pt-2 px-2 pb-2\">\n <div class=\"text-xs text-gray-500 px-2 pb-1\">\n {{ t(\"delegations.session.switchToAnother\") }}\n </div>\n @for (cand of candidates(); track $index) {\n @if (cand.delegationId !== session.delegation.delegationId) {\n <button\n type=\"button\"\n class=\"flex items-center justify-between gap-2 w-full px-2 py-2 rounded-md hover:bg-surface-100 cursor-pointer\"\n [attr.aria-label]=\"\n t('delegations.action.switchSession') +\n ': ' +\n cand.delegator.displayName\n \"\n (click)=\"switchTo(cand, $event)\"\n >\n <div class=\"min-w-0 flex-1\">\n <mt-entity-preview\n [data]=\"userEntity(cand.delegator)\"\n ></mt-entity-preview>\n </div>\n <mt-icon\n icon=\"arrow.switch-horizontal-01\"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n </button>\n }\n }\n </div>\n }\n } @else if (mode() === \"candidates\") {\n <!-- STATE B — candidates available -->\n <div class=\"border-b border-gray-200 px-4 py-3\">\n <div class=\"text-sm font-medium text-gray-900\">\n {{ t(\"delegations.session.youCanActAs\") }}\n </div>\n <div class=\"text-xs text-gray-500 mt-1\">\n {{ t(\"delegations.session.chooseDelegatorHint\") }}\n </div>\n </div>\n <div class=\"flex flex-col gap-1 px-2 py-2 max-h-72 overflow-y-auto\">\n @for (cand of candidates(); track $index) {\n <button\n type=\"button\"\n class=\"flex items-center justify-between gap-2 w-full px-2 py-2 rounded-md hover:bg-surface-100 cursor-pointer text-start\"\n [attr.aria-label]=\"\n t('delegations.action.startSession') +\n ': ' +\n cand.delegator.displayName\n \"\n (click)=\"start(cand, $event)\"\n >\n <div class=\"flex min-w-0 flex-1 flex-col gap-1\">\n <mt-entity-preview\n [data]=\"userEntity(cand.delegator)\"\n ></mt-entity-preview>\n @if (cand.scopeSummary) {\n @let summary = formatScopeSummary(cand.scopeSummary);\n <span\n class=\"text-xs text-gray-500 truncate\"\n [title]=\"summary\"\n >\n {{ summary }}\n </span>\n }\n </div>\n <mt-icon\n icon=\"arrow.arrow-right\"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n </button>\n }\n </div>\n }\n\n <!-- Footer -->\n @if (showManageLink()) {\n <div class=\"border-t border-gray-200 px-2 py-2\">\n <a\n [routerLink]=\"managePath()\"\n (click)=\"popover().hide()\"\n class=\"flex items-center gap-2 px-3 py-2 rounded-md text-gray-700 hover:bg-surface-100 text-sm cursor-pointer\"\n >\n <mt-icon\n icon=\"general.settings-02\"\n styleClass=\"text-base\"\n ></mt-icon>\n <span>{{ t(\"delegations.session.manage\") }}</span>\n </a>\n </div>\n }\n </div>\n </p-popover>\n }\n</ng-container>\n","import {\n AdminCreateDelegationV2Request,\n AdminUpdateDelegationV2Request,\n ApproveDelegationRequest,\n CreateDelegationLegacyRequest,\n CreateDelegationV2Request,\n DelegationListQuery,\n DelegationScopePreviewRequest,\n RejectDelegationRequest,\n UpdateDelegationLegacyRequest,\n UpdateDelegationV2Request,\n} from './delegations.model';\n\n// ---------------------------------------------------------------------------\n// Lists / detail\n// ---------------------------------------------------------------------------\n\nexport class GetMyDelegations {\n static readonly type = '[Delegations] Get My Delegations';\n constructor(public query: DelegationListQuery = {}) {}\n}\n\nexport class GetAssignedDelegations {\n static readonly type = '[Delegations] Get Assigned Delegations';\n constructor(public query: DelegationListQuery = {}) {}\n}\n\nexport class GetAdminDelegations {\n static readonly type = '[Delegations] Get Admin Delegations';\n constructor(public query: DelegationListQuery = {}) {}\n}\n\nexport class GetActiveAssignedDelegations {\n static readonly type = '[Delegations] Get Active Assigned Delegations';\n constructor(public query: DelegationListQuery = {}) {}\n}\n\nexport class GetDelegationDetail {\n static readonly type = '[Delegations] Get Delegation Detail';\n constructor(\n public id: number,\n public asAdmin: boolean = false,\n ) {}\n}\n\nexport class ClearDelegationDetail {\n static readonly type = '[Delegations] Clear Delegation Detail';\n}\n\n// ---------------------------------------------------------------------------\n// Scope\n// ---------------------------------------------------------------------------\n\nexport class GetScopeOptions {\n static readonly type = '[Delegations] Get Scope Options';\n constructor(\n public delegatorUserId?: string,\n public asAdmin: boolean = false,\n ) {}\n}\n\nexport class PreviewScope {\n static readonly type = '[Delegations] Preview Scope';\n constructor(\n public request: DelegationScopePreviewRequest,\n public asAdmin: boolean = false,\n ) {}\n}\n\nexport class ClearScopePreview {\n static readonly type = '[Delegations] Clear Scope Preview';\n}\n\n// ---------------------------------------------------------------------------\n// Create / edit (legacy + v2)\n// ---------------------------------------------------------------------------\n\nexport class CreateDelegationLegacy {\n static readonly type = '[Delegations] Create Delegation (legacy)';\n constructor(public request: CreateDelegationLegacyRequest) {}\n}\n\nexport class CreateDelegationV2 {\n static readonly type = '[Delegations] Create Delegation (v2)';\n constructor(\n public request: CreateDelegationV2Request | AdminCreateDelegationV2Request,\n public asAdmin: boolean = false,\n ) {}\n}\n\nexport class UpdateDelegationLegacy {\n static readonly type = '[Delegations] Update Delegation (legacy)';\n constructor(\n public id: number,\n public request: UpdateDelegationLegacyRequest,\n ) {}\n}\n\nexport class UpdateDelegationV2 {\n static readonly type = '[Delegations] Update Delegation (v2)';\n constructor(\n public id: number,\n public request: UpdateDelegationV2Request | AdminUpdateDelegationV2Request,\n public asAdmin: boolean = false,\n ) {}\n}\n\n// ---------------------------------------------------------------------------\n// Decisions\n// ---------------------------------------------------------------------------\n\nexport class ApproveDelegation {\n static readonly type = '[Delegations] Approve Delegation';\n constructor(\n public id: number,\n public request: ApproveDelegationRequest,\n ) {}\n}\n\nexport class RejectDelegation {\n static readonly type = '[Delegations] Reject Delegation';\n constructor(\n public id: number,\n public request: RejectDelegationRequest,\n ) {}\n}\n\nexport class CancelDelegation {\n static readonly type = '[Delegations] Cancel Delegation';\n constructor(\n public id: number,\n public rowVersion: string,\n public asAdmin: boolean = false,\n ) {}\n}\n","import { LoadingStateShape } from '../utils/state-helpers';\n\n// ============================================================================\n// Status / approval / actions (doc 01, 16)\n// ============================================================================\n\nexport type DelegationEffectiveStatus =\n | 'PendingApproval'\n | 'Scheduled'\n | 'Active'\n | 'InactiveToday'\n | 'Expired'\n | 'Rejected'\n | 'Cancelled';\n\nexport type DelegationApprovalStatus =\n | 'NotRequired'\n | 'Pending'\n | 'Approved'\n | 'Rejected';\n\nexport type DelegationAllowedAction =\n | 'View'\n | 'Edit'\n | 'Approve'\n | 'Reject'\n | 'Cancel'\n | 'StartSession'\n | 'EndSession';\n\nexport type DelegationDayRuleMode = 'FullRange' | 'SpecificDays';\nexport type DelegationDisplayValue =\n | string\n | {\n ar?: string | null;\n en?: string | null;\n defaultAr?: string | null;\n defaultEn?: string | null;\n [locale: string]: unknown;\n }\n | null;\n\n// ============================================================================\n// Parties + row (doc 02)\n// ============================================================================\n\nexport interface DelegationParty {\n userId: string;\n displayName: string;\n email?: string | null;\n}\n\nexport interface DelegationApprovalInfo {\n requiresApproval: boolean;\n approvalStatus: DelegationApprovalStatus;\n}\n\nexport interface DelegationCancellationInfo {\n cancelledBy?: DelegationParty | null;\n cancelledAtUtc?: string | null;\n cancellationReason?: string | null;\n}\n\nexport interface DelegationRow {\n delegationId: number;\n delegator: DelegationParty;\n delegatedUser: DelegationParty;\n startsAtUtc: string;\n endsAtUtc: string;\n timeZoneId: string;\n dayRuleMode: DelegationDayRuleMode;\n specificDays: number[];\n effectiveStatus: DelegationEffectiveStatus;\n statusReasonCode: string;\n createdBy: DelegationParty;\n createdAtUtc: string;\n approval: DelegationApprovalInfo;\n cancellation: DelegationCancellationInfo;\n allowedActions: DelegationAllowedAction[];\n scopeSummary: DelegationDisplayValue;\n rowVersion: string;\n}\n\nexport interface DelegationPage<T> {\n items: T[];\n page: number;\n pageSize: number;\n totalCount: number;\n}\n\n// ============================================================================\n// Scope — grants based (doc 03, 04)\n// ============================================================================\n\nexport interface DelegationScopeTarget {\n applicationKey: string;\n targetType: string;\n targetKey: string;\n parentTargetType?: string | null;\n parentTargetKey?: string | null;\n parentDisplayName?: DelegationDisplayValue;\n parentLevelId?: number | null;\n legacyModuleId?: number | null;\n targetId?: number | null;\n levelId?: number | null;\n levelModuleId?: number | null;\n domainModuleId?: number | null;\n moduleKey?: string | null;\n permissionModuleType?: string | null;\n permissionTargetId?: number | null;\n isDelegable?: boolean;\n displayName?: DelegationDisplayValue;\n displayLabel?: DelegationDisplayValue;\n label?: DelegationDisplayValue;\n}\n\nexport interface DelegationScopeAction {\n applicationKey: string;\n operationKey: string;\n operationKind: string;\n displayName?: DelegationDisplayValue;\n displayLabel?: DelegationDisplayValue;\n operationDisplayName?: DelegationDisplayValue;\n operationLabel?: DelegationDisplayValue;\n label?: DelegationDisplayValue;\n permissionCommand?: string | null;\n businessActionCode?: string | null;\n isHighRisk?: boolean;\n isDelegable?: boolean;\n isDelegableSnapshot?: boolean;\n sortOrder?: number | null;\n}\n\nexport interface DelegationScopeFact {\n key?: string | null;\n code?: string | null;\n id?: string | number | null;\n displayName?: DelegationDisplayValue;\n displayLabel?: DelegationDisplayValue;\n label?: DelegationDisplayValue;\n [extra: string]: unknown;\n}\n\nexport interface DelegationGrant {\n /** Optional backend-provided stable grant identity; preferred for de-dup when present. */\n key?: string;\n applicationKey: string;\n target: DelegationScopeTarget;\n action: DelegationScopeAction;\n accessibilities: DelegationScopeFact[];\n dataFilters: DelegationScopeFact[];\n constraints: DelegationScopeFact[];\n}\n\nexport interface DelegationScopeSelection {\n grants: DelegationGrant[];\n metadata: Record<string, unknown>;\n}\n\nexport interface DelegationScopeCombinationRule {\n applicationKey?: string | null;\n targetType: string;\n targetKey: string;\n operationKey: string;\n accessibilityKeys?: string[] | null;\n dataFilterKeys?: string[] | null;\n constraintKeys?: string[] | null;\n [extra: string]: unknown;\n}\n\n/**\n * `scope/options` now prefers backend-owned `hierarchy` for FE rendering.\n * Flat `grants[]` / `targets + operations + combinationRules` remain for\n * compatibility and diagnostics while older environments catch up.\n */\nexport interface DelegationScopeHierarchyTarget {\n target: DelegationScopeTarget;\n operations: DelegationScopeAction[];\n sortOrder?: number | null;\n}\n\nexport interface DelegationScopeHierarchyGroup {\n groupType: string;\n groupKey: string;\n displayName?: DelegationDisplayValue;\n levelId?: number | null;\n sortOrder?: number | null;\n targets: DelegationScopeHierarchyTarget[];\n}\n\nexport interface DelegationScopeOptions {\n hierarchy?: DelegationScopeHierarchyGroup[] | null;\n grants?: DelegationGrant[] | null;\n metadata?: Record<string, unknown>;\n targets?: DelegationScopeTarget[] | null;\n operations?: DelegationScopeAction[] | null;\n accessibilities?: DelegationScopeFact[] | null;\n presets?: Record<string, unknown>[] | null;\n combinationRules?: DelegationScopeCombinationRule[] | null;\n nonDelegableOperations?: (string | DelegationScopeFact)[] | null;\n dataFilters?: DelegationScopeFact[] | null;\n constraints?: DelegationScopeFact[] | null;\n}\n\nexport interface DelegationScopeWarning {\n code?: string;\n message: string;\n}\n\nexport interface DelegationScopeDeniedItem {\n applicationKey: string;\n targetType: string;\n targetKey: string;\n operationKey: string;\n permissionCommand?: string;\n reasonCode: string;\n}\n\nexport interface DelegationScopePreview {\n isValid: boolean;\n normalizedScope: DelegationScopeSelection;\n scopeHash: string;\n summary: DelegationDisplayValue;\n warnings: DelegationScopeWarning[];\n deniedItems: DelegationScopeDeniedItem[];\n}\n\n// ============================================================================\n// Detail (doc 02)\n// ============================================================================\n\nexport interface DelegationStatusInfo {\n effectiveStatus: DelegationEffectiveStatus;\n reasonCode: string;\n calculatedAtUtc: string;\n}\n\nexport interface DelegationDetail {\n row: DelegationRow;\n scope: DelegationScopeSelection;\n status: DelegationStatusInfo;\n}\n\n// ============================================================================\n// Legacy create/edit DTO returned by create/edit (doc 02)\n// ============================================================================\n\nexport interface DelegationDto {\n id: number;\n fromUserId: string;\n toUserId: string;\n description?: string;\n isActive?: boolean;\n delegationDaysType: DelegationDayRuleMode;\n specificDays: number[];\n applicationId?: number;\n requiresApproval?: boolean;\n effectiveStatus: DelegationEffectiveStatus;\n statusReasonCode: string;\n allowedActions: DelegationAllowedAction[];\n rowVersion: string;\n [extra: string]: unknown;\n}\n\n// ============================================================================\n// List query (doc 02)\n// ============================================================================\n\nexport type DelegationSortDirection =\n | 'asc'\n | 'ascending'\n | 'desc'\n | 'descending';\n\nexport interface DelegationListQuery {\n activeOnly?: boolean;\n status?: DelegationEffectiveStatus;\n search?: string;\n fromUtc?: string;\n toUtc?: string;\n sortBy?: string;\n sortDirection?: DelegationSortDirection;\n page?: number;\n pageSize?: number;\n // admin only\n delegatorUserId?: string;\n delegatedUserId?: string;\n}\n\n// ============================================================================\n// Create / edit / decision requests (doc 04)\n// ============================================================================\n\nexport interface CreateDelegationLegacyRequest {\n delegateFrom?: string | null;\n delegateTo: string;\n description?: string;\n delegateFromDateTime: string;\n delegateToDateTime: string;\n accessibilityIds?: number[];\n moduleIds?: number[];\n delegationDaysType: DelegationDayRuleMode;\n specificDays?: number[];\n isActive?: boolean;\n requiresApproval?: boolean;\n}\n\nexport interface CreateDelegationV2Request {\n delegateFrom?: string | null;\n delegateTo: string;\n description?: string;\n delegateFromDateTime: string;\n delegateToDateTime: string;\n delegationDaysType: DelegationDayRuleMode;\n specificDays?: number[];\n requiresApproval: boolean;\n scope: DelegationScopeSelection;\n}\n\nexport interface AdminCreateDelegationV2Request {\n delegatorUserId: string;\n delegatedUserId: string;\n description?: string;\n delegateFromDateTime: string;\n delegateToDateTime: string;\n delegationDaysType: DelegationDayRuleMode;\n specificDays?: number[];\n requiresApproval: boolean;\n scope: DelegationScopeSelection;\n}\n\nexport type UpdateDelegationLegacyRequest = CreateDelegationLegacyRequest & {\n rowVersion: string;\n};\n\nexport type UpdateDelegationV2Request = CreateDelegationV2Request & {\n rowVersion: string;\n};\n\nexport type AdminUpdateDelegationV2Request = AdminCreateDelegationV2Request & {\n rowVersion: string;\n};\n\nexport interface DelegationScopePreviewRequest {\n scope: DelegationScopeSelection;\n delegatorUserId?: string | null;\n}\n\nexport interface ApproveDelegationRequest {\n rowVersion: string;\n reason?: string;\n}\n\nexport interface RejectDelegationRequest {\n rowVersion: string;\n reason: string;\n}\n\n// ============================================================================\n// NGXS state shape + action keys\n// ============================================================================\n\nexport enum DelegationsActionKey {\n GetMy = 'getMy',\n GetAssigned = 'getAssigned',\n GetAdmin = 'getAdmin',\n GetActive = 'getActive',\n GetDetail = 'getDetail',\n GetScopeOptions = 'getScopeOptions',\n PreviewScope = 'previewScope',\n Create = 'create',\n Update = 'update',\n Approve = 'approve',\n Reject = 'reject',\n Cancel = 'cancel',\n}\n\nexport interface DelegationsStateModel extends LoadingStateShape<DelegationsActionKey> {\n my: DelegationPage<DelegationRow> | null;\n assigned: DelegationPage<DelegationRow> | null;\n admin: DelegationPage<DelegationRow> | null;\n active: DelegationPage<DelegationRow> | null;\n detail: DelegationDetail | null;\n scopeOptions: DelegationScopeOptions | null;\n scopePreview: DelegationScopePreview | null;\n}\n","import { HttpClient, HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\nimport { handleApiRequest } from '@masterteam/components';\nimport { Response } from './api.model';\nimport {\n ApproveDelegation,\n CancelDelegation,\n ClearDelegationDetail,\n ClearScopePreview,\n CreateDelegationLegacy,\n CreateDelegationV2,\n GetActiveAssignedDelegations,\n GetAdminDelegations,\n GetAssignedDelegations,\n GetDelegationDetail,\n GetMyDelegations,\n GetScopeOptions,\n PreviewScope,\n RejectDelegation,\n UpdateDelegationLegacy,\n UpdateDelegationV2,\n} from './delegations.actions';\nimport {\n AdminCreateDelegationV2Request,\n AdminUpdateDelegationV2Request,\n DelegationDetail,\n DelegationDto,\n DelegationListQuery,\n DelegationPage,\n DelegationRow,\n DelegationScopeOptions,\n DelegationScopePreviewRequest,\n DelegationScopePreview,\n DelegationsActionKey,\n DelegationsStateModel,\n} from './delegations.model';\n\nconst BASE = 'identity/delegations';\n\nfunction buildListParams(query: DelegationListQuery): HttpParams {\n let params = new HttpParams();\n if (query.activeOnly != null)\n params = params.set('activeOnly', query.activeOnly);\n if (query.status) params = params.set('status', query.status);\n if (query.search) params = params.set('search', query.search);\n if (query.fromUtc) params = params.set('fromUtc', query.fromUtc);\n if (query.toUtc) params = params.set('toUtc', query.toUtc);\n if (query.sortBy) params = params.set('sortBy', query.sortBy);\n if (query.sortDirection)\n params = params.set('sortDirection', query.sortDirection);\n params = params.set('page', query.page ?? 1);\n params = params.set('pageSize', query.pageSize ?? 25);\n if (query.delegatorUserId)\n params = params.set('delegatorUserId', query.delegatorUserId);\n if (query.delegatedUserId)\n params = params.set('delegatedUserId', query.delegatedUserId);\n return params;\n}\n\n@State<DelegationsStateModel>({\n name: 'delegations',\n defaults: {\n my: null,\n assigned: null,\n admin: null,\n active: null,\n detail: null,\n scopeOptions: null,\n scopePreview: null,\n loadingActive: [],\n errors: {},\n },\n})\n@Injectable()\nexport class DelegationsState {\n private http = inject(HttpClient);\n\n // ============================================================================\n // Selectors\n // ============================================================================\n\n @Selector()\n static getMy(\n state: DelegationsStateModel,\n ): DelegationPage<DelegationRow> | null {\n return state.my;\n }\n\n @Selector()\n static getAssigned(\n state: DelegationsStateModel,\n ): DelegationPage<DelegationRow> | null {\n return state.assigned;\n }\n\n @Selector()\n static getAdmin(\n state: DelegationsStateModel,\n ): DelegationPage<DelegationRow> | null {\n return state.admin;\n }\n\n @Selector()\n static getActive(\n state: DelegationsStateModel,\n ): DelegationPage<DelegationRow> | null {\n return state.active;\n }\n\n @Selector()\n static getDetail(state: DelegationsStateModel): DelegationDetail | null {\n return state.detail;\n }\n\n @Selector()\n static getScopeOptions(\n state: DelegationsStateModel,\n ): DelegationScopeOptions | null {\n return state.scopeOptions;\n }\n\n @Selector()\n static getScopePreview(\n state: DelegationsStateModel,\n ): DelegationScopePreview | null {\n return state.scopePreview;\n }\n\n @Selector()\n static getLoadingActive(state: DelegationsStateModel): string[] {\n return state.loadingActive;\n }\n\n @Selector()\n static getErrors(\n state: DelegationsStateModel,\n ): Record<string, string | null | undefined> {\n return state.errors;\n }\n\n // ============================================================================\n // Lists\n // ============================================================================\n\n @Action(GetMyDelegations)\n getMy(ctx: StateContext<DelegationsStateModel>, { query }: GetMyDelegations) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(BASE, {\n params: buildListParams(query),\n });\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetMy,\n request$: req$,\n onSuccess: (response) => ({ my: response.data }),\n });\n }\n\n @Action(GetAssignedDelegations)\n getAssigned(\n ctx: StateContext<DelegationsStateModel>,\n { query }: GetAssignedDelegations,\n ) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/assigned`,\n { params: buildListParams(query) },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetAssigned,\n request$: req$,\n onSuccess: (response) => ({ assigned: response.data }),\n });\n }\n\n @Action(GetAdminDelegations)\n getAdmin(\n ctx: StateContext<DelegationsStateModel>,\n { query }: GetAdminDelegations,\n ) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/All`,\n { params: buildListParams(query) },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetAdmin,\n request$: req$,\n onSuccess: (response) => ({ admin: response.data }),\n });\n }\n\n @Action(GetActiveAssignedDelegations)\n getActive(\n ctx: StateContext<DelegationsStateModel>,\n { query }: GetActiveAssignedDelegations,\n ) {\n const req$ = this.http.get<Response<DelegationPage<DelegationRow>>>(\n `${BASE}/user/activedelegations`,\n { params: buildListParams(query) },\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetActive,\n request$: req$,\n onSuccess: (response) => ({ active: response.data }),\n });\n }\n\n @Action(GetDelegationDetail)\n getDetail(\n ctx: StateContext<DelegationsStateModel>,\n { id, asAdmin }: GetDelegationDetail,\n ) {\n const path = asAdmin ? `${BASE}/Admin/${id}` : `${BASE}/${id}`;\n const req$ = this.http.get<Response<DelegationDetail>>(path);\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetDetail,\n request$: req$,\n onSuccess: (response) => ({ detail: response.data ?? null }),\n });\n }\n\n @Action(ClearDelegationDetail)\n clearDetail(ctx: StateContext<DelegationsStateModel>) {\n ctx.patchState({ detail: null });\n }\n\n // ============================================================================\n // Scope\n // ============================================================================\n\n @Action(GetScopeOptions)\n getScopeOptions(\n ctx: StateContext<DelegationsStateModel>,\n { delegatorUserId, asAdmin }: GetScopeOptions,\n ) {\n ctx.patchState({ scopeOptions: null, scopePreview: null });\n\n let params = new HttpParams();\n if (delegatorUserId)\n params = params.set('delegatorUserId', delegatorUserId);\n const path = asAdmin\n ? `${BASE}/Admin/scope/options`\n : `${BASE}/scope/options`;\n const req$ = this.http.get<Response<DelegationScopeOptions>>(path, {\n params,\n });\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.GetScopeOptions,\n request$: req$,\n onSuccess: (response) => ({ scopeOptions: response.data ?? null }),\n });\n }\n\n @Action(PreviewScope)\n previewScope(\n ctx: StateContext<DelegationsStateModel>,\n { request, asAdmin }: PreviewScope,\n ) {\n const path = asAdmin\n ? `${BASE}/Admin/scope/preview`\n : `${BASE}/scope/preview`;\n const req$ = this.http.post<Response<DelegationScopePreview>>(\n path,\n this.buildScopePreviewRequest(request, asAdmin),\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.PreviewScope,\n request$: req$,\n onSuccess: (response) => ({ scopePreview: response.data ?? null }),\n });\n }\n\n @Action(ClearScopePreview)\n clearScopePreview(ctx: StateContext<DelegationsStateModel>) {\n ctx.patchState({ scopePreview: null });\n }\n\n // ============================================================================\n // Create / edit (response is legacy DelegationDto — clients reload list/detail)\n // ============================================================================\n\n @Action(CreateDelegationLegacy)\n createLegacy(\n ctx: StateContext<DelegationsStateModel>,\n { request }: CreateDelegationLegacy,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(BASE, request);\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Create,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(CreateDelegationV2)\n createV2(\n ctx: StateContext<DelegationsStateModel>,\n { request, asAdmin }: CreateDelegationV2,\n ) {\n const path = asAdmin ? `${BASE}/Admin/v2` : `${BASE}/v2`;\n const body = asAdmin\n ? this.buildAdminSaveRequest(request as AdminCreateDelegationV2Request)\n : request;\n const req$ = this.http.post<Response<DelegationDto>>(path, body);\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Create,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(UpdateDelegationLegacy)\n updateLegacy(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: UpdateDelegationLegacy,\n ) {\n const req$ = this.http.put<Response<DelegationDto>>(\n `${BASE}/${id}`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Update,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(UpdateDelegationV2)\n updateV2(\n ctx: StateContext<DelegationsStateModel>,\n { id, request, asAdmin }: UpdateDelegationV2,\n ) {\n const path = asAdmin ? `${BASE}/Admin/v2/${id}` : `${BASE}/v2/${id}`;\n const body = asAdmin\n ? this.buildAdminSaveRequest(request as AdminUpdateDelegationV2Request)\n : request;\n const req$ = this.http.put<Response<DelegationDto>>(path, body);\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Update,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n // ============================================================================\n // Decisions\n // ============================================================================\n\n @Action(ApproveDelegation)\n approve(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: ApproveDelegation,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(\n `${BASE}/${id}/approve`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Approve,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(RejectDelegation)\n reject(\n ctx: StateContext<DelegationsStateModel>,\n { id, request }: RejectDelegation,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(\n `${BASE}/${id}/reject`,\n request,\n );\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Reject,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n @Action(CancelDelegation)\n cancel(\n ctx: StateContext<DelegationsStateModel>,\n { id, rowVersion, asAdmin }: CancelDelegation,\n ) {\n const path = asAdmin ? `${BASE}/Admin/${id}` : `${BASE}/${id}`;\n const req$ = this.http.delete<Response<boolean>>(path, {\n params: new HttpParams().set('rowVersion', rowVersion),\n });\n return handleApiRequest({\n ctx,\n key: DelegationsActionKey.Cancel,\n request$: req$,\n onSuccess: () => ({}),\n });\n }\n\n private buildScopePreviewRequest(\n request: DelegationScopePreviewRequest,\n asAdmin: boolean,\n ): DelegationScopePreviewRequest {\n if (!asAdmin) {\n return { scope: request.scope };\n }\n\n return {\n delegatorUserId: request.delegatorUserId ?? null,\n scope: request.scope,\n };\n }\n\n private buildAdminSaveRequest(\n request: AdminCreateDelegationV2Request | AdminUpdateDelegationV2Request,\n ): AdminCreateDelegationV2Request | AdminUpdateDelegationV2Request {\n return {\n ...request,\n specificDays: request.specificDays ?? [],\n };\n }\n}\n","import { computed, inject, Injectable } from '@angular/core';\nimport { select, Store } from '@ngxs/store';\nimport {\n ApproveDelegation,\n CancelDelegation,\n ClearDelegationDetail,\n ClearScopePreview,\n CreateDelegationLegacy,\n CreateDelegationV2,\n GetActiveAssignedDelegations,\n GetAdminDelegations,\n GetAssignedDelegations,\n GetDelegationDetail,\n GetMyDelegations,\n GetScopeOptions,\n PreviewScope,\n RejectDelegation,\n UpdateDelegationLegacy,\n UpdateDelegationV2,\n} from './delegations.actions';\nimport {\n AdminCreateDelegationV2Request,\n AdminUpdateDelegationV2Request,\n ApproveDelegationRequest,\n CreateDelegationLegacyRequest,\n CreateDelegationV2Request,\n DelegationListQuery,\n DelegationScopePreviewRequest,\n DelegationScopeSelection,\n DelegationsActionKey,\n RejectDelegationRequest,\n UpdateDelegationLegacyRequest,\n UpdateDelegationV2Request,\n} from './delegations.model';\nimport { DelegationsState } from './delegations.state';\n\n@Injectable({ providedIn: 'root' })\nexport class DelegationsFacade {\n private readonly store = inject(Store);\n\n // ---------------------------------------------------------------------------\n // Data slices\n // ---------------------------------------------------------------------------\n readonly myPage = select(DelegationsState.getMy);\n readonly assignedPage = select(DelegationsState.getAssigned);\n readonly adminPage = select(DelegationsState.getAdmin);\n readonly activePage = select(DelegationsState.getActive);\n readonly detail = select(DelegationsState.getDetail);\n readonly scopeOptions = select(DelegationsState.getScopeOptions);\n readonly scopePreview = select(DelegationsState.getScopePreview);\n\n private readonly loadingActive = select(DelegationsState.getLoadingActive);\n private readonly errors = select(DelegationsState.getErrors);\n\n // ---------------------------------------------------------------------------\n // Derived\n // ---------------------------------------------------------------------------\n readonly myItems = computed(() => this.myPage()?.items ?? []);\n readonly assignedItems = computed(() => this.assignedPage()?.items ?? []);\n readonly adminItems = computed(() => this.adminPage()?.items ?? []);\n readonly activeItems = computed(() => this.activePage()?.items ?? []);\n\n // ---------------------------------------------------------------------------\n // Loading\n // ---------------------------------------------------------------------------\n readonly isLoadingMy = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetMy),\n );\n readonly isLoadingAssigned = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetAssigned),\n );\n readonly isLoadingAdmin = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetAdmin),\n );\n readonly isLoadingActive = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetActive),\n );\n readonly isLoadingDetail = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetDetail),\n );\n readonly isLoadingScopeOptions = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.GetScopeOptions),\n );\n readonly isPreviewingScope = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.PreviewScope),\n );\n readonly isSaving = computed(\n () =>\n this.loadingActive().includes(DelegationsActionKey.Create) ||\n this.loadingActive().includes(DelegationsActionKey.Update),\n );\n readonly isApproving = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.Approve),\n );\n readonly isRejecting = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.Reject),\n );\n readonly isCancelling = computed(() =>\n this.loadingActive().includes(DelegationsActionKey.Cancel),\n );\n\n // ---------------------------------------------------------------------------\n // Errors\n // ---------------------------------------------------------------------------\n readonly errorMy = computed(\n () => this.errors()[DelegationsActionKey.GetMy] ?? null,\n );\n readonly errorAssigned = computed(\n () => this.errors()[DelegationsActionKey.GetAssigned] ?? null,\n );\n readonly errorAdmin = computed(\n () => this.errors()[DelegationsActionKey.GetAdmin] ?? null,\n );\n readonly errorDetail = computed(\n () => this.errors()[DelegationsActionKey.GetDetail] ?? null,\n );\n readonly errorScopeOptions = computed(\n () => this.errors()[DelegationsActionKey.GetScopeOptions] ?? null,\n );\n readonly errorSave = computed(\n () =>\n this.errors()[DelegationsActionKey.Create] ??\n this.errors()[DelegationsActionKey.Update] ??\n null,\n );\n\n // ---------------------------------------------------------------------------\n // Dispatchers\n // ---------------------------------------------------------------------------\n getMy(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetMyDelegations(query));\n }\n getAssigned(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetAssignedDelegations(query));\n }\n getAdmin(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetAdminDelegations(query));\n }\n getActive(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetActiveAssignedDelegations(query));\n }\n getDetail(id: number, asAdmin = false) {\n return this.store.dispatch(new GetDelegationDetail(id, asAdmin));\n }\n clearDetail() {\n return this.store.dispatch(new ClearDelegationDetail());\n }\n loadScopeOptions(delegatorUserId?: string, asAdmin = false) {\n return this.store.dispatch(new GetScopeOptions(delegatorUserId, asAdmin));\n }\n previewScope(\n scope: DelegationScopeSelection,\n options?: {\n delegatorUserId?: string;\n asAdmin?: boolean;\n },\n ) {\n const request: DelegationScopePreviewRequest = {\n delegatorUserId: options?.delegatorUserId,\n scope,\n };\n return this.store.dispatch(\n new PreviewScope(request, options?.asAdmin ?? false),\n );\n }\n clearScopePreview() {\n return this.store.dispatch(new ClearScopePreview());\n }\n createLegacy(request: CreateDelegationLegacyRequest) {\n return this.store.dispatch(new CreateDelegationLegacy(request));\n }\n createV2(\n request: CreateDelegationV2Request | AdminCreateDelegationV2Request,\n asAdmin = false,\n ) {\n return this.store.dispatch(new CreateDelegationV2(request, asAdmin));\n }\n updateLegacy(id: number, request: UpdateDelegationLegacyRequest) {\n return this.store.dispatch(new UpdateDelegationLegacy(id, request));\n }\n updateV2(\n id: number,\n request: UpdateDelegationV2Request | AdminUpdateDelegationV2Request,\n asAdmin = false,\n ) {\n return this.store.dispatch(new UpdateDelegationV2(id, request, asAdmin));\n }\n approve(id: number, request: ApproveDelegationRequest) {\n return this.store.dispatch(new ApproveDelegation(id, request));\n }\n reject(id: number, request: RejectDelegationRequest) {\n return this.store.dispatch(new RejectDelegation(id, request));\n }\n cancel(id: number, rowVersion: string, asAdmin = false) {\n return this.store.dispatch(new CancelDelegation(id, rowVersion, asAdmin));\n }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n signal,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { EntityPreview } from '@masterteam/components/entities';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\nimport { toDelegationUserEntity } from '../delegation-user-entity';\n\n/**\n * Collects a required rejection reason before calling\n * POST identity/delegations/{id}/reject (doc 04 — reject requires a non-empty\n * reason for audit/governance). Closes with `true` on success so the caller\n * can reload the row.\n */\n@Component({\n selector: 'mt-reject-delegation-dialog',\n imports: [CommonModule, Button, EntityPreview, TranslocoDirective],\n templateUrl: './reject-delegation-dialog.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class RejectDelegationDialog {\n readonly delegation = input.required<DelegationRow>();\n\n private readonly ref: ModalRef = inject(ModalRef);\n private readonly facade = inject(DelegationsFacade);\n\n protected readonly reason = signal('');\n protected readonly submitted = signal(false);\n protected readonly isBusy = this.facade.isRejecting;\n\n protected readonly isValid = computed(() => this.reason().trim().length > 0);\n\n protected onReasonInput(event: Event): void {\n this.reason.set((event.target as HTMLTextAreaElement).value);\n }\n\n protected userEntity(party: DelegationRow['delegator']) {\n return toDelegationUserEntity(party, { showEmail: false });\n }\n\n confirm(): void {\n this.submitted.set(true);\n if (!this.isValid()) return;\n const row = this.delegation();\n this.facade\n .reject(row.delegationId, {\n rowVersion: row.rowVersion,\n reason: this.reason().trim(),\n })\n .subscribe({\n next: () => this.ref.close(true),\n error: () => {\n /* error surfaced via shared toast pipeline; keep dialog open */\n },\n });\n }\n\n cancel(): void {\n this.ref.close(false);\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col gap-4 p-2\">\n <div class=\"flex flex-col gap-1\">\n <div class=\"text-sm text-gray-700\">\n {{ t(\"delegations.confirm.reject\") }}\n </div>\n <mt-entity-preview\n [data]=\"userEntity(delegation().delegator)\"\n ></mt-entity-preview>\n </div>\n\n <div class=\"flex flex-col gap-1\">\n <label class=\"text-sm font-medium text-gray-800\" for=\"mt-reject-reason\">\n {{ t(\"delegations.form.rejectionReason\") }}\n <span class=\"text-red-600\">*</span>\n </label>\n <textarea\n id=\"mt-reject-reason\"\n rows=\"3\"\n class=\"w-full rounded-md border border-gray-300 px-3 py-2 text-sm focus:border-primary focus:outline-none\"\n [class.border-red-400]=\"submitted() && !isValid()\"\n [value]=\"reason()\"\n (input)=\"onReasonInput($event)\"\n [attr.aria-invalid]=\"submitted() && !isValid()\"\n [placeholder]=\"t('delegations.form.rejectionReason')\"\n ></textarea>\n @if (submitted() && !isValid()) {\n <span class=\"text-xs text-red-600\">\n {{ t(\"delegations.form.rejectReasonRequired\") }}\n </span>\n }\n </div>\n\n <div class=\"flex justify-end gap-2 pt-2 border-t border-gray-200\">\n <mt-button\n variant=\"outlined\"\n color=\"secondary\"\n [label]=\"t('delegations.common.cancel')\"\n [disabled]=\"isBusy()\"\n (click)=\"cancel()\"\n ></mt-button>\n <mt-button\n color=\"danger\"\n icon=\"general.x-close\"\n [label]=\"t('delegations.action.reject')\"\n [loading]=\"isBusy()\"\n [disabled]=\"!isValid()\"\n (click)=\"confirm()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n OnInit,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ActivatedRoute,\n NavigationEnd,\n Router,\n RouterOutlet,\n} from '@angular/router';\nimport { filter } from 'rxjs';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Page } from '@masterteam/components/page';\nimport { PageHeaderTab } from '@masterteam/components/page-header';\n\ninterface DelegationRouteTab {\n label: string;\n path: string;\n}\n\n@Component({\n selector: 'mt-delegations',\n imports: [Page, RouterOutlet, TranslocoDirective],\n templateUrl: './delegations.html',\n styleUrl: './delegations.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class Delegations implements OnInit {\n private readonly route = inject(ActivatedRoute);\n private readonly router = inject(Router);\n private readonly transloco = inject(TranslocoService);\n protected readonly tabs = signal<PageHeaderTab[]>([]);\n protected readonly activeTab = signal<string>('');\n\n constructor() {\n this.router.events\n .pipe(\n filter(\n (event): event is NavigationEnd => event instanceof NavigationEnd,\n ),\n takeUntilDestroyed(),\n )\n .subscribe(() => this.syncSelectedTabFromRoute());\n }\n\n ngOnInit(): void {\n this.tabs.set(\n this.getRouteTabs().map((tab) => ({\n label: tab.label,\n value: tab.path,\n })),\n );\n this.syncSelectedTabFromRoute();\n }\n\n goBack() {\n void this.router.navigate(['control-panel/product-settings']);\n }\n\n protected onTabChange(value: string | number): void {\n if (typeof value !== 'string') {\n return;\n }\n\n const tab = this.getRouteTabs().find((item) => item.path === value);\n if (!tab) {\n return;\n }\n\n void this.router.navigate([tab.path], { relativeTo: this.route });\n }\n\n private syncSelectedTabFromRoute(): void {\n const currentPath = this.route.snapshot.firstChild?.routeConfig?.path;\n this.activeTab.set(currentPath || this.tabs()[0]?.value?.toString() || '');\n }\n\n private getRouteTabs(): DelegationRouteTab[] {\n return (this.route.routeConfig?.children ?? []).flatMap((childRoute) => {\n const path = childRoute.path?.trim();\n const label = childRoute.data?.['tabLabel'];\n\n if (!path || typeof label !== 'string') {\n return [];\n }\n\n return [{ path, label: this.transloco.translate(label) }];\n });\n }\n}\n","<ng-container *transloco=\"let t\">\n <mt-page\n [title]=\"t('delegations.title')\"\n [avatarIcon]=\"'custom.hierarchy-structure'\"\n [tabs]=\"tabs()\"\n [activeTab]=\"activeTab()\"\n [contentClass]=\"'max-[1025px]:p-4 max-[640px]:p-3'\"\n [avatarStyle]=\"{\n '--p-avatar-background': 'var(--p-indigo-50)',\n '--p-avatar-color': 'var(--p-indigo-700)',\n }\"\n (tabChange)=\"onTabChange($event)\"\n (backButtonClick)=\"goBack()\"\n backButton\n >\n <router-outlet />\n </mt-page>\n</ng-container>\n","import type {\n DelegationDisplayValue,\n DelegationGrant,\n DelegationScopeAction,\n DelegationScopeCombinationRule,\n DelegationScopeFact,\n DelegationScopeHierarchyGroup,\n DelegationScopeHierarchyTarget,\n DelegationScopeOptions,\n DelegationScopeTarget,\n} from '../../store/delegations/delegations.model';\n\nconst DEFAULT_SORT_ORDER = Number.MAX_SAFE_INTEGER;\n\nexport interface DelegationGrantableTargetGroup {\n key: string;\n target: DelegationScopeTarget;\n grants: DelegationGrant[];\n sortOrder: number;\n}\n\nexport interface DelegationGrantableHierarchyGroup {\n key: string;\n groupType: string;\n displayName?: DelegationDisplayValue;\n sortOrder: number;\n targets: DelegationGrantableTargetGroup[];\n}\n\nfunction toArray<T>(value?: T[] | null): T[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction normalizeGrant(grant: DelegationGrant): DelegationGrant {\n return {\n ...grant,\n action: normalizeAction(grant.action),\n accessibilities: toArray(grant.accessibilities),\n dataFilters: toArray(grant.dataFilters),\n constraints: toArray(grant.constraints),\n };\n}\n\nfunction normalizeAction(action: DelegationScopeAction): DelegationScopeAction {\n return {\n ...action,\n isDelegableSnapshot:\n action.isDelegableSnapshot ?? action.isDelegable ?? undefined,\n };\n}\n\nfunction normalizeKey(value: unknown): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed || null;\n }\n\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n\n return null;\n}\n\nfunction normalizeSortOrder(value: unknown): number {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n\n const numericValue = Number(value);\n return Number.isFinite(numericValue) ? numericValue : DEFAULT_SORT_ORDER;\n}\n\nfunction compareBySortThenKey(\n left: number,\n right: number,\n leftKey: string,\n rightKey: string,\n): number {\n if (left !== right) {\n return left - right;\n }\n\n return leftKey.localeCompare(rightKey);\n}\n\nfunction targetIdentity(target: DelegationScopeTarget): string {\n return `${target.applicationKey}::${target.targetType}::${target.targetKey}`;\n}\n\nfunction groupIdentity(\n groupType: string,\n groupKey: string,\n fallbackTargetKey?: string,\n): string {\n return `${groupType}::${groupKey || fallbackTargetKey || 'group'}`;\n}\n\nfunction buildHierarchyGrant(\n target: DelegationScopeTarget,\n action: DelegationScopeAction,\n): DelegationGrant {\n return normalizeGrant({\n applicationKey:\n normalizeKey(target.applicationKey) ??\n normalizeKey(action.applicationKey) ??\n '',\n target,\n action: normalizeAction(action),\n accessibilities: [],\n dataFilters: [],\n constraints: [],\n });\n}\n\nfunction factLookupKeys(fact: DelegationScopeFact): string[] {\n const candidates = [\n fact.key,\n fact.code,\n fact.id,\n fact['accessibilityKey'],\n fact['dataFilterKey'],\n fact['constraintKey'],\n fact['permissionKey'],\n fact['pageKey'],\n fact['value'],\n ];\n\n return candidates\n .map(normalizeKey)\n .filter((value): value is string => !!value);\n}\n\nfunction buildFactIndex(\n facts: DelegationScopeFact[],\n): Map<string, DelegationScopeFact> {\n const index = new Map<string, DelegationScopeFact>();\n\n for (const fact of facts) {\n for (const key of factLookupKeys(fact)) {\n if (!index.has(key)) {\n index.set(key, fact);\n }\n }\n }\n\n return index;\n}\n\nfunction lookupFacts(\n keys: string[] | null | undefined,\n index: Map<string, DelegationScopeFact>,\n): DelegationScopeFact[] {\n if (!Array.isArray(keys) || keys.length === 0) {\n return [];\n }\n\n const resolved: DelegationScopeFact[] = [];\n const seen = new Set<string>();\n\n for (const rawKey of keys) {\n const key = normalizeKey(rawKey);\n if (!key || seen.has(key)) {\n continue;\n }\n\n const match = index.get(key);\n if (!match) {\n continue;\n }\n\n seen.add(key);\n resolved.push(match);\n }\n\n return resolved;\n}\n\nfunction ruleKeys(\n rule: DelegationScopeCombinationRule,\n preferredKeys: string[],\n): string[] | null {\n for (const preferredKey of preferredKeys) {\n const value = rule[preferredKey];\n if (Array.isArray(value)) {\n return value.map((item) => String(item));\n }\n }\n\n return null;\n}\n\nfunction matchesTarget(\n target: DelegationScopeTarget,\n rule: DelegationScopeCombinationRule,\n): boolean {\n return (\n target.targetType === rule.targetType &&\n target.targetKey === rule.targetKey &&\n (!rule.applicationKey ||\n !target.applicationKey ||\n target.applicationKey === rule.applicationKey)\n );\n}\n\nfunction matchesAction(\n action: DelegationScopeAction,\n rule: DelegationScopeCombinationRule,\n applicationKey?: string,\n): boolean {\n return (\n action.operationKey === rule.operationKey &&\n (!rule.applicationKey ||\n !action.applicationKey ||\n action.applicationKey === rule.applicationKey) &&\n (!applicationKey ||\n !action.applicationKey ||\n action.applicationKey === applicationKey)\n );\n}\n\nfunction grantIdentity(grant: DelegationGrant): string {\n return JSON.stringify({\n app: grant.applicationKey,\n target: [\n grant.target.applicationKey,\n grant.target.targetType,\n grant.target.targetKey,\n grant.target.moduleKey ?? null,\n grant.target.permissionModuleType ?? null,\n grant.target.permissionTargetId ?? null,\n ],\n action: [\n grant.action.applicationKey,\n grant.action.operationKey,\n grant.action.operationKind,\n grant.action.permissionCommand ?? null,\n grant.action.businessActionCode ?? null,\n ],\n accessibilities: grant.accessibilities.map(factLookupKeys),\n dataFilters: grant.dataFilters.map(factLookupKeys),\n constraints: grant.constraints.map(factLookupKeys),\n });\n}\n\nfunction buildGroupsFromHierarchy(\n hierarchy: DelegationScopeHierarchyGroup[],\n): DelegationGrantableHierarchyGroup[] {\n return hierarchy\n .map((group) => {\n const targets = toArray(group.targets)\n .map((targetNode: DelegationScopeHierarchyTarget) => {\n const grants = toArray(targetNode.operations)\n .map((operation) =>\n buildHierarchyGrant(targetNode.target, operation),\n )\n .sort((left, right) =>\n compareBySortThenKey(\n normalizeSortOrder(left.action.sortOrder),\n normalizeSortOrder(right.action.sortOrder),\n left.action.operationKey,\n right.action.operationKey,\n ),\n );\n\n return {\n key: targetIdentity(targetNode.target),\n target: targetNode.target,\n grants,\n sortOrder: normalizeSortOrder(\n targetNode.sortOrder ?? targetNode.target.levelModuleId,\n ),\n };\n })\n .filter((targetNode) => targetNode.grants.length > 0)\n .sort((left, right) =>\n compareBySortThenKey(\n left.sortOrder,\n right.sortOrder,\n left.key,\n right.key,\n ),\n );\n\n return {\n key: groupIdentity(group.groupType, group.groupKey),\n groupType: group.groupType,\n displayName: group.displayName,\n sortOrder: normalizeSortOrder(group.sortOrder ?? group.levelId),\n targets,\n };\n })\n .filter((group) => group.targets.length > 0)\n .sort((left, right) =>\n compareBySortThenKey(\n left.sortOrder,\n right.sortOrder,\n left.key,\n right.key,\n ),\n );\n}\n\nfunction getLegacyGrantableGrants(\n options: DelegationScopeOptions | null | undefined,\n): DelegationGrant[] {\n if (!options) {\n return [];\n }\n\n const legacyGrants = toArray(options.grants).map(normalizeGrant);\n if (legacyGrants.length > 0) {\n return legacyGrants;\n }\n\n const targets = toArray(options.targets);\n const operations = toArray(options.operations);\n const combinationRules = toArray(options.combinationRules);\n\n if (\n targets.length === 0 ||\n operations.length === 0 ||\n combinationRules.length === 0\n ) {\n return [];\n }\n\n const accessibilityIndex = buildFactIndex(toArray(options.accessibilities));\n const dataFilterIndex = buildFactIndex(toArray(options.dataFilters));\n const constraintIndex = buildFactIndex(toArray(options.constraints));\n const grants: DelegationGrant[] = [];\n const seen = new Set<string>();\n\n for (const rule of combinationRules) {\n const target = targets.find((item) => matchesTarget(item, rule));\n if (!target) {\n continue;\n }\n\n const applicationKey =\n normalizeKey(rule.applicationKey) ??\n normalizeKey(target.applicationKey) ??\n null;\n\n const action = operations.find((item) =>\n matchesAction(item, rule, applicationKey ?? undefined),\n );\n if (!action) {\n continue;\n }\n\n const grant: DelegationGrant = normalizeGrant({\n applicationKey:\n applicationKey ??\n normalizeKey(action.applicationKey) ??\n normalizeKey(target.applicationKey) ??\n '',\n target,\n action: normalizeAction(action),\n accessibilities: lookupFacts(\n ruleKeys(rule, ['accessibilityKeys', 'accessibilities']),\n accessibilityIndex,\n ),\n dataFilters: lookupFacts(\n ruleKeys(rule, ['dataFilterKeys', 'dataFilters', 'filterKeys']),\n dataFilterIndex,\n ),\n constraints: lookupFacts(\n ruleKeys(rule, ['constraintKeys', 'constraints']),\n constraintIndex,\n ),\n });\n\n const identity = grantIdentity(grant);\n if (seen.has(identity)) {\n continue;\n }\n\n seen.add(identity);\n grants.push(grant);\n }\n\n return grants;\n}\n\nfunction buildGroupsFromGrants(\n grants: DelegationGrant[],\n): DelegationGrantableHierarchyGroup[] {\n const groups = new Map<\n string,\n {\n groupType: string;\n displayName?: DelegationDisplayValue;\n sortOrder: number;\n targets: Map<string, DelegationGrantableTargetGroup>;\n }\n >();\n\n for (const grant of grants) {\n const parentGroupKey =\n normalizeKey(grant.target.parentTargetKey) ?? grant.target.targetKey;\n const parentGroupType =\n grant.target.parentTargetType ?? grant.target.targetType;\n const groupKey = groupIdentity(\n parentGroupType,\n parentGroupKey,\n grant.target.targetKey,\n );\n\n let group = groups.get(groupKey);\n if (!group) {\n group = {\n groupType: parentGroupType,\n displayName:\n grant.target.parentDisplayName ?? grant.target.displayName ?? null,\n sortOrder: normalizeSortOrder(\n grant.target.parentLevelId ?? grant.target.levelId,\n ),\n targets: new Map<string, DelegationGrantableTargetGroup>(),\n };\n groups.set(groupKey, group);\n }\n\n const targetKey = targetIdentity(grant.target);\n const existingTarget = group.targets.get(targetKey);\n\n if (existingTarget) {\n existingTarget.grants.push(grant);\n continue;\n }\n\n group.targets.set(targetKey, {\n key: targetKey,\n target: grant.target,\n grants: [grant],\n sortOrder: normalizeSortOrder(\n grant.target.levelModuleId ?? grant.target.targetId,\n ),\n });\n }\n\n return Array.from(groups.entries())\n .map(([key, value]) => ({\n key,\n groupType: value.groupType,\n displayName: value.displayName,\n sortOrder: value.sortOrder,\n targets: Array.from(value.targets.values())\n .map((targetGroup) => ({\n ...targetGroup,\n grants: [...targetGroup.grants].sort((left, right) =>\n compareBySortThenKey(\n normalizeSortOrder(left.action.sortOrder),\n normalizeSortOrder(right.action.sortOrder),\n left.action.operationKey,\n right.action.operationKey,\n ),\n ),\n }))\n .sort((left, right) =>\n compareBySortThenKey(\n left.sortOrder,\n right.sortOrder,\n left.key,\n right.key,\n ),\n ),\n }))\n .sort((left, right) =>\n compareBySortThenKey(\n left.sortOrder,\n right.sortOrder,\n left.key,\n right.key,\n ),\n );\n}\n\nexport function getDelegationGrantableGroups(\n options: DelegationScopeOptions | null | undefined,\n): DelegationGrantableHierarchyGroup[] {\n const hierarchyGroups = buildGroupsFromHierarchy(toArray(options?.hierarchy));\n if (hierarchyGroups.length > 0) {\n return hierarchyGroups;\n }\n\n return buildGroupsFromGrants(getLegacyGrantableGrants(options));\n}\n\nexport function getDelegationGrantableGrants(\n options: DelegationScopeOptions | null | undefined,\n): DelegationGrant[] {\n return getDelegationGrantableGroups(options).flatMap((group) =>\n group.targets.flatMap((targetGroup) => targetGroup.grants),\n );\n}\n\nexport function hasDelegationGrantableScope(\n options: DelegationScopeOptions | null | undefined,\n): boolean {\n return getDelegationGrantableGroups(options).length > 0;\n}\n","import { CommonModule } from '@angular/common';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n model,\n signal,\n untracked,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport {\n Tree,\n TreeActionEvent,\n type TreeNode,\n} from '@masterteam/components/tree';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { DelegationsFacade } from '../../../../store/delegations/delegations.facade';\nimport {\n DelegationDisplayValue,\n DelegationGrant,\n DelegationScopeSelection,\n} from '../../../../store/delegations/delegations.model';\nimport {\n formatDelegationActionLabel,\n formatDelegationScopeSummary,\n formatDelegationTargetLabel,\n humanizeDelegationKey,\n} from '../../delegation-scope-display';\nimport {\n DelegationGrantableHierarchyGroup,\n DelegationGrantableTargetGroup,\n getDelegationGrantableGroups,\n} from '../../delegation-scope-options';\n\nconst EMPTY_SCOPE: DelegationScopeSelection = { grants: [], metadata: {} };\n\n/**\n * Full grant identity. Two grants with the same target/action but different\n * accessibilities, data filters, or constraints are DIFFERENT grants and must\n * not collapse (backend scope contract). Prefer a backend-provided stable\n * `key`; otherwise hash the complete grant shape.\n */\nfunction grantKey(g: DelegationGrant): string {\n if (g.key) return g.key;\n return JSON.stringify({\n app: g.applicationKey,\n target: [\n g.target.applicationKey,\n g.target.targetType,\n g.target.targetKey,\n g.target.permissionModuleType ?? null,\n g.target.permissionTargetId ?? null,\n g.target.legacyModuleId ?? null,\n g.target.levelId ?? null,\n g.target.levelModuleId ?? null,\n g.target.domainModuleId ?? null,\n g.target.moduleKey ?? null,\n ],\n action: [\n g.action.applicationKey,\n g.action.operationKey,\n g.action.operationKind,\n g.action.permissionCommand ?? null,\n g.action.businessActionCode ?? null,\n ],\n accessibilities: g.accessibilities ?? [],\n dataFilters: g.dataFilters ?? [],\n constraints: g.constraints ?? [],\n });\n}\n\nfunction normalizeGrant(g: DelegationGrant): DelegationGrant {\n return {\n ...g,\n accessibilities: g.accessibilities ?? [],\n dataFilters: g.dataFilters ?? [],\n constraints: g.constraints ?? [],\n };\n}\n\nfunction sameSelectionKeys(left: TreeNode[] | null, right: string[]): boolean {\n const leftKeys = (left ?? [])\n .map((node) => node.key)\n .filter((key): key is string => !!key);\n\n if (leftKeys.length !== right.length) {\n return false;\n }\n\n const rightSet = new Set(right);\n return leftKeys.every((key) => rightSet.has(key));\n}\n\n/**\n * Hierarchy-based scope picker (doc 03). Driven entirely by `scope/options`:\n * - renders backend-owned Level -> Level Module -> operations hierarchy,\n * - lets the user toggle each explicit grant,\n * - calls `scope/preview` (debounced) and surfaces summary / warnings / denied.\n *\n * `[(scope)]` two-way binds a `DelegationScopeSelection`. The component never\n * invents permission metadata — it only echoes targets/actions returned by\n * options.\n */\n@Component({\n selector: 'mt-scope-picker',\n imports: [CommonModule, Tree, SkeletonModule, TranslocoDirective],\n templateUrl: './scope-picker.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScopePicker {\n readonly scope = model<DelegationScopeSelection>(EMPTY_SCOPE);\n readonly readonly = input<boolean>(false);\n readonly adminMode = input<boolean>(false);\n /**\n * Delegator whose grantable scope is loaded. Undefined = current user\n * (self-service). In admin mode the host rebinds this as the selected\n * delegator changes, and options reload reactively.\n */\n readonly delegatorUserId = input<string | undefined>(undefined);\n\n private readonly facade = inject(DelegationsFacade);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly options = this.facade.scopeOptions;\n protected readonly preview = this.facade.scopePreview;\n protected readonly isLoadingOptions = this.facade.isLoadingScopeOptions;\n protected readonly isPreviewing = this.facade.isPreviewingScope;\n protected readonly errorOptions = this.facade.errorScopeOptions;\n protected readonly groups = computed<DelegationGrantableHierarchyGroup[]>(\n () => getDelegationGrantableGroups(this.options()),\n );\n protected readonly activeLang = toSignal(this.transloco.langChanges$, {\n initialValue: this.transloco.getActiveLang(),\n });\n\n /** Selected grant keys for O(1) checkbox state. */\n protected readonly selectedKeys = computed(\n () => new Set(this.scope().grants.map(grantKey)),\n );\n protected readonly treeSelection = signal<TreeNode[] | null>([]);\n protected readonly treeNodes = computed<TreeNode[]>(() =>\n this.buildTreeNodes(this.groups()),\n );\n protected readonly grantIndex = computed(() => {\n const index = new Map<string, DelegationGrant>();\n\n for (const group of this.groups()) {\n for (const targetGroup of group.targets) {\n for (const grant of targetGroup.grants) {\n index.set(grantKey(grant), normalizeGrant(grant));\n }\n }\n }\n\n return index;\n });\n\n constructor() {\n // Load (and reload) grantable options whenever the delegator changes.\n let initialized = false;\n let lastDelegatorUserId: string | undefined;\n effect(() => {\n const delegator = this.delegatorUserId();\n const asAdmin = this.adminMode();\n untracked(() => this.facade.loadScopeOptions(delegator, asAdmin));\n\n if (!initialized) {\n initialized = true;\n lastDelegatorUserId = delegator;\n return;\n }\n\n if (lastDelegatorUserId !== delegator) {\n lastDelegatorUserId = delegator;\n this.scope.set(EMPTY_SCOPE);\n this.treeSelection.set([]);\n this.facade.clearScopePreview();\n }\n });\n\n let timer: ReturnType<typeof setTimeout> | null = null;\n effect(() => {\n const s = this.scope();\n const delegator = this.delegatorUserId();\n const asAdmin = this.adminMode();\n untracked(() => {\n if (!s.grants.length) {\n this.facade.clearScopePreview();\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(\n () =>\n this.facade.previewScope(s, {\n delegatorUserId: delegator,\n asAdmin,\n }),\n 300,\n );\n });\n });\n\n effect(() => {\n const selectedKeys = Array.from(this.selectedKeys());\n const selection = this.treeSelection();\n\n if (sameSelectionKeys(selection, selectedKeys)) {\n return;\n }\n\n this.treeSelection.set(\n selectedKeys.map((key) => ({\n key,\n })),\n );\n });\n }\n\n protected onTreeAction(event: TreeActionEvent): void {\n if (event.action !== 'selectionChange' || this.readonly()) {\n return;\n }\n\n const index = this.grantIndex();\n const grants = (this.treeSelection() ?? [])\n .map((node) => (node.key ? index.get(node.key) : undefined))\n .filter((grant): grant is DelegationGrant => !!grant);\n\n this.scope.update((scope) => ({\n ...scope,\n grants,\n }));\n }\n\n protected getPreviewSummary(\n summary: DelegationDisplayValue | undefined,\n ): string {\n return formatDelegationScopeSummary(summary, this.currentLanguage());\n }\n\n protected formatDeniedOperation(value?: string | null): string {\n return humanizeDelegationKey(value);\n }\n\n protected formatDeniedTarget(value?: string | null): string {\n return humanizeDelegationKey(value);\n }\n\n protected groupTargetCount(group: DelegationGrantableHierarchyGroup): number {\n return group.targets.length;\n }\n\n protected targetGrantCount(\n targetGroup: DelegationGrantableTargetGroup,\n ): number {\n return targetGroup.grants.length;\n }\n\n private buildTreeNodes(\n groups: DelegationGrantableHierarchyGroup[],\n ): TreeNode[] {\n return groups.map((group) => ({\n key: `group:${group.key}`,\n label: `${this.getGroupLabel(group)} (${this.groupTargetCount(group)})`,\n selectable: !this.readonly(),\n expanded: true,\n children: group.targets.map((targetGroup) =>\n this.buildTargetNode(targetGroup),\n ),\n }));\n }\n\n private buildTargetNode(\n targetGroup: DelegationGrantableTargetGroup,\n ): TreeNode {\n return {\n key: `target:${targetGroup.key}`,\n label: `${this.getTargetLabel(targetGroup)} (${this.targetGrantCount(targetGroup)})`,\n selectable: !this.readonly(),\n expanded: true,\n children: targetGroup.grants.map((grant) => ({\n key: grantKey(grant),\n label: this.getActionLabel(grant),\n selectable: !this.readonly(),\n })),\n };\n }\n\n private getGroupLabel(group: DelegationGrantableHierarchyGroup): string {\n return group.displayName\n ? humanizeDelegationDisplay(group.displayName, this.currentLanguage())\n : humanizeDelegationKey(group.groupType);\n }\n\n private getTargetLabel(targetGroup: DelegationGrantableTargetGroup): string {\n return formatDelegationTargetLabel(\n targetGroup.target,\n this.currentLanguage(),\n );\n }\n\n private getActionLabel(grant: DelegationGrant): string {\n return formatDelegationActionLabel(grant.action, this.currentLanguage());\n }\n\n private currentLanguage(): string {\n return this.activeLang() ?? this.transloco.getActiveLang();\n }\n}\n\nfunction humanizeDelegationDisplay(\n value: DelegationDisplayValue,\n language: string,\n): string {\n return (\n formatDelegationScopeSummary(value, language) ||\n humanizeDelegationKey(typeof value === 'string' ? value : null)\n );\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col gap-4\">\n @if (isLoadingOptions()) {\n <div class=\"grid gap-4 2xl:grid-cols-[minmax(0,1fr)_20rem]\">\n <section\n class=\"flex flex-col gap-4 rounded-3xl border border-surface-200 bg-surface-0 p-4 shadow-xs\"\n >\n <div class=\"flex flex-col gap-2\">\n <p-skeleton width=\"9rem\" height=\"1rem\"></p-skeleton>\n <p-skeleton width=\"20rem\" height=\"0.9rem\"></p-skeleton>\n </div>\n\n <p-skeleton height=\"3rem\"></p-skeleton>\n\n <div class=\"grid gap-3\">\n @for (item of [0, 1, 2, 3]; track $index) {\n <div class=\"rounded-2xl border border-surface-200 p-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <p-skeleton width=\"12rem\" height=\"1rem\"></p-skeleton>\n <p-skeleton width=\"1.5rem\" height=\"1.5rem\"></p-skeleton>\n </div>\n </div>\n }\n </div>\n </section>\n\n <section\n class=\"flex flex-col gap-4 rounded-3xl border border-dashed border-surface-300 bg-surface-50 p-4\"\n >\n <div class=\"flex flex-col gap-2\">\n <p-skeleton width=\"8rem\" height=\"1rem\"></p-skeleton>\n <p-skeleton width=\"100%\" height=\"0.85rem\"></p-skeleton>\n </div>\n\n <div class=\"flex flex-col gap-3\">\n @for (item of [0, 1, 2]; track $index) {\n <p-skeleton height=\"1rem\"></p-skeleton>\n }\n </div>\n </section>\n </div>\n } @else {\n <section class=\"flex flex-col gap-3\">\n @if (errorOptions(); as errorMessage) {\n <div\n class=\"rounded-2xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\"\n >\n {{ errorMessage }}\n </div>\n }\n\n @if (groups().length === 0 && !errorOptions()) {\n <div\n class=\"flex min-h-72 flex-col items-center justify-center gap-4 rounded-3xl border border-dashed border-surface-300 bg-surface-50 px-6 py-8 text-center\"\n >\n <div\n class=\"flex size-18 items-center justify-center rounded-3xl bg-surface-0 text-primary shadow-sm\"\n >\n <svg\n viewBox=\"0 0 64 64\"\n class=\"size-10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <rect\n x=\"10\"\n y=\"12\"\n width=\"44\"\n height=\"38\"\n rx=\"12\"\n class=\"fill-primary/10 stroke-primary/35\"\n stroke-width=\"2\"\n />\n <path\n d=\"M21 27H43\"\n class=\"stroke-primary\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M21 35H37\"\n class=\"stroke-primary/70\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n />\n <circle\n cx=\"46\"\n cy=\"19\"\n r=\"6\"\n class=\"fill-surface-0 stroke-primary\"\n stroke-width=\"2\"\n />\n <path\n d=\"M43 16L49 22\"\n class=\"stroke-primary\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M49 16L43 22\"\n class=\"stroke-primary\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n\n <div class=\"space-y-1\">\n <p class=\"text-base font-medium text-surface-900\">\n {{ t(\"delegations.scope.permissionsTitle\") }}\n </p>\n <p class=\"text-sm text-surface-500\">\n {{ t(\"delegations.scope.noGrantableOptions\") }}\n </p>\n </div>\n </div>\n }\n\n @if (groups().length > 0) {\n <div\n class=\"rounded-3xl border border-surface-200 bg-surface-0 p-3 shadow-xs\"\n >\n <mt-tree\n [value]=\"treeNodes()\"\n [(selection)]=\"treeSelection\"\n selectionMode=\"checkbox\"\n [loading]=\"isLoadingOptions()\"\n [propagateSelectionDown]=\"true\"\n [propagateSelectionUp]=\"true\"\n (action)=\"onTreeAction($event)\"\n [filter]=\"true\"\n filterMode=\"lenient\"\n scrollHeight=\"28rem\"\n [virtualScroll]=\"true\"\n [virtualScrollItemSize]=\"72\"\n />\n </div>\n }\n </section>\n\n <section\n class=\"flex flex-col gap-3 rounded-3xl border border-dashed border-surface-300 bg-surface-50 px-4 py-4\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <div class=\"text-base font-medium text-surface-800\">\n {{ t(\"delegations.scope.previewTitle\") }}\n </div>\n @if (isPreviewing()) {\n <p-skeleton width=\"6rem\" height=\"0.75rem\"></p-skeleton>\n }\n </div>\n @if (preview(); as p) {\n @if (p.isValid) {\n <div class=\"text-sm font-medium text-surface-900\">\n {{\n getPreviewSummary(p.summary) ||\n t(\"delegations.column.scopeSummary\")\n }}\n </div>\n } @else {\n <div class=\"text-sm font-medium text-red-700\">\n {{ t(\"delegations.scope.previewInvalid\") }}\n </div>\n }\n @if (p.warnings.length > 0) {\n <ul class=\"list-inside list-disc space-y-1 text-xs text-amber-700\">\n @for (w of p.warnings; track $index) {\n <li>{{ w.message }}</li>\n }\n </ul>\n }\n @if (p.deniedItems.length > 0) {\n <ul class=\"list-inside list-disc space-y-1 text-xs text-red-700\">\n @for (d of p.deniedItems; track $index) {\n <li>\n {{ formatDeniedTarget(d.targetKey) }} /\n {{ formatDeniedOperation(d.operationKey) }} -\n {{ d.reasonCode }}\n </li>\n }\n </ul>\n }\n } @else {\n <div class=\"text-xs text-surface-500\">\n {{ t(\"delegations.scope.noSelection\") }}\n </div>\n }\n </section>\n }\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { HttpContext } from '@angular/common/http';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport {\n DateFieldConfig,\n DynamicFormConfig,\n MultiSelectFieldConfig,\n RadioButtonFieldConfig,\n REQUEST_CONTEXT,\n TextareaFieldConfig,\n ToggleFieldConfig,\n UserSearchFieldConfig,\n ValidatorConfig,\n} from '@masterteam/components';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { ModalService } from '@masterteam/components/modal';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { ScopePicker } from './scope-picker/scope-picker';\nimport {\n AdminCreateDelegationV2Request,\n AdminUpdateDelegationV2Request,\n CreateDelegationV2Request,\n DelegationRow,\n DelegationScopeSelection,\n UpdateDelegationV2Request,\n} from '../../../store/delegations/delegations.model';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\n\nconst EMPTY_SCOPE: DelegationScopeSelection = { grants: [], metadata: {} };\n\ninterface DelegationFormUserValue {\n id: string;\n userId: string;\n displayName: string;\n userName: string;\n email?: string | null;\n photo?: string | null;\n isExternal: boolean;\n}\n\nfunction getCurrentDelegatorFromLocalStorage(): DelegationFormUserValue | null {\n if (typeof localStorage === 'undefined') {\n return null;\n }\n\n try {\n const raw = localStorage.getItem('auth');\n if (!raw) return null;\n\n const parsed = JSON.parse(raw) as Record<string, unknown> | null;\n if (!parsed || typeof parsed !== 'object') return null;\n\n const state =\n ((parsed['state'] as Record<string, unknown> | undefined) ?? parsed) ||\n null;\n const userWrapper = state?.['user'] as Record<string, unknown> | undefined;\n const user =\n (userWrapper?.['user'] as Record<string, unknown> | undefined) ??\n userWrapper;\n\n if (!user || typeof user !== 'object') return null;\n\n const id =\n (user['id'] as string | undefined) ??\n (user['userId'] as string | undefined);\n if (!id) return null;\n\n const photo = user['photo'];\n const photoPath =\n typeof photo === 'string'\n ? photo\n : ((photo as { fileName?: string } | undefined)?.fileName ?? null);\n\n return {\n id,\n userId: id,\n displayName:\n (user['displayName'] as string | undefined) ??\n (user['name'] as string | undefined) ??\n (user['userName'] as string | undefined) ??\n '',\n userName: (user['userName'] as string | undefined) ?? '',\n email: (user['email'] as string | undefined) ?? null,\n photo: photoPath,\n isExternal: !!user['isExternal'],\n };\n } catch {\n return null;\n }\n}\n\nfunction extractUserId(value: unknown): string | undefined {\n if (typeof value === 'string') {\n return value.trim() || undefined;\n }\n\n if (!value || typeof value !== 'object') {\n return undefined;\n }\n\n const record = value as Record<string, unknown>;\n for (const key of ['userId', 'id']) {\n const candidate = record[key];\n if (typeof candidate === 'string' && candidate.trim()) {\n return candidate.trim();\n }\n }\n\n return undefined;\n}\n\n/**\n * Delegation create/edit form (doc 04). Uses the v2 explicit-scope endpoints so\n * the persisted `DelegationScopeSelection` matches what scope/preview validated.\n *\n * - Delegator is server-derived; only the delegated user is collected.\n * - On edit, scope grants + rowVersion come from the loaded detail.\n * - Times are sent in UTC ISO; wrappers set timeZoneId = UTC.\n */\n@Component({\n selector: 'mt-delegation-form',\n standalone: true,\n imports: [\n CommonModule,\n Button,\n DynamicForm,\n ReactiveFormsModule,\n ScopePicker,\n TranslocoDirective,\n ],\n templateUrl: './delegation-form.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationForm implements OnInit {\n readonly delegationForEdit = input<DelegationRow | null>(null);\n readonly readonly = input<boolean>(false);\n /**\n * Admin-managed mode: also collect the Delegator / From user, so an admin can\n * create a delegation between two selected users (Ahmed → Sara). Self-service\n * leaves this false; the delegator defaults to the current user server-side.\n */\n readonly adminMode = input<boolean>(false);\n\n private readonly halfWidth = 'flex flex-col gap-1 lg:col-span-6';\n private readonly fullWidth = 'flex flex-col gap-1 lg:col-span-12';\n\n modal = inject(ModalService);\n ref: ModalRef = inject(ModalRef);\n private readonly transloco = inject(TranslocoService);\n private readonly facade = inject(DelegationsFacade);\n\n delegationFormControl = new FormControl();\n formValue = toSignal(this.delegationFormControl.valueChanges);\n\n detail = this.facade.detail;\n isDetailLoading = this.facade.isLoadingDetail;\n scopePreview = this.facade.scopePreview;\n isPreviewingScope = this.facade.isPreviewingScope;\n isSaving = this.facade.isSaving;\n\n context = new HttpContext().set(REQUEST_CONTEXT, { useBaseUrl: false });\n\n protected readonly scope = signal<DelegationScopeSelection>(EMPTY_SCOPE);\n protected readonly currentDelegator = signal<DelegationFormUserValue | null>(\n getCurrentDelegatorFromLocalStorage(),\n );\n\n /** Selected delegator id drives scope/options loading and the admin payload. */\n protected readonly selectedDelegatorId = computed<string | undefined>(() => {\n if (this.adminMode()) {\n return extractUserId(this.formValue()?.delegateFrom);\n }\n return this.currentDelegator()?.id;\n });\n\n /** Admin mode waits for a chosen delegator; self-service always has one. */\n protected readonly showScopePicker = computed(\n () => !this.adminMode() || !!this.selectedDelegatorId(),\n );\n\n protected readonly specificDaysOptions = signal([\n { label: this.transloco.translate('delegations.days.sunday'), value: 0 },\n { label: this.transloco.translate('delegations.days.monday'), value: 1 },\n { label: this.transloco.translate('delegations.days.tuesday'), value: 2 },\n { label: this.transloco.translate('delegations.days.wednesday'), value: 3 },\n { label: this.transloco.translate('delegations.days.thursday'), value: 4 },\n { label: this.transloco.translate('delegations.days.friday'), value: 5 },\n { label: this.transloco.translate('delegations.days.saturday'), value: 6 },\n ]);\n\n protected readonly formConfig = computed<DynamicFormConfig>(() => ({\n sections: [\n {\n key: 'delegationForm',\n type: 'header',\n bodyClass: 'grid grid-cols-1 gap-4 items-start lg:grid-cols-12',\n order: 1,\n fields: [\n new UserSearchFieldConfig({\n key: 'delegateFrom',\n label: this.transloco.translate('delegations.column.delegatorName'),\n apiUrl: 'Identity/users',\n context: this.context,\n validators: [ValidatorConfig.required()],\n cssClass: this.halfWidth,\n colSpan: 6,\n order: 0,\n disabled:\n this.readonly() ||\n !this.adminMode() ||\n !!this.delegationForEdit(),\n }),\n new UserSearchFieldConfig({\n key: 'delegateTo',\n label: this.transloco.translate('delegations.column.delegatedTo'),\n apiUrl: 'Identity/users',\n context: this.context,\n validators: [ValidatorConfig.required()],\n cssClass: this.halfWidth,\n colSpan: 6,\n order: 1,\n disabled: this.readonly() || !!this.delegationForEdit(),\n }),\n new TextareaFieldConfig({\n key: 'description',\n label: this.transloco.translate('delegations.form.description'),\n placeholder: this.transloco.translate(\n 'delegations.form.description',\n ),\n cssClass: this.fullWidth,\n colSpan: 12,\n order: 2,\n disabled: this.readonly(),\n }),\n new DateFieldConfig({\n key: 'delegateFromDateTime',\n label: this.transloco.translate('delegations.column.startDate'),\n placeholder: this.transloco.translate(\n 'delegations.column.startDate',\n ),\n validators: [ValidatorConfig.required()],\n showTime: true,\n cssClass: this.halfWidth,\n colSpan: 6,\n order: 3,\n disabled: this.readonly(),\n }),\n new DateFieldConfig({\n key: 'delegateToDateTime',\n label: this.transloco.translate('delegations.column.endDate'),\n placeholder: this.transloco.translate('delegations.column.endDate'),\n validators: [ValidatorConfig.required()],\n showTime: true,\n cssClass: this.halfWidth,\n colSpan: 6,\n order: 4,\n disabled: this.readonly(),\n }),\n new RadioButtonFieldConfig({\n key: 'delegationDaysType',\n label: this.transloco.translate('delegations.form.daysApply'),\n options: [\n {\n label: this.transloco.translate('delegations.form.fullRange'),\n value: 'FullRange',\n },\n {\n label: this.transloco.translate(\n 'delegations.form.specificDays',\n ),\n value: 'SpecificDays',\n },\n ],\n optionLabel: 'label',\n optionValue: 'value',\n validators: [ValidatorConfig.required()],\n cssClass: this.fullWidth,\n colSpan: 12,\n order: 5,\n disabled: this.readonly(),\n }),\n new MultiSelectFieldConfig({\n key: 'specificDays',\n label: this.transloco.translate('delegations.form.specificDays'),\n options: this.specificDaysOptions(),\n optionLabel: 'label',\n optionValue: 'value',\n maxSelectedLabels: 7,\n relations: [\n {\n key: 'delegationDaysType',\n value: 'SpecificDays',\n action: 'show',\n },\n ],\n cssClass: this.fullWidth,\n colSpan: 12,\n order: 6,\n disabled: this.readonly(),\n }),\n new ToggleFieldConfig({\n key: 'requiresApproval',\n label: this.transloco.translate(\n 'delegations.form.requiresApproval',\n ),\n cssClass: `${this.fullWidth} mt-2`,\n order: 7,\n disabled: this.readonly(),\n }),\n ],\n },\n ],\n }));\n\n constructor() {\n effect(() => {\n const editing = this.delegationForEdit();\n const d = this.detail();\n if (editing && d && d.row.delegationId === editing.delegationId) {\n this.delegationFormControl.patchValue({\n delegateFrom: this.mapPartyToUserValue(d.row.delegator),\n delegateTo: d.row.delegatedUser,\n description: '',\n delegateFromDateTime: d.row.startsAtUtc,\n delegateToDateTime: d.row.endsAtUtc,\n delegationDaysType: d.row.dayRuleMode,\n specificDays: d.row.specificDays ?? [],\n requiresApproval: d.row.approval?.requiresApproval ?? false,\n });\n this.scope.set({\n grants: d.scope?.grants ?? [],\n metadata: d.scope?.metadata ?? {},\n });\n } else if (!editing) {\n this.delegationFormControl.reset({\n delegateFrom: null,\n delegationDaysType: 'FullRange',\n requiresApproval: true,\n });\n this.scope.set(EMPTY_SCOPE);\n }\n });\n\n effect(() => {\n const currentDelegator = this.currentDelegator();\n if (this.adminMode() || this.delegationForEdit() || !currentDelegator) {\n return;\n }\n\n const existingDelegator = extractUserId(\n this.delegationFormControl.getRawValue()?.delegateFrom,\n );\n if (existingDelegator === currentDelegator.id) {\n return;\n }\n\n this.delegationFormControl.patchValue({\n delegateFrom: currentDelegator,\n });\n });\n }\n\n ngOnInit(): void {\n const editing = this.delegationForEdit();\n if (editing) {\n this.facade.getDetail(editing.delegationId, this.adminMode());\n }\n }\n\n protected readonly canSubmit = computed(\n () =>\n !this.readonly() &&\n this.scope().grants.length > 0 &&\n !!this.scopePreview() &&\n this.scopePreview()!.isValid &&\n !this.isPreviewingScope(),\n );\n\n onSubmit(): void {\n if (this.readonly() || !this.delegationFormControl.valid) return;\n if (!this.canSubmit()) return;\n\n const value = this.delegationFormControl.getRawValue();\n const scope = this.scope();\n const delegationDaysType = (value?.delegationDaysType ?? 'FullRange') as\n | 'FullRange'\n | 'SpecificDays';\n const specificDays =\n delegationDaysType === 'SpecificDays' ? (value?.specificDays ?? []) : [];\n const description = value?.description;\n const delegateFromDateTime = value?.delegateFromDateTime;\n const delegateToDateTime = value?.delegateToDateTime;\n const requiresApproval = !!value?.requiresApproval;\n const delegatedUserId = extractUserId(value?.delegateTo) ?? '';\n const selectedDelegatorId = this.selectedDelegatorId();\n\n const editing = this.delegationForEdit();\n if (this.adminMode()) {\n if (!selectedDelegatorId || !delegatedUserId) {\n return;\n }\n\n const base: AdminCreateDelegationV2Request = {\n delegatorUserId: selectedDelegatorId,\n delegatedUserId,\n description,\n delegateFromDateTime,\n delegateToDateTime,\n delegationDaysType,\n specificDays,\n requiresApproval,\n scope,\n };\n\n if (editing) {\n const latestRowVersion =\n this.detail()?.row?.rowVersion ?? editing.rowVersion;\n const req: AdminUpdateDelegationV2Request = {\n ...base,\n rowVersion: latestRowVersion,\n };\n this.facade.updateV2(editing.delegationId, req, true).subscribe({\n next: () => this.ref.close(true),\n });\n return;\n }\n\n this.facade.createV2(base, true).subscribe({\n next: () => this.ref.close(true),\n });\n return;\n }\n\n const base: CreateDelegationV2Request = {\n delegateFrom: null,\n delegateTo: delegatedUserId,\n description,\n delegateFromDateTime,\n delegateToDateTime,\n delegationDaysType,\n specificDays,\n requiresApproval,\n scope,\n };\n\n if (editing) {\n // Prefer the freshest rowVersion from the loaded detail (the form loads\n // detail on open); fall back to the list row only if detail is absent.\n const latestRowVersion =\n this.detail()?.row?.rowVersion ?? editing.rowVersion;\n const req: UpdateDelegationV2Request = {\n ...base,\n rowVersion: latestRowVersion,\n };\n this.facade.updateV2(editing.delegationId, req).subscribe({\n next: () => this.ref.close(true),\n });\n } else {\n const req: CreateDelegationV2Request = base;\n this.facade.createV2(req).subscribe({\n next: () => this.ref.close(true),\n });\n }\n }\n\n private mapPartyToUserValue(\n party: DelegationRow['delegator'],\n ): DelegationFormUserValue {\n return {\n id: party.userId,\n userId: party.userId,\n displayName: party.displayName,\n userName: party.email || party.displayName,\n email: party.email ?? null,\n photo: null,\n isExternal: false,\n };\n }\n}\n","<ng-container *transloco=\"let t\">\n <div\n [class]=\"\n 'flex h-full min-h-0 min-w-0 flex-col overflow-hidden ' +\n modal.contentClass\n \"\n >\n <div\n class=\"grid min-h-0 flex-1 gap-4 overflow-y-auto p-4 max-[640px]:p-3 lg:grid-cols-[minmax(0,28rem)_minmax(0,1fr)] lg:items-start\"\n >\n <section\n class=\"flex flex-col gap-4 rounded-3xl border border-surface-200 bg-surface-0 p-4 shadow-xs lg:sticky lg:top-0\"\n >\n <mt-dynamic-form\n [formConfig]=\"formConfig()\"\n [formControl]=\"delegationFormControl\"\n />\n </section>\n\n <section\n class=\"flex min-h-0 flex-col gap-4 rounded-3xl border border-surface-200 bg-surface-0 p-4 shadow-xs\"\n >\n <div class=\"flex flex-col gap-2\">\n <div\n class=\"inline-flex w-fit items-center gap-2 rounded-full bg-primary-50 px-3 py-1 text-xs font-medium text-primary-700\"\n >\n <span class=\"inline-flex size-2 rounded-full bg-primary-500\"></span>\n {{ t(\"delegations.scope.previewTitle\") }}\n </div>\n <h3 class=\"text-xl font-semibold text-surface-900\">\n {{ t(\"delegations.scope.permissionsTitle\") }}\n </h3>\n @if (adminMode() && !showScopePicker()) {\n <p class=\"text-sm text-surface-500\">\n {{ t(\"delegations.form.selectDelegatorFirst\") }}\n </p>\n } @else {\n <p class=\"text-sm text-surface-500\">\n {{ t(\"delegations.scope.noSelection\") }}\n </p>\n }\n </div>\n\n @if (showScopePicker()) {\n <mt-scope-picker\n [(scope)]=\"scope\"\n [readonly]=\"readonly()\"\n [adminMode]=\"adminMode()\"\n [delegatorUserId]=\"selectedDelegatorId()\"\n ></mt-scope-picker>\n } @else {\n <div\n class=\"flex min-h-72 flex-col items-center justify-center gap-4 rounded-3xl border border-dashed border-surface-300 bg-surface-50 px-6 py-8 text-center\"\n >\n <div\n class=\"flex size-18 items-center justify-center rounded-3xl bg-surface-0 text-primary shadow-sm\"\n >\n <svg\n viewBox=\"0 0 64 64\"\n class=\"size-10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n aria-hidden=\"true\"\n >\n <rect\n x=\"10\"\n y=\"12\"\n width=\"44\"\n height=\"40\"\n rx=\"12\"\n class=\"fill-primary/10 stroke-primary/35\"\n stroke-width=\"2\"\n />\n <path\n d=\"M22 28H42\"\n class=\"stroke-primary\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M22 36H34\"\n class=\"stroke-primary/70\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n />\n <circle\n cx=\"45\"\n cy=\"20\"\n r=\"7\"\n class=\"fill-surface-0 stroke-primary\"\n stroke-width=\"2\"\n />\n <path\n d=\"M45 17V23\"\n class=\"stroke-primary\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n <path\n d=\"M42 20H48\"\n class=\"stroke-primary\"\n stroke-width=\"2.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </div>\n <div class=\"space-y-1\">\n <p class=\"text-base font-medium text-surface-900\">\n {{ t(\"delegations.scope.permissionsTitle\") }}\n </p>\n <p class=\"text-sm text-surface-500\">\n {{ t(\"delegations.form.selectDelegatorFirst\") }}\n </p>\n </div>\n </div>\n }\n </section>\n </div>\n\n <div [class]=\"modal.footerClass\">\n <mt-button\n [label]=\"t('delegations.common.cancel')\"\n variant=\"outlined\"\n (click)=\"ref.close()\"\n styleClass=\"w-full sm:w-auto\"\n />\n @if (!readonly()) {\n <mt-button\n [label]=\"\n delegationForEdit()\n ? t('delegations.common.update')\n : t('delegations.common.create')\n \"\n [loading]=\"isSaving()\"\n [disabled]=\"!delegationFormControl.valid || !canSubmit()\"\n (click)=\"onSubmit()\"\n styleClass=\"w-full sm:w-auto\"\n />\n }\n </div>\n </div>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n OnInit,\n signal,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { EntityPreview } from '@masterteam/components/entities';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport type {\n DelegationDisplayValue,\n DelegationParty,\n DelegationScopeAction,\n DelegationScopeTarget,\n} from '../../../store/delegations/delegations.model';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\nimport {\n formatDelegationActionLabel,\n formatDelegationScopeSummary,\n formatDelegationTargetLabel,\n} from '../delegation-scope-display';\nimport { toDelegationUserEntity } from '../delegation-user-entity';\n\ntype DetailTab = 'overview' | 'scope';\n\n/**\n * Read-only drawer that shows the full `DelegationDetail` ({ row, scope, status }).\n */\n@Component({\n selector: 'mt-delegation-detail-drawer',\n standalone: true,\n imports: [\n CommonModule,\n Button,\n EntityPreview,\n SkeletonModule,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './delegation-detail-drawer.html',\n styleUrls: ['./delegation-detail-drawer.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationDetailDrawer implements OnInit {\n readonly delegationId = input.required<number>();\n readonly adminMode = input<boolean>(false);\n\n private readonly facade = inject(DelegationsFacade);\n private readonly transloco = inject(TranslocoService);\n protected readonly ref: ModalRef = inject(ModalRef);\n\n protected readonly tabs: { key: DetailTab; i18n: string }[] = [\n { key: 'overview', i18n: 'delegations.action.view' },\n { key: 'scope', i18n: 'delegations.column.scopeSummary' },\n ];\n protected readonly activeTab = signal<DetailTab>('overview');\n\n protected readonly isLoading = this.facade.isLoadingDetail;\n protected readonly detail = this.facade.detail;\n protected readonly row = computed(() => this.detail()?.row ?? null);\n\n ngOnInit(): void {\n this.facade.getDetail(this.delegationId(), this.adminMode());\n }\n\n protected setTab(tab: DetailTab): void {\n this.activeTab.set(tab);\n }\n\n protected approvalLabel(): string {\n const s = this.row()?.approval?.approvalStatus ?? 'NotRequired';\n return this.transloco.translate(`delegations.approvalStatus.${s}`);\n }\n\n protected getScopeTargetLabel(target: DelegationScopeTarget): string {\n return formatDelegationTargetLabel(target, this.transloco.getActiveLang());\n }\n\n protected getScopeActionLabel(action: DelegationScopeAction): string {\n return formatDelegationActionLabel(action, this.transloco.getActiveLang());\n }\n\n protected formatScopeSummary(\n summary: DelegationDisplayValue | undefined,\n ): string {\n return formatDelegationScopeSummary(\n summary,\n this.transloco.getActiveLang(),\n );\n }\n\n protected userEntity(party: DelegationParty, label?: string) {\n return toDelegationUserEntity(party, { label });\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"flex flex-col h-full\">\n <!-- Tabs -->\n <div class=\"flex border-b border-gray-200 px-4\">\n @for (tab of tabs; track $index) {\n <button\n type=\"button\"\n class=\"px-3 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\n [class.border-primary]=\"activeTab() === tab.key\"\n [class.text-primary]=\"activeTab() === tab.key\"\n [class.border-transparent]=\"activeTab() !== tab.key\"\n [class.text-gray-500]=\"activeTab() !== tab.key\"\n (click)=\"setTab(tab.key)\"\n >\n {{ t(tab.i18n) }}\n </button>\n }\n </div>\n\n <!-- Body -->\n <div class=\"flex-1 overflow-y-auto p-4\">\n @if (isLoading() && !detail()) {\n <p-skeleton height=\"2rem\" class=\"mb-3\"></p-skeleton>\n <p-skeleton height=\"6rem\" class=\"mb-3\"></p-skeleton>\n <p-skeleton height=\"6rem\"></p-skeleton>\n } @else if (detail(); as d) {\n @if (activeTab() === \"overview\") {\n <div class=\"flex flex-col gap-4\">\n <div class=\"flex items-center justify-between gap-3\">\n <div class=\"flex items-center gap-3 min-w-0\">\n <mt-entity-preview\n [data]=\"\n userEntity(\n d.row.delegator,\n t('delegations.column.delegatorName')\n )\n \"\n ></mt-entity-preview>\n </div>\n <mt-delegation-status-chip\n [status]=\"d.status.effectiveStatus\"\n ></mt-delegation-status-chip>\n </div>\n\n <div class=\"grid grid-cols-2 gap-4\">\n <div class=\"flex flex-col\">\n <mt-entity-preview\n [data]=\"\n userEntity(\n d.row.delegatedUser,\n t('delegations.column.delegatedTo')\n )\n \"\n ></mt-entity-preview>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.approval\") }}\n </span>\n <span class=\"text-sm text-gray-900\">{{ approvalLabel() }}</span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.startDate\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.startsAtUtc | date: \"medium\" }}\n </span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.endDate\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.endsAtUtc | date: \"medium\" }}\n </span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.form.timeZone\") }}\n </span>\n <span class=\"text-sm text-gray-900\">{{\n d.row.timeZoneId\n }}</span>\n </div>\n <div class=\"flex flex-col\">\n <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.days\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n @if (d.row.dayRuleMode === \"FullRange\") {\n {{ t(\"delegations.form.fullRange\") }}\n } @else {\n {{ d.row.specificDays.join(\", \") }}\n }\n </span>\n </div>\n </div>\n\n @if (d.row.cancellation?.cancellationReason) {\n <div\n class=\"rounded-md border border-gray-200 bg-surface-50 p-3 text-sm text-gray-800\"\n >\n <div class=\"font-medium\">\n {{ t(\"delegations.form.cancellationReason\") }}\n </div>\n <div>{{ d.row.cancellation.cancellationReason }}</div>\n </div>\n }\n </div>\n } @else {\n <!-- Scope tab -->\n <div class=\"flex flex-col gap-3\">\n <div class=\"text-sm text-gray-900\">\n {{\n formatScopeSummary(d.row.scopeSummary) ||\n t(\"delegations.column.scopeSummary\")\n }}\n </div>\n <div class=\"flex flex-col gap-2\">\n @for (grant of d.scope.grants; track $index) {\n <div\n class=\"border border-gray-200 rounded-md px-3 py-2 flex flex-col gap-1\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <span class=\"text-sm font-medium text-gray-900\">\n {{ getScopeTargetLabel(grant.target) }}\n </span>\n <span class=\"text-xs text-gray-500\">\n {{ grant.target.targetType }}\n </span>\n </div>\n <span\n class=\"text-xs px-2 py-0.5 rounded-md bg-primary-50 text-primary w-fit\"\n >\n {{ getScopeActionLabel(grant.action) }}\n </span>\n </div>\n }\n @if (d.scope.grants.length === 0) {\n <p class=\"text-xs text-gray-500\">\n {{ t(\"delegations.scope.noSelection\") }}\n </p>\n }\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Footer -->\n <div\n class=\"border-t border-gray-200 px-4 py-3 flex items-center justify-end\"\n >\n <mt-button\n [label]=\"t('delegations.common.cancel')\"\n variant=\"outlined\"\n (click)=\"ref.close()\"\n ></mt-button>\n </div>\n </div>\n</ng-container>\n","import { CommonModule, Location } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n linkedSignal,\n OnInit,\n signal,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\nimport { Card } from '@masterteam/components/card';\nimport { ModalService } from '@masterteam/components/modal';\nimport { Page } from '@masterteam/components/page';\nimport { Tabs } from '@masterteam/components/tabs';\nimport { Table } from '@masterteam/components/table';\nimport type {\n ColumnDef,\n TableAction,\n TableStatusMapValue,\n} from '@masterteam/components/table';\nimport { finalize } from 'rxjs';\nimport {\n DelegationAllowedAction,\n DelegationEffectiveStatus,\n DelegationListQuery,\n DelegationRow,\n} from '../../../store/delegations/delegations.model';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport DelegationForm from '../delegation-form/delegation-form';\nimport DelegationDetailDrawer from '../delegation-detail-drawer/delegation-detail-drawer';\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\nimport RejectDelegationDialog from '../reject-delegation-dialog/reject-delegation-dialog';\nimport { toDelegationUserValue } from '../delegation-user-entity';\n\ntype DelegationTab = 'my' | 'assigned' | 'approvals';\n\ntype DelegationTableRow = DelegationRow & {\n listedUser: ReturnType<typeof toDelegationUserValue>;\n delegatorUser: ReturnType<typeof toDelegationUserValue>;\n delegatedToUser: ReturnType<typeof toDelegationUserValue>;\n daysText: string;\n};\n\n/**\n * Delegations portal page (doc 02, 09): two lists — My Delegations (current user\n * is delegator) and Delegated To Me (current user is delegate). Rows render only\n * the BE-returned `allowedActions`; status comes from `effectiveStatus`.\n */\n@Component({\n selector: 'mt-delegations-list',\n standalone: true,\n imports: [\n CommonModule,\n Breadcrumb,\n Card,\n Page,\n Table,\n Tabs,\n TranslocoDirective,\n ],\n templateUrl: './delegations-list.html',\n styleUrl: './delegations-list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationsList implements OnInit {\n /**\n * Admin/control-panel breadcrumb. Hidden on the client self-service surface\n * (its links point at /control-panel/*). Bound from route data via\n * `withComponentInputBinding()` — admin leaves it default; client passes\n * `data: { showBreadcrumb: false }`.\n */\n readonly showBreadcrumb = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * Admin routes can embed the list under `mt-delegations`, which already owns\n * the page title, back button, and route tabs.\n */\n readonly showPageShell = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n\n /**\n * Admin-managed surface: the create/edit form also collects the Delegator /\n * From user (admin creates a delegation between two users). Client\n * self-service leaves this false. Bound from route data via\n * `withComponentInputBinding()` — admin passes `data: { adminMode: true }`.\n */\n readonly adminMode = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n readonly surfaceTitleKey = input<string>('delegations.title');\n readonly assignedTabLabelKey = input<string>('delegations.delegatedToMe');\n readonly assignedDecisionTab = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n readonly assignedEmptyStateKey = input<string>('delegations.empty.assigned');\n readonly assignedStatus = input<DelegationEffectiveStatus | null>(null);\n readonly showApprovalTab = input<boolean, unknown>(true, {\n transform: booleanAttribute,\n });\n readonly approvalTabLabelKey = input<string>('delegations.tabs.approvals');\n readonly approvalEmptyStateKey = input<string>('delegations.empty.pending');\n readonly approvalStatus = input<DelegationEffectiveStatus>('PendingApproval');\n\n private readonly facade = inject(DelegationsFacade);\n private readonly location = inject(Location);\n private readonly modal = inject(ModalService);\n private readonly transloco = inject(TranslocoService);\n\n protected readonly breadcrumbItems = linkedSignal(() => [\n {\n label: '',\n icon: 'general.home-line',\n routerLink: '/control-panel/workspaces',\n },\n {\n label: this.transloco.translate('product-settings.product-settings'),\n routerLink: '/control-panel/product-settings',\n },\n {\n label: this.transloco.translate('delegations.title'),\n },\n ]);\n\n protected readonly activeTab = signal<DelegationTab>('my');\n protected readonly surfaceTitle = computed(() =>\n this.transloco.translate(this.surfaceTitleKey()),\n );\n protected readonly tabs = computed(() => {\n const tabs = [\n {\n value: 'my' as DelegationTab,\n label: this.translateTab('delegations.myDelegations', 'My Delegations'),\n },\n {\n value: 'assigned' as DelegationTab,\n label: this.assignedDecisionTab()\n ? `${this.translateTab('delegations.action.approve', 'Approve')} / ${this.translateTab('delegations.action.reject', 'Reject')}`\n : this.translateTab(this.assignedTabLabelKey(), 'Delegated To Me'),\n },\n ];\n\n if (this.showApprovalTab()) {\n tabs.push({\n value: 'approvals' as DelegationTab,\n label: this.translateTab(this.approvalTabLabelKey(), 'Approvals'),\n });\n }\n\n return tabs;\n });\n\n protected readonly isLoading = computed(() =>\n this.adminMode()\n ? this.facade.isLoadingAdmin()\n : this.activeTab() === 'my'\n ? this.facade.isLoadingMy()\n : this.facade.isLoadingAssigned(),\n );\n protected readonly rows = computed(() =>\n this.adminMode()\n ? this.facade.adminItems()\n : this.activeTab() === 'my'\n ? this.facade.myItems()\n : this.facade.assignedItems(),\n );\n protected readonly tableRows = computed<DelegationTableRow[]>(() =>\n this.rows().map((row) => ({\n ...row,\n listedUser: toDelegationUserValue(this.getListedParty(row)),\n delegatorUser: toDelegationUserValue(row.delegator),\n delegatedToUser: toDelegationUserValue(row.delegatedUser),\n daysText: this.formatDays(row),\n })),\n );\n protected readonly emptyStateKey = computed(() =>\n this.adminMode()\n ? 'components.table.no-data-found'\n : this.activeTab() === 'my'\n ? 'delegations.empty.my'\n : this.activeTab() === 'approvals'\n ? this.approvalEmptyStateKey()\n : this.assignedEmptyStateKey(),\n );\n\n protected readonly tableActions = computed<TableAction[]>(() => [\n {\n icon: 'general.plus',\n label: this.transloco.translate('delegations.action.create'),\n color: 'primary',\n action: () => this.openForm(null),\n },\n ]);\n\n protected readonly rowActions = signal<TableAction[]>([\n {\n icon: 'general.eye',\n tooltip: this.transloco.translate('delegations.action.view'),\n color: 'primary',\n variant: 'outlined',\n action: (row: DelegationRow) => this.viewDetails(row),\n hidden: (row: DelegationRow) => !this.has(row, 'View'),\n },\n {\n icon: 'custom.pencil',\n tooltip: this.transloco.translate('delegations.action.edit'),\n color: 'primary',\n action: (row: DelegationRow) => this.openForm(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Edit'),\n },\n {\n icon: 'general.check',\n tooltip: this.transloco.translate('delegations.action.approve'),\n color: 'primary',\n action: (row: DelegationRow) => this.approve(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Approve'),\n loading: (row: DelegationRow) =>\n this.busyIds().includes(`approve:${row.delegationId}`),\n confirmation: { type: 'popup' },\n },\n {\n icon: 'general.x-close',\n tooltip: this.transloco.translate('delegations.action.reject'),\n color: 'danger',\n variant: 'outlined',\n // Opens a dialog that collects a required reason (no inline popup confirm).\n action: (row: DelegationRow) => this.reject(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Reject'),\n },\n {\n icon: 'general.trash-01',\n tooltip: this.transloco.translate('delegations.action.cancel'),\n color: 'danger',\n variant: 'outlined',\n action: (row: DelegationRow) => this.cancel(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Cancel'),\n loading: (row: DelegationRow) =>\n this.busyIds().includes(`cancel:${row.delegationId}`),\n confirmation: { type: 'popup', confirmationType: 'delete' },\n },\n {\n icon: 'arrow.arrow-right',\n tooltip: this.transloco.translate('delegations.action.startSession'),\n color: 'primary',\n action: (row: DelegationRow) => this.startSession(row),\n hidden: (row: DelegationRow) => !this.has(row, 'StartSession'),\n },\n ]);\n\n private readonly statusColors: Record<DelegationEffectiveStatus, string> = {\n Active: '#047857',\n Scheduled: '#1d4ed8',\n PendingApproval: '#b45309',\n InactiveToday: '#1d4ed8',\n Expired: '#4b5563',\n Rejected: '#b91c1c',\n Cancelled: '#4b5563',\n };\n\n protected readonly statusMap = linkedSignal<\n Record<DelegationEffectiveStatus, TableStatusMapValue>\n >(() => ({\n Active: {\n display: this.transloco.translate('delegations.status.active'),\n color: this.statusColors.Active,\n },\n Scheduled: {\n display: this.transloco.translate('delegations.status.scheduled'),\n color: this.statusColors.Scheduled,\n },\n PendingApproval: {\n display: this.transloco.translate('delegations.status.pendingApproval'),\n color: this.statusColors.PendingApproval,\n },\n InactiveToday: {\n display: this.transloco.translate('delegations.status.inactiveToday'),\n color: this.statusColors.InactiveToday,\n },\n Expired: {\n display: this.transloco.translate('delegations.status.expired'),\n color: this.statusColors.Expired,\n },\n Rejected: {\n display: this.transloco.translate('delegations.status.rejected'),\n color: this.statusColors.Rejected,\n },\n Cancelled: {\n display: this.transloco.translate('delegations.status.cancelled'),\n color: this.statusColors.Cancelled,\n },\n }));\n\n protected readonly tableColumns = linkedSignal<ColumnDef[]>(() => {\n const baseColumns: ColumnDef[] = [\n {\n key: 'effectiveStatus',\n label: this.transloco.translate('delegations.column.status'),\n type: 'status',\n statusMap: this.statusMap(),\n },\n {\n key: 'startsAtUtc',\n label: this.transloco.translate('delegations.column.startDate'),\n type: 'dateTime',\n },\n {\n key: 'endsAtUtc',\n label: this.transloco.translate('delegations.column.endDate'),\n type: 'dateTime',\n },\n {\n key: 'createdAtUtc',\n label: this.transloco.translate('delegations.column.createdDate'),\n type: 'dateTime',\n },\n {\n key: 'daysText',\n label: this.transloco.translate('delegations.column.days'),\n type: 'text',\n },\n ];\n\n if (this.adminMode()) {\n return [\n {\n key: 'delegatorUser',\n label: this.transloco.translate('delegations.column.delegatorName'),\n type: 'user',\n },\n {\n key: 'delegatedToUser',\n label: this.transloco.translate('delegations.column.delegatedTo'),\n type: 'user',\n },\n ...baseColumns,\n ];\n }\n\n return [\n {\n key: 'listedUser',\n label: this.transloco.translate(\n this.activeTab() === 'my'\n ? 'delegations.column.delegatedTo'\n : 'delegations.column.delegatorName',\n ),\n type: 'user',\n },\n ...baseColumns,\n ];\n });\n\n private readonly busyIds = signal<string[]>([]);\n\n private readonly weekdayKeys = [\n 'sunday',\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thursday',\n 'friday',\n 'saturday',\n ] as const;\n\n ngOnInit(): void {\n this.loadCurrentTab();\n }\n\n protected switchTab(tab: DelegationTab): void {\n this.activeTab.set(tab);\n this.loadCurrentTab();\n }\n\n protected goBack(): void {\n this.location.back();\n }\n\n private loadCurrentTab(\n query: DelegationListQuery = { page: 1, pageSize: 25 },\n ): void {\n if (this.adminMode()) {\n this.facade.getAdmin(query);\n return;\n }\n\n if (this.activeTab() === 'my') {\n this.facade.getMy(query);\n } else if (this.activeTab() === 'approvals') {\n this.facade.getAssigned({\n ...query,\n status: query.status ?? this.approvalStatus(),\n });\n } else {\n this.facade.getAssigned({\n ...query,\n status: query.status ?? this.assignedStatus() ?? undefined,\n });\n }\n }\n\n private reloadCurrentTab(): void {\n this.loadCurrentTab();\n }\n\n protected has(row: DelegationRow, action: DelegationAllowedAction): boolean {\n return row.allowedActions?.includes(action) ?? false;\n }\n\n protected formatDays(row: DelegationRow): string {\n if (row.dayRuleMode === 'SpecificDays' && row.specificDays?.length) {\n return row.specificDays\n .filter((d) => d >= 0 && d < this.weekdayKeys.length)\n .map((d) =>\n this.transloco.translate(`delegations.days.${this.weekdayKeys[d]}`),\n )\n .join(', ');\n }\n return this.transloco.translate('delegations.form.fullRange');\n }\n\n protected getListedParty(row: DelegationRow) {\n return this.activeTab() === 'my' ? row.delegatedUser : row.delegator;\n }\n\n private translateTab(\n key: string | null | undefined,\n fallback: string,\n ): string {\n if (!key) return fallback;\n\n const translated = this.transloco.translate(key);\n if (typeof translated !== 'string') return fallback;\n\n const label = translated.trim();\n return label && label !== key ? label : fallback;\n }\n\n private viewDetails(row: DelegationRow): void {\n this.modal.openModal(DelegationDetailDrawer, 'drawer', {\n header: this.transloco.translate('delegations.action.view'),\n styleClass:\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]',\n position: 'end',\n appendTo: 'page-content',\n dismissableMask: true,\n dismissible: true,\n inputValues: {\n delegationId: row.delegationId,\n adminMode: this.adminMode(),\n },\n });\n }\n\n private openForm(row: DelegationRow | null): void {\n const ref = this.modal.openModal(\n DelegationForm,\n row ? 'drawer' : 'dialog',\n {\n header: this.transloco.translate(\n row ? 'delegations.action.edit' : 'delegations.action.create',\n ),\n styleClass: row\n ? '!absolute !shadow-none !w-full !max-w-full sm:!w-[56rem] xl:!w-[68rem]'\n : '!w-[min(98vw,88rem)] !max-w-[98vw] !h-[min(94vh,56rem)] !max-h-[94vh] !overflow-hidden',\n position: row ? 'end' : '',\n appendTo: row ? 'page-content' : 'body',\n dismissableMask: true,\n dismissible: true,\n inputValues: {\n delegationForEdit: row,\n readonly: false,\n adminMode: this.adminMode(),\n },\n },\n );\n ref.onClose.subscribe((saved: boolean) => {\n if (saved) this.reloadCurrentTab();\n });\n }\n\n private approve(row: DelegationRow): void {\n this.mark(`approve:${row.delegationId}`, true);\n this.facade\n .approve(row.delegationId, { rowVersion: row.rowVersion })\n .pipe(finalize(() => this.mark(`approve:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private reject(row: DelegationRow): void {\n const ref = this.modal.openModal(RejectDelegationDialog, 'dialog', {\n header: this.transloco.translate('delegations.action.reject'),\n styleClass: '!w-[min(96vw,30rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row },\n });\n ref.onClose.subscribe((rejected: boolean) => {\n if (rejected) this.reloadCurrentTab();\n });\n }\n\n private cancel(row: DelegationRow): void {\n this.mark(`cancel:${row.delegationId}`, true);\n this.facade\n .cancel(row.delegationId, row.rowVersion, this.adminMode())\n .pipe(finalize(() => this.mark(`cancel:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private startSession(row: DelegationRow): void {\n const ref = this.modal.openModal(StartSessionDialog, 'dialog', {\n header: this.transloco.translate('delegations.action.startSession'),\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row, intent: 'start' },\n });\n ref.onClose.subscribe((started: boolean) => {\n if (started) this.reloadCurrentTab();\n });\n }\n\n private mark(key: string, on: boolean): void {\n this.busyIds.update((ids) =>\n on ? [...ids, key] : ids.filter((id) => id !== key),\n );\n }\n}\n","<ng-container *transloco=\"let t\">\n <ng-template #tableContent>\n <div class=\"flex flex-col gap-4\">\n @if (!adminMode()) {\n <mt-tabs\n mode=\"underline\"\n [(active)]=\"activeTab\"\n [options]=\"tabs()\"\n fluid\n (onChange)=\"switchTab($event)\"\n ></mt-tabs>\n }\n\n <mt-table\n [data]=\"tableRows()\"\n [columns]=\"tableColumns()\"\n [actions]=\"tableActions()\"\n [rowActions]=\"rowActions()\"\n [loading]=\"isLoading()\"\n [noCard]=\"true\"\n >\n <ng-template #empty>\n <p class=\"text-sm text-surface-500\">\n {{ t(emptyStateKey()) }}\n </p>\n </ng-template>\n </mt-table>\n </div>\n </ng-template>\n\n <ng-template #adminContent>\n <div class=\"flex min-h-full flex-col gap-4\">\n @if (showBreadcrumb()) {\n <mt-breadcrumb [items]=\"breadcrumbItems()\"></mt-breadcrumb>\n }\n <ng-container *ngTemplateOutlet=\"tableContent\"></ng-container>\n </div>\n </ng-template>\n\n @if (adminMode()) {\n @if (showPageShell()) {\n <mt-page\n [title]=\"surfaceTitle()\"\n [avatarIcon]=\"'custom.hierarchy-structure'\"\n [contentClass]=\"'max-[1025px]:p-4 max-[640px]:p-3'\"\n [avatarStyle]=\"{\n '--p-avatar-background': 'var(--p-indigo-50)',\n '--p-avatar-color': 'var(--p-indigo-700)',\n }\"\n (backButtonClick)=\"goBack()\"\n backButton\n >\n <ng-container *ngTemplateOutlet=\"adminContent\"></ng-container>\n </mt-page>\n } @else {\n <ng-container *ngTemplateOutlet=\"adminContent\"></ng-container>\n }\n } @else {\n <div class=\"flex h-full flex-col gap-4 p-4\">\n <mt-card [title]=\"surfaceTitle()\">\n <ng-container *ngTemplateOutlet=\"tableContent\"></ng-container>\n </mt-card>\n </div>\n }\n</ng-container>\n","import { HttpErrorResponse, HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, throwError } from 'rxjs';\nimport { DelegationSessionFacade } from '../store/session/delegation-session.facade';\nimport type { DelegationSessionInvalidationReason } from '../store/session/delegation-session.model';\n\n/**\n * Endpoints that must NEVER carry the `app-delegation` header.\n * Starting a delegated session uses only the normal `Authorization` token\n * (doc 05). All other `identity/delegations` management calls are normal\n * (non-delegated) actions too, so the whole namespace is excluded.\n */\nconst EXCLUDE = /\\bidentity\\/delegations\\b/i;\n\nconst SESSION_RELATED_MARKERS = [\n 'Delegation.Token.',\n 'Delegation.Session.ActorRequired',\n 'Delegation.Session.AuthSessionRequired',\n 'Delegation.Authorization.SessionMismatch',\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction getStringField(value: unknown, field: string): string | null {\n if (!isRecord(value)) {\n return null;\n }\n\n const fieldValue = value[field];\n return typeof fieldValue === 'string' ? fieldValue : null;\n}\n\nfunction getField(value: unknown, field: string): unknown {\n return isRecord(value) ? value[field] : null;\n}\n\nfunction readDelegationErrorText(error: HttpErrorResponse): string {\n const body = error.error;\n const errors = getField(body, 'errors');\n\n return [\n getStringField(body, 'message'),\n getStringField(body, 'code'),\n getStringField(body, 'error'),\n getStringField(errors, 'code'),\n getStringField(errors, 'message'),\n typeof body === 'string' ? body : null,\n error.message,\n ]\n .filter((value): value is string => !!value)\n .join(' ');\n}\n\nfunction isSessionInvalidationText(errorText: string): boolean {\n if (SESSION_RELATED_MARKERS.some((marker) => errorText.includes(marker))) {\n return true;\n }\n\n const normalized = errorText.toLowerCase();\n if (\n !normalized.includes('delegated session') &&\n !normalized.includes('delegation scope changed') &&\n !normalized.includes('delegation changed')\n ) {\n return false;\n }\n\n return [\n 'not valid',\n 'could not be verified',\n 'does not match',\n 'scope changed',\n 'changed after the session started',\n 'start the delegated session again',\n 'restart the delegation session',\n ].some((marker) => normalized.includes(marker));\n}\n\nfunction resolveInvalidationReason(\n error: HttpErrorResponse,\n): DelegationSessionInvalidationReason | null {\n const errorText = readDelegationErrorText(error);\n if (!isSessionInvalidationText(errorText)) {\n return null;\n }\n\n const normalized = errorText.toLowerCase();\n\n if (\n errorText.includes('SessionMismatch') ||\n normalized.includes('does not match')\n ) {\n return 'SessionMismatch';\n }\n\n if (\n errorText.includes('ScopeChanged') ||\n errorText.includes('VersionChanged') ||\n normalized.includes('scope changed') ||\n normalized.includes('changed after the session started')\n ) {\n return 'ScopeChanged';\n }\n\n return 'TokenInvalid';\n}\n\n/**\n * Adds `app-delegation: Bearer <token>` to outgoing requests while a delegated\n * session is active. Register AFTER the gateway-auth interceptor (so the normal\n * `Authorization` header is set first) and BEFORE the message interceptor.\n */\nexport const appDelegationInterceptor: HttpInterceptorFn = (req, next) => {\n if (EXCLUDE.test(req.url)) {\n return next(req);\n }\n\n const facade = inject(DelegationSessionFacade);\n const token = facade.token();\n if (!token) {\n return next(req);\n }\n\n return next(\n req.clone({ setHeaders: { 'app-delegation': `Bearer ${token}` } }),\n ).pipe(\n catchError((error: unknown) => {\n if (error instanceof HttpErrorResponse && error.status === 403) {\n const reason = resolveInvalidationReason(error);\n if (reason) {\n facade.endSession(reason);\n facade.loadCandidates();\n }\n }\n\n return throwError(() => error);\n }),\n );\n};\n","// store/index.ts\nexport * from './delegations';\nexport * from './session';\n","// Runtime UI surfaces — projected into host topbars + opened via ModalService.\nexport { TopbarDelegationMenu } from './lib/delegations/topbar-delegation-menu/topbar-delegation-menu';\nexport { DelegationStatusChip } from './lib/delegations/delegation-status-chip/delegation-status-chip';\nexport { default as StartSessionDialog } from './lib/delegations/start-session-dialog/start-session-dialog';\nexport { default as RejectDelegationDialog } from './lib/delegations/reject-delegation-dialog/reject-delegation-dialog';\n\n// Management UI — portal page (My Delegations / Delegated To Me) + form + detail drawer.\nexport { default as Delegations } from './lib/delegations/delegations';\nexport { default as DelegationsList } from './lib/delegations/delegations-list/delegations-list';\nexport { default as DelegationForm } from './lib/delegations/delegation-form/delegation-form';\nexport { default as DelegationDetailDrawer } from './lib/delegations/delegation-detail-drawer/delegation-detail-drawer';\nexport { ScopePicker } from './lib/delegations/delegation-form/scope-picker/scope-picker';\n\n// HTTP\nexport { appDelegationInterceptor } from './interceptors/app-delegation.interceptor';\n\n// Store (models, actions, state, facades — both delegations and session)\nexport * from './store';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BASE","__decorate","isRecord","normalizeGrant","EMPTY_SCOPE","i1"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,MAAM,aAAa,GAAoD;AACrE,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,2BAA2B;AACpC,QAAA,UAAU,EAAE,uCAAuC;AACpD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,OAAO,EAAE,8BAA8B;AACvC,QAAA,UAAU,EAAE,0CAA0C;AACvD,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,oCAAoC;AAC7C,QAAA,UAAU,EAAE,wCAAwC;AACrD,KAAA;AACD,IAAA,aAAa,EAAE;AACb,QAAA,OAAO,EAAE,kCAAkC;AAC3C,QAAA,UAAU,EAAE,0CAA0C;AACvD,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,4BAA4B;AACrC,QAAA,UAAU,EAAE,wCAAwC;AACrD,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE,6BAA6B;AACtC,QAAA,UAAU,EAAE,yCAAyC;AACtD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,OAAO,EAAE,8BAA8B;AACvC,QAAA,UAAU,EAAE,0CAA0C;AACvD,KAAA;CACF;MA2EY,oBAAoB,CAAA;AACtB,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,4EAA6B;AAE1C,IAAA,MAAM,GAAG,QAAQ,CAClC,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,aAAa,CAAC,SAAS,6EAC9D;uGALU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EArErB;;;;;GAKT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,+sCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EANS,IAAI,wKAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAsEvB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAzEhC,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP,CAAC,IAAI,EAAE,kBAAkB,CAAC,EAAA,QAAA,EACzB;;;;;AAKT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+sCAAA,CAAA,EAAA;;;AC/CH;MACa,wBAAwB,CAAA;AACnC,IAAA,OAAgB,IAAI,GAAG,qCAAqC;;AAG9D;MACa,sBAAsB,CAAA;AAEd,IAAA,UAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,2BAA2B;AAClD,IAAA,WAAA,CAAmB,UAAyB,EAAA;QAAzB,IAAA,CAAA,UAAU,GAAV,UAAU;IAAkB;;AAGjD;MACa,oBAAoB,CAAA;AAEZ,IAAA,MAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,yBAAyB;AAChD,IAAA,WAAA,CAAmB,SAA8C,QAAQ,EAAA;QAAtD,IAAA,CAAA,MAAM,GAAN,MAAM;IAAmD;;AAG9E;MACa,uBAAuB,CAAA;AAEf,IAAA,UAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,4BAA4B;AACnD,IAAA,WAAA,CAAmB,UAAyB,EAAA;QAAzB,IAAA,CAAA,UAAU,GAAV,UAAU;IAAkB;;;ICIrC;AAAZ,CAAA,UAAY,0BAA0B,EAAA;AACpC,IAAA,0BAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,0BAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC/B,CAAC,EAHW,0BAA0B,KAA1B,0BAA0B,GAAA,EAAA,CAAA,CAAA;;;;;;;;ACItC,MAAMA,MAAI,GAAG,sBAAsB;AAEnC;AACA;AACA,MAAM,wBAAwB,CAAA;AAC5B,IAAA,OAAgB,IAAI,GAAG,sBAAsB;;AAE/C,MAAM,kBAAkB,CAAA;AACtB,IAAA,OAAgB,IAAI,GAAG,eAAe;;AAExC,MAAM,6BAA6B,CAAA;AACjC,IAAA,OAAgB,IAAI,GAAG,2BAA2B;;AAEpD,MAAM,yBAAyB,CAAA;AAC7B,IAAA,OAAgB,IAAI,GAAG,wBAAwB;;AAEjD,MAAM,2BAA2B,CAAA;AAC/B,IAAA,OAAgB,IAAI,GAAG,0BAA0B;;AAEnD,MAAM,+BAA+B,CAAA;AACnC,IAAA,OAAgB,IAAI,GAAG,+BAA+B;;AAGxD,MAAM,uBAAuB,GAAG;IAC9B,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,WAAW;CACH;AAEV,SAAS,qBAAqB,CAAC,MAAc,EAAA;AAC3C,IAAA,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS,KAAK,MAAM,CAAC;AAC1E;AAEA,SAAS,QAAQ,CAAC,GAAkB,EAAA;AAClC,IAAA,QACE,GAAG,CAAC,eAAe,KAAK,QAAQ;QAChC,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC;AAEhD;AAYO,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB,CAAA;AACzB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AACzB,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;AAC1B,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAE7B,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC;AACjD,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,wBAAwB,EAAE,CAAC,CAAC;AAEvE,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;AAC3C,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE3E,QAAA,IAAI,CAAC;aACF,IAAI,CACH,kBAAkB,CAChB,6BAA6B,EAC7B,yBAAyB,EACzB,2BAA2B,EAC3B,+BAA+B,CAChC;AAEF,aAAA,SAAS,CAAC,MACT,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAC3D;AAEH,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CACH,kBAAkB,CAChB,6BAA6B,EAC7B,yBAAyB,CAC1B;AAEF,aAAA,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,wBAAwB,EAAE,CAAC,CAAC;IACzE;;;;AAOO,IAAP,OAAO,SAAS,CACd,KAAkC,EAAA;QAElC,OAAO,KAAK,CAAC,MAAM;IACrB;AAGO,IAAP,OAAO,aAAa,CAAC,KAAkC,EAAA;QACrD,OAAO,KAAK,CAAC,UAAU;IACzB;AAGO,IAAP,OAAO,WAAW,CAAC,KAAkC,EAAA;AACnD,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM;IACvB;AAGO,IAAP,OAAO,gBAAgB,CAAC,KAAkC,EAAA;QACxD,OAAO,KAAK,CAAC,aAAa;IAC5B;AAGO,IAAP,OAAO,SAAS,CACd,KAAkC,EAAA;QAElC,OAAO,KAAK,CAAC,MAAM;IACrB;;;;AAOA,IAAA,cAAc,CAAC,GAA8C,EAAA;AAC3D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CACxB,CAAA,EAAGA,MAAI,CAAA,uBAAA,CAAyB,CACjC;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,0BAA0B,CAAC,cAAc;AAC9C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,MAAM;AACxB,gBAAA,UAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC;aAC1D,CAAC;AACH,SAAA,CAAC;IACJ;AAGA,IAAA,KAAK,CACH,GAA8C,EAC9C,EAAE,UAAU,EAA0B,EAAA;AAEtC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CACzB,CAAA,EAAGA,MAAI,oBAAoB,UAAU,CAAC,YAAY,CAAA,CAAE,EACpD,EAAE,EACF;YACE,OAAO,EAAE,IAAI,WAAW,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAChD,SAAA,CACF;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,0BAA0B,CAAC,YAAY;AAC5C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,MAAM;gBACxB,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAA6B;aACxE,CAAC;AACH,SAAA,CAAC;IACJ;AAGA,IAAA,GAAG,CACD,GAA8C,EAC9C,EAAE,MAAM,EAAwB,EAAA;;QAGhC,GAAG,CAAC,UAAU,CAAC;AACb,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,IAAI,qBAAqB,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;AAC7D,SAAA,CAAC;AACF,QAAA,OAAO,KAAK;IACd;AAGA,IAAA,MAAM,CACJ,GAA8C,EAC9C,EAAE,UAAU,EAA2B,EAAA;QAEvC,OAAO,IAAI,CAAC;AACT,aAAA,QAAQ,CAAC,IAAI,oBAAoB,CAAC,QAAQ,CAAC;aAC3C,IAAI,CACH,SAAS,CAAC,MACR,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,UAAU,CAAC,CAAC,CAC5D,CACF;IACL;uGAxIW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAtB,sBAAsB,EAAA,CAAA;;AA2EjCC,YAAA,CAAA;IADC,MAAM,CAAC,wBAAwB;AAa/B,CAAA,EAAA,sBAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,IAAA,CAAA;AAGDA,YAAA,CAAA;IADC,MAAM,CAAC,sBAAsB;AAoB7B,CAAA,EAAA,sBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,IAAA,CAAA;AAGDA,YAAA,CAAA;IADC,MAAM,CAAC,oBAAoB;AAW3B,CAAA,EAAA,sBAAA,CAAA,SAAA,EAAA,KAAA,EAAA,IAAA,CAAA;AAGDA,YAAA,CAAA;IADC,MAAM,CAAC,uBAAuB;AAY9B,CAAA,EAAA,sBAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,CAAA;AA9FMA,YAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAGMA,YAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,sBAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAGMA,YAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,sBAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGMA,YAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGMA,YAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AApEU,sBAAsB,GAAAA,YAAA,CAAA;AAVlC,IAAA,KAAK,CAA8B;AAClC,QAAA,IAAI,EAAE,mBAAmB;AACzB,QAAA,QAAQ,EAAE;AACR,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,MAAM,EAAE,EAAE;AACX,SAAA;KACF;AAEY,CAAA,EAAA,sBAAsB,CAyIlC;2FAzIY,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;MCjEY,uBAAuB,CAAA;AACjB,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;;;;AAK7B,IAAA,MAAM,GAAG,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC;AACjD,IAAA,UAAU,GAAG,MAAM,CAAC,sBAAsB,CAAC,aAAa,CAAC;AACzD,IAAA,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC,WAAW,CAAC;AAEhD,IAAA,aAAa,GAAG,MAAM,CACrC,sBAAsB,CAAC,gBAAgB,CACxC;;;;;AAMQ,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,IAAI,IAAI,4EAAC;;AAEpD,IAAA,UAAU,GAAG,QAAQ,CAC5B,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,SAAS,IAAI,IAAI,iFAClD;;AAEQ,IAAA,UAAU,GAAG,QAAQ,CAC5B,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,aAAa,IAAI,IAAI,iFACtD;AACQ,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,oFAAC;AAE5D,IAAA,UAAU,GAAG,QAAQ,CAAC,MAC7B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,YAAY,CAAC,iFACvE;AACQ,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MACtC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,cAAc,CAAC,0FACzE;;;;IAKD,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,wBAAwB,EAAE,CAAC;IAC5D;AACA,IAAA,YAAY,CAAC,UAAyB,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACpE;AACA,IAAA,aAAa,CAAC,UAAyB,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACrE;IACA,UAAU,CAAC,SAA8C,QAAQ,EAAA;AAC/D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC9D;uGAlDW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAvB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACTlC,SAASC,UAAQ,CAAC,KAAc,EAAA;AAC9B,IAAA,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACtE;AAEA,SAAS,kBAAkB,CACzB,MAA+B,EAC/B,iBAAyB,EAAA;AAEzB,IAAA,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,WAAW,EAAE;IAC1D,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrD,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI;AACtD,UAAE,CAAC,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI;AACzE,UAAE,CAAC,WAAW,EAAE,IAAI,EAAE,kBAAkB,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC;AAE5E,IAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC/B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;AAC7C,YAAA,OAAO,KAAK,CAAC,IAAI,EAAE;QACrB;IACF;AAEA,IAAA,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE;AACxD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE;AAC7C,YAAA,OAAO,KAAK,CAAC,IAAI,EAAE;QACrB;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,eAAe,CAAC,KAAa,EAAA;AACpC,IAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;AAE5B,IAAA,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtD,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AAClC,QAAA,OAAOA,UAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;IACzC;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;AAEA,SAAS,mBAAmB,CAC1B,KAAc,EACd,iBAAyB,EAAA;AAEzB,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;QAC5B,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC;QACvC,IAAI,MAAM,EAAE;AACV,YAAA,QACE,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,CAAC;AAC7C,gBAAA,gBAAgB,CACd,MAAM,EACN,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,CAAC,EACxC,iBAAiB,CAClB;AACD,gBAAA,OAAO;QAEX;AAEA,QAAA,OAAO,OAAO;IAChB;AAEA,IAAA,IAAI,CAACA,UAAQ,CAAC,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,QACE,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,CAAC;QAC5C,gBAAgB,CACd,KAAK,EACL;YACE,aAAa;YACb,cAAc;YACd,sBAAsB;YACtB,gBAAgB;YAChB,OAAO;YACP,MAAM;YACN,OAAO;SACR,EACD,iBAAiB,CAClB;AAEL;AAEA,SAAS,gBAAgB,CACvB,MAA+B,EAC/B,IAAc,EACd,iBAAyB,EAAA;AAEzB,IAAA,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC;QACjE,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,4BAA4B,CACnC,MAA+B,EAC/B,WAAqB,EACrB,WAA2B,EAC3B,iBAAiB,GAAG,IAAI,EAAA;IAExB,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,CAAC;IAC7E,IAAI,YAAY,EAAE;AAChB,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,OAAO,qBAAqB,CAAC,WAAW,CAAC;AAC3C;AAEM,SAAU,qBAAqB,CAAC,KAAqB,EAAA;IACzD,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,EAAE;IACX;IAEA,MAAM,UAAU,GAAG;AAChB,SAAA,OAAO,CAAC,mBAAmB,EAAE,OAAO;AACpC,SAAA,OAAO,CAAC,uBAAuB,EAAE,OAAO;AACxC,SAAA,OAAO,CAAC,SAAS,EAAE,GAAG;AACtB,SAAA,OAAO,CAAC,MAAM,EAAE,GAAG;AACnB,SAAA,IAAI,EAAE;IAET,IAAI,CAAC,UAAU,EAAE;AACf,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,OAAO,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;AAClE;SAEgB,4BAA4B,CAC1C,KAAyC,EACzC,iBAAiB,GAAG,IAAI,EAAA;IAExB,OAAO,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,EAAE;AAC5D;SAEgB,2BAA2B,CACzC,MAA6B,EAC7B,iBAAiB,GAAG,IAAI,EAAA;AAExB,IAAA,OAAO,4BAA4B,CACjC,MAA4C,EAC5C,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,CAAC,EACxC,MAAM,CAAC,SAAS,EAChB,iBAAiB,CAClB;AACH;SAEgB,2BAA2B,CACzC,MAA6B,EAC7B,iBAAiB,GAAG,IAAI,EAAA;IAExB,OAAO,4BAA4B,CACjC,MAA4C,EAC5C;QACE,aAAa;QACb,cAAc;QACd,sBAAsB;QACtB,gBAAgB;QAChB,OAAO;AACR,KAAA,EACD,MAAM,CAAC,YAAY,EACnB,iBAAiB,CAClB;AACH;SAEgB,4BAA4B,CAC1C,KAAyC,EACzC,iBAAiB,GAAG,IAAI,EAAA;AAExB,IAAA,OAAO,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,CAAC;AAC/D;;ACxLM,SAAU,qBAAqB,CACnC,KAAyC,EAAA;AAEzC,IAAA,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;IAE5E,OAAO;QACL,EAAE,EAAE,KAAK,EAAE,MAAM;QACjB,WAAW;AACX,QAAA,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,SAAS;KACjC;AACH;SAEgB,sBAAsB,CACpC,KAAyC,EACzC,UAAmD,EAAE,EAAA;IAErD,OAAO;AACL,QAAA,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,EAAE;AACzB,QAAA,QAAQ,EAAE,MAAM;AAChB,QAAA,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC;AACnC,QAAA,aAAa,EAAE;AACb,YAAA,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK;AACzB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;AACrC,SAAA;KACF;AACH;;ACbA;;;;AAIG;AAOW,MAAO,kBAAkB,CAAA;AAC5B,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,gFAAiB;AAC5C,IAAA,MAAM,GAAG,KAAK,CAAqB,OAAO,6EAAC;AAEnC,IAAA,GAAG,GAAa,MAAM,CAAC,QAAQ,CAAC;AAChC,IAAA,MAAM,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACxC,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAElC,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;IAE/B,OAAO,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,MAAM,EAAE,KAAK;AAChB,UAAE;UACA,sCAAsC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC3C;IACkB,eAAe,GAAG,QAAQ,CAAC,MAC5C,IAAI,CAAC,MAAM,EAAE,KAAK;AAChB,UAAE;UACA,iCAAiC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACtC;IACkB,iBAAiB,GAAG,QAAQ,CAAC,MAC9C,IAAI,CAAC,MAAM,EAAE,KAAK;AAChB,UAAE;UACA,6BAA6B,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAClC;AAES,IAAA,kBAAkB,CAAC,OAAsC,EAAA;QACjE,OAAO,4BAA4B,CACjC,OAAO,EACP,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAC/B;IACH;AAEU,IAAA,UAAU,CAAC,KAAiC,EAAA;QACpD,OAAO,sBAAsB,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC5D;IAEA,OAAO,GAAA;AACL,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,MAAM,GAAG,GACP,IAAI,CAAC,MAAM,EAAE,KAAK;cACd,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG;cAC7B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC;QACnC,GAAG,CAAC,SAAS,CAAC;YACZ,IAAI,EAAE,MAAK;AACT,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACtE,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YACtB,CAAC;YACD,KAAK,EAAE,MAAK;;YAEZ,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACvB;uGAzDmB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC9BvC,wqCAsCA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDZY,YAAY,+BAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI9C,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBANtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,OAAA,EAC1B,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,EAAA,eAAA,EAEjD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,wqCAAA,EAAA;;;AEZjD;;;AAGG;AAOW,MAAO,gCAAgC,CAAA;AAC1C,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,gFAAmB;AAEtC,IAAA,GAAG,GAAa,MAAM,CAAC,QAAQ,CAAC;AAChC,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAE3C,IAAA,kBAAkB,CAAC,OAAsC,EAAA;QACjE,OAAO,4BAA4B,CACjC,OAAO,EACP,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAC/B;IACH;AAEU,IAAA,UAAU,CAAC,KAAiC,EAAA;QACpD,OAAO,sBAAsB,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC5D;AAEU,IAAA,MAAM,CAAC,GAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IACrB;IAEU,KAAK,GAAA;AACb,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;IACtB;uGAvBmB,gCAAgC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAhC,gCAAgC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wCAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1BrD,+hEAiDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3BY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIpD,gCAAgC,EAAA,UAAA,EAAA,CAAA;kBANpD,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,wCAAwC,EAAA,OAAA,EACzC,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,kBAAkB,CAAC,EAAA,eAAA,EAEvD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+hEAAA,EAAA;;;AEGjD;;;;;;;AAOG;MAkBU,oBAAoB,CAAA;;AAEtB,IAAA,UAAU,GAAG,KAAK,CAAS,cAAc,iFAAC;AAC1C,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,8EAAC;AAC/B,IAAA,cAAc,GAAG,KAAK,CAAU,IAAI,qFAAC;AACrC,IAAA,kBAAkB,GAAG,KAAK,CAAU,IAAI,yFAAC;AAEjC,IAAA,MAAM,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACxC,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAElC,IAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAU,SAAS,CAAC;AAEhD,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAC3B,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACnC,IAAA,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;AACzC,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACnC,IAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACrC,IAAA,WAAW,GAAG,MAAM,CAAC,KAAK,kFAAC;AAEzB,IAAA,IAAI,GAAG,QAAQ,CAAqC,MAAK;QAC1E,IAAI,IAAI,CAAC,MAAM,EAAE;AAAE,YAAA,OAAO,QAAQ;QAClC,IAAI,IAAI,CAAC,aAAa,EAAE;AAAE,YAAA,OAAO,YAAY;AAC7C,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,2EAAC;AAEF,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,YAAA,MAAM,YAAY,GAChB,IAAI,CAAC,kBAAkB,EAAE;gBACzB,CAAC,IAAI,CAAC,WAAW,EAAE;gBACnB,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,gBAAA,UAAU,CAAC,MAAM,GAAG,CAAC;YAEvB,IAAI,CAAC,YAAY,EAAE;gBACjB;YACF;AAEA,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;YAC1B,cAAc,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC;AAC7D,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;IAC9B;AAEU,IAAA,kBAAkB,CAAC,OAAsC,EAAA;QACjE,OAAO,4BAA4B,CACjC,OAAO,EACP,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAC/B;IACH;AAEU,IAAA,UAAU,CAClB,KAAoD,EACpD,SAAS,GAAG,KAAK,EAAA;QAEjB,OAAO,sBAAsB,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC;IACrD;AAEA,IAAA,aAAa,CAAC,KAAY,EAAA;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;IAC9B;IAEA,KAAK,CAAC,GAAkB,EAAE,KAAiB,EAAA;QACzC,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;IAChC;IAEA,QAAQ,CAAC,GAAkB,EAAE,KAAiB,EAAA;QAC5C,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC;IACjC;AAEA,IAAA,UAAU,CAAC,KAAiB,EAAA;QAC1B,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;QACrB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE;IAC9C;IAEQ,WAAW,CAAC,GAAkB,EAAE,MAA0B,EAAA;QAChE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,QAAQ,EAAE;YACjD,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAC9B,MAAM,KAAK;AACT,kBAAE;kBACA,iCAAiC,CACtC;AACD,YAAA,UAAU,EAAE,oCAAoC;AAChD,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE;AACzC,SAAA,CAAC;IACJ;AAEQ,IAAA,oBAAoB,CAAC,UAA2B,EAAA;QACtD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAC9B,gCAAgC,EAChC,QAAQ,EACR;YACE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oCAAoC,CAAC;AACtE,YAAA,UAAU,EAAE,oCAAoC;AAChD,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,EAAE,UAAU,EAAE;AAC5B,SAAA,CACF;QAED,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAqC,KAAI;YAC9D,IAAI,GAAG,EAAE;AACP,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC;YAChC;AACF,QAAA,CAAC,CAAC;IACJ;uGApHW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAApB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,oBAAoB,4wBCpDjC,+9QAgOA,EAAA,MAAA,EAAA,CAAA,+3BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDzLI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,aAAa,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,IAAI,sEACJ,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,uBAAA,EAAA,uBAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,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,EACV,kBAAkB,gMAClB,oBAAoB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAMX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAjBhC,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,MAAM;wBACN,aAAa;wBACb,IAAI;wBACJ,OAAO;wBACP,UAAU;wBACV,kBAAkB;wBAClB,oBAAoB;qBACrB,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+9QAAA,EAAA,MAAA,EAAA,CAAA,+3BAAA,CAAA,EAAA;igBAaU,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AElDpE;AACA;AACA;MAEa,gBAAgB,CAAA;AAER,IAAA,KAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,kCAAkC;AACzD,IAAA,WAAA,CAAmB,QAA6B,EAAE,EAAA;QAA/B,IAAA,CAAA,KAAK,GAAL,KAAK;IAA6B;;MAG1C,sBAAsB,CAAA;AAEd,IAAA,KAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,wCAAwC;AAC/D,IAAA,WAAA,CAAmB,QAA6B,EAAE,EAAA;QAA/B,IAAA,CAAA,KAAK,GAAL,KAAK;IAA6B;;MAG1C,mBAAmB,CAAA;AAEX,IAAA,KAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,qCAAqC;AAC5D,IAAA,WAAA,CAAmB,QAA6B,EAAE,EAAA;QAA/B,IAAA,CAAA,KAAK,GAAL,KAAK;IAA6B;;MAG1C,4BAA4B,CAAA;AAEpB,IAAA,KAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,+CAA+C;AACtE,IAAA,WAAA,CAAmB,QAA6B,EAAE,EAAA;QAA/B,IAAA,CAAA,KAAK,GAAL,KAAK;IAA6B;;MAG1C,mBAAmB,CAAA;AAGrB,IAAA,EAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,qCAAqC;IAC5D,WAAA,CACS,EAAU,EACV,OAAA,GAAmB,KAAK,EAAA;QADxB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,qBAAqB,CAAA;AAChC,IAAA,OAAgB,IAAI,GAAG,uCAAuC;;AAGhE;AACA;AACA;MAEa,eAAe,CAAA;AAGjB,IAAA,eAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,iCAAiC;IACxD,WAAA,CACS,eAAwB,EACxB,OAAA,GAAmB,KAAK,EAAA;QADxB,IAAA,CAAA,eAAe,GAAf,eAAe;QACf,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,YAAY,CAAA;AAGd,IAAA,OAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,6BAA6B;IACpD,WAAA,CACS,OAAsC,EACtC,OAAA,GAAmB,KAAK,EAAA;QADxB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,iBAAiB,CAAA;AAC5B,IAAA,OAAgB,IAAI,GAAG,mCAAmC;;AAG5D;AACA;AACA;MAEa,sBAAsB,CAAA;AAEd,IAAA,OAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,0CAA0C;AACjE,IAAA,WAAA,CAAmB,OAAsC,EAAA;QAAtC,IAAA,CAAA,OAAO,GAAP,OAAO;IAAkC;;MAGjD,kBAAkB,CAAA;AAGpB,IAAA,OAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,sCAAsC;IAC7D,WAAA,CACS,OAAmE,EACnE,OAAA,GAAmB,KAAK,EAAA;QADxB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,sBAAsB,CAAA;AAGxB,IAAA,EAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,0CAA0C;IACjE,WAAA,CACS,EAAU,EACV,OAAsC,EAAA;QADtC,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,kBAAkB,CAAA;AAGpB,IAAA,EAAA;AACA,IAAA,OAAA;AACA,IAAA,OAAA;AAJT,IAAA,OAAgB,IAAI,GAAG,sCAAsC;AAC7D,IAAA,WAAA,CACS,EAAU,EACV,OAAmE,EACnE,UAAmB,KAAK,EAAA;QAFxB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;AAGL;AACA;AACA;MAEa,iBAAiB,CAAA;AAGnB,IAAA,EAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,kCAAkC;IACzD,WAAA,CACS,EAAU,EACV,OAAiC,EAAA;QADjC,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,gBAAgB,CAAA;AAGlB,IAAA,EAAA;AACA,IAAA,OAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,iCAAiC;IACxD,WAAA,CACS,EAAU,EACV,OAAgC,EAAA;QADhC,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;MAGQ,gBAAgB,CAAA;AAGlB,IAAA,EAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AAJT,IAAA,OAAgB,IAAI,GAAG,iCAAiC;AACxD,IAAA,WAAA,CACS,EAAU,EACV,UAAkB,EAClB,UAAmB,KAAK,EAAA;QAFxB,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,OAAO,GAAP,OAAO;IACb;;;ACiOL;AACA;AACA;IAEY;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,oBAAA,CAAA,aAAA,CAAA,GAAA,aAA2B;AAC3B,IAAA,oBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB;AACrB,IAAA,oBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,oBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,oBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,oBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,oBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAbW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;;;;;;;;ACpUhC,MAAM,IAAI,GAAG,sBAAsB;AAEnC,SAAS,eAAe,CAAC,KAA0B,EAAA;AACjD,IAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;AAC7B,IAAA,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI;QAC1B,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC;IACrD,IAAI,KAAK,CAAC,MAAM;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;IAC7D,IAAI,KAAK,CAAC,MAAM;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;IAC7D,IAAI,KAAK,CAAC,OAAO;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IAChE,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC;IAC1D,IAAI,KAAK,CAAC,MAAM;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;IAC7D,IAAI,KAAK,CAAC,aAAa;QACrB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC;AAC3D,IAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;AAC5C,IAAA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IACrD,IAAI,KAAK,CAAC,eAAe;QACvB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,eAAe,CAAC;IAC/D,IAAI,KAAK,CAAC,eAAe;QACvB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,eAAe,CAAC;AAC/D,IAAA,OAAO,MAAM;AACf;AAiBO,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB,CAAA;AACnB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;;;;AAO1B,IAAP,OAAO,KAAK,CACV,KAA4B,EAAA;QAE5B,OAAO,KAAK,CAAC,EAAE;IACjB;AAGO,IAAP,OAAO,WAAW,CAChB,KAA4B,EAAA;QAE5B,OAAO,KAAK,CAAC,QAAQ;IACvB;AAGO,IAAP,OAAO,QAAQ,CACb,KAA4B,EAAA;QAE5B,OAAO,KAAK,CAAC,KAAK;IACpB;AAGO,IAAP,OAAO,SAAS,CACd,KAA4B,EAAA;QAE5B,OAAO,KAAK,CAAC,MAAM;IACrB;AAGO,IAAP,OAAO,SAAS,CAAC,KAA4B,EAAA;QAC3C,OAAO,KAAK,CAAC,MAAM;IACrB;AAGO,IAAP,OAAO,eAAe,CACpB,KAA4B,EAAA;QAE5B,OAAO,KAAK,CAAC,YAAY;IAC3B;AAGO,IAAP,OAAO,eAAe,CACpB,KAA4B,EAAA;QAE5B,OAAO,KAAK,CAAC,YAAY;IAC3B;AAGO,IAAP,OAAO,gBAAgB,CAAC,KAA4B,EAAA;QAClD,OAAO,KAAK,CAAC,aAAa;IAC5B;AAGO,IAAP,OAAO,SAAS,CACd,KAA4B,EAAA;QAE5B,OAAO,KAAK,CAAC,MAAM;IACrB;;;;AAOA,IAAA,KAAK,CAAC,GAAwC,EAAE,EAAE,KAAK,EAAoB,EAAA;QACzE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAA0C,IAAI,EAAE;AACxE,YAAA,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC;AAC/B,SAAA,CAAC;AACF,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,KAAK;AAC/B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,MAAM,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AACjD,SAAA,CAAC;IACJ;AAGA,IAAA,WAAW,CACT,GAAwC,EACxC,EAAE,KAAK,EAA0B,EAAA;QAEjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CACxB,CAAA,EAAG,IAAI,WAAW,EAClB,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,CACnC;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,WAAW;AACrC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AACvD,SAAA,CAAC;IACJ;AAGA,IAAA,QAAQ,CACN,GAAwC,EACxC,EAAE,KAAK,EAAuB,EAAA;QAE9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CACxB,CAAA,EAAG,IAAI,MAAM,EACb,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,CACnC;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,QAAQ;AAClC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpD,SAAA,CAAC;IACJ;AAGA,IAAA,SAAS,CACP,GAAwC,EACxC,EAAE,KAAK,EAAgC,EAAA;QAEvC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CACxB,CAAA,EAAG,IAAI,yBAAyB,EAChC,EAAE,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,CACnC;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,SAAS;AACnC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrD,SAAA,CAAC;IACJ;AAGA,IAAA,SAAS,CACP,GAAwC,EACxC,EAAE,EAAE,EAAE,OAAO,EAAuB,EAAA;AAEpC,QAAA,MAAM,IAAI,GAAG,OAAO,GAAG,GAAG,IAAI,CAAA,OAAA,EAAU,EAAE,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,EAAE;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAA6B,IAAI,CAAC;AAC5D,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,SAAS;AACnC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AAC7D,SAAA,CAAC;IACJ;AAGA,IAAA,WAAW,CAAC,GAAwC,EAAA;QAClD,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAClC;;;;AAOA,IAAA,eAAe,CACb,GAAwC,EACxC,EAAE,eAAe,EAAE,OAAO,EAAmB,EAAA;AAE7C,QAAA,GAAG,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;AAE1D,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;AAC7B,QAAA,IAAI,eAAe;YACjB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,eAAe,CAAC;QACzD,MAAM,IAAI,GAAG;cACT,CAAA,EAAG,IAAI,CAAA,oBAAA;AACT,cAAE,CAAA,EAAG,IAAI,CAAA,cAAA,CAAgB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmC,IAAI,EAAE;YACjE,MAAM;AACP,SAAA,CAAC;AACF,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,eAAe;AACzC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AACnE,SAAA,CAAC;IACJ;AAGA,IAAA,YAAY,CACV,GAAwC,EACxC,EAAE,OAAO,EAAE,OAAO,EAAgB,EAAA;QAElC,MAAM,IAAI,GAAG;cACT,CAAA,EAAG,IAAI,CAAA,oBAAA;AACT,cAAE,CAAA,EAAG,IAAI,CAAA,cAAA,CAAgB;AAC3B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CACzB,IAAI,EACJ,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAE,OAAO,CAAC,CAChD;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,YAAY;AACtC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AACnE,SAAA,CAAC;IACJ;AAGA,IAAA,iBAAiB,CAAC,GAAwC,EAAA;QACxD,GAAG,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IACxC;;;;AAOA,IAAA,YAAY,CACV,GAAwC,EACxC,EAAE,OAAO,EAA0B,EAAA;AAEnC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAA0B,IAAI,EAAE,OAAO,CAAC;AACnE,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,MAAM;AAChC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,OAAO,EAAE,CAAC;AACtB,SAAA,CAAC;IACJ;AAGA,IAAA,QAAQ,CACN,GAAwC,EACxC,EAAE,OAAO,EAAE,OAAO,EAAsB,EAAA;AAExC,QAAA,MAAM,IAAI,GAAG,OAAO,GAAG,CAAA,EAAG,IAAI,CAAA,SAAA,CAAW,GAAG,CAAA,EAAG,IAAI,KAAK;QACxD,MAAM,IAAI,GAAG;AACX,cAAE,IAAI,CAAC,qBAAqB,CAAC,OAAyC;cACpE,OAAO;AACX,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAA0B,IAAI,EAAE,IAAI,CAAC;AAChE,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,MAAM;AAChC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,OAAO,EAAE,CAAC;AACtB,SAAA,CAAC;IACJ;AAGA,IAAA,YAAY,CACV,GAAwC,EACxC,EAAE,EAAE,EAAE,OAAO,EAA0B,EAAA;AAEvC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CACxB,CAAA,EAAG,IAAI,IAAI,EAAE,CAAA,CAAE,EACf,OAAO,CACR;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,MAAM;AAChC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,OAAO,EAAE,CAAC;AACtB,SAAA,CAAC;IACJ;IAGA,QAAQ,CACN,GAAwC,EACxC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAsB,EAAA;AAE5C,QAAA,MAAM,IAAI,GAAG,OAAO,GAAG,GAAG,IAAI,CAAA,UAAA,EAAa,EAAE,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAA,IAAA,EAAO,EAAE,EAAE;QACpE,MAAM,IAAI,GAAG;AACX,cAAE,IAAI,CAAC,qBAAqB,CAAC,OAAyC;cACpE,OAAO;AACX,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAA0B,IAAI,EAAE,IAAI,CAAC;AAC/D,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,MAAM;AAChC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,OAAO,EAAE,CAAC;AACtB,SAAA,CAAC;IACJ;;;;AAOA,IAAA,OAAO,CACL,GAAwC,EACxC,EAAE,EAAE,EAAE,OAAO,EAAqB,EAAA;AAElC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CACzB,CAAA,EAAG,IAAI,IAAI,EAAE,CAAA,QAAA,CAAU,EACvB,OAAO,CACR;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,OAAO;AACjC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,OAAO,EAAE,CAAC;AACtB,SAAA,CAAC;IACJ;AAGA,IAAA,MAAM,CACJ,GAAwC,EACxC,EAAE,EAAE,EAAE,OAAO,EAAoB,EAAA;AAEjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CACzB,CAAA,EAAG,IAAI,IAAI,EAAE,CAAA,OAAA,CAAS,EACtB,OAAO,CACR;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,MAAM;AAChC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,OAAO,EAAE,CAAC;AACtB,SAAA,CAAC;IACJ;IAGA,MAAM,CACJ,GAAwC,EACxC,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAoB,EAAA;AAE7C,QAAA,MAAM,IAAI,GAAG,OAAO,GAAG,GAAG,IAAI,CAAA,OAAA,EAAU,EAAE,CAAA,CAAE,GAAG,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,EAAE;QAC9D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAoB,IAAI,EAAE;YACrD,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC;AACvD,SAAA,CAAC;AACF,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,MAAM;AAChC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,OAAO,EAAE,CAAC;AACtB,SAAA,CAAC;IACJ;IAEQ,wBAAwB,CAC9B,OAAsC,EACtC,OAAgB,EAAA;QAEhB,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;QACjC;QAEA,OAAO;AACL,YAAA,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI;YAChD,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB;IACH;AAEQ,IAAA,qBAAqB,CAC3B,OAAwE,EAAA;QAExE,OAAO;AACL,YAAA,GAAG,OAAO;AACV,YAAA,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE;SACzC;IACH;uGAlWW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAhB,gBAAgB,EAAA,CAAA;;AAuE3B,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAWvB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,sBAAsB;AAe7B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,mBAAmB;AAe1B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,UAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,4BAA4B;AAenC,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,mBAAmB;AAa1B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,qBAAqB;AAG5B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAOD,UAAA,CAAA;IADC,MAAM,CAAC,eAAe;AAsBtB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,YAAY;AAkBnB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,cAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,iBAAiB;AAGxB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,IAAA,CAAA;AAOD,UAAA,CAAA;IADC,MAAM,CAAC,sBAAsB;AAY7B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,cAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,kBAAkB;AAgBzB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,UAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,sBAAsB;AAe7B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,cAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,kBAAkB;AAgBzB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,UAAA,EAAA,IAAA,CAAA;AAOD,UAAA,CAAA;IADC,MAAM,CAAC,iBAAiB;AAexB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,SAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAevB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAevB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,CAAA;AAnUM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,gBAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAhEU,gBAAgB,GAAA,UAAA,CAAA;AAf5B,IAAA,KAAK,CAAwB;AAC5B,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,QAAQ,EAAE;AACR,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,aAAa,EAAE,EAAE;AACjB,YAAA,MAAM,EAAE,EAAE;AACX,SAAA;KACF;AAEY,CAAA,EAAA,gBAAgB,CAmW5B;2FAnWY,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCrCY,iBAAiB,CAAA;AACX,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;;;;AAK7B,IAAA,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACvC,IAAA,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC;AACnD,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AAC7C,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC/C,IAAA,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC3C,IAAA,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC;AACvD,IAAA,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC;AAE/C,IAAA,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC;AACzD,IAAA,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;;;;AAKnD,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE,8EAAC;AACpD,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,EAAE,KAAK,IAAI,EAAE,oFAAC;AAChE,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,IAAI,EAAE,iFAAC;AAC1D,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,EAAE,KAAK,IAAI,EAAE,kFAAC;;;;AAK5D,IAAA,WAAW,GAAG,QAAQ,CAAC,MAC9B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,kFAC1D;AACQ,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,WAAW,CAAC,wFAChE;AACQ,IAAA,cAAc,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,qFAC7D;AACQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,sFAC9D;AACQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,sFAC9D;AACQ,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MACxC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,eAAe,CAAC,4FACpE;AACQ,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,YAAY,CAAC,wFACjE;AACQ,IAAA,QAAQ,GAAG,QAAQ,CAC1B,MACE,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAC1D,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC7D;AACQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAC9B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,OAAO,CAAC,kFAC5D;AACQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAC9B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,kFAC3D;AACQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAC/B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,mFAC3D;;;;AAKQ,IAAA,OAAO,GAAG,QAAQ,CACzB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,IAAI,8EACxD;AACQ,IAAA,aAAa,GAAG,QAAQ,CAC/B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,WAAW,CAAC,IAAI,IAAI,oFAC9D;AACQ,IAAA,UAAU,GAAG,QAAQ,CAC5B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,QAAQ,CAAC,IAAI,IAAI,iFAC3D;AACQ,IAAA,WAAW,GAAG,QAAQ,CAC7B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,IAAI,kFAC5D;AACQ,IAAA,iBAAiB,GAAG,QAAQ,CACnC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,IAAI,wFAClE;AACQ,IAAA,SAAS,GAAG,QAAQ,CAC3B,MACE,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC;AAC1C,QAAA,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC;AAC1C,QAAA,IAAI,gFACP;;;;IAKD,KAAK,CAAC,QAA6B,EAAE,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACzD;IACA,WAAW,CAAC,QAA6B,EAAE,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAC/D;IACA,QAAQ,CAAC,QAA6B,EAAE,EAAA;AACtC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC5D;IACA,SAAS,CAAC,QAA6B,EAAE,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,4BAA4B,CAAC,KAAK,CAAC,CAAC;IACrE;AACA,IAAA,SAAS,CAAC,EAAU,EAAE,OAAO,GAAG,KAAK,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,mBAAmB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAClE;IACA,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,qBAAqB,EAAE,CAAC;IACzD;AACA,IAAA,gBAAgB,CAAC,eAAwB,EAAE,OAAO,GAAG,KAAK,EAAA;AACxD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC3E;IACA,YAAY,CACV,KAA+B,EAC/B,OAGC,EAAA;AAED,QAAA,MAAM,OAAO,GAAkC;YAC7C,eAAe,EAAE,OAAO,EAAE,eAAe;YACzC,KAAK;SACN;AACD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CACxB,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,CACrD;IACH;IACA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC;IACrD;AACA,IAAA,YAAY,CAAC,OAAsC,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACjE;AACA,IAAA,QAAQ,CACN,OAAmE,EACnE,OAAO,GAAG,KAAK,EAAA;AAEf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACtE;IACA,YAAY,CAAC,EAAU,EAAE,OAAsC,EAAA;AAC7D,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACrE;AACA,IAAA,QAAQ,CACN,EAAU,EACV,OAAmE,EACnE,OAAO,GAAG,KAAK,EAAA;AAEf,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1E;IACA,OAAO,CAAC,EAAU,EAAE,OAAiC,EAAA;AACnD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAChE;IACA,MAAM,CAAC,EAAU,EAAE,OAAgC,EAAA;AACjD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/D;AACA,IAAA,MAAM,CAAC,EAAU,EAAE,UAAkB,EAAE,OAAO,GAAG,KAAK,EAAA;AACpD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3E;uGA9JW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACnBlC;;;;;AAKG;AAOW,MAAO,sBAAsB,CAAA;AAChC,IAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,gFAAiB;AAEpC,IAAA,GAAG,GAAa,MAAM,CAAC,QAAQ,CAAC;AAChC,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEhC,IAAA,MAAM,GAAG,MAAM,CAAC,EAAE,6EAAC;AACnB,IAAA,SAAS,GAAG,MAAM,CAAC,KAAK,gFAAC;AACzB,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW;AAEhC,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,8EAAC;AAElE,IAAA,aAAa,CAAC,KAAY,EAAA;QAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAE,KAAK,CAAC,MAA8B,CAAC,KAAK,CAAC;IAC9D;AAEU,IAAA,UAAU,CAAC,KAAiC,EAAA;QACpD,OAAO,sBAAsB,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC5D;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YAAE;AACrB,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE;AAC7B,QAAA,IAAI,CAAC;AACF,aAAA,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE;YACxB,UAAU,EAAE,GAAG,CAAC,UAAU;AAC1B,YAAA,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;SAC7B;AACA,aAAA,SAAS,CAAC;YACT,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,KAAK,EAAE,MAAK;;YAEZ,CAAC;AACF,SAAA,CAAC;IACN;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACvB;uGAvCmB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7B3C,syDAoDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3BY,YAAY,+BAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,aAAa,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAI9C,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAN1C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,6BAA6B,EAAA,OAAA,EAC9B,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,EAAA,eAAA,EAEjD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,syDAAA,EAAA;;;AEInC,MAAO,WAAW,CAAA;AACb,IAAA,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,IAAI,GAAG,MAAM,CAAkB,EAAE,2EAAC;AAClC,IAAA,SAAS,GAAG,MAAM,CAAS,EAAE,gFAAC;AAEjD,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,MAAM,CAAC;AACT,aAAA,IAAI,CACH,MAAM,CACJ,CAAC,KAAK,KAA6B,KAAK,YAAY,aAAa,CAClE,EACD,kBAAkB,EAAE;aAErB,SAAS,CAAC,MAAM,IAAI,CAAC,wBAAwB,EAAE,CAAC;IACrD;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,IAAI,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;YAChC,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,KAAK,EAAE,GAAG,CAAC,IAAI;SAChB,CAAC,CAAC,CACJ;QACD,IAAI,CAAC,wBAAwB,EAAE;IACjC;IAEA,MAAM,GAAA;QACJ,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,gCAAgC,CAAC,CAAC;IAC/D;AAEU,IAAA,WAAW,CAAC,KAAsB,EAAA;AAC1C,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B;QACF;QAEA,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC;QACnE,IAAI,CAAC,GAAG,EAAE;YACR;QACF;QAEA,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACnE;IAEQ,wBAAwB,GAAA;AAC9B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW,EAAE,IAAI;QACrE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5E;IAEQ,YAAY,GAAA;AAClB,QAAA,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,UAAU,KAAI;YACrE,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE;YACpC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC;YAE3C,IAAI,CAAC,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACtC,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AAC3D,QAAA,CAAC,CAAC;IACJ;uGA7DmB,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,WAAW,0EC/BhC,iiBAkBA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDQY,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,+KAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAK7B,WAAW,EAAA,UAAA,EAAA,CAAA;kBAP/B,SAAS;+BACE,gBAAgB,EAAA,OAAA,EACjB,CAAC,IAAI,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAA,eAAA,EAGhC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,iiBAAA,EAAA;;;AEjBjD,MAAM,kBAAkB,GAAG,MAAM,CAAC,gBAAgB;AAiBlD,SAAS,OAAO,CAAI,KAAkB,EAAA;AACpC,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AAC1C;AAEA,SAASC,gBAAc,CAAC,KAAsB,EAAA;IAC5C,OAAO;AACL,QAAA,GAAG,KAAK;AACR,QAAA,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC;AACrC,QAAA,eAAe,EAAE,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC;AAC/C,QAAA,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;AACvC,QAAA,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC;KACxC;AACH;AAEA,SAAS,eAAe,CAAC,MAA6B,EAAA;IACpD,OAAO;AACL,QAAA,GAAG,MAAM;QACT,mBAAmB,EACjB,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC,WAAW,IAAI,SAAS;KAChE;AACH;AAEA,SAAS,YAAY,CAAC,KAAc,EAAA;AAClC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;QAC5B,OAAO,OAAO,IAAI,IAAI;IACxB;AAEA,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACvD,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAEA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,kBAAkB,CAAC,KAAc,EAAA;AACxC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACvD,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;AAClC,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,YAAY,GAAG,kBAAkB;AAC1E;AAEA,SAAS,oBAAoB,CAC3B,IAAY,EACZ,KAAa,EACb,OAAe,EACf,QAAgB,EAAA;AAEhB,IAAA,IAAI,IAAI,KAAK,KAAK,EAAE;QAClB,OAAO,IAAI,GAAG,KAAK;IACrB;AAEA,IAAA,OAAO,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC;AACxC;AAEA,SAAS,cAAc,CAAC,MAA6B,EAAA;AACnD,IAAA,OAAO,CAAA,EAAG,MAAM,CAAC,cAAc,CAAA,EAAA,EAAK,MAAM,CAAC,UAAU,CAAA,EAAA,EAAK,MAAM,CAAC,SAAS,EAAE;AAC9E;AAEA,SAAS,aAAa,CACpB,SAAiB,EACjB,QAAgB,EAChB,iBAA0B,EAAA;IAE1B,OAAO,CAAA,EAAG,SAAS,CAAA,EAAA,EAAK,QAAQ,IAAI,iBAAiB,IAAI,OAAO,CAAA,CAAE;AACpE;AAEA,SAAS,mBAAmB,CAC1B,MAA6B,EAC7B,MAA6B,EAAA;AAE7B,IAAA,OAAOA,gBAAc,CAAC;AACpB,QAAA,cAAc,EACZ,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC;AACnC,YAAA,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC;YACnC,EAAE;QACJ,MAAM;AACN,QAAA,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;AAC/B,QAAA,eAAe,EAAE,EAAE;AACnB,QAAA,WAAW,EAAE,EAAE;AACf,QAAA,WAAW,EAAE,EAAE;AAChB,KAAA,CAAC;AACJ;AAEA,SAAS,cAAc,CAAC,IAAyB,EAAA;AAC/C,IAAA,MAAM,UAAU,GAAG;AACjB,QAAA,IAAI,CAAC,GAAG;AACR,QAAA,IAAI,CAAC,IAAI;AACT,QAAA,IAAI,CAAC,EAAE;QACP,IAAI,CAAC,kBAAkB,CAAC;QACxB,IAAI,CAAC,eAAe,CAAC;QACrB,IAAI,CAAC,eAAe,CAAC;QACrB,IAAI,CAAC,eAAe,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC;QACf,IAAI,CAAC,OAAO,CAAC;KACd;AAED,IAAA,OAAO;SACJ,GAAG,CAAC,YAAY;SAChB,MAAM,CAAC,CAAC,KAAK,KAAsB,CAAC,CAAC,KAAK,CAAC;AAChD;AAEA,SAAS,cAAc,CACrB,KAA4B,EAAA;AAE5B,IAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAA+B;AAEpD,IAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE;YACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACnB,gBAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;YACtB;QACF;IACF;AAEA,IAAA,OAAO,KAAK;AACd;AAEA,SAAS,WAAW,CAClB,IAAiC,EACjC,KAAuC,EAAA;AAEvC,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7C,QAAA,OAAO,EAAE;IACX;IAEA,MAAM,QAAQ,GAA0B,EAAE;AAC1C,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAE9B,IAAA,KAAK,MAAM,MAAM,IAAI,IAAI,EAAE;AACzB,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACzB;QACF;QAEA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE;YACV;QACF;AAEA,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AACb,QAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;IACtB;AAEA,IAAA,OAAO,QAAQ;AACjB;AAEA,SAAS,QAAQ,CACf,IAAoC,EACpC,aAAuB,EAAA;AAEvB,IAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;AACxC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;AAChC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,YAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C;IACF;AAEA,IAAA,OAAO,IAAI;AACb;AAEA,SAAS,aAAa,CACpB,MAA6B,EAC7B,IAAoC,EAAA;AAEpC,IAAA,QACE,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU;AACrC,QAAA,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS;SAClC,CAAC,IAAI,CAAC,cAAc;YACnB,CAAC,MAAM,CAAC,cAAc;YACtB,MAAM,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,CAAC;AAEpD;AAEA,SAAS,aAAa,CACpB,MAA6B,EAC7B,IAAoC,EACpC,cAAuB,EAAA;AAEvB,IAAA,QACE,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY;SACxC,CAAC,IAAI,CAAC,cAAc;YACnB,CAAC,MAAM,CAAC,cAAc;AACtB,YAAA,MAAM,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,CAAC;AAChD,SAAC,CAAC,cAAc;YACd,CAAC,MAAM,CAAC,cAAc;AACtB,YAAA,MAAM,CAAC,cAAc,KAAK,cAAc,CAAC;AAE/C;AAEA,SAAS,aAAa,CAAC,KAAsB,EAAA;IAC3C,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,GAAG,EAAE,KAAK,CAAC,cAAc;AACzB,QAAA,MAAM,EAAE;YACN,KAAK,CAAC,MAAM,CAAC,cAAc;YAC3B,KAAK,CAAC,MAAM,CAAC,UAAU;YACvB,KAAK,CAAC,MAAM,CAAC,SAAS;AACtB,YAAA,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;AAC9B,YAAA,KAAK,CAAC,MAAM,CAAC,oBAAoB,IAAI,IAAI;AACzC,YAAA,KAAK,CAAC,MAAM,CAAC,kBAAkB,IAAI,IAAI;AACxC,SAAA;AACD,QAAA,MAAM,EAAE;YACN,KAAK,CAAC,MAAM,CAAC,cAAc;YAC3B,KAAK,CAAC,MAAM,CAAC,YAAY;YACzB,KAAK,CAAC,MAAM,CAAC,aAAa;AAC1B,YAAA,KAAK,CAAC,MAAM,CAAC,iBAAiB,IAAI,IAAI;AACtC,YAAA,KAAK,CAAC,MAAM,CAAC,kBAAkB,IAAI,IAAI;AACxC,SAAA;QACD,eAAe,EAAE,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC;QAC1D,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC;QAClD,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,cAAc,CAAC;AACnD,KAAA,CAAC;AACJ;AAEA,SAAS,wBAAwB,CAC/B,SAA0C,EAAA;AAE1C,IAAA,OAAO;AACJ,SAAA,GAAG,CAAC,CAAC,KAAK,KAAI;AACb,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO;AAClC,aAAA,GAAG,CAAC,CAAC,UAA0C,KAAI;AAClD,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,UAAU;AACzC,iBAAA,GAAG,CAAC,CAAC,SAAS,KACb,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC;AAElD,iBAAA,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAChB,oBAAoB,CAClB,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EACzC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAC1C,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB,KAAK,CAAC,MAAM,CAAC,YAAY,CAC1B,CACF;YAEH,OAAO;AACL,gBAAA,GAAG,EAAE,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC;gBACtC,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,MAAM;AACN,gBAAA,SAAS,EAAE,kBAAkB,CAC3B,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC,aAAa,CACxD;aACF;AACH,QAAA,CAAC;AACA,aAAA,MAAM,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;aACnD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAChB,oBAAoB,CAClB,IAAI,CAAC,SAAS,EACd,KAAK,CAAC,SAAS,EACf,IAAI,CAAC,GAAG,EACR,KAAK,CAAC,GAAG,CACV,CACF;QAEH,OAAO;YACL,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC;YACnD,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,kBAAkB,CAAC,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC;YAC/D,OAAO;SACR;AACH,IAAA,CAAC;AACA,SAAA,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;SAC1C,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAChB,oBAAoB,CAClB,IAAI,CAAC,SAAS,EACd,KAAK,CAAC,SAAS,EACf,IAAI,CAAC,GAAG,EACR,KAAK,CAAC,GAAG,CACV,CACF;AACL;AAEA,SAAS,wBAAwB,CAC/B,OAAkD,EAAA;IAElD,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAACA,gBAAc,CAAC;AAChE,IAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,QAAA,OAAO,YAAY;IACrB;IAEA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;IAC9C,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;AAE1D,IAAA,IACE,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,UAAU,CAAC,MAAM,KAAK,CAAC;AACvB,QAAA,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAC7B;AACA,QAAA,OAAO,EAAE;IACX;IAEA,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3E,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpE,MAAM,MAAM,GAAsB,EAAE;AACpC,IAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAE9B,IAAA,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE;AACnC,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,MAAM,EAAE;YACX;QACF;AAEA,QAAA,MAAM,cAAc,GAClB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC;AACjC,YAAA,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC;AACnC,YAAA,IAAI;QAEN,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAClC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,IAAI,SAAS,CAAC,CACvD;QACD,IAAI,CAAC,MAAM,EAAE;YACX;QACF;QAEA,MAAM,KAAK,GAAoBA,gBAAc,CAAC;AAC5C,YAAA,cAAc,EACZ,cAAc;AACd,gBAAA,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC;AACnC,gBAAA,YAAY,CAAC,MAAM,CAAC,cAAc,CAAC;gBACnC,EAAE;YACJ,MAAM;AACN,YAAA,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;AAC/B,YAAA,eAAe,EAAE,WAAW,CAC1B,QAAQ,CAAC,IAAI,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,EACxD,kBAAkB,CACnB;AACD,YAAA,WAAW,EAAE,WAAW,CACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,gBAAgB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC,EAC/D,eAAe,CAChB;AACD,YAAA,WAAW,EAAE,WAAW,CACtB,QAAQ,CAAC,IAAI,EAAE,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC,EACjD,eAAe,CAChB;AACF,SAAA,CAAC;AAEF,QAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACtB;QACF;AAEA,QAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClB,QAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACpB;AAEA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,qBAAqB,CAC5B,MAAyB,EAAA;AAEzB,IAAA,MAAM,MAAM,GAAG,IAAI,GAAG,EAQnB;AAEH,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,QAAA,MAAM,cAAc,GAClB,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS;AACtE,QAAA,MAAM,eAAe,GACnB,KAAK,CAAC,MAAM,CAAC,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU;AAC1D,QAAA,MAAM,QAAQ,GAAG,aAAa,CAC5B,eAAe,EACf,cAAc,EACd,KAAK,CAAC,MAAM,CAAC,SAAS,CACvB;QAED,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,KAAK,GAAG;AACN,gBAAA,SAAS,EAAE,eAAe;AAC1B,gBAAA,WAAW,EACT,KAAK,CAAC,MAAM,CAAC,iBAAiB,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,IAAI,IAAI;AACpE,gBAAA,SAAS,EAAE,kBAAkB,CAC3B,KAAK,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CACnD;gBACD,OAAO,EAAE,IAAI,GAAG,EAA0C;aAC3D;AACD,YAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC;QAC7B;QAEA,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9C,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;QAEnD,IAAI,cAAc,EAAE;AAClB,YAAA,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;YACjC;QACF;AAEA,QAAA,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE;AAC3B,YAAA,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,MAAM,EAAE,CAAC,KAAK,CAAC;AACf,YAAA,SAAS,EAAE,kBAAkB,CAC3B,KAAK,CAAC,MAAM,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CACpD;AACF,SAAA,CAAC;IACJ;IAEA,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;SAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM;QACtB,GAAG;QACH,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;AACvC,aAAA,GAAG,CAAC,CAAC,WAAW,MAAM;AACrB,YAAA,GAAG,WAAW;YACd,MAAM,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAC/C,oBAAoB,CAClB,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EACzC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAC1C,IAAI,CAAC,MAAM,CAAC,YAAY,EACxB,KAAK,CAAC,MAAM,CAAC,YAAY,CAC1B,CACF;AACF,SAAA,CAAC;aACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAChB,oBAAoB,CAClB,IAAI,CAAC,SAAS,EACd,KAAK,CAAC,SAAS,EACf,IAAI,CAAC,GAAG,EACR,KAAK,CAAC,GAAG,CACV,CACF;AACJ,KAAA,CAAC;SACD,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,KAChB,oBAAoB,CAClB,IAAI,CAAC,SAAS,EACd,KAAK,CAAC,SAAS,EACf,IAAI,CAAC,GAAG,EACR,KAAK,CAAC,GAAG,CACV,CACF;AACL;AAEM,SAAU,4BAA4B,CAC1C,OAAkD,EAAA;IAElD,MAAM,eAAe,GAAG,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAC7E,IAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9B,QAAA,OAAO,eAAe;IACxB;AAEA,IAAA,OAAO,qBAAqB,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;AACjE;AAEM,SAAU,4BAA4B,CAC1C,OAAkD,EAAA;AAElD,IAAA,OAAO,4BAA4B,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KACzD,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM,CAAC,CAC3D;AACH;AAEM,SAAU,2BAA2B,CACzC,OAAkD,EAAA;IAElD,OAAO,4BAA4B,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;AACzD;;AC/cA,MAAMC,aAAW,GAA6B,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;AAE1E;;;;;AAKG;AACH,SAAS,QAAQ,CAAC,CAAkB,EAAA;IAClC,IAAI,CAAC,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC,GAAG;IACvB,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,GAAG,EAAE,CAAC,CAAC,cAAc;AACrB,QAAA,MAAM,EAAE;YACN,CAAC,CAAC,MAAM,CAAC,cAAc;YACvB,CAAC,CAAC,MAAM,CAAC,UAAU;YACnB,CAAC,CAAC,MAAM,CAAC,SAAS;AAClB,YAAA,CAAC,CAAC,MAAM,CAAC,oBAAoB,IAAI,IAAI;AACrC,YAAA,CAAC,CAAC,MAAM,CAAC,kBAAkB,IAAI,IAAI;AACnC,YAAA,CAAC,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI;AAC/B,YAAA,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI;AACxB,YAAA,CAAC,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI;AAC9B,YAAA,CAAC,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI;AAC/B,YAAA,CAAC,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;AAC3B,SAAA;AACD,QAAA,MAAM,EAAE;YACN,CAAC,CAAC,MAAM,CAAC,cAAc;YACvB,CAAC,CAAC,MAAM,CAAC,YAAY;YACrB,CAAC,CAAC,MAAM,CAAC,aAAa;AACtB,YAAA,CAAC,CAAC,MAAM,CAAC,iBAAiB,IAAI,IAAI;AAClC,YAAA,CAAC,CAAC,MAAM,CAAC,kBAAkB,IAAI,IAAI;AACpC,SAAA;AACD,QAAA,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,EAAE;AACxC,QAAA,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;AAChC,QAAA,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;AACjC,KAAA,CAAC;AACJ;AAEA,SAAS,cAAc,CAAC,CAAkB,EAAA;IACxC,OAAO;AACL,QAAA,GAAG,CAAC;AACJ,QAAA,eAAe,EAAE,CAAC,CAAC,eAAe,IAAI,EAAE;AACxC,QAAA,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;AAChC,QAAA,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,EAAE;KACjC;AACH;AAEA,SAAS,iBAAiB,CAAC,IAAuB,EAAE,KAAe,EAAA;AACjE,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,EAAE;SACzB,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG;SACtB,MAAM,CAAC,CAAC,GAAG,KAAoB,CAAC,CAAC,GAAG,CAAC;IAExC,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;AACpC,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC;AAC/B,IAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD;AAEA;;;;;;;;;AASG;MAOU,WAAW,CAAA;AACb,IAAA,KAAK,GAAG,KAAK,CAA2BA,aAAW,4EAAC;AACpD,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;AAChC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,gFAAC;AAC1C;;;;AAIG;AACM,IAAA,eAAe,GAAG,KAAK,CAAqB,SAAS,sFAAC;AAE9C,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAClC,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAElC,IAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY;AAClC,IAAA,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY;AAClC,IAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB;AACpD,IAAA,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB;AAC5C,IAAA,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB;AAC5C,IAAA,MAAM,GAAG,QAAQ,CAClC,MAAM,4BAA4B,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,6EACnD;IACkB,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;AACpE,QAAA,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;AAC7C,KAAA,CAAC;;IAGiB,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CACjD;AACkB,IAAA,aAAa,GAAG,MAAM,CAAoB,EAAE,oFAAC;AAC7C,IAAA,SAAS,GAAG,QAAQ,CAAa,MAClD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,gFACnC;AACkB,IAAA,UAAU,GAAG,QAAQ,CAAC,MAAK;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,GAAG,EAA2B;QAEhD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;AACjC,YAAA,KAAK,MAAM,WAAW,IAAI,KAAK,CAAC,OAAO,EAAE;AACvC,gBAAA,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE;AACtC,oBAAA,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;gBACnD;YACF;QACF;AAEA,QAAA,OAAO,KAAK;AACd,IAAA,CAAC,iFAAC;AAEF,IAAA,WAAA,GAAA;;QAEE,IAAI,WAAW,GAAG,KAAK;AACvB,QAAA,IAAI,mBAAuC;QAC3C,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE;AACxC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;AAChC,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAEjE,IAAI,CAAC,WAAW,EAAE;gBAChB,WAAW,GAAG,IAAI;gBAClB,mBAAmB,GAAG,SAAS;gBAC/B;YACF;AAEA,YAAA,IAAI,mBAAmB,KAAK,SAAS,EAAE;gBACrC,mBAAmB,GAAG,SAAS;AAC/B,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAACA,aAAW,CAAC;AAC3B,gBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;YACjC;AACF,QAAA,CAAC,CAAC;QAEF,IAAI,KAAK,GAAyC,IAAI;QACtD,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE;AACxC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE;YAChC,SAAS,CAAC,MAAK;AACb,gBAAA,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;AACpB,oBAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;oBAC/B;gBACF;AACA,gBAAA,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC;AAC9B,gBAAA,KAAK,GAAG,UAAU,CAChB,MACE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE;AAC1B,oBAAA,eAAe,EAAE,SAAS;oBAC1B,OAAO;iBACR,CAAC,EACJ,GAAG,CACJ;AACH,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AACpD,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,EAAE;AAEtC,YAAA,IAAI,iBAAiB,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE;gBAC9C;YACF;AAEA,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CACpB,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;gBACzB,GAAG;aACJ,CAAC,CAAC,CACJ;AACH,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,YAAY,CAAC,KAAsB,EAAA;QAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,iBAAiB,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACzD;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE;QAC/B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;aACvC,GAAG,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;aAC1D,MAAM,CAAC,CAAC,KAAK,KAA+B,CAAC,CAAC,KAAK,CAAC;QAEvD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM;AAC5B,YAAA,GAAG,KAAK;YACR,MAAM;AACP,SAAA,CAAC,CAAC;IACL;AAEU,IAAA,iBAAiB,CACzB,OAA2C,EAAA;QAE3C,OAAO,4BAA4B,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;IACtE;AAEU,IAAA,qBAAqB,CAAC,KAAqB,EAAA;AACnD,QAAA,OAAO,qBAAqB,CAAC,KAAK,CAAC;IACrC;AAEU,IAAA,kBAAkB,CAAC,KAAqB,EAAA;AAChD,QAAA,OAAO,qBAAqB,CAAC,KAAK,CAAC;IACrC;AAEU,IAAA,gBAAgB,CAAC,KAAwC,EAAA;AACjE,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM;IAC7B;AAEU,IAAA,gBAAgB,CACxB,WAA2C,EAAA;AAE3C,QAAA,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM;IAClC;AAEQ,IAAA,cAAc,CACpB,MAA2C,EAAA;QAE3C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AAC5B,YAAA,GAAG,EAAE,CAAA,MAAA,EAAS,KAAK,CAAC,GAAG,CAAA,CAAE;AACzB,YAAA,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAA,CAAA,CAAG;AACvE,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,KACtC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAClC;AACF,SAAA,CAAC,CAAC;IACL;AAEQ,IAAA,eAAe,CACrB,WAA2C,EAAA;QAE3C,OAAO;AACL,YAAA,GAAG,EAAE,CAAA,OAAA,EAAU,WAAW,CAAC,GAAG,CAAA,CAAE;AAChC,YAAA,KAAK,EAAE,CAAA,EAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA,EAAA,EAAK,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAA,CAAA,CAAG;AACpF,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC5B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,MAAM;AAC3C,gBAAA,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;AACpB,gBAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AACjC,gBAAA,UAAU,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE;AAC7B,aAAA,CAAC,CAAC;SACJ;IACH;AAEQ,IAAA,aAAa,CAAC,KAAwC,EAAA;QAC5D,OAAO,KAAK,CAAC;cACT,yBAAyB,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE;AACrE,cAAE,qBAAqB,CAAC,KAAK,CAAC,SAAS,CAAC;IAC5C;AAEQ,IAAA,cAAc,CAAC,WAA2C,EAAA;QAChE,OAAO,2BAA2B,CAChC,WAAW,CAAC,MAAM,EAClB,IAAI,CAAC,eAAe,EAAE,CACvB;IACH;AAEQ,IAAA,cAAc,CAAC,KAAsB,EAAA;QAC3C,OAAO,2BAA2B,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC;IAC1E;IAEQ,eAAe,GAAA;QACrB,OAAO,IAAI,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;IAC5D;uGAtMW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAX,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjHxB,+0NAgMA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDnFY,YAAY,+BAAE,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,eAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,kBAAA,EAAA,SAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,eAAA,EAAA,uBAAA,EAAA,cAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,aAAA,EAAA,wBAAA,EAAA,sBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,4BAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAIrD,WAAW,EAAA,UAAA,EAAA,CAAA;kBANvB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iBAAiB,EAAA,OAAA,EAClB,CAAC,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,kBAAkB,CAAC,EAAA,eAAA,EAEhD,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,+0NAAA,EAAA;;AA2MjD,SAAS,yBAAyB,CAChC,KAA6B,EAC7B,QAAgB,EAAA;AAEhB,IAAA,QACE,4BAA4B,CAAC,KAAK,EAAE,QAAQ,CAAC;AAC7C,QAAA,qBAAqB,CAAC,OAAO,KAAK,KAAK,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC;AAEnE;;AEzRA,MAAM,WAAW,GAA6B,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;AAY1E,SAAS,mCAAmC,GAAA;AAC1C,IAAA,IAAI,OAAO,YAAY,KAAK,WAAW,EAAE;AACvC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,IAAI;QACF,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;AACxC,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;QAErB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmC;AAChE,QAAA,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;QAEtD,MAAM,KAAK,GACT,CAAE,MAAM,CAAC,OAAO,CAAyC,IAAI,MAAM;AACnE,YAAA,IAAI;AACN,QAAA,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,CAAwC;AAC1E,QAAA,MAAM,IAAI,GACP,WAAW,GAAG,MAAM,CAAyC;AAC9D,YAAA,WAAW;AAEb,QAAA,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;AAAE,YAAA,OAAO,IAAI;AAElD,QAAA,MAAM,EAAE,GACL,IAAI,CAAC,IAAI,CAAwB;YACjC,IAAI,CAAC,QAAQ,CAAwB;AACxC,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,IAAI;AAEpB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;AAC3B,QAAA,MAAM,SAAS,GACb,OAAO,KAAK,KAAK;AACf,cAAE;eACE,KAA2C,EAAE,QAAQ,IAAI,IAAI,CAAC;QAEtE,OAAO;YACL,EAAE;AACF,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,WAAW,EACR,IAAI,CAAC,aAAa,CAAwB;gBAC1C,IAAI,CAAC,MAAM,CAAwB;gBACnC,IAAI,CAAC,UAAU,CAAwB;gBACxC,EAAE;AACJ,YAAA,QAAQ,EAAG,IAAI,CAAC,UAAU,CAAwB,IAAI,EAAE;AACxD,YAAA,KAAK,EAAG,IAAI,CAAC,OAAO,CAAwB,IAAI,IAAI;AACpD,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;SACjC;IACH;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;AAEA,SAAS,aAAa,CAAC,KAAc,EAAA;AACnC,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,SAAS;IAClC;IAEA,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACvC,QAAA,OAAO,SAAS;IAClB;IAEA,MAAM,MAAM,GAAG,KAAgC;IAC/C,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE;AAClC,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC;QAC7B,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,EAAE,EAAE;AACrD,YAAA,OAAO,SAAS,CAAC,IAAI,EAAE;QACzB;IACF;AAEA,IAAA,OAAO,SAAS;AAClB;AAEA;;;;;;;AAOG;AAeW,MAAO,cAAc,CAAA;AACxB,IAAA,iBAAiB,GAAG,KAAK,CAAuB,IAAI,wFAAC;AACrD,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;AACzC;;;;AAIG;AACM,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,gFAAC;IAEzB,SAAS,GAAG,mCAAmC;IAC/C,SAAS,GAAG,oCAAoC;AAEjE,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,GAAG,GAAa,MAAM,CAAC,QAAQ,CAAC;AACf,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACpC,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEnD,IAAA,qBAAqB,GAAG,IAAI,WAAW,EAAE;IACzC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC;AAE7D,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAC3B,IAAA,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe;AAC7C,IAAA,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY;AACvC,IAAA,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,iBAAiB;AACjD,IAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AAE/B,IAAA,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAEpD,IAAA,KAAK,GAAG,MAAM,CAA2B,WAAW,4EAAC;AACrD,IAAA,gBAAgB,GAAG,MAAM,CAC1C,mCAAmC,EAAE,uFACtC;;AAGkB,IAAA,mBAAmB,GAAG,QAAQ,CAAqB,MAAK;AACzE,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,OAAO,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,YAAY,CAAC;QACtD;AACA,QAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE;AACpC,IAAA,CAAC,0FAAC;;AAGiB,IAAA,eAAe,GAAG,QAAQ,CAC3C,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,EAAE,sFACxD;IAEkB,mBAAmB,GAAG,MAAM,CAAC;AAC9C,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACxE,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACxE,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACzE,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AAC3E,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AAC1E,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACxE,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AAC3E,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEiB,IAAA,UAAU,GAAG,QAAQ,CAAoB,OAAO;AACjE,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,GAAG,EAAE,gBAAgB;AACrB,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,oDAAoD;AAC/D,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE;AACN,oBAAA,IAAI,qBAAqB,CAAC;AACxB,wBAAA,GAAG,EAAE,cAAc;wBACnB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kCAAkC,CAAC;AACnE,wBAAA,MAAM,EAAE,gBAAgB;wBACxB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,wBAAA,UAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;wBACxC,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,KAAK,EAAE,CAAC;AACR,wBAAA,QAAQ,EACN,IAAI,CAAC,QAAQ,EAAE;4BACf,CAAC,IAAI,CAAC,SAAS,EAAE;AACjB,4BAAA,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE;qBAC7B,CAAC;AACF,oBAAA,IAAI,qBAAqB,CAAC;AACxB,wBAAA,GAAG,EAAE,YAAY;wBACjB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC;AACjE,wBAAA,MAAM,EAAE,gBAAgB;wBACxB,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,wBAAA,UAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;wBACxC,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,KAAK,EAAE,CAAC;wBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE;qBACxD,CAAC;AACF,oBAAA,IAAI,mBAAmB,CAAC;AACtB,wBAAA,GAAG,EAAE,aAAa;wBAClB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;wBAC/D,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CACnC,8BAA8B,CAC/B;wBACD,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,KAAK,EAAE,CAAC;AACR,wBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;qBAC1B,CAAC;AACF,oBAAA,IAAI,eAAe,CAAC;AAClB,wBAAA,GAAG,EAAE,sBAAsB;wBAC3B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;wBAC/D,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CACnC,8BAA8B,CAC/B;AACD,wBAAA,UAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AACxC,wBAAA,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,KAAK,EAAE,CAAC;AACR,wBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;qBAC1B,CAAC;AACF,oBAAA,IAAI,eAAe,CAAC;AAClB,wBAAA,GAAG,EAAE,oBAAoB;wBACzB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;wBAC7D,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;AACnE,wBAAA,UAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;AACxC,wBAAA,QAAQ,EAAE,IAAI;wBACd,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,wBAAA,OAAO,EAAE,CAAC;AACV,wBAAA,KAAK,EAAE,CAAC;AACR,wBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;qBAC1B,CAAC;AACF,oBAAA,IAAI,sBAAsB,CAAC;AACzB,wBAAA,GAAG,EAAE,oBAAoB;wBACzB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;AAC7D,wBAAA,OAAO,EAAE;AACP,4BAAA;gCACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;AAC7D,gCAAA,KAAK,EAAE,WAAW;AACnB,6BAAA;AACD,4BAAA;gCACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7B,+BAA+B,CAChC;AACD,gCAAA,KAAK,EAAE,cAAc;AACtB,6BAAA;AACF,yBAAA;AACD,wBAAA,WAAW,EAAE,OAAO;AACpB,wBAAA,WAAW,EAAE,OAAO;AACpB,wBAAA,UAAU,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;wBACxC,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,KAAK,EAAE,CAAC;AACR,wBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;qBAC1B,CAAC;AACF,oBAAA,IAAI,sBAAsB,CAAC;AACzB,wBAAA,GAAG,EAAE,cAAc;wBACnB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC;AAChE,wBAAA,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE;AACnC,wBAAA,WAAW,EAAE,OAAO;AACpB,wBAAA,WAAW,EAAE,OAAO;AACpB,wBAAA,iBAAiB,EAAE,CAAC;AACpB,wBAAA,SAAS,EAAE;AACT,4BAAA;AACE,gCAAA,GAAG,EAAE,oBAAoB;AACzB,gCAAA,KAAK,EAAE,cAAc;AACrB,gCAAA,MAAM,EAAE,MAAM;AACf,6BAAA;AACF,yBAAA;wBACD,QAAQ,EAAE,IAAI,CAAC,SAAS;AACxB,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,KAAK,EAAE,CAAC;AACR,wBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;qBAC1B,CAAC;AACF,oBAAA,IAAI,iBAAiB,CAAC;AACpB,wBAAA,GAAG,EAAE,kBAAkB;wBACvB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7B,mCAAmC,CACpC;AACD,wBAAA,QAAQ,EAAE,CAAA,EAAG,IAAI,CAAC,SAAS,CAAA,KAAA,CAAO;AAClC,wBAAA,KAAK,EAAE,CAAC;AACR,wBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;qBAC1B,CAAC;AACH,iBAAA;AACF,aAAA;AACF,SAAA;AACF,KAAA,CAAC,iFAAC;AAEH,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACxC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE;AACvB,YAAA,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,EAAE;AAC/D,gBAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;oBACpC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;AACvD,oBAAA,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa;AAC/B,oBAAA,WAAW,EAAE,EAAE;AACf,oBAAA,oBAAoB,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW;AACvC,oBAAA,kBAAkB,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS;AACnC,oBAAA,kBAAkB,EAAE,CAAC,CAAC,GAAG,CAAC,WAAW;AACrC,oBAAA,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE;oBACtC,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,IAAI,KAAK;AAC5D,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACb,oBAAA,MAAM,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE;AAC7B,oBAAA,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,IAAI,EAAE;AAClC,iBAAA,CAAC;YACJ;iBAAO,IAAI,CAAC,OAAO,EAAE;AACnB,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC/B,oBAAA,YAAY,EAAE,IAAI;AAClB,oBAAA,kBAAkB,EAAE,WAAW;AAC/B,oBAAA,gBAAgB,EAAE,IAAI;AACvB,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;YAC7B;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE;AAChD,YAAA,IAAI,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,EAAE;gBACrE;YACF;AAEA,YAAA,MAAM,iBAAiB,GAAG,aAAa,CACrC,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,EAAE,YAAY,CACvD;AACD,YAAA,IAAI,iBAAiB,KAAK,gBAAgB,CAAC,EAAE,EAAE;gBAC7C;YACF;AAEA,YAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;AACpC,gBAAA,YAAY,EAAE,gBAAgB;AAC/B,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;AACN,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;QACxC,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/D;IACF;IAEmB,SAAS,GAAG,QAAQ,CACrC,MACE,CAAC,IAAI,CAAC,QAAQ,EAAE;QAChB,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAC9B,QAAA,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE;AACrB,QAAA,IAAI,CAAC,YAAY,EAAG,CAAC,OAAO;AAC5B,QAAA,CAAC,IAAI,CAAC,iBAAiB,EAAE,gFAC5B;IAED,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK;YAAE;AAC1D,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YAAE;QAEvB,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE;AACtD,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;QAC1B,MAAM,kBAAkB,IAAI,KAAK,EAAE,kBAAkB,IAAI,WAAW,CAElD;AAClB,QAAA,MAAM,YAAY,GAChB,kBAAkB,KAAK,cAAc,IAAI,KAAK,EAAE,YAAY,IAAI,EAAE,IAAI,EAAE;AAC1E,QAAA,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW;AACtC,QAAA,MAAM,oBAAoB,GAAG,KAAK,EAAE,oBAAoB;AACxD,QAAA,MAAM,kBAAkB,GAAG,KAAK,EAAE,kBAAkB;AACpD,QAAA,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,EAAE,gBAAgB;QAClD,MAAM,eAAe,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE;AAC9D,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;AAEtD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;AACxC,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,mBAAmB,IAAI,CAAC,eAAe,EAAE;gBAC5C;YACF;AAEA,YAAA,MAAM,IAAI,GAAmC;AAC3C,gBAAA,eAAe,EAAE,mBAAmB;gBACpC,eAAe;gBACf,WAAW;gBACX,oBAAoB;gBACpB,kBAAkB;gBAClB,kBAAkB;gBAClB,YAAY;gBACZ,gBAAgB;gBAChB,KAAK;aACN;YAED,IAAI,OAAO,EAAE;AACX,gBAAA,MAAM,gBAAgB,GACpB,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,IAAI,OAAO,CAAC,UAAU;AACtD,gBAAA,MAAM,GAAG,GAAmC;AAC1C,oBAAA,GAAG,IAAI;AACP,oBAAA,UAAU,EAAE,gBAAgB;iBAC7B;AACD,gBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;oBAC9D,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACjC,iBAAA,CAAC;gBACF;YACF;YAEA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;gBACzC,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACjC,aAAA,CAAC;YACF;QACF;AAEA,QAAA,MAAM,IAAI,GAA8B;AACtC,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,UAAU,EAAE,eAAe;YAC3B,WAAW;YACX,oBAAoB;YACpB,kBAAkB;YAClB,kBAAkB;YAClB,YAAY;YACZ,gBAAgB;YAChB,KAAK;SACN;QAED,IAAI,OAAO,EAAE;;;AAGX,YAAA,MAAM,gBAAgB,GACpB,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,IAAI,OAAO,CAAC,UAAU;AACtD,YAAA,MAAM,GAAG,GAA8B;AACrC,gBAAA,GAAG,IAAI;AACP,gBAAA,UAAU,EAAE,gBAAgB;aAC7B;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;gBACxD,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACjC,aAAA,CAAC;QACJ;aAAO;YACL,MAAM,GAAG,GAA8B,IAAI;YAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;gBAClC,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACjC,aAAA,CAAC;QACJ;IACF;AAEQ,IAAA,mBAAmB,CACzB,KAAiC,EAAA;QAEjC,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,MAAM;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,WAAW,EAAE,KAAK,CAAC,WAAW;AAC9B,YAAA,QAAQ,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW;AAC1C,YAAA,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;AAC1B,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,UAAU,EAAE,KAAK;SAClB;IACH;uGAxVmB,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClJnC,o3JA8IA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDNI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,uBAAA,EAAA,4BAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,WAAW,qJACX,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAKD,cAAc,EAAA,UAAA,EAAA,CAAA;kBAdlC,SAAS;+BACE,oBAAoB,EAAA,UAAA,EAClB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,MAAM;wBACN,WAAW;wBACX,mBAAmB;wBACnB,WAAW;wBACX,kBAAkB;qBACnB,EAAA,eAAA,EAEgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,o3JAAA,EAAA;;;AEhHjD;;AAEG;AAgBW,MAAO,sBAAsB,CAAA;AAChC,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,kFAAU;AACvC,IAAA,SAAS,GAAG,KAAK,CAAU,KAAK,gFAAC;AAEzB,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAClC,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAClC,IAAA,GAAG,GAAa,MAAM,CAAC,QAAQ,CAAC;AAEhC,IAAA,IAAI,GAAuC;AAC5D,QAAA,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,yBAAyB,EAAE;AACpD,QAAA,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,iCAAiC,EAAE;KAC1D;AACkB,IAAA,SAAS,GAAG,MAAM,CAAY,UAAU,gFAAC;AAEzC,IAAA,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe;AACvC,IAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;AAC3B,IAAA,GAAG,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,IAAI,0EAAC;IAEnE,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAC9D;AAEU,IAAA,MAAM,CAAC,GAAc,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;IACzB;IAEU,aAAa,GAAA;AACrB,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,cAAc,IAAI,aAAa;QAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,2BAAA,EAA8B,CAAC,CAAA,CAAE,CAAC;IACpE;AAEU,IAAA,mBAAmB,CAAC,MAA6B,EAAA;QACzD,OAAO,2BAA2B,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;IAC5E;AAEU,IAAA,mBAAmB,CAAC,MAA6B,EAAA;QACzD,OAAO,2BAA2B,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC;IAC5E;AAEU,IAAA,kBAAkB,CAC1B,OAA2C,EAAA;QAE3C,OAAO,4BAA4B,CACjC,OAAO,EACP,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,CAC/B;IACH;IAEU,UAAU,CAAC,KAAsB,EAAE,KAAc,EAAA;QACzD,OAAO,sBAAsB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;IACjD;uGAlDmB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAtB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClD3C,moMAkKA,EAAA,MAAA,EAAA,CAAA,oCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED3HI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,aAAa,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACd,kBAAkB,gMAClB,oBAAoB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAMH,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAf1C,SAAS;+BACE,6BAA6B,EAAA,UAAA,EAC3B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,MAAM;wBACN,aAAa;wBACb,cAAc;wBACd,kBAAkB;wBAClB,oBAAoB;qBACrB,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,moMAAA,EAAA,MAAA,EAAA,CAAA,oCAAA,CAAA,EAAA;;;AEDjD;;;;AAIG;AAiBW,MAAO,eAAe,CAAA;AAClC;;;;;AAKG;IACM,cAAc,GAAG,KAAK,CAAmB,IAAI,sFACpD,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAEF;;;AAGG;IACM,aAAa,GAAG,KAAK,CAAmB,IAAI,qFACnD,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AAEF;;;;;AAKG;IACM,SAAS,GAAG,KAAK,CAAmB,KAAK,iFAChD,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACO,IAAA,eAAe,GAAG,KAAK,CAAS,mBAAmB,sFAAC;AACpD,IAAA,mBAAmB,GAAG,KAAK,CAAS,2BAA2B,0FAAC;IAChE,mBAAmB,GAAG,KAAK,CAAmB,KAAK,2FAC1D,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACO,IAAA,qBAAqB,GAAG,KAAK,CAAS,4BAA4B,4FAAC;AACnE,IAAA,cAAc,GAAG,KAAK,CAAmC,IAAI,qFAAC;IAC9D,eAAe,GAAG,KAAK,CAAmB,IAAI,uFACrD,SAAS,EAAE,gBAAgB,EAAA,CAC3B;AACO,IAAA,mBAAmB,GAAG,KAAK,CAAS,4BAA4B,0FAAC;AACjE,IAAA,qBAAqB,GAAG,KAAK,CAAS,2BAA2B,4FAAC;AAClE,IAAA,cAAc,GAAG,KAAK,CAA4B,iBAAiB,qFAAC;AAE5D,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAClC,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAElC,IAAA,eAAe,GAAG,YAAY,CAAC,MAAM;AACtD,QAAA;AACE,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,IAAI,EAAE,mBAAmB;AACzB,YAAA,UAAU,EAAE,2BAA2B;AACxC,SAAA;AACD,QAAA;YACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,mCAAmC,CAAC;AACpE,YAAA,UAAU,EAAE,iCAAiC;AAC9C,SAAA;AACD,QAAA;YACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC;AACrD,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEiB,IAAA,SAAS,GAAG,MAAM,CAAgB,IAAI,gFAAC;AACvC,IAAA,YAAY,GAAG,QAAQ,CAAC,MACzC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,mFACjD;AACkB,IAAA,IAAI,GAAG,QAAQ,CAAC,MAAK;AACtC,QAAA,MAAM,IAAI,GAAG;AACX,YAAA;AACE,gBAAA,KAAK,EAAE,IAAqB;gBAC5B,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,gBAAgB,CAAC;AACxE,aAAA;AACD,YAAA;AACE,gBAAA,KAAK,EAAE,UAA2B;AAClC,gBAAA,KAAK,EAAE,IAAI,CAAC,mBAAmB;AAC7B,sBAAE,CAAA,EAAG,IAAI,CAAC,YAAY,CAAC,4BAA4B,EAAE,SAAS,CAAC,CAAA,GAAA,EAAM,IAAI,CAAC,YAAY,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAA;sBAC3H,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,iBAAiB,CAAC;AACrE,aAAA;SACF;AAED,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE,EAAE;YAC1B,IAAI,CAAC,IAAI,CAAC;AACR,gBAAA,KAAK,EAAE,WAA4B;gBACnC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,WAAW,CAAC;AAClE,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC,2EAAC;IAEiB,SAAS,GAAG,QAAQ,CAAC,MACtC,IAAI,CAAC,SAAS;AACZ,UAAE,IAAI,CAAC,MAAM,CAAC,cAAc;AAC5B,UAAE,IAAI,CAAC,SAAS,EAAE,KAAK;AACrB,cAAE,IAAI,CAAC,MAAM,CAAC,WAAW;cACvB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,gFACtC;IACkB,IAAI,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,SAAS;AACZ,UAAE,IAAI,CAAC,MAAM,CAAC,UAAU;AACxB,UAAE,IAAI,CAAC,SAAS,EAAE,KAAK;AACrB,cAAE,IAAI,CAAC,MAAM,CAAC,OAAO;cACnB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,2EAClC;AACkB,IAAA,SAAS,GAAG,QAAQ,CAAuB,MAC5D,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM;AACxB,QAAA,GAAG,GAAG;QACN,UAAU,EAAE,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC3D,QAAA,aAAa,EAAE,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC;AACnD,QAAA,eAAe,EAAE,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC;AACzD,QAAA,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;KAC/B,CAAC,CAAC,gFACJ;IACkB,aAAa,GAAG,QAAQ,CAAC,MAC1C,IAAI,CAAC,SAAS;AACZ,UAAE;AACF,UAAE,IAAI,CAAC,SAAS,EAAE,KAAK;AACrB,cAAE;AACF,cAAE,IAAI,CAAC,SAAS,EAAE,KAAK;AACrB,kBAAE,IAAI,CAAC,qBAAqB;AAC5B,kBAAE,IAAI,CAAC,qBAAqB,EAAE,oFACrC;AAEkB,IAAA,YAAY,GAAG,QAAQ,CAAgB,MAAM;AAC9D,QAAA;AACE,YAAA,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC5D,YAAA,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAClC,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;IAEiB,UAAU,GAAG,MAAM,CAAgB;AACpD,QAAA;AACE,YAAA,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC;AAC5D,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AACrD,YAAA,MAAM,EAAE,CAAC,GAAkB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACvD,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC;AAC5D,YAAA,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAClD,YAAA,MAAM,EAAE,CAAC,GAAkB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACvD,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;AAC/D,YAAA,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AACjD,YAAA,MAAM,EAAE,CAAC,GAAkB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;AACzD,YAAA,OAAO,EAAE,CAAC,GAAkB,KAC1B,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA,QAAA,EAAW,GAAG,CAAC,YAAY,EAAE,CAAC;AACxD,YAAA,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAChC,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,iBAAiB;YACvB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC9D,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,OAAO,EAAE,UAAU;;YAEnB,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAChD,YAAA,MAAM,EAAE,CAAC,GAAkB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AACzD,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC9D,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAChD,YAAA,MAAM,EAAE,CAAC,GAAkB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AACxD,YAAA,OAAO,EAAE,CAAC,GAAkB,KAC1B,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,YAAY,EAAE,CAAC;YACvD,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE;AAC5D,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iCAAiC,CAAC;AACpE,YAAA,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,CAAC,GAAkB,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACtD,YAAA,MAAM,EAAE,CAAC,GAAkB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC;AAC/D,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEe,IAAA,YAAY,GAA8C;AACzE,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,SAAS,EAAE,SAAS;AACpB,QAAA,eAAe,EAAE,SAAS;AAC1B,QAAA,aAAa,EAAE,SAAS;AACxB,QAAA,OAAO,EAAE,SAAS;AAClB,QAAA,QAAQ,EAAE,SAAS;AACnB,QAAA,SAAS,EAAE,SAAS;KACrB;AAEkB,IAAA,SAAS,GAAG,YAAY,CAEzC,OAAO;AACP,QAAA,MAAM,EAAE;YACN,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC9D,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM;AAChC,SAAA;AACD,QAAA,SAAS,EAAE;YACT,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;AACjE,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;AACnC,SAAA;AACD,QAAA,eAAe,EAAE;YACf,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oCAAoC,CAAC;AACvE,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,eAAe;AACzC,SAAA;AACD,QAAA,aAAa,EAAE;YACb,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kCAAkC,CAAC;AACrE,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa;AACvC,SAAA;AACD,QAAA,OAAO,EAAE;YACP,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;AAC/D,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO;AACjC,SAAA;AACD,QAAA,QAAQ,EAAE;YACR,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC;AAChE,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ;AAClC,SAAA;AACD,QAAA,SAAS,EAAE;YACT,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;AACjE,YAAA,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,SAAS;AACnC,SAAA;AACF,KAAA,CAAC,gFAAC;AAEgB,IAAA,YAAY,GAAG,YAAY,CAAc,MAAK;AAC/D,QAAA,MAAM,WAAW,GAAgB;AAC/B,YAAA;AACE,gBAAA,GAAG,EAAE,iBAAiB;gBACtB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC5D,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,aAAa;gBAClB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;AAC/D,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,WAAW;gBAChB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;AAC7D,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,cAAc;gBACnB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC;AACjE,gBAAA,IAAI,EAAE,UAAU;AACjB,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,UAAU;gBACf,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC;AAC1D,gBAAA,IAAI,EAAE,MAAM;AACb,aAAA;SACF;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,OAAO;AACL,gBAAA;AACE,oBAAA,GAAG,EAAE,eAAe;oBACpB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kCAAkC,CAAC;AACnE,oBAAA,IAAI,EAAE,MAAM;AACb,iBAAA;AACD,gBAAA;AACE,oBAAA,GAAG,EAAE,iBAAiB;oBACtB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC;AACjE,oBAAA,IAAI,EAAE,MAAM;AACb,iBAAA;AACD,gBAAA,GAAG,WAAW;aACf;QACH;QAEA,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7B,IAAI,CAAC,SAAS,EAAE,KAAK;AACnB,sBAAE;sBACA,kCAAkC,CACvC;AACD,gBAAA,IAAI,EAAE,MAAM;AACb,aAAA;AACD,YAAA,GAAG,WAAW;SACf;AACH,IAAA,CAAC,mFAAC;AAEe,IAAA,OAAO,GAAG,MAAM,CAAW,EAAE,8EAAC;AAE9B,IAAA,WAAW,GAAG;QAC7B,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,WAAW;QACX,UAAU;QACV,QAAQ;QACR,UAAU;KACF;IAEV,QAAQ,GAAA;QACN,IAAI,CAAC,cAAc,EAAE;IACvB;AAEU,IAAA,SAAS,CAAC,GAAkB,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,cAAc,EAAE;IACvB;IAEU,MAAM,GAAA;AACd,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;IACtB;IAEQ,cAAc,CACpB,KAAA,GAA6B,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAA;AAEtD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC3B;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B;AAAO,aAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,WAAW,EAAE;AAC3C,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtB,gBAAA,GAAG,KAAK;gBACR,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE;AAC9C,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;AACtB,gBAAA,GAAG,KAAK;gBACR,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,SAAS;AAC3D,aAAA,CAAC;QACJ;IACF;IAEQ,gBAAgB,GAAA;QACtB,IAAI,CAAC,cAAc,EAAE;IACvB;IAEU,GAAG,CAAC,GAAkB,EAAE,MAA+B,EAAA;QAC/D,OAAO,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK;IACtD;AAEU,IAAA,UAAU,CAAC,GAAkB,EAAA;AACrC,QAAA,IAAI,GAAG,CAAC,WAAW,KAAK,cAAc,IAAI,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE;YAClE,OAAO,GAAG,CAAC;AACR,iBAAA,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM;iBACnD,GAAG,CAAC,CAAC,CAAC,KACL,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA,iBAAA,EAAoB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;iBAEpE,IAAI,CAAC,IAAI,CAAC;QACf;QACA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;IAC/D;AAEU,IAAA,cAAc,CAAC,GAAkB,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,GAAG,GAAG,CAAC,aAAa,GAAG,GAAG,CAAC,SAAS;IACtE;IAEQ,YAAY,CAClB,GAA8B,EAC9B,QAAgB,EAAA;AAEhB,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,QAAQ;QAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC;QAChD,IAAI,OAAO,UAAU,KAAK,QAAQ;AAAE,YAAA,OAAO,QAAQ;AAEnD,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE;AAC/B,QAAA,OAAO,KAAK,IAAI,KAAK,KAAK,GAAG,GAAG,KAAK,GAAG,QAAQ;IAClD;AAEQ,IAAA,WAAW,CAAC,GAAkB,EAAA;QACpC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,sBAAsB,EAAE,QAAQ,EAAE;YACrD,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC;AAC3D,YAAA,UAAU,EACR,wEAAwE;AAC1E,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;gBACX,YAAY,EAAE,GAAG,CAAC,YAAY;AAC9B,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,aAAA;AACF,SAAA,CAAC;IACJ;AAEQ,IAAA,QAAQ,CAAC,GAAyB,EAAA;AACxC,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAC9B,cAAc,EACd,GAAG,GAAG,QAAQ,GAAG,QAAQ,EACzB;AACE,YAAA,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAC9B,GAAG,GAAG,yBAAyB,GAAG,2BAA2B,CAC9D;AACD,YAAA,UAAU,EAAE;AACV,kBAAE;AACF,kBAAE,wFAAwF;YAC5F,QAAQ,EAAE,GAAG,GAAG,KAAK,GAAG,EAAE;YAC1B,QAAQ,EAAE,GAAG,GAAG,cAAc,GAAG,MAAM;AACvC,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;AACX,gBAAA,iBAAiB,EAAE,GAAG;AACtB,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;AAC5B,aAAA;AACF,SAAA,CACF;QACD,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,KAAc,KAAI;AACvC,YAAA,IAAI,KAAK;gBAAE,IAAI,CAAC,gBAAgB,EAAE;AACpC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,OAAO,CAAC,GAAkB,EAAA;QAChC,IAAI,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,GAAG,CAAC,YAAY,CAAA,CAAE,EAAE,IAAI,CAAC;AAC9C,QAAA,IAAI,CAAC;AACF,aAAA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;AACxD,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,GAAG,CAAC,YAAY,CAAA,CAAE,EAAE,KAAK,CAAC,CAAC;AACpE,aAAA,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;IACvD;AAEQ,IAAA,MAAM,CAAC,GAAkB,EAAA;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,sBAAsB,EAAE,QAAQ,EAAE;YACjE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC7D,YAAA,UAAU,EAAE,oCAAoC;AAChD,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE;AACjC,SAAA,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAiB,KAAI;AAC1C,YAAA,IAAI,QAAQ;gBAAE,IAAI,CAAC,gBAAgB,EAAE;AACvC,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,MAAM,CAAC,GAAkB,EAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,YAAY,CAAA,CAAE,EAAE,IAAI,CAAC;AAC7C,QAAA,IAAI,CAAC;AACF,aAAA,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE;AACzD,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,YAAY,CAAA,CAAE,EAAE,KAAK,CAAC,CAAC;AACnE,aAAA,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;IACvD;AAEQ,IAAA,YAAY,CAAC,GAAkB,EAAA;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,QAAQ,EAAE;YAC7D,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iCAAiC,CAAC;AACnE,YAAA,UAAU,EAAE,oCAAoC;AAChD,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;AAClD,SAAA,CAAC;QACF,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAgB,KAAI;AACzC,YAAA,IAAI,OAAO;gBAAE,IAAI,CAAC,gBAAgB,EAAE;AACtC,QAAA,CAAC,CAAC;IACJ;IAEQ,IAAI,CAAC,GAAW,EAAE,EAAW,EAAA;AACnC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KACtB,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CACpD;IACH;uGAhdmB,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAf,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,eAAA,EAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,qBAAA,EAAA,EAAA,iBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpEpC,m6DAiEA,EAAA,MAAA,EAAA,CAAA,mJAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDTI,YAAY,sMACZ,UAAU,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACV,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,OAAA,EAAA,MAAA,EAAA,WAAA,EAAA,cAAA,EAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,KAAK,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,SAAA,EAAA,YAAA,EAAA,MAAA,EAAA,eAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,aAAA,EAAA,QAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACL,IAAI,4OACJ,kBAAkB,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAMD,eAAe,EAAA,UAAA,EAAA,CAAA;kBAhBnC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,UAAU;wBACV,IAAI;wBACJ,IAAI;wBACJ,KAAK;wBACL,IAAI;wBACJ,kBAAkB;qBACnB,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,m6DAAA,EAAA,MAAA,EAAA,CAAA,mJAAA,CAAA,EAAA;;;AE5DjD;;;;;AAKG;AACH,MAAM,OAAO,GAAG,4BAA4B;AAE5C,MAAM,uBAAuB,GAAG;IAC9B,mBAAmB;IACnB,kCAAkC;IAClC,wCAAwC;IACxC,0CAA0C;CAC3C;AAED,SAAS,QAAQ,CAAC,KAAc,EAAA;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;AACpD;AAEA,SAAS,cAAc,CAAC,KAAc,EAAE,KAAa,EAAA;AACnD,IAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACpB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC;AAC/B,IAAA,OAAO,OAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,IAAI;AAC3D;AAEA,SAAS,QAAQ,CAAC,KAAc,EAAE,KAAa,EAAA;AAC7C,IAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI;AAC9C;AAEA,SAAS,uBAAuB,CAAC,KAAwB,EAAA;AACvD,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK;IACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAEvC,OAAO;AACL,QAAA,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC;AAC/B,QAAA,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC;AAC5B,QAAA,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC;AAC7B,QAAA,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;AAC9B,QAAA,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC;QACjC,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI;AACtC,QAAA,KAAK,CAAC,OAAO;AACd;SACE,MAAM,CAAC,CAAC,KAAK,KAAsB,CAAC,CAAC,KAAK;SAC1C,IAAI,CAAC,GAAG,CAAC;AACd;AAEA,SAAS,yBAAyB,CAAC,SAAiB,EAAA;AAClD,IAAA,IAAI,uBAAuB,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE;AACxE,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE;AAC1C,IAAA,IACE,CAAC,UAAU,CAAC,QAAQ,CAAC,mBAAmB,CAAC;AACzC,QAAA,CAAC,UAAU,CAAC,QAAQ,CAAC,0BAA0B,CAAC;AAChD,QAAA,CAAC,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,EAC1C;AACA,QAAA,OAAO,KAAK;IACd;IAEA,OAAO;QACL,WAAW;QACX,uBAAuB;QACvB,gBAAgB;QAChB,eAAe;QACf,mCAAmC;QACnC,mCAAmC;QACnC,gCAAgC;AACjC,KAAA,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjD;AAEA,SAAS,yBAAyB,CAChC,KAAwB,EAAA;AAExB,IAAA,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC;AAChD,IAAA,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE;AACzC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,EAAE;AAE1C,IAAA,IACE,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACrC,QAAA,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EACrC;AACA,QAAA,OAAO,iBAAiB;IAC1B;AAEA,IAAA,IACE,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC;AAClC,QAAA,SAAS,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AACpC,QAAA,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;AACpC,QAAA,UAAU,CAAC,QAAQ,CAAC,mCAAmC,CAAC,EACxD;AACA,QAAA,OAAO,cAAc;IACvB;AAEA,IAAA,OAAO,cAAc;AACvB;AAEA;;;;AAIG;MACU,wBAAwB,GAAsB,CAAC,GAAG,EAAE,IAAI,KAAI;IACvE,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AACzB,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB;AAEA,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAC9C,IAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE;IAC5B,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB;IAEA,OAAO,IAAI,CACT,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,gBAAgB,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,EAAE,EAAE,CAAC,CACnE,CAAC,IAAI,CACJ,UAAU,CAAC,CAAC,KAAc,KAAI;QAC5B,IAAI,KAAK,YAAY,iBAAiB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE;AAC9D,YAAA,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,CAAC;YAC/C,IAAI,MAAM,EAAE;AACV,gBAAA,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC;gBACzB,MAAM,CAAC,cAAc,EAAE;YACzB;QACF;AAEA,QAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;IAChC,CAAC,CAAC,CACH;AACH;;AC5IA;;ACAA;;ACAA;;AAEG;;;;"}