@masterteam/delegations 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/delegations.css +1 -1
- package/assets/i18n/ar.json +142 -125
- package/assets/i18n/en.json +142 -125
- package/fesm2022/masterteam-delegations.mjs +610 -921
- package/fesm2022/masterteam-delegations.mjs.map +1 -1
- package/package.json +2 -2
- package/types/masterteam-delegations.d.ts +355 -496
|
@@ -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/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/topbar-delegation-menu/topbar-delegation-menu.ts","../../../../packages/masterteam/delegations/src/lib/delegations/topbar-delegation-menu/topbar-delegation-menu.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.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/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';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Chip } from '@masterteam/components/chip';\r\nimport { DelegationStatus } from '../../../store/delegations/delegations.model';\r\n\r\ninterface StatusVisual {\r\n i18nKey: string;\r\n styleClass: string;\r\n}\r\n\r\nconst STATUS_VISUAL: Record<DelegationStatus, StatusVisual> = {\r\n Active: {\r\n i18nKey: 'delegations.active',\r\n styleClass: 'mt-status-chip mt-status-chip--active',\r\n },\r\n Scheduled: {\r\n i18nKey: 'delegations.scheduled',\r\n styleClass: 'mt-status-chip mt-status-chip--scheduled',\r\n },\r\n PendingApproval: {\r\n i18nKey: 'delegations.pending-approval',\r\n styleClass: 'mt-status-chip mt-status-chip--pending',\r\n },\r\n Expired: {\r\n i18nKey: 'delegations.expired',\r\n styleClass: 'mt-status-chip mt-status-chip--expired',\r\n },\r\n Rejected: {\r\n i18nKey: 'delegations.rejected',\r\n styleClass: 'mt-status-chip mt-status-chip--rejected',\r\n },\r\n Cancelled: {\r\n i18nKey: 'delegations.cancelled',\r\n styleClass: 'mt-status-chip mt-status-chip--cancelled',\r\n },\r\n};\r\n\r\n@Component({\r\n selector: 'mt-delegation-status-chip',\r\n standalone: true,\r\n imports: [Chip, TranslocoDirective],\r\n template: `\r\n <ng-container *transloco=\"let t\">\r\n @let v = visual();\r\n <mt-chip [label]=\"t(v.i18nKey)\" [styleClass]=\"v.styleClass\"></mt-chip>\r\n </ng-container>\r\n `,\r\n styles: [\r\n `\r\n :host {\r\n display: inline-flex;\r\n }\r\n :host ::ng-deep .mt-status-chip {\r\n font-weight: 500;\r\n font-size: 0.75rem;\r\n border-radius: 9999px;\r\n padding-inline: 0.625rem;\r\n padding-block: 0.125rem;\r\n }\r\n :host ::ng-deep .mt-status-chip--active {\r\n background-color: rgb(220 252 231);\r\n color: rgb(22 101 52);\r\n }\r\n :host ::ng-deep .mt-status-chip--scheduled {\r\n background-color: rgb(219 234 254);\r\n color: rgb(30 64 175);\r\n }\r\n :host ::ng-deep .mt-status-chip--pending {\r\n background-color: rgb(254 249 195);\r\n color: rgb(133 77 14);\r\n }\r\n :host ::ng-deep .mt-status-chip--expired {\r\n background-color: rgb(243 244 246);\r\n color: rgb(75 85 99);\r\n }\r\n :host ::ng-deep .mt-status-chip--rejected {\r\n background-color: rgb(254 226 226);\r\n color: rgb(153 27 27);\r\n }\r\n :host ::ng-deep .mt-status-chip--cancelled {\r\n background-color: rgb(229 231 235);\r\n color: rgb(55 65 81);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--active {\r\n background-color: rgba(34, 197, 94, 0.2);\r\n color: rgb(134 239 172);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--scheduled {\r\n background-color: rgba(59, 130, 246, 0.2);\r\n color: rgb(147 197 253);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--pending {\r\n background-color: rgba(234, 179, 8, 0.2);\r\n color: rgb(253 224 71);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--expired {\r\n background-color: rgba(148, 163, 184, 0.2);\r\n color: rgb(203 213 225);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--rejected {\r\n background-color: rgba(239, 68, 68, 0.2);\r\n color: rgb(252 165 165);\r\n }\r\n :host-context(.dark) ::ng-deep .mt-status-chip--cancelled {\r\n background-color: rgba(148, 163, 184, 0.15);\r\n color: rgb(203 213 225);\r\n }\r\n `,\r\n ],\r\n})\r\nexport class DelegationStatusChip {\r\n readonly status = input.required<DelegationStatus>();\r\n\r\n protected readonly visual = computed<StatusVisual>(\r\n () => STATUS_VISUAL[this.status()],\r\n );\r\n}\r\n","import { DelegationSummary } from '../delegations/delegations.model';\r\n\r\n/** Reads sessionStorage + login candidates, restores any tab-local active session. */\r\nexport class BootstrapDelegationSession {\r\n static readonly type = '[DelegationSession] Bootstrap';\r\n}\r\n\r\n/** Replaces the candidate pool (called after LoginSuccess or when user.delegations changes). */\r\nexport class SetDelegationCandidates {\r\n static readonly type = '[DelegationSession] Set Candidates';\r\n constructor(public candidates: DelegationSummary[]) {}\r\n}\r\n\r\n/** Start a delegated session for the given assignment. */\r\nexport class StartDelegationSession {\r\n static readonly type = '[DelegationSession] Start';\r\n constructor(public delegationId: number) {}\r\n}\r\n\r\n/** End the current delegated session (server + local). */\r\nexport class EndDelegationSession {\r\n static readonly type = '[DelegationSession] End';\r\n constructor(public options: { silent?: boolean } = {}) {}\r\n}\r\n\r\n/** Atomically end current + start another. */\r\nexport class SwitchDelegationSession {\r\n static readonly type = '[DelegationSession] Switch';\r\n constructor(public delegationId: number) {}\r\n}\r\n\r\n/** Refresh the delegation access token via refresh-token rotation. */\r\nexport class RefreshDelegationSession {\r\n static readonly type = '[DelegationSession] Refresh';\r\n}\r\n\r\n/** Verify the current session against the server (used after bootstrap). */\r\nexport class VerifyDelegationSession {\r\n static readonly type = '[DelegationSession] Verify';\r\n}\r\n\r\n/** Surface a recoverable session error from any pipeline (e.g. 403 codes). */\r\nexport class DelegationSessionInvalidated {\r\n static readonly type = '[DelegationSession] Invalidated';\r\n constructor(\r\n public reason:\r\n | 'TokenPrincipalMismatch'\r\n | 'NotActive'\r\n | 'ScopeDenied'\r\n | 'Expired'\r\n | 'Unknown',\r\n ) {}\r\n}\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\nimport {\r\n DelegationSummary,\r\n DelegationTokenPair,\r\n} from '../delegations/delegations.model';\r\n\r\nexport const DELEGATION_SESSION_STORAGE_KEY = 'mt.delegation.session.v1';\r\n\r\nexport interface ActiveDelegationSession {\r\n accessToken: string;\r\n accessTokenExpiresAtUtc: string;\r\n refreshToken: string;\r\n refreshTokenExpiresAtUtc: string;\r\n delegation: DelegationSummary;\r\n}\r\n\r\nexport function toActiveSession(\r\n pair: DelegationTokenPair,\r\n): ActiveDelegationSession {\r\n return {\r\n accessToken: pair.accessToken,\r\n accessTokenExpiresAtUtc: pair.accessTokenExpiresAtUtc,\r\n refreshToken: pair.refreshToken,\r\n refreshTokenExpiresAtUtc: pair.refreshTokenExpiresAtUtc,\r\n delegation: pair.delegation,\r\n };\r\n}\r\n\r\nexport enum DelegationSessionActionKey {\r\n Bootstrap = 'bootstrap',\r\n StartSession = 'startSession',\r\n EndSession = 'endSession',\r\n RefreshSession = 'refreshSession',\r\n GetSession = 'getSession',\r\n}\r\n\r\nexport interface DelegationSessionStateModel extends LoadingStateShape<DelegationSessionActionKey> {\r\n active: ActiveDelegationSession | null;\r\n candidates: DelegationSummary[];\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport {\r\n Action,\r\n Actions,\r\n ofActionDispatched,\r\n ofActionSuccessful,\r\n Selector,\r\n State,\r\n StateContext,\r\n Store,\r\n} from '@ngxs/store';\r\nimport { handleApiRequest } from '@masterteam/components';\r\nimport { catchError, EMPTY, switchMap } from 'rxjs';\r\nimport { Response } from '../delegations/api.model';\r\nimport {\r\n DelegationSummary,\r\n DelegationTokenPair,\r\n} from '../delegations/delegations.model';\r\nimport {\r\n BootstrapDelegationSession,\r\n DelegationSessionInvalidated,\r\n EndDelegationSession,\r\n RefreshDelegationSession,\r\n SetDelegationCandidates,\r\n StartDelegationSession,\r\n SwitchDelegationSession,\r\n VerifyDelegationSession,\r\n} from './delegation-session.actions';\r\nimport {\r\n ActiveDelegationSession,\r\n DELEGATION_SESSION_STORAGE_KEY,\r\n DelegationSessionActionKey,\r\n DelegationSessionStateModel,\r\n toActiveSession,\r\n} from './delegation-session.model';\r\n\r\nconst BASE = 'identity/delegations';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Action shells for loose coupling with gateway-auth (matched by `type` string).\r\n// ---------------------------------------------------------------------------\r\nclass GatewayLoginSuccessShell {\r\n static readonly type = '[Auth] Login Success';\r\n}\r\nclass GatewayLogoutShell {\r\n static readonly type = '[Auth] Logout';\r\n}\r\n\r\nfunction readStored(): ActiveDelegationSession | null {\r\n try {\r\n const raw = sessionStorage.getItem(DELEGATION_SESSION_STORAGE_KEY);\r\n if (!raw) return null;\r\n const parsed = JSON.parse(raw) as ActiveDelegationSession;\r\n if (!parsed?.accessToken || !parsed?.accessTokenExpiresAtUtc) return null;\r\n if (new Date(parsed.accessTokenExpiresAtUtc).getTime() < Date.now()) {\r\n sessionStorage.removeItem(DELEGATION_SESSION_STORAGE_KEY);\r\n return null;\r\n }\r\n return parsed;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\nfunction writeStored(value: ActiveDelegationSession | null): void {\r\n try {\r\n if (value) {\r\n sessionStorage.setItem(\r\n DELEGATION_SESSION_STORAGE_KEY,\r\n JSON.stringify(value),\r\n );\r\n } else {\r\n sessionStorage.removeItem(DELEGATION_SESSION_STORAGE_KEY);\r\n }\r\n } catch {\r\n /* sessionStorage may be unavailable in some embeds; ignore */\r\n }\r\n}\r\n\r\n/**\r\n * Filters a delegation list to \"candidates the user could activate\".\r\n * Active + StartSession in allowedActions is the runtime gate.\r\n */\r\nexport function pickCandidates(\r\n delegations: DelegationSummary[] | undefined | null,\r\n): DelegationSummary[] {\r\n if (!Array.isArray(delegations)) return [];\r\n return delegations.filter(\r\n (d) => d.status === 'Active' && d.allowedActions?.includes('StartSession'),\r\n );\r\n}\r\n\r\n@State<DelegationSessionStateModel>({\r\n name: 'delegationSession',\r\n defaults: {\r\n active: null,\r\n candidates: [],\r\n loadingActive: [],\r\n errors: {},\r\n },\r\n})\r\n@Injectable()\r\nexport class DelegationSessionState {\r\n private http = inject(HttpClient);\r\n private actions$ = inject(Actions);\r\n private store = inject(Store);\r\n\r\n constructor() {\r\n // ---- Bridge to gateway-auth lifecycle (loose coupling via Actions stream) ----\r\n // We use local action *shells* matching gateway-auth's type strings to avoid\r\n // a hard project dependency on @masterteam/gateway-auth. NGXS matches actions\r\n // by the static `type` field, so any class with the same type string works.\r\n this.actions$\r\n .pipe(ofActionSuccessful(GatewayLoginSuccessShell))\r\n .subscribe(() => {\r\n this.store.dispatch(new BootstrapDelegationSession());\r\n });\r\n\r\n this.actions$\r\n .pipe(ofActionDispatched(GatewayLogoutShell))\r\n .subscribe(() => {\r\n this.store.dispatch(new EndDelegationSession({ silent: true }));\r\n });\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Selectors\r\n // ---------------------------------------------------------------------------\r\n\r\n @Selector()\r\n static getActive(\r\n state: DelegationSessionStateModel,\r\n ): ActiveDelegationSession | null {\r\n return state.active;\r\n }\r\n\r\n @Selector()\r\n static getCandidates(\r\n state: DelegationSessionStateModel,\r\n ): DelegationSummary[] {\r\n return state.candidates;\r\n }\r\n\r\n @Selector()\r\n static isDelegated(state: DelegationSessionStateModel): boolean {\r\n return !!state.active;\r\n }\r\n\r\n @Selector()\r\n static getLoadingActive(state: DelegationSessionStateModel): string[] {\r\n return state.loadingActive;\r\n }\r\n\r\n @Selector()\r\n static getErrors(\r\n state: DelegationSessionStateModel,\r\n ): Record<string, string | null | undefined> {\r\n return state.errors;\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Actions\r\n // ---------------------------------------------------------------------------\r\n\r\n @Action(BootstrapDelegationSession)\r\n bootstrap(ctx: StateContext<DelegationSessionStateModel>) {\r\n // 1. Hydrate active session from sessionStorage (tab-local).\r\n const stored = readStored();\r\n ctx.patchState({ active: stored });\r\n\r\n // 2. Hydrate candidates from gateway-auth user.delegations (loose lookup).\r\n const authUser = (this.store.snapshot() as Record<string, unknown>)['auth'];\r\n const userDelegations: DelegationSummary[] =\r\n (authUser as { user?: { delegations?: DelegationSummary[] } })?.user\r\n ?.delegations ?? [];\r\n ctx.patchState({ candidates: pickCandidates(userDelegations) });\r\n\r\n // 3. If we had a stored session, verify it against the server.\r\n if (stored) {\r\n this.store.dispatch(new VerifyDelegationSession());\r\n }\r\n }\r\n\r\n @Action(SetDelegationCandidates)\r\n setCandidates(\r\n ctx: StateContext<DelegationSessionStateModel>,\r\n { candidates }: SetDelegationCandidates,\r\n ) {\r\n ctx.patchState({ candidates });\r\n }\r\n\r\n @Action(VerifyDelegationSession)\r\n verify(ctx: StateContext<DelegationSessionStateModel>) {\r\n const req$ = this.http.get<Response<DelegationSummary | null>>(\r\n `${BASE}/session`,\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationSessionActionKey.GetSession,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n if (!response.data) {\r\n writeStored(null);\r\n return { active: null };\r\n }\r\n const current = ctx.getState().active;\r\n if (current && response.data.id === current.delegation.id) {\r\n // Server confirms the same delegation — keep token, just refresh summary.\r\n const updated: ActiveDelegationSession = {\r\n ...current,\r\n delegation: response.data,\r\n };\r\n writeStored(updated);\r\n return { active: updated };\r\n }\r\n // Mismatch — drop local session.\r\n writeStored(null);\r\n return { active: null };\r\n },\r\n });\r\n }\r\n\r\n @Action(StartDelegationSession)\r\n start(\r\n ctx: StateContext<DelegationSessionStateModel>,\r\n { delegationId }: StartDelegationSession,\r\n ) {\r\n const req$ = this.http.post<Response<DelegationTokenPair>>(\r\n `${BASE}/${delegationId}/token`,\r\n {},\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationSessionActionKey.StartSession,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n const active = toActiveSession(response.data);\r\n writeStored(active);\r\n return { active };\r\n },\r\n });\r\n }\r\n\r\n @Action(EndDelegationSession)\r\n end(\r\n ctx: StateContext<DelegationSessionStateModel>,\r\n { options }: EndDelegationSession,\r\n ) {\r\n const state = ctx.getState();\r\n // Always clear local state immediately.\r\n writeStored(null);\r\n ctx.patchState({ active: null });\r\n\r\n if (!state.active || options.silent) {\r\n return EMPTY;\r\n }\r\n // Fire-and-forget the server end call; failures don't roll back local clear.\r\n return this.http\r\n .post<Response<void>>(`${BASE}/session/end`, {})\r\n .pipe(catchError(() => EMPTY));\r\n }\r\n\r\n @Action(SwitchDelegationSession)\r\n switch(\r\n ctx: StateContext<DelegationSessionStateModel>,\r\n { delegationId }: SwitchDelegationSession,\r\n ) {\r\n return this.store\r\n .dispatch(new EndDelegationSession({ silent: true }))\r\n .pipe(\r\n switchMap(() =>\r\n this.store.dispatch(new StartDelegationSession(delegationId)),\r\n ),\r\n );\r\n }\r\n\r\n @Action(RefreshDelegationSession)\r\n refresh(ctx: StateContext<DelegationSessionStateModel>) {\r\n const current = ctx.getState().active;\r\n if (!current) return EMPTY;\r\n const req$ = this.http.post<Response<DelegationTokenPair>>(\r\n `${BASE}/token/refresh`,\r\n { refreshToken: current.refreshToken },\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationSessionActionKey.RefreshSession,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n const active = toActiveSession(response.data);\r\n writeStored(active);\r\n return { active };\r\n },\r\n });\r\n }\r\n\r\n @Action(DelegationSessionInvalidated)\r\n invalidated(ctx: StateContext<DelegationSessionStateModel>) {\r\n // Same effect as EndDelegationSession({ silent: true }), but as a distinct\r\n // signal so UI can react with a toast or modal.\r\n writeStored(null);\r\n ctx.patchState({ active: null });\r\n return EMPTY;\r\n }\r\n}\r\n","import { computed, inject, Injectable } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\nimport {\r\n BootstrapDelegationSession,\r\n DelegationSessionInvalidated,\r\n EndDelegationSession,\r\n RefreshDelegationSession,\r\n SetDelegationCandidates,\r\n StartDelegationSession,\r\n SwitchDelegationSession,\r\n VerifyDelegationSession,\r\n} from './delegation-session.actions';\r\nimport { DelegationSessionActionKey } from './delegation-session.model';\r\nimport { DelegationSessionState } from './delegation-session.state';\r\nimport { DelegationSummary } from '../delegations/delegations.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DelegationSessionFacade {\r\n private readonly store = inject(Store);\r\n\r\n // ---------------------------------------------------------------------------\r\n // Data slices\r\n // ---------------------------------------------------------------------------\r\n readonly active = select(DelegationSessionState.getActive);\r\n readonly candidates = select(DelegationSessionState.getCandidates);\r\n readonly isDelegated = select(DelegationSessionState.isDelegated);\r\n\r\n private readonly loadingActive = select(\r\n DelegationSessionState.getLoadingActive,\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Derived (used by interceptor + topbar menu)\r\n // ---------------------------------------------------------------------------\r\n readonly delegator = computed(\r\n () => this.active()?.delegation.delegator ?? null,\r\n );\r\n readonly accessToken = computed(() => this.active()?.accessToken ?? null);\r\n readonly accessTokenExpiresAtUtc = computed(\r\n () => this.active()?.accessTokenExpiresAtUtc ?? null,\r\n );\r\n readonly hasCandidates = computed(() => this.candidates().length > 0);\r\n\r\n readonly isStartingSession = computed(() =>\r\n this.loadingActive().includes(DelegationSessionActionKey.StartSession),\r\n );\r\n readonly isEndingSession = computed(() =>\r\n this.loadingActive().includes(DelegationSessionActionKey.EndSession),\r\n );\r\n readonly isRefreshingSession = computed(() =>\r\n this.loadingActive().includes(DelegationSessionActionKey.RefreshSession),\r\n );\r\n\r\n // ---------------------------------------------------------------------------\r\n // Dispatchers\r\n // ---------------------------------------------------------------------------\r\n bootstrap() {\r\n return this.store.dispatch(new BootstrapDelegationSession());\r\n }\r\n setCandidates(candidates: DelegationSummary[]) {\r\n return this.store.dispatch(new SetDelegationCandidates(candidates));\r\n }\r\n startSession(delegationId: number) {\r\n return this.store.dispatch(new StartDelegationSession(delegationId));\r\n }\r\n endSession(opts: { silent?: boolean } = {}) {\r\n return this.store.dispatch(new EndDelegationSession(opts));\r\n }\r\n switchSession(delegationId: number) {\r\n return this.store.dispatch(new SwitchDelegationSession(delegationId));\r\n }\r\n refreshSession() {\r\n return this.store.dispatch(new RefreshDelegationSession());\r\n }\r\n verifySession() {\r\n return this.store.dispatch(new VerifyDelegationSession());\r\n }\r\n invalidate(\r\n reason:\r\n | 'TokenPrincipalMismatch'\r\n | 'NotActive'\r\n | 'ScopeDenied'\r\n | 'Expired'\r\n | 'Unknown' = 'Unknown',\r\n ) {\r\n return this.store.dispatch(new DelegationSessionInvalidated(reason));\r\n }\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n} from '@angular/core';\r\nimport { TranslocoDirective } from '@jsverse/transloco';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\r\nimport { DelegationSummary } from '../../../store/delegations/delegations.model';\r\n\r\n/**\r\n * Confirmation dialog opened by the topbar menu before starting (or switching to)\r\n * a delegated session. Calls the facade and closes itself on success.\r\n */\r\n@Component({\r\n selector: 'mt-start-session-dialog',\r\n standalone: true,\r\n imports: [CommonModule, Avatar, Button, TranslocoDirective],\r\n templateUrl: './start-session-dialog.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class StartSessionDialog {\r\n readonly candidate = input.required<DelegationSummary>();\r\n readonly intent = input<'start' | 'switch'>('start');\r\n\r\n private readonly ref: ModalRef = inject(ModalRef);\r\n private readonly facade = inject(DelegationSessionFacade);\r\n\r\n protected readonly isBusy = computed(\r\n () => this.facade.isStartingSession() || this.facade.isEndingSession(),\r\n );\r\n\r\n protected readonly title = computed(() =>\r\n this.intent() === 'switch'\r\n ? 'delegations.switch-session-confirm-title'\r\n : 'delegations.start-session-confirm-title',\r\n );\r\n\r\n protected readonly body = computed(() =>\r\n this.intent() === 'switch'\r\n ? 'delegations.switch-session-confirm-body'\r\n : 'delegations.start-session-confirm-body',\r\n );\r\n\r\n confirm(): void {\r\n const id = this.candidate().id;\r\n const op$ =\r\n this.intent() === 'switch'\r\n ? this.facade.switchSession(id)\r\n : this.facade.startSession(id);\r\n op$.subscribe({\r\n next: () => this.ref.close(true),\r\n error: () => {\r\n /* facade publishes the error to the toast pipeline; just stay open */\r\n },\r\n });\r\n }\r\n\r\n cancel(): void {\r\n this.ref.close(false);\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <div class=\"flex flex-col gap-4 p-2\">\r\n <div class=\"flex items-start gap-3\">\r\n <mt-avatar\r\n [image]=\"candidate().delegator.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-12! h-12! text-lg! bg-surface-200!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <div class=\"text-base font-medium text-gray-900 truncate\">\r\n {{ candidate().delegator.displayName }}\r\n </div>\r\n @if (candidate().delegator.email) {\r\n <div class=\"text-xs text-gray-500 truncate\">\r\n {{ candidate().delegator.email }}\r\n </div>\r\n }\r\n @if (candidate().scopeSummary) {\r\n <div class=\"text-xs text-gray-500 mt-1\">\r\n {{ t(\"delegations.scope\") }}: {{ candidate().scopeSummary }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <p class=\"text-sm text-gray-600 leading-relaxed\">\r\n {{ t(body()) }}\r\n </p>\r\n\r\n <div class=\"flex justify-end gap-2 pt-2 border-t border-gray-200\">\r\n <mt-button\r\n variant=\"outlined\"\r\n color=\"secondary\"\r\n [label]=\"t('cancel')\"\r\n [disabled]=\"isBusy()\"\r\n (click)=\"cancel()\"\r\n ></mt-button>\r\n <mt-button\r\n color=\"primary\"\r\n icon=\"user.users-check\"\r\n [label]=\"\r\n intent() === 'switch'\r\n ? t('delegations.switch-session')\r\n : t('delegations.start-session')\r\n \"\r\n [loading]=\"isBusy()\"\r\n (click)=\"confirm()\"\r\n ></mt-button>\r\n </div>\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 inject,\r\n input,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { RouterLink } from '@angular/router';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { Popover } from 'primeng/popover';\r\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\r\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\r\nimport { DelegationSummary } from '../../../store/delegations/delegations.model';\r\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\r\n\r\n/**\r\n * Topbar surface for the delegation runtime.\r\n *\r\n * State A — no candidates, no active session: renders nothing.\r\n * State B — candidates exist, no active session: shows a \"Switch identity\" affordance.\r\n * State C — active delegation session: shows the delegator name + back/switch.\r\n *\r\n * Designed to be projected into a host topbar's `[actions]` slot (alongside the\r\n * existing user popover) — it does NOT replace the user dropdown.\r\n */\r\n@Component({\r\n selector: 'mt-topbar-delegation-menu',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Avatar,\r\n Button,\r\n Icon,\r\n Popover,\r\n RouterLink,\r\n TranslocoDirective,\r\n DelegationStatusChip,\r\n ],\r\n templateUrl: './topbar-delegation-menu.html',\r\n styleUrls: ['./topbar-delegation-menu.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class TopbarDelegationMenu {\r\n /** Path to the management page, e.g. `/control-panel/delegations` or `/delegations`. */\r\n readonly managePath = input<string>('/delegations');\r\n\r\n /** Compact mode hides the inline delegator name next to the button. */\r\n readonly compact = input<boolean>(false);\r\n\r\n private readonly facade = inject(DelegationSessionFacade);\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n protected readonly popover = viewChild.required<Popover>('popover');\r\n\r\n protected readonly active = this.facade.active;\r\n protected readonly candidates = this.facade.candidates;\r\n protected readonly hasCandidates = this.facade.hasCandidates;\r\n protected readonly isStarting = this.facade.isStartingSession;\r\n protected readonly isEnding = this.facade.isEndingSession;\r\n\r\n protected readonly delegatorName = computed(\r\n () => this.active()?.delegation.delegator.displayName ?? '',\r\n );\r\n\r\n /** State machine: which UI to render. */\r\n protected readonly mode = computed<'hidden' | 'candidates' | 'active'>(() => {\r\n if (this.active()) return 'active';\r\n if (this.hasCandidates()) return 'candidates';\r\n return 'hidden';\r\n });\r\n\r\n togglePopover(event: Event): void {\r\n this.popover().toggle(event);\r\n }\r\n\r\n startCandidate(candidate: DelegationSummary, event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.popover().hide();\r\n this.openConfirmation(candidate, 'start');\r\n }\r\n\r\n switchTo(candidate: DelegationSummary, event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.popover().hide();\r\n this.openConfirmation(candidate, 'switch');\r\n }\r\n\r\n endSession(event: MouseEvent): void {\r\n event.stopPropagation();\r\n this.popover().hide();\r\n this.facade.endSession().subscribe();\r\n }\r\n\r\n private openConfirmation(\r\n candidate: DelegationSummary,\r\n intent: 'start' | 'switch',\r\n ): void {\r\n this.modal.openModal(StartSessionDialog, 'dialog', {\r\n header: this.transloco.translate(\r\n intent === 'switch'\r\n ? 'delegations.switch-session'\r\n : 'delegations.start-session',\r\n ),\r\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n candidate,\r\n intent,\r\n },\r\n });\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n @if (mode() !== \"hidden\") {\r\n <div class=\"mt-delegation-trigger flex items-center gap-2\">\r\n <button\r\n type=\"button\"\r\n class=\"mt-delegation-trigger__button flex items-center gap-2 px-2 py-1 rounded-full cursor-pointer hover:bg-surface-100\"\r\n [attr.aria-label]=\"t('delegations.delegation-menu')\"\r\n (click)=\"togglePopover($event)\"\r\n >\r\n @if (mode() === \"active\") {\r\n <mt-icon\r\n icon=\"user.users-check\"\r\n styleClass=\"text-lg text-primary\"\r\n ></mt-icon>\r\n @if (!compact()) {\r\n <span class=\"mt-delegation-trigger__label text-sm font-medium\">\r\n {{ t(\"delegations.acting-on-behalf-of\") }}: {{ delegatorName() }}\r\n </span>\r\n }\r\n <mt-delegation-status-chip\r\n status=\"Active\"\r\n ></mt-delegation-status-chip>\r\n } @else {\r\n <mt-icon\r\n icon=\"user.users-plus\"\r\n styleClass=\"text-lg text-primary\"\r\n ></mt-icon>\r\n @if (!compact()) {\r\n <span class=\"mt-delegation-trigger__label text-sm font-medium\">\r\n {{ t(\"delegations.delegations-available\") }}\r\n </span>\r\n }\r\n }\r\n </button>\r\n </div>\r\n\r\n <p-popover #popover [pt]=\"{ content: { class: 'p-0!' } }\">\r\n <div class=\"flex flex-col min-w-80 max-w-96 p-0\">\r\n @if (mode() === \"active\" && active(); as session) {\r\n <!-- ============================================================ -->\r\n <!-- STATE C — active session -->\r\n <!-- ============================================================ -->\r\n <div\r\n class=\"flex items-start gap-3 border-b border-gray-200 px-4 py-4\"\r\n >\r\n <mt-avatar\r\n [image]=\"session.delegation.delegator.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-11! h-11! text-xl! text-gray-600! bg-surface-300!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0 flex-1\">\r\n <div class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.acting-on-behalf-of\") }}\r\n </div>\r\n <div class=\"text-sm font-medium text-gray-900 truncate\">\r\n {{ session.delegation.delegator.displayName }}\r\n </div>\r\n @if (session.delegation.scopeSummary) {\r\n <div\r\n class=\"text-xs text-gray-500 mt-1 truncate\"\r\n [title]=\"session.delegation.scopeSummary\"\r\n >\r\n {{ t(\"delegations.scope\") }}:\r\n {{ session.delegation.scopeSummary }}\r\n </div>\r\n }\r\n <div class=\"text-xs text-gray-400 mt-1\">\r\n {{ t(\"delegations.session-ends-at\") }}:\r\n {{ session.accessTokenExpiresAtUtc | date: \"short\" }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"flex flex-col gap-1 px-2 py-2\">\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"arrow.arrow-left\"\r\n [label]=\"t('delegations.back-to-my-session')\"\r\n [loading]=\"isEnding()\"\r\n styleClass=\"w-full justify-start\"\r\n (click)=\"endSession($event)\"\r\n ></mt-button>\r\n </div>\r\n\r\n @if (candidates().length > 1) {\r\n <div class=\"border-t border-gray-200 pt-2 px-2 pb-2\">\r\n <div class=\"text-xs text-gray-500 px-2 pb-1\">\r\n {{ t(\"delegations.switch-to-another\") }}\r\n </div>\r\n @for (cand of candidates(); track cand.id) {\r\n @if (cand.id !== session.delegation.id) {\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center justify-between gap-2 w-full px-2 py-2 rounded-md hover:bg-surface-100 cursor-pointer\"\r\n (click)=\"switchTo(cand, $event)\"\r\n >\r\n <div class=\"flex items-center gap-2 min-w-0\">\r\n <mt-avatar\r\n [image]=\"cand.delegator.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-7! h-7! text-sm! bg-surface-200!\"\r\n ></mt-avatar>\r\n <span class=\"text-sm text-gray-900 truncate\">\r\n {{ cand.delegator.displayName }}\r\n </span>\r\n </div>\r\n <mt-icon\r\n icon=\"arrow.switch-horizontal-01\"\r\n styleClass=\"text-base text-gray-400\"\r\n ></mt-icon>\r\n </button>\r\n }\r\n }\r\n </div>\r\n }\r\n } @else if (mode() === \"candidates\") {\r\n <!-- ============================================================ -->\r\n <!-- STATE B — candidates available, no active session -->\r\n <!-- ============================================================ -->\r\n <div class=\"border-b border-gray-200 px-4 py-3\">\r\n <div class=\"text-sm font-medium text-gray-900\">\r\n {{ t(\"delegations.you-can-act-as\") }}\r\n </div>\r\n <div class=\"text-xs text-gray-500 mt-1\">\r\n {{ t(\"delegations.choose-delegator-hint\") }}\r\n </div>\r\n </div>\r\n <div class=\"flex flex-col gap-1 px-2 py-2 max-h-72 overflow-y-auto\">\r\n @for (cand of candidates(); track cand.id) {\r\n <button\r\n type=\"button\"\r\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\"\r\n (click)=\"startCandidate(cand, $event)\"\r\n >\r\n <div class=\"flex items-center gap-2 min-w-0 flex-1\">\r\n <mt-avatar\r\n [image]=\"cand.delegator.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-9! h-9! text-base! bg-surface-200!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span class=\"text-sm font-medium text-gray-900 truncate\">\r\n {{ cand.delegator.displayName }}\r\n </span>\r\n @if (cand.scopeSummary) {\r\n <span\r\n class=\"text-xs text-gray-500 truncate\"\r\n [title]=\"cand.scopeSummary\"\r\n >\r\n {{ cand.scopeSummary }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n <mt-icon\r\n icon=\"arrow.arrow-right\"\r\n styleClass=\"text-base text-gray-400\"\r\n ></mt-icon>\r\n </button>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Footer (always shown when popover renders) -->\r\n <div class=\"border-t border-gray-200 px-2 py-2\">\r\n <a\r\n [routerLink]=\"managePath()\"\r\n (click)=\"popover().hide()\"\r\n class=\"flex items-center gap-2 px-3 py-2 rounded-md text-gray-700 hover:bg-surface-100 text-sm cursor-pointer\"\r\n >\r\n <mt-icon\r\n icon=\"general.settings-02\"\r\n styleClass=\"text-base\"\r\n ></mt-icon>\r\n <span>{{ t(\"delegations.manage-delegations\") }}</span>\r\n </a>\r\n </div>\r\n </div>\r\n </p-popover>\r\n }\r\n</ng-container>\r\n","import { Component, inject } from '@angular/core';\nimport { Router, RouterOutlet } from '@angular/router';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Page } from '@masterteam/components/page';\n\n@Component({\n selector: 'mt-delegations',\n imports: [Page, RouterOutlet, TranslocoDirective],\n templateUrl: './delegations.html',\n styleUrl: './delegations.css',\n})\nexport default class Delegations {\n private readonly router = inject(Router);\n\n goBack() {\n this.router.navigate(['control-panel/product-settings']);\n }\n}\n","<ng-container *transloco=\"let t\">\n <mt-page\n [title]=\"t('delegations.delegations')\"\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 <router-outlet />\n </mt-page>\n</ng-container>\n","import {\r\n ApproveDelegationRequest,\r\n CancelDelegationRequest,\r\n CreateDelegationRequest,\r\n DelegationListQuery,\r\n DelegationScopeRequest,\r\n RejectDelegationRequest,\r\n UpdateDelegationRequest,\r\n} from './delegations.model';\r\n\r\n// ---------------------------------------------------------------------------\r\n// List / 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 GetDelegation {\r\n static readonly type = '[Delegations] Get Delegation';\r\n constructor(\r\n public id: number,\r\n public includeStatusHistory: boolean = false,\r\n ) {}\r\n}\r\n\r\nexport class ClearSelectedDelegation {\r\n static readonly type = '[Delegations] Clear Selected Delegation';\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Lifecycle\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class CreateDelegation {\r\n static readonly type = '[Delegations] Create Delegation';\r\n constructor(public request: CreateDelegationRequest) {}\r\n}\r\n\r\nexport class UpdateDelegation {\r\n static readonly type = '[Delegations] Update Delegation';\r\n constructor(\r\n public id: number,\r\n public request: UpdateDelegationRequest,\r\n ) {}\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 request: CancelDelegationRequest,\r\n ) {}\r\n}\r\n\r\n// ---------------------------------------------------------------------------\r\n// Scope picker (form support)\r\n// ---------------------------------------------------------------------------\r\n\r\nexport class GetScopeOptions {\r\n static readonly type = '[Delegations] Get Scope Options';\r\n /** Admin-only override; ignored for normal users. */\r\n constructor(public delegatorUserId?: string) {}\r\n}\r\n\r\nexport class PreviewScope {\r\n static readonly type = '[Delegations] Preview Scope';\r\n constructor(public scope: DelegationScopeRequest) {}\r\n}\r\n\r\nexport class ClearScopePreview {\r\n static readonly type = '[Delegations] Clear Scope Preview';\r\n}\r\n","import { LoadingStateShape } from '../utils/state-helpers';\r\n\r\n// ============================================================================\r\n// Status / approval / activation / allowed actions\r\n// ============================================================================\r\n\r\nexport type DelegationStatus =\r\n | 'PendingApproval'\r\n | 'Scheduled'\r\n | 'Active'\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 DelegationActivationState =\r\n | 'ApprovalRequired'\r\n | 'NotStarted'\r\n | 'OutsideAllowedDay'\r\n | 'Started';\r\n\r\nexport type DelegationAllowedAction =\r\n | 'View'\r\n | 'Edit'\r\n | 'Cancel'\r\n | 'Approve'\r\n | 'Reject'\r\n | 'GenerateToken'\r\n | 'StartSession'\r\n | 'Clone';\r\n\r\n// ============================================================================\r\n// Primitives\r\n// ============================================================================\r\n\r\nexport interface DelegationUser {\r\n id: string;\r\n displayName: string;\r\n email?: string;\r\n photo?: string;\r\n}\r\n\r\nexport interface DelegationDayRules {\r\n type: 'FullRange' | 'SpecificDays';\r\n specificDays: number[];\r\n specificDayLabels?: string[];\r\n}\r\n\r\nexport interface DelegationApprovalMeta {\r\n status: DelegationApprovalStatus;\r\n approvedBy?: DelegationUser | null;\r\n approvedAtUtc?: string | null;\r\n rejectedBy?: DelegationUser | null;\r\n rejectedAtUtc?: string | null;\r\n rejectionReason?: string | null;\r\n}\r\n\r\nexport interface DelegationCancellationMeta {\r\n cancelledBy?: DelegationUser | null;\r\n cancelledAtUtc?: string | null;\r\n cancellationReason?: string | null;\r\n}\r\n\r\n// ============================================================================\r\n// Scope\r\n// ============================================================================\r\n\r\nexport type DelegationTargetType =\r\n | 'Level'\r\n | 'LevelModule'\r\n | 'ServiceModule'\r\n | 'ProcessStep'\r\n | 'Report'\r\n | 'SystemAction';\r\n\r\nexport type DelegationPermissionModuleType = 'Level' | 'LevelModule';\r\n\r\nexport type DelegationReadPolicy =\r\n | 'ImplicitReadForSelectedActions'\r\n | 'ExplicitReadOnly'\r\n | 'NoReadUnlessOwnPermission';\r\n\r\nexport interface DelegationScopeOperation {\r\n operationKey: string;\r\n permissionCommand: string;\r\n displayName: string;\r\n isHighRisk?: boolean;\r\n}\r\n\r\nexport interface DelegationScopeTarget {\r\n targetType: DelegationTargetType;\r\n targetId?: number;\r\n displayName: string;\r\n levelId?: number;\r\n levelName?: string;\r\n levelModuleId?: number;\r\n domainModuleId?: number;\r\n moduleKey: string;\r\n moduleName?: string;\r\n permissionModuleType?: DelegationPermissionModuleType;\r\n permissionTargetId?: number;\r\n operations: DelegationScopeOperation[];\r\n dataFilter?: unknown;\r\n constraints?: unknown;\r\n}\r\n\r\nexport interface DelegationScopeAccessibility {\r\n appAccessibilityId: number;\r\n accessibilityGroupId: number;\r\n moduleKey: string;\r\n moduleName: string;\r\n groupName: string;\r\n}\r\n\r\nexport interface DelegationScopeWarning {\r\n code: string;\r\n message: string;\r\n}\r\n\r\nexport interface DelegationScope {\r\n mode: 'Explicit';\r\n summary: string;\r\n readPolicy: DelegationReadPolicy;\r\n accessibilities: DelegationScopeAccessibility[];\r\n targets: DelegationScopeTarget[];\r\n warnings: DelegationScopeWarning[];\r\n}\r\n\r\n// ============================================================================\r\n// Scope options / preview (form picker)\r\n// ============================================================================\r\n\r\nexport interface DelegationScopeOperationOption {\r\n operationKey: string;\r\n permissionCommand: string;\r\n displayName: string;\r\n isDelegable: boolean;\r\n isHighRisk?: boolean;\r\n reason?: string;\r\n}\r\n\r\nexport interface DelegationScopeTargetOption {\r\n targetType: DelegationTargetType;\r\n targetId?: number;\r\n displayName: string;\r\n levelId?: number;\r\n levelName?: string;\r\n levelModuleId?: number;\r\n domainModuleId?: number;\r\n moduleKey: string;\r\n moduleName?: string;\r\n permissionModuleType?: DelegationPermissionModuleType;\r\n permissionTargetId?: number;\r\n operations: DelegationScopeOperationOption[];\r\n}\r\n\r\nexport interface DelegationScopeAccessibilityOption {\r\n appAccessibilityId: number;\r\n moduleKey: string;\r\n moduleName: string;\r\n groups: { accessibilityGroupId: number; name: string }[];\r\n}\r\n\r\nexport interface DelegationScopeReadPolicyOption {\r\n key: DelegationReadPolicy;\r\n isDefault: boolean;\r\n}\r\n\r\nexport interface DelegationScopePreset {\r\n key: string;\r\n displayName: string;\r\n description: string;\r\n}\r\n\r\nexport interface DelegationScopeOptions {\r\n delegator: DelegationUser;\r\n scopeModes: 'Explicit'[];\r\n readPolicies: DelegationScopeReadPolicyOption[];\r\n accessibilities: DelegationScopeAccessibilityOption[];\r\n targets: DelegationScopeTargetOption[];\r\n recommendedPresets: DelegationScopePreset[];\r\n}\r\n\r\nexport interface DelegationScopeRequestTargetOperation {\r\n operationKey: string;\r\n permissionCommand: string;\r\n}\r\n\r\nexport interface DelegationScopeRequestTarget {\r\n targetType: DelegationTargetType;\r\n targetId?: number;\r\n levelId?: number;\r\n levelModuleId?: number;\r\n domainModuleId?: number;\r\n moduleKey: string;\r\n permissionModuleType?: DelegationPermissionModuleType;\r\n permissionTargetId?: number;\r\n operations: DelegationScopeRequestTargetOperation[];\r\n dataFilter?: unknown;\r\n constraints?: unknown;\r\n}\r\n\r\nexport interface DelegationScopeRequest {\r\n mode: 'Explicit';\r\n readPolicy: DelegationReadPolicy;\r\n accessibilityGroupIds: number[];\r\n targets: DelegationScopeRequestTarget[];\r\n}\r\n\r\nexport interface DelegationScopePreviewDeniedItem {\r\n targetType: DelegationTargetType;\r\n targetId?: number;\r\n operationKey: string;\r\n permissionCommand: string;\r\n reasonCode: string;\r\n message: string;\r\n}\r\n\r\nexport interface DelegationScopePreview {\r\n isValid: boolean;\r\n normalizedScope?: DelegationScope;\r\n summary?: string | null;\r\n warnings: DelegationScopeWarning[];\r\n deniedItems: DelegationScopePreviewDeniedItem[];\r\n}\r\n\r\n// ============================================================================\r\n// Delegation record + summary\r\n// ============================================================================\r\n\r\nexport interface Delegation {\r\n id: number;\r\n delegator: DelegationUser;\r\n delegatedUser: DelegationUser;\r\n description?: string;\r\n startDateUtc: string;\r\n endDateUtc: string;\r\n timeZoneId: string;\r\n dayRules: DelegationDayRules;\r\n status: DelegationStatus;\r\n statusReason: string;\r\n activationState: DelegationActivationState;\r\n isUsableNow: boolean;\r\n requiresApproval: boolean;\r\n approval: DelegationApprovalMeta;\r\n cancellation: DelegationCancellationMeta;\r\n createdBy: DelegationUser;\r\n createdAtUtc: string;\r\n updatedBy?: DelegationUser | null;\r\n updatedAtUtc?: string | null;\r\n allowedActions: DelegationAllowedAction[];\r\n scope: DelegationScope;\r\n token: { canGenerate: boolean; reason?: string };\r\n rowVersion: string;\r\n calculatedAtUtc: string;\r\n}\r\n\r\nexport interface DelegationStatusHistoryEntry {\r\n id: number;\r\n fromStatus?: DelegationStatus | null;\r\n toStatus: DelegationStatus;\r\n fromApprovalStatus?: DelegationApprovalStatus | null;\r\n toApprovalStatus?: DelegationApprovalStatus | null;\r\n actor: DelegationUser;\r\n action: string;\r\n reason?: string | null;\r\n createdAtUtc: string;\r\n}\r\n\r\nexport interface DelegationDetail extends Delegation {\r\n statusHistory?: DelegationStatusHistoryEntry[];\r\n}\r\n\r\n/** Minimal shape returned by login + topbar candidate listing. */\r\nexport interface DelegationSummary {\r\n id: number;\r\n delegator: DelegationUser;\r\n delegatedUser: DelegationUser;\r\n status: DelegationStatus;\r\n allowedActions: DelegationAllowedAction[];\r\n startDateUtc: string;\r\n endDateUtc: string;\r\n scopeSummary?: string;\r\n}\r\n\r\n// ============================================================================\r\n// Requests / pagination\r\n// ============================================================================\r\n\r\nexport interface DelegationListQuery {\r\n page?: number;\r\n pageSize?: number;\r\n status?: DelegationStatus[];\r\n q?: string;\r\n startFrom?: string;\r\n startTo?: string;\r\n endFrom?: string;\r\n endTo?: string;\r\n activeOn?: string;\r\n approvalStatus?: DelegationApprovalStatus;\r\n moduleId?: number;\r\n accessibilityGroupId?: number;\r\n sortBy?:\r\n | 'createdAt'\r\n | 'startDate'\r\n | 'endDate'\r\n | 'status'\r\n | 'delegatorName'\r\n | 'delegatedUserName';\r\n sortDir?: 'asc' | 'desc';\r\n}\r\n\r\nexport interface PagedResult<T> {\r\n items: T[];\r\n page: number;\r\n pageSize: number;\r\n totalCount: number;\r\n totalPages: number;\r\n hasNextPage: boolean;\r\n hasPreviousPage: boolean;\r\n serverTimeUtc: string;\r\n}\r\n\r\nexport interface CreateDelegationRequest {\r\n delegatedUserId: string;\r\n description?: string;\r\n startDateUtc: string;\r\n endDateUtc: string;\r\n timeZoneId: string;\r\n dayRules: DelegationDayRules;\r\n requiresApproval: boolean;\r\n scope: DelegationScopeRequest;\r\n}\r\n\r\nexport interface UpdateDelegationRequest {\r\n rowVersion: string;\r\n description?: string;\r\n startDateUtc: string;\r\n endDateUtc: string;\r\n timeZoneId: string;\r\n dayRules: DelegationDayRules;\r\n requiresApproval?: boolean;\r\n scope: DelegationScopeRequest;\r\n}\r\n\r\nexport interface ApproveDelegationRequest {\r\n rowVersion: string;\r\n comment?: string;\r\n}\r\n\r\nexport interface RejectDelegationRequest {\r\n rowVersion: string;\r\n reason: string;\r\n}\r\n\r\nexport interface CancelDelegationRequest {\r\n rowVersion: string;\r\n reason: string;\r\n}\r\n\r\n// ============================================================================\r\n// Tokens / session\r\n// ============================================================================\r\n\r\nexport interface DelegationTokenPair {\r\n accessToken: string;\r\n accessTokenExpiresAtUtc: string;\r\n refreshToken: string;\r\n refreshTokenExpiresAtUtc: string;\r\n delegation: DelegationSummary;\r\n}\r\n\r\n// ============================================================================\r\n// NGXS state shape + action keys\r\n// ============================================================================\r\n\r\nexport enum DelegationsActionKey {\r\n GetMyDelegations = 'getMyDelegations',\r\n GetAssignedDelegations = 'getAssignedDelegations',\r\n GetDelegation = 'getDelegation',\r\n CreateDelegation = 'createDelegation',\r\n UpdateDelegation = 'updateDelegation',\r\n ApproveDelegation = 'approveDelegation',\r\n RejectDelegation = 'rejectDelegation',\r\n CancelDelegation = 'cancelDelegation',\r\n GetScopeOptions = 'getScopeOptions',\r\n PreviewScope = 'previewScope',\r\n}\r\n\r\nexport interface DelegationsStateModel extends LoadingStateShape<DelegationsActionKey> {\r\n my: PagedResult<Delegation> | null;\r\n assigned: PagedResult<Delegation> | null;\r\n selected: 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 ClearScopePreview,\r\n ClearSelectedDelegation,\r\n CreateDelegation,\r\n GetAssignedDelegations,\r\n GetDelegation,\r\n GetMyDelegations,\r\n GetScopeOptions,\r\n PreviewScope,\r\n RejectDelegation,\r\n UpdateDelegation,\r\n} from './delegations.actions';\r\nimport {\r\n Delegation,\r\n DelegationDetail,\r\n DelegationListQuery,\r\n DelegationScopeOptions,\r\n DelegationScopePreview,\r\n DelegationsActionKey,\r\n DelegationsStateModel,\r\n PagedResult,\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.page != null) params = params.set('page', query.page);\r\n if (query.pageSize != null) params = params.set('pageSize', query.pageSize);\r\n if (query.q) params = params.set('q', query.q);\r\n if (query.startFrom) params = params.set('startFrom', query.startFrom);\r\n if (query.startTo) params = params.set('startTo', query.startTo);\r\n if (query.endFrom) params = params.set('endFrom', query.endFrom);\r\n if (query.endTo) params = params.set('endTo', query.endTo);\r\n if (query.activeOn) params = params.set('activeOn', query.activeOn);\r\n if (query.approvalStatus)\r\n params = params.set('approvalStatus', query.approvalStatus);\r\n if (query.moduleId != null) params = params.set('moduleId', query.moduleId);\r\n if (query.accessibilityGroupId != null)\r\n params = params.set('accessibilityGroupId', query.accessibilityGroupId);\r\n if (query.sortBy) params = params.set('sortBy', query.sortBy);\r\n if (query.sortDir) params = params.set('sortDir', query.sortDir);\r\n if (query.status?.length) {\r\n for (const s of query.status) {\r\n params = params.append('status', s);\r\n }\r\n }\r\n return params;\r\n}\r\n\r\nfunction replaceInPage(\r\n page: PagedResult<Delegation> | null,\r\n updated: Delegation,\r\n): PagedResult<Delegation> | null {\r\n if (!page) return page;\r\n const idx = page.items.findIndex((it) => it.id === updated.id);\r\n if (idx === -1) return page;\r\n const items = page.items.slice();\r\n items[idx] = updated;\r\n return { ...page, items };\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 selected: 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 getMyPage(\r\n state: DelegationsStateModel,\r\n ): PagedResult<Delegation> | null {\r\n return state.my;\r\n }\r\n\r\n @Selector()\r\n static getAssignedPage(\r\n state: DelegationsStateModel,\r\n ): PagedResult<Delegation> | null {\r\n return state.assigned;\r\n }\r\n\r\n @Selector()\r\n static getSelected(state: DelegationsStateModel): DelegationDetail | null {\r\n return state.selected;\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 // List\r\n // ============================================================================\r\n\r\n @Action(GetMyDelegations)\r\n getMyDelegations(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { query }: GetMyDelegations,\r\n ) {\r\n const req$ = this.http.get<Response<PagedResult<Delegation>>>(\r\n `${BASE}/my`,\r\n {\r\n params: buildListParams(query),\r\n },\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetMyDelegations,\r\n request$: req$,\r\n onSuccess: (response) => ({ my: response.data }),\r\n });\r\n }\r\n\r\n @Action(GetAssignedDelegations)\r\n getAssignedDelegations(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { query }: GetAssignedDelegations,\r\n ) {\r\n const req$ = this.http.get<Response<PagedResult<Delegation>>>(\r\n `${BASE}/assigned`,\r\n { params: buildListParams(query) },\r\n );\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetAssignedDelegations,\r\n request$: req$,\r\n onSuccess: (response) => ({ assigned: response.data }),\r\n });\r\n }\r\n\r\n @Action(GetDelegation)\r\n getDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, includeStatusHistory }: GetDelegation,\r\n ) {\r\n let params = new HttpParams();\r\n if (includeStatusHistory) {\r\n params = params.set('include', 'statusHistory');\r\n }\r\n const req$ = this.http.get<Response<DelegationDetail>>(`${BASE}/${id}`, {\r\n params,\r\n });\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.GetDelegation,\r\n request$: req$,\r\n onSuccess: (response) => ({ selected: response.data ?? null }),\r\n });\r\n }\r\n\r\n @Action(ClearSelectedDelegation)\r\n clearSelectedDelegation(ctx: StateContext<DelegationsStateModel>) {\r\n ctx.patchState({ selected: null });\r\n }\r\n\r\n // ============================================================================\r\n // Lifecycle\r\n // ============================================================================\r\n\r\n @Action(CreateDelegation)\r\n createDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { request }: CreateDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<Delegation>>(BASE, request);\r\n return handleApiRequest({\r\n ctx,\r\n key: DelegationsActionKey.CreateDelegation,\r\n request$: req$,\r\n onSuccess: (response) => {\r\n const created = response.data;\r\n const state = ctx.getState();\r\n return {\r\n my: state.my\r\n ? { ...state.my, items: [created, ...state.my.items] }\r\n : state.my,\r\n };\r\n },\r\n });\r\n }\r\n\r\n @Action(UpdateDelegation)\r\n updateDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: UpdateDelegation,\r\n ) {\r\n const req$ = this.http.put<Response<Delegation>>(`${BASE}/${id}`, request);\r\n return this.applyLifecycleResult(\r\n ctx,\r\n DelegationsActionKey.UpdateDelegation,\r\n req$,\r\n );\r\n }\r\n\r\n @Action(ApproveDelegation)\r\n approveDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: ApproveDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<Delegation>>(\r\n `${BASE}/${id}/approve`,\r\n request,\r\n );\r\n return this.applyLifecycleResult(\r\n ctx,\r\n DelegationsActionKey.ApproveDelegation,\r\n req$,\r\n );\r\n }\r\n\r\n @Action(RejectDelegation)\r\n rejectDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: RejectDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<Delegation>>(\r\n `${BASE}/${id}/reject`,\r\n request,\r\n );\r\n return this.applyLifecycleResult(\r\n ctx,\r\n DelegationsActionKey.RejectDelegation,\r\n req$,\r\n );\r\n }\r\n\r\n @Action(CancelDelegation)\r\n cancelDelegation(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { id, request }: CancelDelegation,\r\n ) {\r\n const req$ = this.http.post<Response<Delegation>>(\r\n `${BASE}/${id}/cancel`,\r\n request,\r\n );\r\n return this.applyLifecycleResult(\r\n ctx,\r\n DelegationsActionKey.CancelDelegation,\r\n req$,\r\n );\r\n }\r\n\r\n // ============================================================================\r\n // Scope (options + preview)\r\n // ============================================================================\r\n\r\n @Action(GetScopeOptions)\r\n getScopeOptions(\r\n ctx: StateContext<DelegationsStateModel>,\r\n { delegatorUserId }: GetScopeOptions,\r\n ) {\r\n let params = new HttpParams();\r\n if (delegatorUserId)\r\n params = params.set('delegatorUserId', delegatorUserId);\r\n const url = delegatorUserId\r\n ? `identity/admin/delegations/scope/options`\r\n : `${BASE}/scope/options`;\r\n const req$ = this.http.get<Response<DelegationScopeOptions>>(url, {\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 { scope }: PreviewScope,\r\n ) {\r\n const req$ = this.http.post<Response<DelegationScopePreview>>(\r\n `${BASE}/scope/preview`,\r\n scope,\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 // Helpers\r\n // ============================================================================\r\n\r\n private applyLifecycleResult(\r\n ctx: StateContext<DelegationsStateModel>,\r\n key: DelegationsActionKey,\r\n req$: ReturnType<HttpClient['post']>,\r\n ) {\r\n return handleApiRequest({\r\n ctx,\r\n key,\r\n request$: req$ as any,\r\n onSuccess: (response: Response<Delegation>) => {\r\n const updated = response.data;\r\n const state = ctx.getState();\r\n return {\r\n my: replaceInPage(state.my, updated),\r\n assigned: replaceInPage(state.assigned, updated),\r\n selected:\r\n state.selected && state.selected.id === updated.id\r\n ? { ...state.selected, ...updated }\r\n : state.selected,\r\n };\r\n },\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 ClearScopePreview,\r\n ClearSelectedDelegation,\r\n CreateDelegation,\r\n GetAssignedDelegations,\r\n GetDelegation,\r\n GetMyDelegations,\r\n GetScopeOptions,\r\n PreviewScope,\r\n RejectDelegation,\r\n UpdateDelegation,\r\n} from './delegations.actions';\r\nimport {\r\n ApproveDelegationRequest,\r\n CancelDelegationRequest,\r\n CreateDelegationRequest,\r\n DelegationListQuery,\r\n DelegationScopeRequest,\r\n DelegationsActionKey,\r\n RejectDelegationRequest,\r\n UpdateDelegationRequest,\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.getMyPage);\r\n readonly assignedPage = select(DelegationsState.getAssignedPage);\r\n readonly selected = select(DelegationsState.getSelected);\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\r\n // ---------------------------------------------------------------------------\r\n // Loading\r\n // ---------------------------------------------------------------------------\r\n readonly isLoadingMy = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetMyDelegations),\r\n );\r\n readonly isLoadingAssigned = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetAssignedDelegations),\r\n );\r\n readonly isLoadingDetail = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.GetDelegation),\r\n );\r\n readonly isCreating = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.CreateDelegation),\r\n );\r\n readonly isUpdating = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.UpdateDelegation),\r\n );\r\n readonly isApproving = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.ApproveDelegation),\r\n );\r\n readonly isRejecting = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.RejectDelegation),\r\n );\r\n readonly isCancelling = computed(() =>\r\n this.loadingActive().includes(DelegationsActionKey.CancelDelegation),\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\r\n // ---------------------------------------------------------------------------\r\n // Errors\r\n // ---------------------------------------------------------------------------\r\n readonly errorMy = computed(\r\n () => this.errors()[DelegationsActionKey.GetMyDelegations] ?? null,\r\n );\r\n readonly errorAssigned = computed(\r\n () => this.errors()[DelegationsActionKey.GetAssignedDelegations] ?? null,\r\n );\r\n readonly errorDetail = computed(\r\n () => this.errors()[DelegationsActionKey.GetDelegation] ?? null,\r\n );\r\n readonly errorCreate = computed(\r\n () => this.errors()[DelegationsActionKey.CreateDelegation] ?? null,\r\n );\r\n readonly errorUpdate = computed(\r\n () => this.errors()[DelegationsActionKey.UpdateDelegation] ?? null,\r\n );\r\n readonly errorApprove = computed(\r\n () => this.errors()[DelegationsActionKey.ApproveDelegation] ?? null,\r\n );\r\n readonly errorReject = computed(\r\n () => this.errors()[DelegationsActionKey.RejectDelegation] ?? null,\r\n );\r\n readonly errorCancel = computed(\r\n () => this.errors()[DelegationsActionKey.CancelDelegation] ?? 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 getOne(id: number, includeStatusHistory = false) {\r\n return this.store.dispatch(new GetDelegation(id, includeStatusHistory));\r\n }\r\n clearSelected() {\r\n return this.store.dispatch(new ClearSelectedDelegation());\r\n }\r\n create(request: CreateDelegationRequest) {\r\n return this.store.dispatch(new CreateDelegation(request));\r\n }\r\n update(id: number, request: UpdateDelegationRequest) {\r\n return this.store.dispatch(new UpdateDelegation(id, request));\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, request: CancelDelegationRequest) {\r\n return this.store.dispatch(new CancelDelegation(id, request));\r\n }\r\n loadScopeOptions(delegatorUserId?: string) {\r\n return this.store.dispatch(new GetScopeOptions(delegatorUserId));\r\n }\r\n previewScope(scope: DelegationScopeRequest) {\r\n return this.store.dispatch(new PreviewScope(scope));\r\n }\r\n clearScopePreview() {\r\n return this.store.dispatch(new ClearScopePreview());\r\n }\r\n}\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 model,\r\n OnInit,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { TooltipModule } from 'primeng/tooltip';\r\nimport { DelegationsFacade } from '../../../../store/delegations/delegations.facade';\r\nimport {\r\n DelegationReadPolicy,\r\n DelegationScopeAccessibilityOption,\r\n DelegationScopeOperationOption,\r\n DelegationScopeRequest,\r\n DelegationScopeRequestTarget,\r\n DelegationScopeTargetOption,\r\n} from '../../../../store/delegations/delegations.model';\r\n\r\ninterface AccessibilityGroupOption {\r\n appAccessibilityId: number;\r\n accessibilityGroupId: number;\r\n moduleName: string;\r\n groupName: string;\r\n}\r\n\r\nconst EMPTY_SCOPE: DelegationScopeRequest = {\r\n mode: 'Explicit',\r\n readPolicy: 'ImplicitReadForSelectedActions',\r\n accessibilityGroupIds: [],\r\n targets: [],\r\n};\r\n\r\nfunction targetKey(t: DelegationScopeTargetOption): string {\r\n return `${t.targetType}:${t.targetId ?? ''}:${t.permissionTargetId ?? ''}:${t.moduleKey}`;\r\n}\r\n\r\nfunction requestTargetKey(t: DelegationScopeRequestTarget): string {\r\n return `${t.targetType}:${t.targetId ?? ''}:${t.permissionTargetId ?? ''}:${t.moduleKey}`;\r\n}\r\n\r\n/**\r\n * Scope picker driven entirely by Identity-provided options.\r\n *\r\n * - `[(scope)]` two-way binds a normalized `DelegationScopeRequest`.\r\n * - Loads options via `DelegationsFacade.loadScopeOptions()` on init.\r\n * - Calls `/scope/preview` (debounced) so the user sees the server-built summary\r\n * and denied items before they save.\r\n * - Non-delegable operations render disabled with the BE-supplied `reason`.\r\n */\r\n@Component({\r\n selector: 'mt-scope-picker',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Icon,\r\n SkeletonModule,\r\n TooltipModule,\r\n TranslocoDirective,\r\n ],\r\n templateUrl: './scope-picker.html',\r\n styleUrls: ['./scope-picker.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ScopePicker implements OnInit {\r\n /** Two-way bound — the form drives initial value and reads updates back. */\r\n readonly scope = model<DelegationScopeRequest>(EMPTY_SCOPE);\r\n readonly readonly = input<boolean>(false);\r\n /** Admin scope-as-another-user — passed through to the options endpoint. */\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\r\n /** Set of accordion target keys currently expanded. */\r\n private readonly expanded = signal<Set<string>>(new Set());\r\n\r\n protected readonly readPolicies = computed(\r\n () => this.options()?.readPolicies ?? [],\r\n );\r\n\r\n /** Flat list of accessibility group options (across modules). */\r\n protected readonly accessibilityGroups = computed<AccessibilityGroupOption[]>(\r\n () => {\r\n const acc = this.options()?.accessibilities ?? [];\r\n return acc.flatMap((a: DelegationScopeAccessibilityOption) =>\r\n a.groups.map((g) => ({\r\n appAccessibilityId: a.appAccessibilityId,\r\n accessibilityGroupId: g.accessibilityGroupId,\r\n moduleName: a.moduleName,\r\n groupName: g.name,\r\n })),\r\n );\r\n },\r\n );\r\n\r\n /** Targets grouped by `targetType` for the accordion UI. */\r\n protected readonly groupedTargets = computed(() => {\r\n const targets = this.options()?.targets ?? [];\r\n const map = new Map<string, DelegationScopeTargetOption[]>();\r\n for (const t of targets) {\r\n const list = map.get(t.targetType) ?? [];\r\n list.push(t);\r\n map.set(t.targetType, list);\r\n }\r\n return Array.from(map.entries()).map(([type, items]) => ({\r\n type,\r\n items,\r\n }));\r\n });\r\n\r\n /** O(1) lookup: is this accessibility group selected? */\r\n protected readonly selectedAccessibilityIds = computed(\r\n () => new Set(this.scope().accessibilityGroupIds ?? []),\r\n );\r\n\r\n /** O(1) lookup: which targets are picked, and which ops per target? */\r\n protected readonly selectedTargetMap = computed(() => {\r\n const map = new Map<string, Set<string>>();\r\n for (const t of this.scope().targets) {\r\n const key = requestTargetKey(t);\r\n map.set(\r\n key,\r\n new Set(t.operations.map((op) => op.permissionCommand)),\r\n );\r\n }\r\n return map;\r\n });\r\n\r\n // -------------------------------------------------------------------------\r\n // Lifecycle\r\n // -------------------------------------------------------------------------\r\n ngOnInit(): void {\r\n this.facade.loadScopeOptions(this.delegatorUserId());\r\n }\r\n\r\n constructor() {\r\n // Debounced preview: whenever the scope changes, call /scope/preview.\r\n // (Skips the empty initial value.)\r\n let timer: ReturnType<typeof setTimeout> | null = null;\r\n effect(() => {\r\n const s = this.scope();\r\n const hasContent =\r\n s.accessibilityGroupIds.length > 0 || s.targets.length > 0;\r\n untracked(() => {\r\n if (!hasContent) {\r\n this.facade.clearScopePreview();\r\n return;\r\n }\r\n if (timer) clearTimeout(timer);\r\n timer = setTimeout(() => this.facade.previewScope(s), 300);\r\n });\r\n });\r\n }\r\n\r\n // -------------------------------------------------------------------------\r\n // UI handlers\r\n // -------------------------------------------------------------------------\r\n protected setReadPolicy(policy: DelegationReadPolicy): void {\r\n if (this.readonly()) return;\r\n this.scope.update((s) => ({ ...s, readPolicy: policy }));\r\n }\r\n\r\n protected toggleAccessibility(group: AccessibilityGroupOption): void {\r\n if (this.readonly()) return;\r\n this.scope.update((s) => {\r\n const ids = new Set(s.accessibilityGroupIds);\r\n if (ids.has(group.accessibilityGroupId)) {\r\n ids.delete(group.accessibilityGroupId);\r\n } else {\r\n ids.add(group.accessibilityGroupId);\r\n }\r\n return { ...s, accessibilityGroupIds: Array.from(ids) };\r\n });\r\n }\r\n\r\n protected isAccessibilitySelected(\r\n group: AccessibilityGroupOption,\r\n ): boolean {\r\n return this.selectedAccessibilityIds().has(group.accessibilityGroupId);\r\n }\r\n\r\n protected toggleAccordion(target: DelegationScopeTargetOption): void {\r\n const key = targetKey(target);\r\n const next = new Set(this.expanded());\r\n if (next.has(key)) next.delete(key);\r\n else next.add(key);\r\n this.expanded.set(next);\r\n }\r\n\r\n protected isExpanded(target: DelegationScopeTargetOption): boolean {\r\n return this.expanded().has(targetKey(target));\r\n }\r\n\r\n protected toggleOperation(\r\n target: DelegationScopeTargetOption,\r\n op: DelegationScopeOperationOption,\r\n ): void {\r\n if (this.readonly() || !op.isDelegable) return;\r\n this.scope.update((s) => {\r\n const reqKey = `${target.targetType}:${target.targetId ?? ''}:${target.permissionTargetId ?? ''}:${target.moduleKey}`;\r\n const targets = [...s.targets];\r\n const idx = targets.findIndex((t) => requestTargetKey(t) === reqKey);\r\n const baseRequest: DelegationScopeRequestTarget = {\r\n targetType: target.targetType,\r\n targetId: target.targetId,\r\n levelId: target.levelId,\r\n levelModuleId: target.levelModuleId,\r\n domainModuleId: target.domainModuleId,\r\n moduleKey: target.moduleKey,\r\n permissionModuleType: target.permissionModuleType,\r\n permissionTargetId: target.permissionTargetId,\r\n operations: [],\r\n };\r\n\r\n if (idx === -1) {\r\n targets.push({\r\n ...baseRequest,\r\n operations: [\r\n {\r\n operationKey: op.operationKey,\r\n permissionCommand: op.permissionCommand,\r\n },\r\n ],\r\n });\r\n } else {\r\n const current = targets[idx];\r\n const opIdx = current.operations.findIndex(\r\n (o) => o.permissionCommand === op.permissionCommand,\r\n );\r\n if (opIdx === -1) {\r\n targets[idx] = {\r\n ...current,\r\n operations: [\r\n ...current.operations,\r\n {\r\n operationKey: op.operationKey,\r\n permissionCommand: op.permissionCommand,\r\n },\r\n ],\r\n };\r\n } else {\r\n const nextOps = current.operations.slice();\r\n nextOps.splice(opIdx, 1);\r\n if (nextOps.length === 0) {\r\n // last op removed — drop the target entirely\r\n targets.splice(idx, 1);\r\n } else {\r\n targets[idx] = { ...current, operations: nextOps };\r\n }\r\n }\r\n }\r\n return { ...s, targets };\r\n });\r\n }\r\n\r\n protected isOperationSelected(\r\n target: DelegationScopeTargetOption,\r\n op: DelegationScopeOperationOption,\r\n ): boolean {\r\n const key = `${target.targetType}:${target.targetId ?? ''}:${target.permissionTargetId ?? ''}:${target.moduleKey}`;\r\n return (\r\n this.selectedTargetMap().get(key)?.has(op.permissionCommand) ?? false\r\n );\r\n }\r\n\r\n protected selectedOpsCount(\r\n target: DelegationScopeTargetOption,\r\n ): number {\r\n const key = `${target.targetType}:${target.targetId ?? ''}:${target.permissionTargetId ?? ''}:${target.moduleKey}`;\r\n return this.selectedTargetMap().get(key)?.size ?? 0;\r\n }\r\n\r\n protected reasonLabel(op: DelegationScopeOperationOption): string {\r\n return op.reason ?? this.transloco.translate('delegations.non-delegable-reason');\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <div class=\"mt-scope-picker flex flex-col gap-4\">\r\n <!-- Loading skeleton -->\r\n @if (isLoadingOptions() && !options()) {\r\n <p-skeleton height=\"2rem\"></p-skeleton>\r\n <p-skeleton height=\"6rem\"></p-skeleton>\r\n <p-skeleton height=\"6rem\"></p-skeleton>\r\n } @else if (options(); as opts) {\r\n <!-- ============================================================ -->\r\n <!-- Read policy -->\r\n <!-- ============================================================ -->\r\n <section class=\"flex flex-col gap-2\">\r\n <h4 class=\"text-sm font-medium text-gray-800\">\r\n {{ t('delegations.read-policy') }}\r\n </h4>\r\n <div class=\"flex flex-wrap gap-2\">\r\n @for (rp of readPolicies(); track rp.key) {\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-1.5 rounded-full text-xs border transition-colors cursor-pointer\"\r\n [class.border-primary]=\"scope().readPolicy === rp.key\"\r\n [class.bg-primary-50]=\"scope().readPolicy === rp.key\"\r\n [class.text-primary]=\"scope().readPolicy === rp.key\"\r\n [class.border-gray-300]=\"scope().readPolicy !== rp.key\"\r\n [class.text-gray-700]=\"scope().readPolicy !== rp.key\"\r\n [disabled]=\"readonly()\"\r\n (click)=\"setReadPolicy(rp.key)\">\r\n {{ t('delegations.' + (rp.key === 'ImplicitReadForSelectedActions'\r\n ? 'implicit-read'\r\n : rp.key === 'ExplicitReadOnly'\r\n ? 'explicit-read-only'\r\n : 'no-read-unless-own-permission')) }}\r\n </button>\r\n }\r\n </div>\r\n </section>\r\n\r\n <!-- ============================================================ -->\r\n <!-- Accessibilities -->\r\n <!-- ============================================================ -->\r\n @if (accessibilityGroups().length > 0) {\r\n <section class=\"flex flex-col gap-2\">\r\n <h4 class=\"text-sm font-medium text-gray-800\">\r\n {{ t('delegations.scope') }} —\r\n {{ t('delegations.delegated-to') }}\r\n </h4>\r\n <div class=\"flex flex-wrap gap-2\">\r\n @for (g of accessibilityGroups(); track g.accessibilityGroupId) {\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center gap-2 px-3 py-1.5 rounded-md text-xs border transition-colors cursor-pointer\"\r\n [class.border-primary]=\"isAccessibilitySelected(g)\"\r\n [class.bg-primary-50]=\"isAccessibilitySelected(g)\"\r\n [class.text-primary]=\"isAccessibilitySelected(g)\"\r\n [class.border-gray-300]=\"!isAccessibilitySelected(g)\"\r\n [class.text-gray-700]=\"!isAccessibilitySelected(g)\"\r\n [disabled]=\"readonly()\"\r\n (click)=\"toggleAccessibility(g)\">\r\n @if (isAccessibilitySelected(g)) {\r\n <mt-icon icon=\"general.check\" styleClass=\"text-sm\"></mt-icon>\r\n }\r\n <span>{{ g.moduleName }} / {{ g.groupName }}</span>\r\n </button>\r\n }\r\n </div>\r\n </section>\r\n }\r\n\r\n <!-- ============================================================ -->\r\n <!-- Targets + operations -->\r\n <!-- ============================================================ -->\r\n <section class=\"flex flex-col gap-2\">\r\n <h4 class=\"text-sm font-medium text-gray-800\">\r\n {{ t('delegations.target-type') }} /\r\n {{ t('delegations.operations') }}\r\n </h4>\r\n\r\n @if (groupedTargets().length === 0) {\r\n <p class=\"text-xs text-gray-500\">\r\n {{ t('delegations.no-targets-selected') }}\r\n </p>\r\n }\r\n\r\n @for (group of groupedTargets(); track group.type) {\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"text-xs uppercase text-gray-500 tracking-wide px-2\">\r\n {{ group.type }}\r\n </div>\r\n @for (target of group.items; track target.displayName) {\r\n <div class=\"border border-gray-200 rounded-md overflow-hidden\">\r\n <button\r\n type=\"button\"\r\n class=\"flex items-center justify-between w-full px-3 py-2 hover:bg-surface-50 cursor-pointer\"\r\n (click)=\"toggleAccordion(target)\">\r\n <div class=\"flex items-center gap-2 min-w-0\">\r\n <mt-icon\r\n [icon]=\"\r\n isExpanded(target)\r\n ? 'arrow.chevron-down'\r\n : 'arrow.chevron-right'\r\n \"\r\n styleClass=\"text-base text-gray-400\"></mt-icon>\r\n <span class=\"text-sm text-gray-900 truncate\">\r\n {{ target.displayName }}\r\n </span>\r\n </div>\r\n @if (selectedOpsCount(target); as count) {\r\n @if (count > 0) {\r\n <span\r\n class=\"text-xs text-primary font-medium px-2 py-0.5 rounded-full bg-primary-50\">\r\n {{ count }}\r\n </span>\r\n }\r\n }\r\n </button>\r\n\r\n @if (isExpanded(target)) {\r\n <div class=\"flex flex-col gap-1 px-3 py-2 bg-surface-50/40\">\r\n @for (op of target.operations; track op.permissionCommand) {\r\n <label\r\n class=\"flex items-center gap-2 px-2 py-1.5 rounded-md cursor-pointer\"\r\n [class.opacity-60]=\"!op.isDelegable\"\r\n [class.cursor-not-allowed]=\"!op.isDelegable\"\r\n [class.hover:bg-surface-100]=\"op.isDelegable\"\r\n [pTooltip]=\"!op.isDelegable ? reasonLabel(op) : null\"\r\n tooltipPosition=\"top\">\r\n <input\r\n type=\"checkbox\"\r\n [checked]=\"isOperationSelected(target, op)\"\r\n [disabled]=\"!op.isDelegable || readonly()\"\r\n (change)=\"toggleOperation(target, op)\" />\r\n <span class=\"text-sm\">{{ op.displayName }}</span>\r\n @if (op.isHighRisk) {\r\n <mt-icon\r\n icon=\"alert.alert-triangle\"\r\n styleClass=\"text-sm text-amber-500\"\r\n [pTooltip]=\"t('delegations.high-risk-action')\"\r\n tooltipPosition=\"top\"></mt-icon>\r\n }\r\n @if (!op.isDelegable) {\r\n <span class=\"text-xs text-gray-400 ms-auto\">\r\n {{ reasonLabel(op) }}\r\n </span>\r\n }\r\n </label>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n </section>\r\n\r\n <!-- ============================================================ -->\r\n <!-- Preview -->\r\n <!-- ============================================================ -->\r\n <section\r\n class=\"flex flex-col gap-1 px-3 py-2 rounded-md border border-dashed border-gray-300 bg-surface-50\">\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <div class=\"text-xs font-medium text-gray-700\">\r\n {{ t('delegations.preview-scope') }}\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 text-gray-900\">\r\n {{ p.summary || t('delegations.scope-summary') }}\r\n </div>\r\n } @else {\r\n <div class=\"text-sm text-red-700\">\r\n {{ t('delegations.scope-preview-invalid') }}\r\n </div>\r\n }\r\n @if (p.warnings.length > 0) {\r\n <ul class=\"text-xs text-amber-700 list-disc list-inside\">\r\n @for (w of p.warnings; track w.code) {\r\n <li>{{ w.message }}</li>\r\n }\r\n </ul>\r\n }\r\n @if (p.deniedItems.length > 0) {\r\n <ul class=\"text-xs text-red-700 list-disc list-inside\">\r\n @for (d of p.deniedItems; track d.permissionCommand) {\r\n <li>{{ d.message }}</li>\r\n }\r\n </ul>\r\n }\r\n } @else {\r\n <div class=\"text-xs text-gray-500\">\r\n {{ t('delegations.no-operations-selected') }}\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 CreateDelegationRequest,\r\n Delegation,\r\n DelegationScopeRequest,\r\n UpdateDelegationRequest,\r\n} from '../../../store/delegations/delegations.model';\r\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\r\n\r\nconst EMPTY_SCOPE: DelegationScopeRequest = {\r\n mode: 'Explicit',\r\n readPolicy: 'ImplicitReadForSelectedActions',\r\n accessibilityGroupIds: [],\r\n targets: [],\r\n};\r\n\r\n/**\r\n * Delegation create/edit form, target-shape compliant.\r\n *\r\n * - Delegator is server-derived from the authenticated principal — not collected\r\n * here (admin \"create on behalf of\" lives behind a separate flag).\r\n * - `isActive` no longer exists; status is server-calculated.\r\n * - Scope is collected by `<mt-scope-picker>` (loaded from `/scope/options`)\r\n * and validated via `/scope/preview` on every change. Edit mode rehydrates\r\n * the scope from the loaded delegation.\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 styleUrls: ['./delegation-form.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class DelegationForm implements OnInit {\r\n readonly delegationForEdit = input<Delegation | null>(null);\r\n readonly readonly = 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 // Reactive form\r\n delegationFormControl = new FormControl();\r\n formValue = toSignal(this.delegationFormControl.valueChanges);\r\n\r\n selected = this.facade.selected;\r\n isDetailLoading = this.facade.isLoadingDetail;\r\n isSaving = computed(\r\n () => this.facade.isCreating() || this.facade.isUpdating(),\r\n );\r\n\r\n context = new HttpContext().set(REQUEST_CONTEXT, { useBaseUrl: false });\r\n\r\n protected readonly isDelegatingToSelf = computed(() => {\r\n const v = this.formValue();\r\n if (!v) return false;\r\n const toId = (v.delegatedUser?.id ?? v.delegatedUser) as string | undefined;\r\n const meId = (this.selected()?.delegator?.id ?? '') as string;\r\n return !!toId && !!meId && toId === meId;\r\n });\r\n\r\n // The current scope draft (built outside the form for MVP; placeholder UI).\r\n protected readonly scope = signal<DelegationScopeRequest>(EMPTY_SCOPE);\r\n\r\n protected readonly specificDaysOptions = signal([\r\n { label: this.transloco.translate('delegations.sunday'), value: 0 },\r\n { label: this.transloco.translate('delegations.monday'), value: 1 },\r\n { label: this.transloco.translate('delegations.tuesday'), value: 2 },\r\n { label: this.transloco.translate('delegations.wednesday'), value: 3 },\r\n { label: this.transloco.translate('delegations.thursday'), value: 4 },\r\n { label: this.transloco.translate('delegations.friday'), value: 5 },\r\n { label: this.transloco.translate('delegations.saturday'), value: 6 },\r\n ]);\r\n\r\n protected readonly delegationFormConfig = computed<DynamicFormConfig>(() => ({\r\n sections: [\r\n {\r\n key: 'delegationFormConfig',\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: 'delegatedUser',\r\n label: this.transloco.translate('delegations.delegated-to'),\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()?.id,\r\n }),\r\n new TextareaFieldConfig({\r\n key: 'description',\r\n label: this.transloco.translate('delegations.description'),\r\n placeholder: this.transloco.translate('delegations.description'),\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: 'startDateUtc',\r\n label: this.transloco.translate('delegations.delegation-date-from'),\r\n placeholder: this.transloco.translate(\r\n 'delegations.delegation-date-from',\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: 'endDateUtc',\r\n label: this.transloco.translate('delegations.delegation-date-to'),\r\n placeholder: this.transloco.translate(\r\n 'delegations.delegation-date-to',\r\n ),\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: 'dayRulesType',\r\n label: this.transloco.translate(\r\n 'delegations.delegation-days-apply',\r\n ),\r\n options: [\r\n {\r\n label: this.transloco.translate('delegations.full-range'),\r\n value: 'FullRange',\r\n },\r\n {\r\n label: this.transloco.translate('delegations.specific-days'),\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.specific-days'),\r\n options: this.specificDaysOptions(),\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n maxSelectedLabels: 7,\r\n relations: [\r\n { key: 'dayRulesType', value: 'SpecificDays', action: 'show' },\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('delegations.requires-approval'),\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 id = this.delegationForEdit()?.id;\r\n const d = this.selected();\r\n if (id && d) {\r\n this.delegationFormControl.patchValue({\r\n delegatedUser: d.delegatedUser,\r\n description: d.description,\r\n startDateUtc: d.startDateUtc,\r\n endDateUtc: d.endDateUtc,\r\n dayRulesType: d.dayRules?.type ?? 'FullRange',\r\n specificDays: d.dayRules?.specificDays ?? [],\r\n requiresApproval: d.requiresApproval ?? true,\r\n });\r\n // Snapshot existing scope so we round-trip it on save until the picker ships.\r\n if (d.scope) {\r\n this.scope.set({\r\n mode: 'Explicit',\r\n readPolicy: d.scope.readPolicy,\r\n accessibilityGroupIds: d.scope.accessibilities.map(\r\n (a) => a.accessibilityGroupId,\r\n ),\r\n targets: d.scope.targets.map((t) => ({\r\n targetType: t.targetType,\r\n targetId: t.targetId,\r\n levelId: t.levelId,\r\n levelModuleId: t.levelModuleId,\r\n domainModuleId: t.domainModuleId,\r\n moduleKey: t.moduleKey,\r\n permissionModuleType: t.permissionModuleType,\r\n permissionTargetId: t.permissionTargetId,\r\n operations: t.operations.map((op) => ({\r\n operationKey: op.operationKey,\r\n permissionCommand: op.permissionCommand,\r\n })),\r\n })),\r\n });\r\n }\r\n } else if (!id) {\r\n this.delegationFormControl.reset({\r\n dayRulesType: 'FullRange',\r\n requiresApproval: true,\r\n });\r\n this.scope.set(EMPTY_SCOPE);\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const id = this.delegationForEdit()?.id;\r\n if (id) {\r\n this.facade.getOne(id, true);\r\n }\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.readonly() || !this.delegationFormControl.valid) return;\r\n const v = this.delegationFormControl.value;\r\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || 'UTC';\r\n const editing = this.delegationForEdit();\r\n\r\n const base = {\r\n description: v?.description,\r\n startDateUtc: v?.startDateUtc,\r\n endDateUtc: v?.endDateUtc,\r\n timeZoneId: tz,\r\n dayRules: {\r\n type: (v?.dayRulesType ?? 'FullRange') as 'FullRange' | 'SpecificDays',\r\n specificDays:\r\n v?.dayRulesType === 'SpecificDays' ? (v?.specificDays ?? []) : [],\r\n },\r\n scope: this.scope(),\r\n };\r\n\r\n if (editing?.id) {\r\n const req: UpdateDelegationRequest = {\r\n ...base,\r\n rowVersion: editing.rowVersion,\r\n requiresApproval: v?.requiresApproval,\r\n };\r\n this.facade.update(editing.id, req).subscribe({\r\n next: () => this.ref.close(true),\r\n });\r\n } else {\r\n const req: CreateDelegationRequest = {\r\n ...base,\r\n delegatedUserId: v?.delegatedUser?.id ?? v?.delegatedUser,\r\n requiresApproval: !!v?.requiresApproval,\r\n };\r\n this.facade.create(req).subscribe({\r\n next: () => this.ref.close(true),\r\n });\r\n }\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'delegations'\">\r\n <div\r\n [class]=\"\r\n 'delegation-form-content flex min-w-0 flex-col gap-3 overflow-x-hidden p-4 max-[640px]:p-3 ' +\r\n modal.contentClass\r\n \"\r\n >\r\n <mt-dynamic-form\r\n [formConfig]=\"delegationFormConfig()\"\r\n [formControl]=\"delegationFormControl\"\r\n />\r\n\r\n <div class=\"mt-2 border-t border-gray-200 pt-3 flex flex-col gap-2\">\r\n <h3 class=\"text-sm font-semibold text-gray-800\">\r\n {{ t(\"scope\") }}\r\n </h3>\r\n <mt-scope-picker\r\n [(scope)]=\"scope\"\r\n [readonly]=\"readonly()\"\r\n ></mt-scope-picker>\r\n </div>\r\n </div>\r\n\r\n <div\r\n [class]=\"\r\n 'delegation-form-footer ' +\r\n modal.footerClass +\r\n ' flex-col gap-2 sm:flex-row sm:items-center sm:justify-end'\r\n \"\r\n >\r\n <mt-button\r\n [label]=\"t('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]=\"delegationForEdit() ? t('update') : t('create')\"\r\n [loading]=\"isSaving()\"\r\n [disabled]=\"!delegationFormControl.valid || isDelegatingToSelf()\"\r\n (click)=\"onSubmit()\"\r\n styleClass=\"w-full sm:w-auto\"\r\n />\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 inject,\r\n input,\r\n OnInit,\r\n signal,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ModalRef } from '@masterteam/components/dialog';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\r\nimport {\r\n DelegationDetail,\r\n DelegationStatusHistoryEntry,\r\n} from '../../../store/delegations/delegations.model';\r\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\r\n\r\ntype DetailTab = 'overview' | 'scope' | 'history';\r\n\r\n/**\r\n * Read-only drawer that shows the full server DTO of a delegation, including\r\n * its status history. Triggered from the row's \"View details\" action.\r\n */\r\n@Component({\r\n selector: 'mt-delegation-detail-drawer',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Avatar,\r\n Button,\r\n Icon,\r\n SkeletonModule,\r\n TranslocoDirective,\r\n DelegationStatusChip,\r\n ],\r\n templateUrl: './delegation-detail-drawer.html',\r\n styleUrls: ['./delegation-detail-drawer.css'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class DelegationDetailDrawer implements OnInit {\r\n /** Delegation id passed in via the modal's inputValues. */\r\n readonly delegationId = input.required<number>();\r\n\r\n private readonly facade = inject(DelegationsFacade);\r\n private readonly transloco = inject(TranslocoService);\r\n protected readonly ref: ModalRef = inject(ModalRef);\r\n\r\n protected readonly tabs: { key: DetailTab; i18n: string }[] = [\r\n { key: 'overview', i18n: 'delegations.view-details' },\r\n { key: 'scope', i18n: 'delegations.scope' },\r\n { key: 'history', i18n: 'delegations.status-history' },\r\n ];\r\n protected readonly activeTab = signal<DetailTab>('overview');\r\n\r\n protected readonly isLoading = this.facade.isLoadingDetail;\r\n protected readonly detail = this.facade.selected;\r\n\r\n protected readonly statusHistory = computed<DelegationStatusHistoryEntry[]>(\r\n () => (this.detail() as DelegationDetail | null)?.statusHistory ?? [],\r\n );\r\n\r\n ngOnInit(): void {\r\n this.facade.getOne(this.delegationId(), true);\r\n }\r\n\r\n protected setTab(tab: DetailTab): void {\r\n this.activeTab.set(tab);\r\n }\r\n\r\n protected approvalLabel(): string {\r\n const s = this.detail()?.approval?.status ?? 'NotRequired';\r\n return this.transloco.translate(\r\n `delegations.approval-${s.toLowerCase()}`,\r\n );\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <div class=\"flex flex-col h-full\">\r\n <!-- Tabs -->\r\n <div class=\"flex border-b border-gray-200 px-4\">\r\n @for (tab of tabs; track tab.key) {\r\n <button\r\n type=\"button\"\r\n class=\"px-3 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\r\n [class.border-primary]=\"activeTab() === tab.key\"\r\n [class.text-primary]=\"activeTab() === tab.key\"\r\n [class.border-transparent]=\"activeTab() !== tab.key\"\r\n [class.text-gray-500]=\"activeTab() !== tab.key\"\r\n (click)=\"setTab(tab.key)\"\r\n >\r\n {{ t(tab.i18n) }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"flex-1 overflow-y-auto p-4\">\r\n @if (isLoading() && !detail()) {\r\n <p-skeleton height=\"2rem\" class=\"mb-3\"></p-skeleton>\r\n <p-skeleton height=\"6rem\" class=\"mb-3\"></p-skeleton>\r\n <p-skeleton height=\"6rem\"></p-skeleton>\r\n } @else if (detail(); as d) {\r\n @switch (activeTab()) {\r\n @case ('overview') {\r\n <div class=\"flex flex-col gap-4\">\r\n <div class=\"flex items-center justify-between gap-3\">\r\n <div class=\"flex items-center gap-3 min-w-0\">\r\n <mt-avatar\r\n [image]=\"d.delegator.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-12! h-12! text-lg!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <div class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.delegator-name\") }}\r\n </div>\r\n <div class=\"text-base font-medium text-gray-900 truncate\">\r\n {{ d.delegator.displayName }}\r\n </div>\r\n @if (d.delegator.email) {\r\n <div class=\"text-xs text-gray-500 truncate\">\r\n {{ d.delegator.email }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <mt-delegation-status-chip\r\n [status]=\"d.status\"\r\n ></mt-delegation-status-chip>\r\n </div>\r\n\r\n <div class=\"grid grid-cols-2 gap-4\">\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.delegated-to\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n {{ d.delegatedUser.displayName }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.approval\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n {{ approvalLabel() }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.start-date\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n {{ d.startDateUtc | date: \"medium\" }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.end-date\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n {{ d.endDateUtc | date: \"medium\" }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.time-zone\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n {{ d.timeZoneId }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-col\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.days\") }}\r\n </span>\r\n <span class=\"text-sm text-gray-900\">\r\n @if (d.dayRules.type === \"FullRange\") {\r\n {{ t(\"delegations.all-days\") }}\r\n } @else if (d.dayRules.specificDayLabels?.length) {\r\n {{ d.dayRules.specificDayLabels?.join(\", \") }}\r\n } @else {\r\n {{ d.dayRules.specificDays.join(\", \") }}\r\n }\r\n </span>\r\n </div>\r\n </div>\r\n\r\n @if (d.description) {\r\n <div class=\"flex flex-col gap-1\">\r\n <span class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.description\") }}\r\n </span>\r\n <p class=\"text-sm text-gray-900 whitespace-pre-line\">\r\n {{ d.description }}\r\n </p>\r\n </div>\r\n }\r\n\r\n @if (d.approval.rejectionReason) {\r\n <div\r\n class=\"rounded-md border border-red-200 bg-red-50 p-3 text-sm text-red-800\"\r\n >\r\n <div class=\"font-medium\">\r\n {{ t(\"delegations.rejection-reason\") }}\r\n </div>\r\n <div>{{ d.approval.rejectionReason }}</div>\r\n </div>\r\n }\r\n\r\n @if (d.cancellation.cancellationReason) {\r\n <div\r\n class=\"rounded-md border border-gray-200 bg-surface-50 p-3 text-sm text-gray-800\"\r\n >\r\n <div class=\"font-medium\">\r\n {{ t(\"delegations.cancel-reason\") }}\r\n </div>\r\n <div>{{ d.cancellation.cancellationReason }}</div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @case ('scope') {\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"text-sm text-gray-900\">\r\n {{ d.scope.summary || t(\"delegations.scope-summary\") }}\r\n </div>\r\n\r\n @if (d.scope.accessibilities.length > 0) {\r\n <div class=\"flex flex-col gap-1\">\r\n <div class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.delegated-to\") }}\r\n </div>\r\n <div class=\"flex flex-wrap gap-1.5\">\r\n @for (a of d.scope.accessibilities; track a.accessibilityGroupId) {\r\n <span\r\n class=\"text-xs px-2 py-0.5 rounded-md bg-surface-100 text-gray-700\"\r\n >\r\n {{ a.moduleName }} / {{ a.groupName }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"flex flex-col gap-2\">\r\n @for (target of d.scope.targets; track target.displayName) {\r\n <div\r\n class=\"border border-gray-200 rounded-md px-3 py-2 flex flex-col gap-1\"\r\n >\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <span class=\"text-sm font-medium text-gray-900\">\r\n {{ target.displayName }}\r\n </span>\r\n <span class=\"text-xs text-gray-500\">\r\n {{ target.targetType }}\r\n </span>\r\n </div>\r\n <div class=\"flex flex-wrap gap-1.5\">\r\n @for (op of target.operations; track op.permissionCommand) {\r\n <span\r\n class=\"text-xs px-2 py-0.5 rounded-md bg-primary-50 text-primary\"\r\n >\r\n {{ op.displayName }}\r\n @if (op.isHighRisk) {\r\n <mt-icon\r\n icon=\"alert.alert-triangle\"\r\n styleClass=\"text-xs text-amber-500\"\r\n ></mt-icon>\r\n }\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n @if (d.scope.targets.length === 0) {\r\n <p class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.no-targets-selected\") }}\r\n </p>\r\n }\r\n </div>\r\n\r\n @if (d.scope.warnings.length > 0) {\r\n <ul class=\"text-xs text-amber-700 list-disc list-inside\">\r\n @for (w of d.scope.warnings; track w.code) {\r\n <li>{{ w.message }}</li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n }\r\n\r\n @case ('history') {\r\n <ol class=\"flex flex-col gap-2\">\r\n @for (entry of statusHistory(); track entry.id) {\r\n <li\r\n class=\"border border-gray-200 rounded-md px-3 py-2 flex flex-col gap-1\"\r\n >\r\n <div class=\"flex items-center justify-between gap-2\">\r\n <span class=\"text-sm font-medium text-gray-900\">\r\n {{ entry.action }}\r\n </span>\r\n <span class=\"text-xs text-gray-500\">\r\n {{ entry.createdAtUtc | date: \"short\" }}\r\n </span>\r\n </div>\r\n <div class=\"flex items-center gap-2 text-xs text-gray-600\">\r\n @if (entry.fromStatus) {\r\n <span>{{ entry.fromStatus }}</span>\r\n <mt-icon\r\n icon=\"arrow.arrow-right\"\r\n styleClass=\"text-xs text-gray-400\"\r\n ></mt-icon>\r\n }\r\n <span>{{ entry.toStatus }}</span>\r\n </div>\r\n <div class=\"text-xs text-gray-700\">\r\n {{ t(\"delegations.delegator-name\") }}:\r\n {{ entry.actor.displayName }}\r\n </div>\r\n @if (entry.reason) {\r\n <div class=\"text-xs text-gray-600\">\r\n {{ t(\"delegations.reason\") }}: {{ entry.reason }}\r\n </div>\r\n }\r\n </li>\r\n }\r\n @if (statusHistory().length === 0) {\r\n <li class=\"text-xs text-gray-500\">\r\n {{ t(\"delegations.status-history\") }} —\r\n {{ t(\"delegations.no-operations-selected\") }}\r\n </li>\r\n }\r\n </ol>\r\n }\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div\r\n class=\"border-t border-gray-200 px-4 py-3 flex items-center justify-end\"\r\n >\r\n <mt-button\r\n [label]=\"t('cancel')\"\r\n variant=\"outlined\"\r\n (click)=\"ref.close()\"\r\n ></mt-button>\r\n </div>\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 inject,\r\n linkedSignal,\r\n OnInit,\r\n signal,\r\n TemplateRef,\r\n viewChild,\r\n} from '@angular/core';\r\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\r\nimport { finalize } from 'rxjs';\r\nimport {\r\n Delegation,\r\n DelegationAllowedAction,\r\n DelegationListQuery,\r\n} from '../../../store/delegations/delegations.model';\r\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\r\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\r\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\r\nimport DelegationForm from '../delegation-form/delegation-form';\r\nimport DelegationDetailDrawer from '../delegation-detail-drawer/delegation-detail-drawer';\r\nimport StartSessionDialog from '../start-session-dialog/start-session-dialog';\r\n\r\ntype DelegationTab = 'my' | 'assigned';\r\n\r\n/**\r\n * DelegationsPage — replaces the legacy single-list CRUD view with the target\r\n * two-list portal contract: \"My Delegations\" (I am delegator) and \"Delegated To Me\".\r\n *\r\n * - Rows render the BE-returned `allowedActions` only (never inferred).\r\n * - Lifecycle actions (Approve/Reject/Cancel/Edit/StartSession) dispatch through\r\n * the facade and the row is replaced in place from the response.\r\n * - Scope/detail drawer and full scope-picker form are still incremental work;\r\n * the form drawer here covers Edit/Create with the core fields.\r\n */\r\n@Component({\r\n selector: 'mt-delegations-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Avatar,\r\n Breadcrumb,\r\n Table,\r\n TranslocoDirective,\r\n DelegationStatusChip,\r\n ],\r\n templateUrl: './delegations-list.html',\r\n styleUrl: './delegations-list.css',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport default class DelegationsList implements OnInit {\r\n private readonly facade = inject(DelegationsFacade);\r\n private readonly session = inject(DelegationSessionFacade);\r\n private readonly modal = inject(ModalService);\r\n private readonly transloco = inject(TranslocoService);\r\n\r\n // ---- Page header (unchanged from legacy admin breadcrumbs) ----\r\n protected readonly breadcrumbItems = linkedSignal(() => [\r\n {\r\n label: '',\r\n icon: 'general.home-line',\r\n routerLink: '/control-panel/workspaces',\r\n },\r\n {\r\n label: this.transloco.translate('product-settings.product-settings'),\r\n routerLink: '/control-panel/product-settings',\r\n },\r\n {\r\n label: this.transloco.translate('delegations.delegations'),\r\n },\r\n ]);\r\n\r\n // ---- Tabs ----\r\n protected readonly activeTab = signal<DelegationTab>('my');\r\n protected readonly tabs = signal([\r\n {\r\n value: 'my' as DelegationTab,\r\n label: this.transloco.translate('delegations.my-delegations'),\r\n },\r\n {\r\n value: 'assigned' as DelegationTab,\r\n label: this.transloco.translate('delegations.delegated-to-me'),\r\n },\r\n ]);\r\n\r\n // ---- Loading / data ----\r\n protected readonly isLoading = computed(() =>\r\n this.activeTab() === 'my'\r\n ? this.facade.isLoadingMy()\r\n : this.facade.isLoadingAssigned(),\r\n );\r\n protected readonly rows = computed(() =>\r\n this.activeTab() === 'my'\r\n ? this.facade.myItems()\r\n : this.facade.assignedItems(),\r\n );\r\n\r\n // ---- Column templates ----\r\n statusCol = viewChild.required<TemplateRef<unknown>>('statusCol');\r\n userCol = viewChild.required<TemplateRef<unknown>>('userCol');\r\n scopeCol = viewChild.required<TemplateRef<unknown>>('scopeCol');\r\n daysCol = viewChild.required<TemplateRef<unknown>>('daysCol');\r\n\r\n // ---- Table actions (header) ----\r\n protected readonly tableActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.plus',\r\n label: this.transloco.translate('delegations.add-delegation'),\r\n color: 'primary',\r\n action: () => this.openForm(null),\r\n },\r\n ]);\r\n\r\n // ---- Per-row action: read ONLY allowedActions from BE ----\r\n protected readonly rowActions = signal<TableAction[]>([\r\n {\r\n icon: 'general.eye',\r\n tooltip: this.transloco.translate('delegations.view-details'),\r\n color: 'primary',\r\n variant: 'outlined',\r\n action: (row: Delegation) => this.viewDetails(row),\r\n hidden: (row: Delegation) => !this.has(row, 'View'),\r\n },\r\n {\r\n icon: 'custom.pencil',\r\n tooltip: this.transloco.translate('edit'),\r\n color: 'primary',\r\n action: (row: Delegation) => this.openForm(row),\r\n hidden: (row: Delegation) => !this.has(row, 'Edit'),\r\n },\r\n {\r\n icon: 'general.check',\r\n tooltip: this.transloco.translate('delegations.approve'),\r\n color: 'primary',\r\n action: (row: Delegation) => this.approve(row),\r\n hidden: (row: Delegation) => !this.has(row, 'Approve'),\r\n loading: (row: Delegation) =>\r\n this.busyIds().includes(`approve:${row.id}`),\r\n confirmation: { type: 'popup' },\r\n },\r\n {\r\n icon: 'general.x-close',\r\n tooltip: this.transloco.translate('delegations.reject'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: Delegation) => this.reject(row),\r\n hidden: (row: Delegation) => !this.has(row, 'Reject'),\r\n loading: (row: Delegation) => this.busyIds().includes(`reject:${row.id}`),\r\n confirmation: { type: 'popup' },\r\n },\r\n {\r\n icon: 'general.x-close',\r\n tooltip: this.transloco.translate('delegations.cancel-delegation'),\r\n color: 'danger',\r\n variant: 'outlined',\r\n action: (row: Delegation) => this.cancel(row),\r\n hidden: (row: Delegation) =>\r\n !this.has(row, 'Cancel') ||\r\n // If row also has Approve/Reject, the cancel for a delegate is \"withdraw\";\r\n // the assertion stays — both can render and BE decides outcome.\r\n false,\r\n loading: (row: Delegation) => this.busyIds().includes(`cancel:${row.id}`),\r\n confirmation: { type: 'popup' },\r\n },\r\n {\r\n icon: 'arrow.arrow-right',\r\n tooltip: this.transloco.translate('delegations.start-session'),\r\n color: 'primary',\r\n action: (row: Delegation) => this.startSession(row),\r\n hidden: (row: Delegation) => !this.has(row, 'StartSession'),\r\n },\r\n ]);\r\n\r\n protected readonly tableColumns = linkedSignal<ColumnDef[]>(() => [\r\n {\r\n key: 'status',\r\n label: this.transloco.translate('delegations.status'),\r\n type: 'custom',\r\n customCellTpl: this.statusCol(),\r\n },\r\n {\r\n key: this.activeTab() === 'my' ? 'delegatedUser' : 'delegator',\r\n label: this.transloco.translate(\r\n this.activeTab() === 'my'\r\n ? 'delegations.delegated-to'\r\n : 'delegations.delegator-name',\r\n ),\r\n type: 'custom',\r\n customCellTpl: this.userCol(),\r\n },\r\n {\r\n key: 'scope',\r\n label: this.transloco.translate('delegations.scope'),\r\n type: 'custom',\r\n customCellTpl: this.scopeCol(),\r\n },\r\n {\r\n key: 'startDateUtc',\r\n label: this.transloco.translate('delegations.start-date'),\r\n type: 'dateTime',\r\n },\r\n {\r\n key: 'endDateUtc',\r\n label: this.transloco.translate('delegations.end-date'),\r\n type: 'dateTime',\r\n },\r\n {\r\n key: 'dayRules',\r\n label: this.transloco.translate('delegations.days'),\r\n type: 'custom',\r\n customCellTpl: this.daysCol(),\r\n },\r\n ]);\r\n\r\n // ---- per-row \"busy\" tracking (no row-version conflict UX yet — toast suffices) ----\r\n private readonly busyIds = signal<string[]>([]);\r\n\r\n private readonly weekdayKeys = [\r\n 'sunday',\r\n 'monday',\r\n 'tuesday',\r\n 'wednesday',\r\n 'thursday',\r\n 'friday',\r\n 'saturday',\r\n ] as const;\r\n\r\n // ---------------------------------------------------------------------------\r\n // Init / tab change\r\n // ---------------------------------------------------------------------------\r\n ngOnInit(): void {\r\n this.loadCurrentTab();\r\n }\r\n\r\n protected switchTab(tab: DelegationTab): void {\r\n this.activeTab.set(tab);\r\n this.loadCurrentTab();\r\n }\r\n\r\n private loadCurrentTab(\r\n query: DelegationListQuery = { page: 1, pageSize: 20 },\r\n ): void {\r\n if (this.activeTab() === 'my') {\r\n this.facade.getMy(query);\r\n } else {\r\n this.facade.getAssigned(query);\r\n }\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Helpers\r\n // ---------------------------------------------------------------------------\r\n protected has(row: Delegation, action: DelegationAllowedAction): boolean {\r\n return row.allowedActions?.includes(action) ?? false;\r\n }\r\n\r\n protected formatDays(row: Delegation): string {\r\n if (\r\n row.dayRules?.type === 'SpecificDays' &&\r\n row.dayRules.specificDays?.length\r\n ) {\r\n return row.dayRules.specificDays\r\n .filter((d) => d >= 0 && d < this.weekdayKeys.length)\r\n .map((d) =>\r\n this.transloco.translate(`delegations.${this.weekdayKeys[d]}`),\r\n )\r\n .join(', ');\r\n }\r\n return this.transloco.translate('delegations.all-days');\r\n }\r\n\r\n // ---------------------------------------------------------------------------\r\n // Lifecycle actions\r\n // ---------------------------------------------------------------------------\r\n private viewDetails(row: Delegation): void {\r\n this.modal.openModal(DelegationDetailDrawer, 'drawer', {\r\n header: this.transloco.translate('delegations.view-details'),\r\n styleClass:\r\n '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]',\r\n position: 'end',\r\n appendTo: 'page-content',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: { delegationId: row.id },\r\n });\r\n }\r\n\r\n private openForm(row: Delegation | null, readonly = false): void {\r\n const isDrawer: 'drawer' | 'dialog' = row ? 'drawer' : 'dialog';\r\n this.modal.openModal(DelegationForm, isDrawer, {\r\n header: this.transloco.translate(\r\n row ? 'delegations.edit-delegation' : 'delegations.create-delegation',\r\n ),\r\n styleClass:\r\n isDrawer === 'drawer'\r\n ? '!absolute !shadow-none !w-full !max-w-full sm:!w-[42rem] xl:!w-[50rem]'\r\n : '!w-[min(96vw,50rem)] !max-w-[96vw] !h-[min(90vh,40rem)] !max-h-[90vh]',\r\n position: isDrawer === 'drawer' ? 'end' : '',\r\n appendTo: isDrawer === 'drawer' ? 'page-content' : 'body',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n delegationForEdit: row,\r\n readonly,\r\n },\r\n });\r\n }\r\n\r\n private approve(row: Delegation): void {\r\n this.mark(`approve:${row.id}`, true);\r\n this.facade\r\n .approve(row.id, { rowVersion: row.rowVersion })\r\n .pipe(finalize(() => this.mark(`approve:${row.id}`, false)))\r\n .subscribe();\r\n }\r\n\r\n private reject(row: Delegation): void {\r\n this.mark(`reject:${row.id}`, true);\r\n this.facade\r\n .reject(row.id, {\r\n rowVersion: row.rowVersion,\r\n reason: this.transloco.translate('delegations.reject'),\r\n })\r\n .pipe(finalize(() => this.mark(`reject:${row.id}`, false)))\r\n .subscribe();\r\n }\r\n\r\n private cancel(row: Delegation): void {\r\n this.mark(`cancel:${row.id}`, true);\r\n this.facade\r\n .cancel(row.id, {\r\n rowVersion: row.rowVersion,\r\n reason: this.transloco.translate('delegations.cancel-delegation'),\r\n })\r\n .pipe(finalize(() => this.mark(`cancel:${row.id}`, false)))\r\n .subscribe();\r\n }\r\n\r\n private startSession(row: Delegation): void {\r\n this.modal.openModal(StartSessionDialog, 'dialog', {\r\n header: this.transloco.translate('delegations.start-session'),\r\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\r\n dismissableMask: true,\r\n dismissible: true,\r\n inputValues: {\r\n candidate: {\r\n id: row.id,\r\n delegator: row.delegator,\r\n delegatedUser: row.delegatedUser,\r\n status: row.status,\r\n allowedActions: row.allowedActions,\r\n startDateUtc: row.startDateUtc,\r\n endDateUtc: row.endDateUtc,\r\n scopeSummary: row.scope?.summary,\r\n },\r\n intent: 'start',\r\n },\r\n });\r\n }\r\n\r\n private mark(key: string, on: boolean): void {\r\n this.busyIds.update((ids) =>\r\n on ? [...ids, key] : ids.filter((id) => id !== key),\r\n );\r\n }\r\n}\r\n","<ng-container *transloco=\"let t\">\r\n <div class=\"flex flex-col h-full gap-2 p-4\">\r\n <mt-breadcrumb [items]=\"breadcrumbItems()\"></mt-breadcrumb>\r\n\r\n <div class=\"flex items-center gap-2 border-b border-gray-200\">\r\n @for (tab of tabs(); track tab.value) {\r\n <button\r\n type=\"button\"\r\n class=\"px-4 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\r\n [class.border-primary]=\"activeTab() === tab.value\"\r\n [class.text-primary]=\"activeTab() === tab.value\"\r\n [class.border-transparent]=\"activeTab() !== tab.value\"\r\n [class.text-gray-500]=\"activeTab() !== tab.value\"\r\n (click)=\"switchTab(tab.value)\"\r\n >\r\n {{ tab.label }}\r\n </button>\r\n }\r\n </div>\r\n\r\n <mt-table\r\n [data]=\"rows()\"\r\n [columns]=\"tableColumns()\"\r\n [actions]=\"tableActions()\"\r\n [rowActions]=\"rowActions()\"\r\n [loading]=\"isLoading()\"\r\n >\r\n <ng-template #statusCol let-row>\r\n <mt-delegation-status-chip\r\n [status]=\"row.status\"\r\n ></mt-delegation-status-chip>\r\n </ng-template>\r\n\r\n <ng-template #userCol let-row>\r\n @let user = activeTab() === \"my\" ? row.delegatedUser : row.delegator;\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar\r\n [image]=\"user?.photo || ''\"\r\n icon=\"user.user-01\"\r\n styleClass=\"w-8! h-8!\"\r\n ></mt-avatar>\r\n <div class=\"flex flex-col min-w-0\">\r\n <span class=\"text-sm text-gray-900 truncate\">\r\n {{ user?.displayName }}\r\n </span>\r\n @if (user?.email) {\r\n <span class=\"text-xs text-gray-500 truncate\">\r\n {{ user.email }}\r\n </span>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <ng-template #scopeCol let-row>\r\n <span class=\"text-sm text-gray-700\" [title]=\"row.scope?.summary\">\r\n {{ row.scope?.summary || \"—\" }}\r\n </span>\r\n </ng-template>\r\n\r\n <ng-template #daysCol let-row>\r\n <span class=\"text-sm text-gray-700\">{{ formatDays(row) }}</span>\r\n </ng-template>\r\n </mt-table>\r\n </div>\r\n</ng-container>\r\n","import { HttpInterceptorFn } from '@angular/common/http';\r\nimport { inject } from '@angular/core';\r\nimport { DelegationSessionFacade } from '../store/session/delegation-session.facade';\r\n\r\n/**\r\n * Pattern for endpoints that should NEVER receive the `app-delegation` header.\r\n * Token issuance, refresh, end-session and session-read calls use only `Authorization`\r\n * (architecture doc §9.1).\r\n */\r\nconst EXCLUDE =\r\n /\\bidentity\\/delegations\\/(?:[^/]+\\/)?(?:token|session)(?:\\/|$)/i;\r\n\r\n/**\r\n * Adds `app-delegation: Bearer <token>` to outgoing requests when a delegation\r\n * session is active. Token-management endpoints are excluded.\r\n *\r\n * Register AFTER the gateway-auth interceptor (so `Authorization` is set first)\r\n * and BEFORE the message interceptor (so 403s still flow through toast handling).\r\n */\r\nexport const appDelegationInterceptor: HttpInterceptorFn = (req, next) => {\r\n if (EXCLUDE.test(req.url)) {\r\n return next(req);\r\n }\r\n\r\n const token = inject(DelegationSessionFacade).accessToken();\r\n if (!token) {\r\n return next(req);\r\n }\r\n\r\n return next(\r\n req.clone({\r\n setHeaders: { 'app-delegation': `Bearer ${token}` },\r\n }),\r\n );\r\n};\r\n","// store/index.ts\r\nexport * from './delegations';\r\nexport * from './session';\r\n","// Runtime UI surfaces — projected into host topbars + opened via ModalService.\r\nexport { TopbarDelegationMenu } from './lib/delegations/topbar-delegation-menu/topbar-delegation-menu';\r\nexport { DelegationStatusChip } from './lib/delegations/delegation-status-chip/delegation-status-chip';\r\nexport { default as StartSessionDialog } from './lib/delegations/start-session-dialog/start-session-dialog';\r\n\r\n// Management UI — portal page (My Delegations / Delegated To Me) + form + detail drawer.\r\nexport { default as Delegations } from './lib/delegations/delegations';\r\nexport { default as DelegationsList } from './lib/delegations/delegations-list/delegations-list';\r\nexport { default as DelegationForm } from './lib/delegations/delegation-form/delegation-form';\r\nexport { default as DelegationDetailDrawer } from './lib/delegations/delegation-detail-drawer/delegation-detail-drawer';\r\nexport { ScopePicker } from './lib/delegations/delegation-form/scope-picker/scope-picker';\r\n\r\n// HTTP\r\nexport { appDelegationInterceptor } from './interceptors/app-delegation.interceptor';\r\n\r\n// Store (models, actions, state, facades — both delegations and session)\r\nexport * from './store';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["BASE","__decorate","EMPTY_SCOPE","i1","i2"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,MAAM,aAAa,GAA2C;AAC5D,IAAA,MAAM,EAAE;AACN,QAAA,OAAO,EAAE,oBAAoB;AAC7B,QAAA,UAAU,EAAE,uCAAuC;AACpD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,OAAO,EAAE,uBAAuB;AAChC,QAAA,UAAU,EAAE,0CAA0C;AACvD,KAAA;AACD,IAAA,eAAe,EAAE;AACf,QAAA,OAAO,EAAE,8BAA8B;AACvC,QAAA,UAAU,EAAE,wCAAwC;AACrD,KAAA;AACD,IAAA,OAAO,EAAE;AACP,QAAA,OAAO,EAAE,qBAAqB;AAC9B,QAAA,UAAU,EAAE,wCAAwC;AACrD,KAAA;AACD,IAAA,QAAQ,EAAE;AACR,QAAA,OAAO,EAAE,sBAAsB;AAC/B,QAAA,UAAU,EAAE,yCAAyC;AACtD,KAAA;AACD,IAAA,SAAS,EAAE;AACT,QAAA,OAAO,EAAE,uBAAuB;AAChC,QAAA,UAAU,EAAE,0CAA0C;AACvD,KAAA;CACF;MA2EY,oBAAoB,CAAA;AACtB,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,4EAAoB;AAEjC,IAAA,MAAM,GAAG,QAAQ,CAClC,MAAM,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,6EACnC;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,CAAA;;;;;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,CAAA;;;;;AAKT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,+sCAAA,CAAA,EAAA;;;AC5CH;MACa,0BAA0B,CAAA;AACrC,IAAA,OAAgB,IAAI,GAAG,+BAA+B;;AAGxD;MACa,uBAAuB,CAAA;AAEf,IAAA,UAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,oCAAoC;AAC3D,IAAA,WAAA,CAAmB,UAA+B,EAAA;QAA/B,IAAA,CAAA,UAAU,GAAV,UAAU;IAAwB;;AAGvD;MACa,sBAAsB,CAAA;AAEd,IAAA,YAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,2BAA2B;AAClD,IAAA,WAAA,CAAmB,YAAoB,EAAA;QAApB,IAAA,CAAA,YAAY,GAAZ,YAAY;IAAW;;AAG5C;MACa,oBAAoB,CAAA;AAEZ,IAAA,OAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,yBAAyB;AAChD,IAAA,WAAA,CAAmB,UAAgC,EAAE,EAAA;QAAlC,IAAA,CAAA,OAAO,GAAP,OAAO;IAA8B;;AAG1D;MACa,uBAAuB,CAAA;AAEf,IAAA,YAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,4BAA4B;AACnD,IAAA,WAAA,CAAmB,YAAoB,EAAA;QAApB,IAAA,CAAA,YAAY,GAAZ,YAAY;IAAW;;AAG5C;MACa,wBAAwB,CAAA;AACnC,IAAA,OAAgB,IAAI,GAAG,6BAA6B;;AAGtD;MACa,uBAAuB,CAAA;AAClC,IAAA,OAAgB,IAAI,GAAG,4BAA4B;;AAGrD;MACa,4BAA4B,CAAA;AAG9B,IAAA,MAAA;AAFT,IAAA,OAAgB,IAAI,GAAG,iCAAiC;AACxD,IAAA,WAAA,CACS,MAKM,EAAA;QALN,IAAA,CAAA,MAAM,GAAN,MAAM;IAMZ;;;AC7CE,MAAM,8BAA8B,GAAG;AAUxC,SAAU,eAAe,CAC7B,IAAyB,EAAA;IAEzB,OAAO;QACL,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,uBAAuB,EAAE,IAAI,CAAC,uBAAuB;QACrD,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,wBAAwB,EAAE,IAAI,CAAC,wBAAwB;QACvD,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B;AACH;IAEY;AAAZ,CAAA,UAAY,0BAA0B,EAAA;AACpC,IAAA,0BAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,0BAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,0BAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,0BAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,0BAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC3B,CAAC,EANW,0BAA0B,KAA1B,0BAA0B,GAAA,EAAA,CAAA,CAAA;;;;;;;;ACStC,MAAMA,MAAI,GAAG,sBAAsB;AAEnC;AACA;AACA;AACA,MAAM,wBAAwB,CAAA;AAC5B,IAAA,OAAgB,IAAI,GAAG,sBAAsB;;AAE/C,MAAM,kBAAkB,CAAA;AACtB,IAAA,OAAgB,IAAI,GAAG,eAAe;;AAGxC,SAAS,UAAU,GAAA;AACjB,IAAA,IAAI;QACF,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,8BAA8B,CAAC;AAClE,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B;QACzD,IAAI,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC,MAAM,EAAE,uBAAuB;AAAE,YAAA,OAAO,IAAI;AACzE,QAAA,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;AACnE,YAAA,cAAc,CAAC,UAAU,CAAC,8BAA8B,CAAC;AACzD,YAAA,OAAO,IAAI;QACb;AACA,QAAA,OAAO,MAAM;IACf;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;AAEA,SAAS,WAAW,CAAC,KAAqC,EAAA;AACxD,IAAA,IAAI;QACF,IAAI,KAAK,EAAE;AACT,YAAA,cAAc,CAAC,OAAO,CACpB,8BAA8B,EAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CACtB;QACH;aAAO;AACL,YAAA,cAAc,CAAC,UAAU,CAAC,8BAA8B,CAAC;QAC3D;IACF;AAAE,IAAA,MAAM;;IAER;AACF;AAEA;;;AAGG;AACG,SAAU,cAAc,CAC5B,WAAmD,EAAA;AAEnD,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;AAAE,QAAA,OAAO,EAAE;IAC1C,OAAO,WAAW,CAAC,MAAM,CACvB,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,CAC3E;AACH;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;;;;;AAKE,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CAAC;aACjD,SAAS,CAAC,MAAK;YACd,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,0BAA0B,EAAE,CAAC;AACvD,QAAA,CAAC,CAAC;AAEJ,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;aAC3C,SAAS,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AACjE,QAAA,CAAC,CAAC;IACN;;;;AAOO,IAAP,OAAO,SAAS,CACd,KAAkC,EAAA;QAElC,OAAO,KAAK,CAAC,MAAM;IACrB;AAGO,IAAP,OAAO,aAAa,CAClB,KAAkC,EAAA;QAElC,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,SAAS,CAAC,GAA8C,EAAA;;AAEtD,QAAA,MAAM,MAAM,GAAG,UAAU,EAAE;QAC3B,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;;QAGlC,MAAM,QAAQ,GAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAA8B,CAAC,MAAM,CAAC;AAC3E,QAAA,MAAM,eAAe,GAClB,QAA6D,EAAE;cAC5D,WAAW,IAAI,EAAE;AACvB,QAAA,GAAG,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,cAAc,CAAC,eAAe,CAAC,EAAE,CAAC;;QAG/D,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,uBAAuB,EAAE,CAAC;QACpD;IACF;AAGA,IAAA,aAAa,CACX,GAA8C,EAC9C,EAAE,UAAU,EAA2B,EAAA;AAEvC,QAAA,GAAG,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;IAChC;AAGA,IAAA,MAAM,CAAC,GAA8C,EAAA;AACnD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CACxB,CAAA,EAAGA,MAAI,CAAA,QAAA,CAAU,CAClB;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,0BAA0B,CAAC,UAAU;AAC1C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,KAAI;AACtB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;oBAClB,WAAW,CAAC,IAAI,CAAC;AACjB,oBAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;gBACzB;gBACA,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM;AACrC,gBAAA,IAAI,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE;;AAEzD,oBAAA,MAAM,OAAO,GAA4B;AACvC,wBAAA,GAAG,OAAO;wBACV,UAAU,EAAE,QAAQ,CAAC,IAAI;qBAC1B;oBACD,WAAW,CAAC,OAAO,CAAC;AACpB,oBAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;gBAC5B;;gBAEA,WAAW,CAAC,IAAI,CAAC;AACjB,gBAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;YACzB,CAAC;AACF,SAAA,CAAC;IACJ;AAGA,IAAA,KAAK,CACH,GAA8C,EAC9C,EAAE,YAAY,EAA0B,EAAA;AAExC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CACzB,CAAA,EAAGA,MAAI,IAAI,YAAY,CAAA,MAAA,CAAQ,EAC/B,EAAE,CACH;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,0BAA0B,CAAC,YAAY;AAC5C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,KAAI;gBACtB,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7C,WAAW,CAAC,MAAM,CAAC;gBACnB,OAAO,EAAE,MAAM,EAAE;YACnB,CAAC;AACF,SAAA,CAAC;IACJ;AAGA,IAAA,GAAG,CACD,GAA8C,EAC9C,EAAE,OAAO,EAAwB,EAAA;AAEjC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;;QAE5B,WAAW,CAAC,IAAI,CAAC;QACjB,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAEhC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;AACnC,YAAA,OAAO,KAAK;QACd;;QAEA,OAAO,IAAI,CAAC;AACT,aAAA,IAAI,CAAiB,CAAA,EAAGA,MAAI,CAAA,YAAA,CAAc,EAAE,EAAE;aAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;IAClC;AAGA,IAAA,MAAM,CACJ,GAA8C,EAC9C,EAAE,YAAY,EAA2B,EAAA;QAEzC,OAAO,IAAI,CAAC;aACT,QAAQ,CAAC,IAAI,oBAAoB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;aACnD,IAAI,CACH,SAAS,CAAC,MACR,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,YAAY,CAAC,CAAC,CAC9D,CACF;IACL;AAGA,IAAA,OAAO,CAAC,GAA8C,EAAA;QACpD,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAM;AACrC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CACzB,CAAA,EAAGA,MAAI,gBAAgB,EACvB,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CACvC;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,0BAA0B,CAAC,cAAc;AAC9C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,KAAI;gBACtB,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7C,WAAW,CAAC,MAAM,CAAC;gBACnB,OAAO,EAAE,MAAM,EAAE;YACnB,CAAC;AACF,SAAA,CAAC;IACJ;AAGA,IAAA,WAAW,CAAC,GAA8C,EAAA;;;QAGxD,WAAW,CAAC,IAAI,CAAC;QACjB,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAChC,QAAA,OAAO,KAAK;IACd;uGAzMW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAtB,sBAAsB,EAAA,CAAA;;AA+DjCC,YAAA,CAAA;IADC,MAAM,CAAC,0BAA0B;AAiBjC,CAAA,EAAA,sBAAA,CAAA,SAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAGDA,YAAA,CAAA;IADC,MAAM,CAAC,uBAAuB;AAM9B,CAAA,EAAA,sBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAGDA,YAAA,CAAA;IADC,MAAM,CAAC,uBAAuB;AA6B9B,CAAA,EAAA,sBAAA,CAAA,SAAA,EAAA,QAAA,EAAA,IAAA,CAAA;AAGDA,YAAA,CAAA;IADC,MAAM,CAAC,sBAAsB;AAmB7B,CAAA,EAAA,sBAAA,CAAA,SAAA,EAAA,OAAA,EAAA,IAAA,CAAA;AAGDA,YAAA,CAAA;IADC,MAAM,CAAC,oBAAoB;AAiB3B,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;AAGDA,YAAA,CAAA;IADC,MAAM,CAAC,wBAAwB;AAkB/B,CAAA,EAAA,sBAAA,CAAA,SAAA,EAAA,SAAA,EAAA,IAAA,CAAA;AAGDA,YAAA,CAAA;IADC,MAAM,CAAC,4BAA4B;AAOnC,CAAA,EAAA,sBAAA,CAAA,SAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AA7KMA,YAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,sBAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAGMA,YAAA,CAAA;AADN,IAAA,QAAQ;AAKR,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;AAxDU,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,CA0MlC;2FA1MY,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;MCrFY,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;;;;AAKQ,IAAA,SAAS,GAAG,QAAQ,CAC3B,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,SAAS,IAAI,IAAI,gFAClD;AACQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,IAAI,IAAI,kFAAC;AAChE,IAAA,uBAAuB,GAAG,QAAQ,CACzC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,uBAAuB,IAAI,IAAI,8FACrD;AACQ,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,GAAG,CAAC,oFAAC;AAE5D,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,YAAY,CAAC,wFACvE;AACQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,UAAU,CAAC,sFACrE;AACQ,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MACtC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,cAAc,CAAC,0FACzE;;;;IAKD,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,0BAA0B,EAAE,CAAC;IAC9D;AACA,IAAA,aAAa,CAAC,UAA+B,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAC;IACrE;AACA,IAAA,YAAY,CAAC,YAAoB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,YAAY,CAAC,CAAC;IACtE;IACA,UAAU,CAAC,OAA6B,EAAE,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC5D;AACA,IAAA,aAAa,CAAC,YAAoB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACvE;IACA,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,wBAAwB,EAAE,CAAC;IAC5D;IACA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,uBAAuB,EAAE,CAAC;IAC3D;IACA,UAAU,CACR,SAKgB,SAAS,EAAA;AAEzB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACtE;uGArEW,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;;;ACDlC;;;AAGG;AAQW,MAAO,kBAAkB,CAAA;AAC5B,IAAA,SAAS,GAAG,KAAK,CAAC,QAAQ,+EAAqB;AAC/C,IAAA,MAAM,GAAG,KAAK,CAAqB,OAAO,6EAAC;AAEnC,IAAA,GAAG,GAAa,MAAM,CAAC,QAAQ,CAAC;AAChC,IAAA,MAAM,GAAG,MAAM,CAAC,uBAAuB,CAAC;IAEtC,MAAM,GAAG,QAAQ,CAClC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,6EACvE;IAEkB,KAAK,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,MAAM,EAAE,KAAK;AAChB,UAAE;UACA,yCAAyC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,OAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC9C;IAEkB,IAAI,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,MAAM,EAAE,KAAK;AAChB,UAAE;UACA,wCAAwC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAC7C;IAED,OAAO,GAAA;QACL,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE;AAC9B,QAAA,MAAM,GAAG,GACP,IAAI,CAAC,MAAM,EAAE,KAAK;cACd,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;cAC5B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,SAAS,CAAC;YACZ,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,KAAK,EAAE,MAAK;;YAEZ,CAAC;AACF,SAAA,CAAC;IACJ;IAEA,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;IACvB;uGAvCmB,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,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,EC1BvC,6rDAmDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7BY,YAAY,+BAAE,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,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,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;;2FAIvC,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAPtC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,UAAA,EACvB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAA,eAAA,EAE1C,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,6rDAAA,EAAA;;;AEHjD;;;;;;;;;AASG;MAkBU,oBAAoB,CAAA;;AAEtB,IAAA,UAAU,GAAG,KAAK,CAAS,cAAc,iFAAC;;AAG1C,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,8EAAC;AAEvB,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,iBAAiB;AAC1C,IAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe;AAEtC,IAAA,aAAa,GAAG,QAAQ,CACzC,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,UAAU,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,oFAC5D;;AAGkB,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,aAAa,CAAC,KAAY,EAAA;QACxB,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;IAC9B;IAEA,cAAc,CAAC,SAA4B,EAAE,KAAiB,EAAA;QAC5D,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC;IAC3C;IAEA,QAAQ,CAAC,SAA4B,EAAE,KAAiB,EAAA;QACtD,KAAK,CAAC,eAAe,EAAE;AACvB,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;AACrB,QAAA,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC5C;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,EAAE,CAAC,SAAS,EAAE;IACtC;IAEQ,gBAAgB,CACtB,SAA4B,EAC5B,MAA0B,EAAA;QAE1B,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,QAAQ,EAAE;YACjD,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAC9B,MAAM,KAAK;AACT,kBAAE;kBACA,2BAA2B,CAChC;AACD,YAAA,UAAU,EAAE,oCAAoC;AAChD,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;gBACX,SAAS;gBACT,MAAM;AACP,aAAA;AACF,SAAA,CAAC;IACJ;uGAtEW,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,0dChDjC,89PAqLA,EAAA,MAAA,EAAA,CAAA,sTAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlJI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,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,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,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;;2FAMX,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAjBhC,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,MAAM;wBACN,MAAM;wBACN,IAAI;wBACJ,OAAO;wBACP,UAAU;wBACV,kBAAkB;wBAClB,oBAAoB;qBACrB,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,89PAAA,EAAA,MAAA,EAAA,CAAA,sTAAA,CAAA,EAAA;uQAaU,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEhDtD,MAAO,WAAW,CAAA;AACb,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAExC,MAAM,GAAA;QACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,gCAAgC,CAAC,CAAC;IAC1D;uGALmB,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,0ECXhC,scAeA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDRY,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,CAAA;;2FAI7B,WAAW,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,WACjB,CAAC,IAAI,EAAE,YAAY,EAAE,kBAAkB,CAAC,EAAA,QAAA,EAAA,scAAA,EAAA;;;AEGnD;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,aAAa,CAAA;AAGf,IAAA,EAAA;AACA,IAAA,oBAAA;AAHT,IAAA,OAAgB,IAAI,GAAG,8BAA8B;IACrD,WAAA,CACS,EAAU,EACV,oBAAA,GAAgC,KAAK,EAAA;QADrC,IAAA,CAAA,EAAE,GAAF,EAAE;QACF,IAAA,CAAA,oBAAoB,GAApB,oBAAoB;IAC1B;;MAGQ,uBAAuB,CAAA;AAClC,IAAA,OAAgB,IAAI,GAAG,yCAAyC;;AAGlE;AACA;AACA;MAEa,gBAAgB,CAAA;AAER,IAAA,OAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,iCAAiC;AACxD,IAAA,WAAA,CAAmB,OAAgC,EAAA;QAAhC,IAAA,CAAA,OAAO,GAAP,OAAO;IAA4B;;MAG3C,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,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,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;;AAGL;AACA;AACA;MAEa,eAAe,CAAA;AAGP,IAAA,eAAA;AAFnB,IAAA,OAAgB,IAAI,GAAG,iCAAiC;;AAExD,IAAA,WAAA,CAAmB,eAAwB,EAAA;QAAxB,IAAA,CAAA,eAAe,GAAf,eAAe;IAAY;;MAGnC,YAAY,CAAA;AAEJ,IAAA,KAAA;AADnB,IAAA,OAAgB,IAAI,GAAG,6BAA6B;AACpD,IAAA,WAAA,CAAmB,KAA6B,EAAA;QAA7B,IAAA,CAAA,KAAK,GAAL,KAAK;IAA2B;;MAGxC,iBAAiB,CAAA;AAC5B,IAAA,OAAgB,IAAI,GAAG,mCAAmC;;;AC4R5D;AACA;AACA;IAEY;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,oBAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,oBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,oBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,oBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,oBAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,oBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,oBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,oBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,oBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC/B,CAAC,EAXW,oBAAoB,KAApB,oBAAoB,GAAA,EAAA,CAAA,CAAA;;;;;;;;AC/VhC,MAAM,IAAI,GAAG,sBAAsB;AAEnC,SAAS,eAAe,CAAC,KAA0B,EAAA;AACjD,IAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;AAC7B,IAAA,IAAI,KAAK,CAAC,IAAI,IAAI,IAAI;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC;AAC/D,IAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;IAC3E,IAAI,KAAK,CAAC,CAAC;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,SAAS;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC;IACtE,IAAI,KAAK,CAAC,OAAO;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;IAChE,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,QAAQ;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;IACnE,IAAI,KAAK,CAAC,cAAc;QACtB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,cAAc,CAAC;AAC7D,IAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI;QAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC;AAC3E,IAAA,IAAI,KAAK,CAAC,oBAAoB,IAAI,IAAI;QACpC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,oBAAoB,CAAC;IACzE,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;AAChE,IAAA,IAAI,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE;AACxB,QAAA,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;YAC5B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrC;IACF;AACA,IAAA,OAAO,MAAM;AACf;AAEA,SAAS,aAAa,CACpB,IAAoC,EACpC,OAAmB,EAAA;AAEnB,IAAA,IAAI,CAAC,IAAI;AAAE,QAAA,OAAO,IAAI;IACtB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC;IAC9D,IAAI,GAAG,KAAK,CAAC,CAAC;AAAE,QAAA,OAAO,IAAI;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAChC,IAAA,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO;AACpB,IAAA,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE;AAC3B;AAeO,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB,CAAA;AACnB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;;;;AAO1B,IAAP,OAAO,SAAS,CACd,KAA4B,EAAA;QAE5B,OAAO,KAAK,CAAC,EAAE;IACjB;AAGO,IAAP,OAAO,eAAe,CACpB,KAA4B,EAAA;QAE5B,OAAO,KAAK,CAAC,QAAQ;IACvB;AAGO,IAAP,OAAO,WAAW,CAAC,KAA4B,EAAA;QAC7C,OAAO,KAAK,CAAC,QAAQ;IACvB;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,gBAAgB,CACd,GAAwC,EACxC,EAAE,KAAK,EAAoB,EAAA;QAE3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CACxB,CAAA,EAAG,IAAI,CAAA,GAAA,CAAK,EACZ;AACE,YAAA,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC;AAC/B,SAAA,CACF;AACD,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,gBAAgB;AAC1C,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,sBAAsB,CACpB,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,sBAAsB;AAChD,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,aAAa,CACX,GAAwC,EACxC,EAAE,EAAE,EAAE,oBAAoB,EAAiB,EAAA;AAE3C,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;QAC7B,IAAI,oBAAoB,EAAE;YACxB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC;QACjD;AACA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAA6B,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,EAAE,EAAE,EAAE;YACtE,MAAM;AACP,SAAA,CAAC;AACF,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,aAAa;AACvC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AAC/D,SAAA,CAAC;IACJ;AAGA,IAAA,uBAAuB,CAAC,GAAwC,EAAA;QAC9D,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACpC;;;;AAOA,IAAA,gBAAgB,CACd,GAAwC,EACxC,EAAE,OAAO,EAAoB,EAAA;AAE7B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAuB,IAAI,EAAE,OAAO,CAAC;AAChE,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG,EAAE,oBAAoB,CAAC,gBAAgB;AAC1C,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,SAAS,EAAE,CAAC,QAAQ,KAAI;AACtB,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI;AAC7B,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;gBAC5B,OAAO;oBACL,EAAE,EAAE,KAAK,CAAC;AACR,0BAAE,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;0BAClD,KAAK,CAAC,EAAE;iBACb;YACH,CAAC;AACF,SAAA,CAAC;IACJ;AAGA,IAAA,gBAAgB,CACd,GAAwC,EACxC,EAAE,EAAE,EAAE,OAAO,EAAoB,EAAA;AAEjC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAuB,CAAA,EAAG,IAAI,IAAI,EAAE,CAAA,CAAE,EAAE,OAAO,CAAC;AAC1E,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAC9B,GAAG,EACH,oBAAoB,CAAC,gBAAgB,EACrC,IAAI,CACL;IACH;AAGA,IAAA,iBAAiB,CACf,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,IAAI,CAAC,oBAAoB,CAC9B,GAAG,EACH,oBAAoB,CAAC,iBAAiB,EACtC,IAAI,CACL;IACH;AAGA,IAAA,gBAAgB,CACd,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,IAAI,CAAC,oBAAoB,CAC9B,GAAG,EACH,oBAAoB,CAAC,gBAAgB,EACrC,IAAI,CACL;IACH;AAGA,IAAA,gBAAgB,CACd,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,IAAI,CAAC,oBAAoB,CAC9B,GAAG,EACH,oBAAoB,CAAC,gBAAgB,EACrC,IAAI,CACL;IACH;;;;AAOA,IAAA,eAAe,CACb,GAAwC,EACxC,EAAE,eAAe,EAAmB,EAAA;AAEpC,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;AAC7B,QAAA,IAAI,eAAe;YACjB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,eAAe,CAAC;QACzD,MAAM,GAAG,GAAG;AACV,cAAE,CAAA,wCAAA;AACF,cAAE,CAAA,EAAG,IAAI,CAAA,cAAA,CAAgB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAmC,GAAG,EAAE;YAChE,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,KAAK,EAAgB,EAAA;AAEvB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CACzB,CAAA,EAAG,IAAI,CAAA,cAAA,CAAgB,EACvB,KAAK,CACN;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;;;;AAMQ,IAAA,oBAAoB,CAC1B,GAAwC,EACxC,GAAyB,EACzB,IAAoC,EAAA;AAEpC,QAAA,OAAO,gBAAgB,CAAC;YACtB,GAAG;YACH,GAAG;AACH,YAAA,QAAQ,EAAE,IAAW;AACrB,YAAA,SAAS,EAAE,CAAC,QAA8B,KAAI;AAC5C,gBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI;AAC7B,gBAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;gBAC5B,OAAO;oBACL,EAAE,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,CAAC;oBACpC,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;AAChD,oBAAA,QAAQ,EACN,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,KAAK,OAAO,CAAC;0BAC5C,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,GAAG,OAAO;0BAC/B,KAAK,CAAC,QAAQ;iBACrB;YACH,CAAC;AACF,SAAA,CAAC;IACJ;uGAtRW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAhB,gBAAgB,EAAA,CAAA;;AAyD3B,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAiBvB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,sBAAsB;AAe7B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,wBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,aAAa;AAkBpB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,uBAAuB;AAG9B,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,yBAAA,EAAA,IAAA,CAAA;AAOD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAoBvB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAWvB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,iBAAiB;AAcxB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAcvB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAcvB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAOD,UAAA,CAAA;IADC,MAAM,CAAC,eAAe;AAoBtB,CAAA,EAAA,gBAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,YAAY;AAenB,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;AAlPM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,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;AAGR,CAAA,EAAA,gBAAA,EAAA,aAAA,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;AAlDU,gBAAgB,GAAA,UAAA,CAAA;AAb5B,IAAA,KAAK,CAAwB;AAC5B,QAAA,IAAI,EAAE,aAAa;AACnB,QAAA,QAAQ,EAAE;AACR,YAAA,EAAE,EAAE,IAAI;AACR,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,QAAQ,EAAE,IAAI;AACd,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,CAuR5B;2FAvRY,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B;;;MCpDY,iBAAiB,CAAA;AACX,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;;;;AAK7B,IAAA,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;AAC3C,IAAA,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC;AACvD,IAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC;AAC/C,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;;;;AAKhE,IAAA,WAAW,GAAG,QAAQ,CAAC,MAC9B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,kFACrE;AACQ,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MACpC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,wFAC3E;AACQ,IAAA,eAAe,GAAG,QAAQ,CAAC,MAClC,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,aAAa,CAAC,sFAClE;AACQ,IAAA,UAAU,GAAG,QAAQ,CAAC,MAC7B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,iFACrE;AACQ,IAAA,UAAU,GAAG,QAAQ,CAAC,MAC7B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,iFACrE;AACQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAC9B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,kFACtE;AACQ,IAAA,WAAW,GAAG,QAAQ,CAAC,MAC9B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,kFACrE;AACQ,IAAA,YAAY,GAAG,QAAQ,CAAC,MAC/B,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,mFACrE;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;;;;AAKQ,IAAA,OAAO,GAAG,QAAQ,CACzB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,IAAI,8EACnE;AACQ,IAAA,aAAa,GAAG,QAAQ,CAC/B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,IAAI,IAAI,oFACzE;AACQ,IAAA,WAAW,GAAG,QAAQ,CAC7B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,aAAa,CAAC,IAAI,IAAI,kFAChE;AACQ,IAAA,WAAW,GAAG,QAAQ,CAC7B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,IAAI,kFACnE;AACQ,IAAA,WAAW,GAAG,QAAQ,CAC7B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,IAAI,kFACnE;AACQ,IAAA,YAAY,GAAG,QAAQ,CAC9B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,IAAI,IAAI,mFACpE;AACQ,IAAA,WAAW,GAAG,QAAQ,CAC7B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,IAAI,kFACnE;AACQ,IAAA,WAAW,GAAG,QAAQ,CAC7B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,IAAI,IAAI,kFACnE;;;;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;AACA,IAAA,MAAM,CAAC,EAAU,EAAE,oBAAoB,GAAG,KAAK,EAAA;AAC7C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,EAAE,EAAE,oBAAoB,CAAC,CAAC;IACzE;IACA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,uBAAuB,EAAE,CAAC;IAC3D;AACA,IAAA,MAAM,CAAC,OAAgC,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3D;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;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;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,gBAAgB,CAAC,eAAwB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,eAAe,CAAC,CAAC;IAClE;AACA,IAAA,YAAY,CAAC,KAA6B,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACrD;IACA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC;IACrD;uGAzHW,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;;;ACMlC,MAAMC,aAAW,GAA2B;AAC1C,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,UAAU,EAAE,gCAAgC;AAC5C,IAAA,qBAAqB,EAAE,EAAE;AACzB,IAAA,OAAO,EAAE,EAAE;CACZ;AAED,SAAS,SAAS,CAAC,CAA8B,EAAA;IAC/C,OAAO,CAAA,EAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,kBAAkB,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAA,CAAE;AAC3F;AAEA,SAAS,gBAAgB,CAAC,CAA+B,EAAA;IACvD,OAAO,CAAA,EAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,IAAI,CAAC,CAAC,kBAAkB,IAAI,EAAE,IAAI,CAAC,CAAC,SAAS,CAAA,CAAE;AAC3F;AAEA;;;;;;;;AAQG;MAeU,WAAW,CAAA;;AAEb,IAAA,KAAK,GAAG,KAAK,CAAyBA,aAAW,4EAAC;AAClD,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;;AAEhC,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;;AAG9C,IAAA,QAAQ,GAAG,MAAM,CAAc,IAAI,GAAG,EAAE,+EAAC;AAEvC,IAAA,YAAY,GAAG,QAAQ,CACxC,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,IAAI,EAAE,mFACzC;;AAGkB,IAAA,mBAAmB,GAAG,QAAQ,CAC/C,MAAK;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,IAAI,EAAE;QACjD,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAqC,KACvD,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;YACnB,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;YACxC,oBAAoB,EAAE,CAAC,CAAC,oBAAoB;YAC5C,UAAU,EAAE,CAAC,CAAC,UAAU;YACxB,SAAS,EAAE,CAAC,CAAC,IAAI;SAClB,CAAC,CAAC,CACJ;AACH,IAAA,CAAC,0FACF;;AAGkB,IAAA,cAAc,GAAG,QAAQ,CAAC,MAAK;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,IAAI,EAAE;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAyC;AAC5D,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;AACvB,YAAA,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACZ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC;QAC7B;QACA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM;YACvD,IAAI;YACJ,KAAK;AACN,SAAA,CAAC,CAAC;AACL,IAAA,CAAC,qFAAC;;AAGiB,IAAA,wBAAwB,GAAG,QAAQ,CACpD,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,qBAAqB,IAAI,EAAE,CAAC,+FACxD;;AAGkB,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAK;AACnD,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB;QAC1C,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE;AACpC,YAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,CAAC,CAAC;YAC/B,GAAG,CAAC,GAAG,CACL,GAAG,EACH,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,iBAAiB,CAAC,CAAC,CACxD;QACH;AACA,QAAA,OAAO,GAAG;AACZ,IAAA,CAAC,wFAAC;;;;IAKF,QAAQ,GAAA;QACN,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IACtD;AAEA,IAAA,WAAA,GAAA;;;QAGE,IAAI,KAAK,GAAyC,IAAI;QACtD,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;AACtB,YAAA,MAAM,UAAU,GACd,CAAC,CAAC,qBAAqB,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAC5D,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,UAAU,EAAE;AACf,oBAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;oBAC/B;gBACF;AACA,gBAAA,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC;AAC9B,gBAAA,KAAK,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAC5D,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;;;;AAKU,IAAA,aAAa,CAAC,MAA4B,EAAA;QAClD,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1D;AAEU,IAAA,mBAAmB,CAAC,KAA+B,EAAA;QAC3D,IAAI,IAAI,CAAC,QAAQ,EAAE;YAAE;QACrB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;YACtB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,qBAAqB,CAAC;YAC5C,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,EAAE;AACvC,gBAAA,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC;YACxC;iBAAO;AACL,gBAAA,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC;YACrC;AACA,YAAA,OAAO,EAAE,GAAG,CAAC,EAAE,qBAAqB,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;AACzD,QAAA,CAAC,CAAC;IACJ;AAEU,IAAA,uBAAuB,CAC/B,KAA+B,EAAA;QAE/B,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC;IACxE;AAEU,IAAA,eAAe,CAAC,MAAmC,EAAA;AAC3D,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;IACzB;AAEU,IAAA,UAAU,CAAC,MAAmC,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/C;IAEU,eAAe,CACvB,MAAmC,EACnC,EAAkC,EAAA;QAElC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW;YAAE;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI;YACtB,MAAM,MAAM,GAAG,CAAA,EAAG,MAAM,CAAC,UAAU,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,kBAAkB,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAA,CAAE;YACrH,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;AAC9B,YAAA,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC;AACpE,YAAA,MAAM,WAAW,GAAiC;gBAChD,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,cAAc,EAAE,MAAM,CAAC,cAAc;gBACrC,SAAS,EAAE,MAAM,CAAC,SAAS;gBAC3B,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;gBACjD,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;AAC7C,gBAAA,UAAU,EAAE,EAAE;aACf;AAED,YAAA,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC;AACX,oBAAA,GAAG,WAAW;AACd,oBAAA,UAAU,EAAE;AACV,wBAAA;4BACE,YAAY,EAAE,EAAE,CAAC,YAAY;4BAC7B,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;AACxC,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC;YACJ;iBAAO;AACL,gBAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;gBAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CACxC,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,KAAK,EAAE,CAAC,iBAAiB,CACpD;AACD,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,OAAO,CAAC,GAAG,CAAC,GAAG;AACb,wBAAA,GAAG,OAAO;AACV,wBAAA,UAAU,EAAE;4BACV,GAAG,OAAO,CAAC,UAAU;AACrB,4BAAA;gCACE,YAAY,EAAE,EAAE,CAAC,YAAY;gCAC7B,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;AACxC,6BAAA;AACF,yBAAA;qBACF;gBACH;qBAAO;oBACL,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,EAAE;AAC1C,oBAAA,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACxB,oBAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;;AAExB,wBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;oBACxB;yBAAO;AACL,wBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE;oBACpD;gBACF;YACF;AACA,YAAA,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE;AAC1B,QAAA,CAAC,CAAC;IACJ;IAEU,mBAAmB,CAC3B,MAAmC,EACnC,EAAkC,EAAA;QAElC,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAC,UAAU,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,kBAAkB,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAA,CAAE;QAClH,QACE,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK;IAEzE;AAEU,IAAA,gBAAgB,CACxB,MAAmC,EAAA;QAEnC,MAAM,GAAG,GAAG,CAAA,EAAG,MAAM,CAAC,UAAU,CAAA,CAAA,EAAI,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAA,CAAA,EAAI,MAAM,CAAC,kBAAkB,IAAI,EAAE,IAAI,MAAM,CAAC,SAAS,CAAA,CAAE;AAClH,QAAA,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC;IACrD;AAEU,IAAA,WAAW,CAAC,EAAkC,EAAA;AACtD,QAAA,OAAO,EAAE,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kCAAkC,CAAC;IAClF;uGAxNW,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,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,ECxExB,u3SAwMA,EAAA,MAAA,EAAA,CAAA,gHAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED1II,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACJ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,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,UAAA,EAAA,IAAA,EACd,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,cAAA,EAAA,eAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,QAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,aAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,WAAA,EAAA,YAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACb,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;;2FAMT,WAAW,EAAA,UAAA,EAAA,CAAA;kBAdvB,SAAS;+BACE,iBAAiB,EAAA,UAAA,EACf,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,IAAI;wBACJ,cAAc;wBACd,aAAa;wBACb,kBAAkB;qBACnB,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,u3SAAA,EAAA,MAAA,EAAA,CAAA,gHAAA,CAAA,EAAA;;;AE/BjD,MAAM,WAAW,GAA2B;AAC1C,IAAA,IAAI,EAAE,UAAU;AAChB,IAAA,UAAU,EAAE,gCAAgC;AAC5C,IAAA,qBAAqB,EAAE,EAAE;AACzB,IAAA,OAAO,EAAE,EAAE;CACZ;AAED;;;;;;;;;AASG;AAgBW,MAAO,cAAc,CAAA;AACxB,IAAA,iBAAiB,GAAG,KAAK,CAAoB,IAAI,wFAAC;AAClD,IAAA,QAAQ,GAAG,KAAK,CAAU,KAAK,+EAAC;IAExB,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;;AAGnD,IAAA,qBAAqB,GAAG,IAAI,WAAW,EAAE;IACzC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,YAAY,CAAC;AAE7D,IAAA,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ;AAC/B,IAAA,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe;IAC7C,QAAQ,GAAG,QAAQ,CACjB,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,+EAC3D;AAED,IAAA,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAEpD,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAK;AACpD,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE;AAC1B,QAAA,IAAI,CAAC,CAAC;AAAE,YAAA,OAAO,KAAK;AACpB,QAAA,MAAM,IAAI,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,CAAC,aAAa,CAAuB;AAC3E,QAAA,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,CAAW;QAC7D,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,KAAK,IAAI;AAC1C,IAAA,CAAC,yFAAC;;AAGiB,IAAA,KAAK,GAAG,MAAM,CAAyB,WAAW,4EAAC;IAEnD,mBAAmB,GAAG,MAAM,CAAC;AAC9C,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACnE,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACnE,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACpE,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACtE,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACrE,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACnE,QAAA,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;AACtE,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEiB,IAAA,oBAAoB,GAAG,QAAQ,CAAoB,OAAO;AAC3E,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,GAAG,EAAE,sBAAsB;AAC3B,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,eAAe;wBACpB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC;AAC3D,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,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,EAAE;qBAC5D,CAAC;AACF,oBAAA,IAAI,mBAAmB,CAAC;AACtB,wBAAA,GAAG,EAAE,aAAa;wBAClB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC;wBAC1D,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,yBAAyB,CAAC;wBAChE,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,cAAc;wBACnB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kCAAkC,CAAC;wBACnE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CACnC,kCAAkC,CACnC;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,YAAY;wBACjB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC;wBACjE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CACnC,gCAAgC,CACjC;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,sBAAsB,CAAC;AACzB,wBAAA,GAAG,EAAE,cAAc;wBACnB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7B,mCAAmC,CACpC;AACD,wBAAA,OAAO,EAAE;AACP,4BAAA;gCACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC;AACzD,gCAAA,KAAK,EAAE,WAAW;AACnB,6BAAA;AACD,4BAAA;gCACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC5D,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,2BAA2B,CAAC;AAC5D,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;4BACT,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE;AAC/D,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,CAAC,+BAA+B,CAAC;AAChE,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,2FAAC;AAEH,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,EAAE;AACvC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,IAAI,EAAE,IAAI,CAAC,EAAE;AACX,gBAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC;oBACpC,aAAa,EAAE,CAAC,CAAC,aAAa;oBAC9B,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,YAAY,EAAE,CAAC,CAAC,YAAY;oBAC5B,UAAU,EAAE,CAAC,CAAC,UAAU;AACxB,oBAAA,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,WAAW;AAC7C,oBAAA,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,YAAY,IAAI,EAAE;AAC5C,oBAAA,gBAAgB,EAAE,CAAC,CAAC,gBAAgB,IAAI,IAAI;AAC7C,iBAAA,CAAC;;AAEF,gBAAA,IAAI,CAAC,CAAC,KAAK,EAAE;AACX,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AACb,wBAAA,IAAI,EAAE,UAAU;AAChB,wBAAA,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU;AAC9B,wBAAA,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAChD,CAAC,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAC9B;AACD,wBAAA,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;4BACnC,UAAU,EAAE,CAAC,CAAC,UAAU;4BACxB,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BACpB,OAAO,EAAE,CAAC,CAAC,OAAO;4BAClB,aAAa,EAAE,CAAC,CAAC,aAAa;4BAC9B,cAAc,EAAE,CAAC,CAAC,cAAc;4BAChC,SAAS,EAAE,CAAC,CAAC,SAAS;4BACtB,oBAAoB,EAAE,CAAC,CAAC,oBAAoB;4BAC5C,kBAAkB,EAAE,CAAC,CAAC,kBAAkB;AACxC,4BAAA,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM;gCACpC,YAAY,EAAE,EAAE,CAAC,YAAY;gCAC7B,iBAAiB,EAAE,EAAE,CAAC,iBAAiB;AACxC,6BAAA,CAAC,CAAC;AACJ,yBAAA,CAAC,CAAC;AACJ,qBAAA,CAAC;gBACJ;YACF;iBAAO,IAAI,CAAC,EAAE,EAAE;AACd,gBAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC;AAC/B,oBAAA,YAAY,EAAE,WAAW;AACzB,oBAAA,gBAAgB,EAAE,IAAI;AACvB,iBAAA,CAAC;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;YAC7B;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,QAAQ,GAAA;QACN,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,EAAE,EAAE;QACvC,IAAI,EAAE,EAAE;YACN,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC;QAC9B;IACF;IAEA,QAAQ,GAAA;QACN,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAK;YAAE;AAC1D,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK;AAC1C,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,QAAQ,IAAI,KAAK;AACpE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAExC,QAAA,MAAM,IAAI,GAAG;YACX,WAAW,EAAE,CAAC,EAAE,WAAW;YAC3B,YAAY,EAAE,CAAC,EAAE,YAAY;YAC7B,UAAU,EAAE,CAAC,EAAE,UAAU;AACzB,YAAA,UAAU,EAAE,EAAE;AACd,YAAA,QAAQ,EAAE;AACR,gBAAA,IAAI,GAAG,CAAC,EAAE,YAAY,IAAI,WAAW,CAAiC;AACtE,gBAAA,YAAY,EACV,CAAC,EAAE,YAAY,KAAK,cAAc,IAAI,CAAC,EAAE,YAAY,IAAI,EAAE,IAAI,EAAE;AACpE,aAAA;AACD,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE;SACpB;AAED,QAAA,IAAI,OAAO,EAAE,EAAE,EAAE;AACf,YAAA,MAAM,GAAG,GAA4B;AACnC,gBAAA,GAAG,IAAI;gBACP,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,gBAAgB,EAAE,CAAC,EAAE,gBAAgB;aACtC;AACD,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC;gBAC5C,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACjC,aAAA,CAAC;QACJ;aAAO;AACL,YAAA,MAAM,GAAG,GAA4B;AACnC,gBAAA,GAAG,IAAI;gBACP,eAAe,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa;AACzD,gBAAA,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB;aACxC;YACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;gBAChC,IAAI,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACjC,aAAA,CAAC;QACJ;IACF;uGAlPmB,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvEnC,64CA+CA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDaI,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,EAAAA,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,wIACX,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,cAAc,EAAA,UAAA,EAAA,CAAA;kBAflC,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,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,64CAAA,EAAA;;;AE5CjD;;;AAGG;AAiBW,MAAO,sBAAsB,CAAA;;AAEhC,IAAA,YAAY,GAAG,KAAK,CAAC,QAAQ,kFAAU;AAE/B,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,0BAA0B,EAAE;AACrD,QAAA,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,mBAAmB,EAAE;AAC3C,QAAA,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,4BAA4B,EAAE;KACvD;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,QAAQ;AAE7B,IAAA,aAAa,GAAG,QAAQ,CACzC,MAAO,IAAI,CAAC,MAAM,EAA8B,EAAE,aAAa,IAAI,EAAE,oFACtE;IAED,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC;IAC/C;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,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,IAAI,aAAa;AAC1D,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7B,CAAA,qBAAA,EAAwB,CAAC,CAAC,WAAW,EAAE,CAAA,CAAE,CAC1C;IACH;uGAnCmB,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,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC7C3C,qnXAqRA,EAAA,MAAA,EAAA,CAAA,oCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpPI,YAAY,+BACZ,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,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,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACJ,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,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,EAAAC,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;kBAhB1C,SAAS;+BACE,6BAA6B,EAAA,UAAA,EAC3B,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,MAAM;wBACN,MAAM;wBACN,IAAI;wBACJ,cAAc;wBACd,kBAAkB;wBAClB,oBAAoB;qBACrB,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,qnXAAA,EAAA,MAAA,EAAA,CAAA,oCAAA,CAAA,EAAA;;;AEXjD;;;;;;;;;AASG;AAgBW,MAAO,eAAe,CAAA;AACjB,IAAA,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAClC,IAAA,OAAO,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACzC,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;AAC5B,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;;AAGlC,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,yBAAyB,CAAC;AAC3D,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;AAGiB,IAAA,SAAS,GAAG,MAAM,CAAgB,IAAI,gFAAC;IACvC,IAAI,GAAG,MAAM,CAAC;AAC/B,QAAA;AACE,YAAA,KAAK,EAAE,IAAqB;YAC5B,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;AAC9D,SAAA;AACD,QAAA;AACE,YAAA,KAAK,EAAE,UAA2B;YAClC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC;AAC/D,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;IAGiB,SAAS,GAAG,QAAQ,CAAC,MACtC,IAAI,CAAC,SAAS,EAAE,KAAK;AACnB,UAAE,IAAI,CAAC,MAAM,CAAC,WAAW;UACvB,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,gFACpC;IACkB,IAAI,GAAG,QAAQ,CAAC,MACjC,IAAI,CAAC,SAAS,EAAE,KAAK;AACnB,UAAE,IAAI,CAAC,MAAM,CAAC,OAAO;UACnB,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,2EAChC;;AAGD,IAAA,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAuB,WAAW,CAAC;AACjE,IAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAuB,SAAS,CAAC;AAC7D,IAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAuB,UAAU,CAAC;AAC/D,IAAA,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAuB,SAAS,CAAC;;IAG1C,YAAY,GAAG,MAAM,CAAgB;AACtD,QAAA;AACE,YAAA,IAAI,EAAE,cAAc;YACpB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,4BAA4B,CAAC;AAC7D,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;;IAGiB,UAAU,GAAG,MAAM,CAAgB;AACpD,QAAA;AACE,YAAA,IAAI,EAAE,aAAa;YACnB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC;AAC7D,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC;AAClD,YAAA,MAAM,EAAE,CAAC,GAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACpD,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC;AACzC,YAAA,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC/C,YAAA,MAAM,EAAE,CAAC,GAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC;AACpD,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,qBAAqB,CAAC;AACxD,YAAA,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC9C,YAAA,MAAM,EAAE,CAAC,GAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;AACtD,YAAA,OAAO,EAAE,CAAC,GAAe,KACvB,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA,QAAA,EAAW,GAAG,CAAC,EAAE,EAAE,CAAC;AAC9C,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,oBAAoB,CAAC;AACvD,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7C,YAAA,MAAM,EAAE,CAAC,GAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;AACrD,YAAA,OAAO,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,EAAE,EAAE,CAAC;AACzE,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,+BAA+B,CAAC;AAClE,YAAA,KAAK,EAAE,QAAQ;AACf,YAAA,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;AAC7C,YAAA,MAAM,EAAE,CAAC,GAAe,KACtB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC;;;gBAGxB,KAAK;AACP,YAAA,OAAO,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,EAAE,EAAE,CAAC;AACzE,YAAA,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;AAChC,SAAA;AACD,QAAA;AACE,YAAA,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC9D,YAAA,KAAK,EAAE,SAAS;YAChB,MAAM,EAAE,CAAC,GAAe,KAAK,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACnD,YAAA,MAAM,EAAE,CAAC,GAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC;AAC5D,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;AAEiB,IAAA,YAAY,GAAG,YAAY,CAAc,MAAM;AAChE,QAAA;AACE,YAAA,GAAG,EAAE,QAAQ;YACb,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;AACrD,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,EAAE;AAChC,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,GAAG,eAAe,GAAG,WAAW;AAC9D,YAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAC7B,IAAI,CAAC,SAAS,EAAE,KAAK;AACnB,kBAAE;kBACA,4BAA4B,CACjC;AACD,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE;AAC9B,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,OAAO;YACZ,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,mBAAmB,CAAC;AACpD,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE;AAC/B,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,cAAc;YACnB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC;AACzD,YAAA,IAAI,EAAE,UAAU;AACjB,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC;AACvD,YAAA,IAAI,EAAE,UAAU;AACjB,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,kBAAkB,CAAC;AACnD,YAAA,IAAI,EAAE,QAAQ;AACd,YAAA,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE;AAC9B,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,cAAA,EAAA,CAAA,8BAAA,EAAA,CAAA,CAAC;;AAGe,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;;;;IAKV,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;IAEQ,cAAc,CACpB,KAAA,GAA6B,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAA;AAEtD,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;AAC7B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAC1B;aAAO;AACL,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;QAChC;IACF;;;;IAKU,GAAG,CAAC,GAAe,EAAE,MAA+B,EAAA;QAC5D,OAAO,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK;IACtD;AAEU,IAAA,UAAU,CAAC,GAAe,EAAA;AAClC,QAAA,IACE,GAAG,CAAC,QAAQ,EAAE,IAAI,KAAK,cAAc;AACrC,YAAA,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,EACjC;AACA,YAAA,OAAO,GAAG,CAAC,QAAQ,CAAC;AACjB,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,YAAA,EAAe,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;iBAE/D,IAAI,CAAC,IAAI,CAAC;QACf;QACA,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC;IACzD;;;;AAKQ,IAAA,WAAW,CAAC,GAAe,EAAA;QACjC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,sBAAsB,EAAE,QAAQ,EAAE;YACrD,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC;AAC5D,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,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,EAAE;AACtC,SAAA,CAAC;IACJ;AAEQ,IAAA,QAAQ,CAAC,GAAsB,EAAE,QAAQ,GAAG,KAAK,EAAA;QACvD,MAAM,QAAQ,GAAwB,GAAG,GAAG,QAAQ,GAAG,QAAQ;QAC/D,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,QAAQ,EAAE;AAC7C,YAAA,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAC9B,GAAG,GAAG,6BAA6B,GAAG,+BAA+B,CACtE;YACD,UAAU,EACR,QAAQ,KAAK;AACX,kBAAE;AACF,kBAAE,uEAAuE;YAC7E,QAAQ,EAAE,QAAQ,KAAK,QAAQ,GAAG,KAAK,GAAG,EAAE;YAC5C,QAAQ,EAAE,QAAQ,KAAK,QAAQ,GAAG,cAAc,GAAG,MAAM;AACzD,YAAA,eAAe,EAAE,IAAI;AACrB,YAAA,WAAW,EAAE,IAAI;AACjB,YAAA,WAAW,EAAE;AACX,gBAAA,iBAAiB,EAAE,GAAG;gBACtB,QAAQ;AACT,aAAA;AACF,SAAA,CAAC;IACJ;AAEQ,IAAA,OAAO,CAAC,GAAe,EAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,GAAG,CAAC,EAAE,CAAA,CAAE,EAAE,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC;AACF,aAAA,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;AAC9C,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA,QAAA,EAAW,GAAG,CAAC,EAAE,CAAA,CAAE,EAAE,KAAK,CAAC,CAAC;AAC1D,aAAA,SAAS,EAAE;IAChB;AAEQ,IAAA,MAAM,CAAC,GAAe,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,EAAE,CAAA,CAAE,EAAE,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC;AACF,aAAA,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;YACd,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,oBAAoB,CAAC;SACvD;AACA,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,EAAE,CAAA,CAAE,EAAE,KAAK,CAAC,CAAC;AACzD,aAAA,SAAS,EAAE;IAChB;AAEQ,IAAA,MAAM,CAAC,GAAe,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,EAAE,CAAA,CAAE,EAAE,IAAI,CAAC;AACnC,QAAA,IAAI,CAAC;AACF,aAAA,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE;YACd,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC;SAClE;AACA,aAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA,OAAA,EAAU,GAAG,CAAC,EAAE,CAAA,CAAE,EAAE,KAAK,CAAC,CAAC;AACzD,aAAA,SAAS,EAAE;IAChB;AAEQ,IAAA,YAAY,CAAC,GAAe,EAAA;QAClC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,QAAQ,EAAE;YACjD,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;AACX,gBAAA,SAAS,EAAE;oBACT,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,aAAa,EAAE,GAAG,CAAC,aAAa;oBAChC,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,cAAc,EAAE,GAAG,CAAC,cAAc;oBAClC,YAAY,EAAE,GAAG,CAAC,YAAY;oBAC9B,UAAU,EAAE,GAAG,CAAC,UAAU;AAC1B,oBAAA,YAAY,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO;AACjC,iBAAA;AACD,gBAAA,MAAM,EAAE,OAAO;AAChB,aAAA;AACF,SAAA,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;uGA1TmB,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,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,UAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,SAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,SAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzDpC,81EAkEA,EAAA,MAAA,EAAA,CAAA,+4BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDpBI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACZ,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,YAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,WAAA,EAAA,eAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACN,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,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,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;;2FAMH,eAAe,EAAA,UAAA,EAAA,CAAA;kBAfnC,SAAS;+BACE,qBAAqB,EAAA,UAAA,EACnB,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,MAAM;wBACN,UAAU;wBACV,KAAK;wBACL,kBAAkB;wBAClB,oBAAoB;qBACrB,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,81EAAA,EAAA,MAAA,EAAA,CAAA,+4BAAA,CAAA,EAAA;AAkDM,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,WAAW,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACb,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACR,UAAU,iEACX,SAAS,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AExG9D;;;;AAIG;AACH,MAAM,OAAO,GACX,iEAAiE;AAEnE;;;;;;AAMG;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;IAEA,MAAM,KAAK,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC,WAAW,EAAE;IAC3D,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB;AAEA,IAAA,OAAO,IAAI,CACT,GAAG,CAAC,KAAK,CAAC;AACR,QAAA,UAAU,EAAE,EAAE,gBAAgB,EAAE,CAAA,OAAA,EAAU,KAAK,EAAE,EAAE;AACpD,KAAA,CAAC,CACH;AACH;;AClCA;;ACAA;;ACAA;;AAEG;;;;"}
|
|
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/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/topbar-delegation-menu/topbar-delegation-menu.ts","../../../../packages/masterteam/delegations/src/lib/delegations/topbar-delegation-menu/topbar-delegation-menu.html","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.ts","../../../../packages/masterteam/delegations/src/lib/delegations/delegations.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/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 | '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 } 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}\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\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 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(ctx: StateContext<DelegationSessionStateModel>) {\n // Client-local only — there is no server end-session endpoint (doc 05).\n ctx.patchState({ active: null });\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 { 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 { Avatar } from '@masterteam/components/avatar';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { DelegationSessionFacade } from '../../../store/session/delegation-session.facade';\nimport { DelegationRow } from '../../../store/delegations/delegations.model';\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 standalone: true,\n imports: [CommonModule, Avatar, Button, 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\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\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: () => 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 items-start gap-3\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-12! h-12! text-lg! bg-surface-200!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <div class=\"text-base font-medium text-gray-900 truncate\">\n {{ delegation().delegator.displayName }}\n </div>\n @if (delegation().delegator.email) {\n <div class=\"text-xs text-gray-500 truncate\">\n {{ delegation().delegator.email }}\n </div>\n }\n @if (delegation().scopeSummary) {\n <div class=\"text-xs text-gray-500 mt-1\">\n {{ t(\"delegations.column.scopeSummary\") }}:\n {{ 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('delegations.action.startSession')\"\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 computed,\n inject,\n input,\n viewChild,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Button } from '@masterteam/components/button';\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';\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 Avatar,\n Button,\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 {\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\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\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 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('delegations.action.startSession'),\n styleClass: '!w-[min(96vw,28rem)] !max-w-[96vw]',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegation: row, intent },\n });\n }\n}\n","<ng-container *transloco=\"let t\">\n @if (mode() !== \"hidden\") {\n <div class=\"mt-delegation-trigger flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"mt-delegation-trigger__button flex items-center gap-2 px-2 py-1 rounded-full cursor-pointer hover:bg-surface-100\"\n [attr.aria-label]=\"t('delegations.title')\"\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 class=\"mt-delegation-trigger__label text-sm font-medium\">\n {{\n t(\"delegations.session.banner\", {\n delegatorName: onBehalfOf()?.displayName,\n })\n }}\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 <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-11! h-11! text-xl! text-gray-600! bg-surface-300!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0 flex-1\">\n <div class=\"text-xs text-gray-500\">\n {{ t(\"delegations.session.actingOnBehalfOf\") }}\n </div>\n <div class=\"text-sm font-medium text-gray-900 truncate\">\n {{ onBehalfOf()?.displayName }}\n </div>\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 <div\n class=\"text-xs text-gray-500 mt-1 truncate\"\n [title]=\"session.delegation.scopeSummary\"\n >\n {{ t(\"delegations.column.scopeSummary\") }}:\n {{ session.delegation.scopeSummary }}\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 (click)=\"switchTo(cand, $event)\"\n >\n <div class=\"flex items-center gap-2 min-w-0\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-7! h-7! text-sm! bg-surface-200!\"\n ></mt-avatar>\n <span class=\"text-sm text-gray-900 truncate\">\n {{ cand.delegator.displayName }}\n </span>\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 (click)=\"start(cand, $event)\"\n >\n <div class=\"flex items-center gap-2 min-w-0 flex-1\">\n <mt-avatar\n icon=\"user.user-01\"\n styleClass=\"w-9! h-9! text-base! bg-surface-200!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <span class=\"text-sm font-medium text-gray-900 truncate\">\n {{ cand.delegator.displayName }}\n </span>\n @if (cand.scopeSummary) {\n <span\n class=\"text-xs text-gray-500 truncate\"\n [title]=\"cand.scopeSummary\"\n >\n {{ cand.scopeSummary }}\n </span>\n }\n </div>\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 <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 </div>\n </p-popover>\n }\n</ng-container>\n","import { Component, inject } from '@angular/core';\nimport { Router, RouterOutlet } from '@angular/router';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Page } from '@masterteam/components/page';\n\n@Component({\n selector: 'mt-delegations',\n imports: [Page, RouterOutlet, TranslocoDirective],\n templateUrl: './delegations.html',\n styleUrl: './delegations.css',\n})\nexport default class Delegations {\n private readonly router = inject(Router);\n\n goBack() {\n this.router.navigate(['control-panel/product-settings']);\n }\n}\n","<ng-container *transloco=\"let t\">\n <mt-page\n [title]=\"t('delegations.title')\"\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 <router-outlet />\n </mt-page>\n</ng-container>\n","import {\n ApproveDelegationRequest,\n CreateDelegationLegacyRequest,\n CreateDelegationV2Request,\n DelegationListQuery,\n DelegationScopeSelection,\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 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(public id: number) {}\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(public delegatorUserId?: string) {}\n}\n\nexport class PreviewScope {\n static readonly type = '[Delegations] Preview Scope';\n constructor(public scope: DelegationScopeSelection) {}\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(public request: CreateDelegationV2Request) {}\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,\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';\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: string;\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 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 displayName?: string | null;\n}\n\nexport interface DelegationScopeAction {\n applicationKey: string;\n operationKey: string;\n operationKind: string;\n permissionCommand?: string | null;\n businessActionCode?: string | null;\n isHighRisk?: boolean;\n isDelegableSnapshot?: boolean;\n}\n\nexport interface DelegationGrant {\n applicationKey: string;\n target: DelegationScopeTarget;\n action: DelegationScopeAction;\n accessibilities: unknown[];\n dataFilters: unknown[];\n constraints: unknown[];\n}\n\nexport interface DelegationScopeSelection {\n grants: DelegationGrant[];\n metadata: Record<string, unknown>;\n}\n\n/** `scope/options` returns the grantable set in the same grants shape. */\nexport type DelegationScopeOptions = DelegationScopeSelection;\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: string;\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 type UpdateDelegationLegacyRequest = CreateDelegationLegacyRequest & {\n rowVersion: string;\n};\n\nexport type UpdateDelegationV2Request = CreateDelegationV2Request & {\n rowVersion: string;\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 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 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 GetAssignedDelegations,\n GetDelegationDetail,\n GetMyDelegations,\n GetScopeOptions,\n PreviewScope,\n RejectDelegation,\n UpdateDelegationLegacy,\n UpdateDelegationV2,\n} from './delegations.actions';\nimport {\n DelegationDetail,\n DelegationDto,\n DelegationListQuery,\n DelegationPage,\n DelegationRow,\n DelegationScopeOptions,\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 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 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(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 }: GetDelegationDetail,\n ) {\n const req$ = this.http.get<Response<DelegationDetail>>(`${BASE}/${id}`);\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 }: GetScopeOptions,\n ) {\n let params = new HttpParams();\n if (delegatorUserId)\n params = params.set('delegatorUserId', delegatorUserId);\n const req$ = this.http.get<Response<DelegationScopeOptions>>(\n `${BASE}/scope/options`,\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 { scope }: PreviewScope,\n ) {\n const req$ = this.http.post<Response<DelegationScopePreview>>(\n `${BASE}/scope/preview`,\n { scope },\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 }: CreateDelegationV2,\n ) {\n const req$ = this.http.post<Response<DelegationDto>>(`${BASE}/v2`, request);\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 }: UpdateDelegationV2,\n ) {\n const req$ = this.http.put<Response<DelegationDto>>(\n `${BASE}/v2/${id}`,\n request,\n );\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","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 GetAssignedDelegations,\n GetDelegationDetail,\n GetMyDelegations,\n GetScopeOptions,\n PreviewScope,\n RejectDelegation,\n UpdateDelegationLegacy,\n UpdateDelegationV2,\n} from './delegations.actions';\nimport {\n ApproveDelegationRequest,\n CreateDelegationLegacyRequest,\n CreateDelegationV2Request,\n DelegationListQuery,\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 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 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 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 errorDetail = computed(\n () => this.errors()[DelegationsActionKey.GetDetail] ?? 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 getActive(query: DelegationListQuery = {}) {\n return this.store.dispatch(new GetActiveAssignedDelegations(query));\n }\n getDetail(id: number) {\n return this.store.dispatch(new GetDelegationDetail(id));\n }\n clearDetail() {\n return this.store.dispatch(new ClearDelegationDetail());\n }\n loadScopeOptions(delegatorUserId?: string) {\n return this.store.dispatch(new GetScopeOptions(delegatorUserId));\n }\n previewScope(scope: DelegationScopeSelection) {\n return this.store.dispatch(new PreviewScope(scope));\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(request: CreateDelegationV2Request) {\n return this.store.dispatch(new CreateDelegationV2(request));\n }\n updateLegacy(id: number, request: UpdateDelegationLegacyRequest) {\n return this.store.dispatch(new UpdateDelegationLegacy(id, request));\n }\n updateV2(id: number, request: UpdateDelegationV2Request) {\n return this.store.dispatch(new UpdateDelegationV2(id, request));\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 effect,\n inject,\n input,\n model,\n OnInit,\n signal,\n untracked,\n} from '@angular/core';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { Icon } from '@masterteam/icons';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TooltipModule } from 'primeng/tooltip';\nimport { DelegationsFacade } from '../../../../store/delegations/delegations.facade';\nimport {\n DelegationGrant,\n DelegationScopeSelection,\n DelegationScopeTarget,\n} from '../../../../store/delegations/delegations.model';\n\ninterface TargetGroup {\n key: string;\n target: DelegationScopeTarget;\n grants: DelegationGrant[];\n}\n\nconst EMPTY_SCOPE: DelegationScopeSelection = { grants: [], metadata: {} };\n\nfunction targetKey(t: DelegationScopeTarget): string {\n return `${t.applicationKey}::${t.targetType}::${t.targetKey}`;\n}\n\nfunction grantKey(g: DelegationGrant): string {\n return `${targetKey(g.target)}::${g.action.operationKey}`;\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\n/**\n * Grants-based scope picker (doc 03). Driven entirely by `scope/options`:\n * - lists grantable target/action pairs returned by the backend,\n * - lets the user toggle each 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 grants returned by options.\n */\n@Component({\n selector: 'mt-scope-picker',\n standalone: true,\n imports: [\n CommonModule,\n Icon,\n SkeletonModule,\n TooltipModule,\n TranslocoDirective,\n ],\n templateUrl: './scope-picker.html',\n styleUrls: ['./scope-picker.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ScopePicker implements OnInit {\n readonly scope = model<DelegationScopeSelection>(EMPTY_SCOPE);\n readonly readonly = input<boolean>(false);\n readonly delegatorUserId = input<string | undefined>(undefined);\n\n private readonly facade = inject(DelegationsFacade);\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\n /** Grantable options grouped by target. */\n protected readonly groups = computed<TargetGroup[]>(() => {\n const grants = this.options()?.grants ?? [];\n const map = new Map<string, TargetGroup>();\n for (const g of grants) {\n const key = targetKey(g.target);\n const existing = map.get(key);\n if (existing) {\n existing.grants.push(g);\n } else {\n map.set(key, { key, target: g.target, grants: [g] });\n }\n }\n return Array.from(map.values());\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\n private readonly expanded = signal<Set<string>>(new Set());\n\n ngOnInit(): void {\n this.facade.loadScopeOptions(this.delegatorUserId());\n }\n\n constructor() {\n let timer: ReturnType<typeof setTimeout> | null = null;\n effect(() => {\n const s = this.scope();\n untracked(() => {\n if (!s.grants.length) {\n this.facade.clearScopePreview();\n return;\n }\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => this.facade.previewScope(s), 300);\n });\n });\n }\n\n protected isExpanded(group: TargetGroup): boolean {\n return this.expanded().has(group.key);\n }\n\n protected toggleAccordion(group: TargetGroup): void {\n const next = new Set(this.expanded());\n if (next.has(group.key)) next.delete(group.key);\n else next.add(group.key);\n this.expanded.set(next);\n }\n\n protected isSelected(grant: DelegationGrant): boolean {\n return this.selectedKeys().has(grantKey(grant));\n }\n\n protected toggleGrant(grant: DelegationGrant): void {\n if (this.readonly()) return;\n const key = grantKey(grant);\n this.scope.update((s) => {\n const exists = s.grants.some((g) => grantKey(g) === key);\n const grants = exists\n ? s.grants.filter((g) => grantKey(g) !== key)\n : [...s.grants, normalizeGrant(grant)];\n return { ...s, grants };\n });\n }\n\n protected selectedCount(group: TargetGroup): number {\n const keys = this.selectedKeys();\n return group.grants.filter((g) => keys.has(grantKey(g))).length;\n }\n}\n","<ng-container *transloco=\"let t\">\n <div class=\"mt-scope-picker flex flex-col gap-4\">\n @if (isLoadingOptions() && !options()) {\n <p-skeleton height=\"2rem\"></p-skeleton>\n <p-skeleton height=\"6rem\"></p-skeleton>\n <p-skeleton height=\"6rem\"></p-skeleton>\n } @else if (options()) {\n <!-- Targets + actions -->\n <section class=\"flex flex-col gap-2\">\n <h4 class=\"text-sm font-medium text-gray-800\">\n {{ t(\"delegations.scope.permissionsTitle\") }}\n </h4>\n\n @if (groups().length === 0) {\n <p class=\"text-xs text-gray-500\">\n {{ t(\"delegations.scope.noGrantableOptions\") }}\n </p>\n }\n\n @for (group of groups(); track group.key) {\n <div class=\"border border-gray-200 rounded-md overflow-hidden\">\n <button\n type=\"button\"\n class=\"flex items-center justify-between w-full px-3 py-2 hover:bg-surface-50 cursor-pointer\"\n (click)=\"toggleAccordion(group)\"\n >\n <div class=\"flex items-center gap-2 min-w-0\">\n <mt-icon\n [icon]=\"\n isExpanded(group)\n ? 'arrow.chevron-down'\n : 'arrow.chevron-right'\n \"\n styleClass=\"text-base text-gray-400\"\n ></mt-icon>\n <span class=\"text-sm text-gray-900 truncate\">\n {{ group.target.displayName || group.target.targetKey }}\n </span>\n <span class=\"text-xs text-gray-400\">\n {{ group.target.targetType }}\n </span>\n </div>\n @if (selectedCount(group); as count) {\n @if (count > 0) {\n <span\n class=\"text-xs text-primary font-medium px-2 py-0.5 rounded-full bg-primary-50\"\n >\n {{ count }}\n </span>\n }\n }\n </button>\n\n @if (isExpanded(group)) {\n <div class=\"flex flex-col gap-1 px-3 py-2 bg-surface-50/40\">\n @for (grant of group.grants; track grant.action.operationKey) {\n <label\n class=\"flex items-center gap-2 px-2 py-1.5 rounded-md cursor-pointer hover:bg-surface-100\"\n >\n <input\n type=\"checkbox\"\n [checked]=\"isSelected(grant)\"\n [disabled]=\"readonly()\"\n (change)=\"toggleGrant(grant)\"\n />\n <span class=\"text-sm\">\n {{ grant.action.operationKey }}\n </span>\n @if (grant.action.isHighRisk) {\n <mt-icon\n icon=\"alert.alert-triangle\"\n styleClass=\"text-sm text-amber-500\"\n [pTooltip]=\"t('delegations.scope.highRisk')\"\n tooltipPosition=\"top\"\n ></mt-icon>\n }\n </label>\n }\n </div>\n }\n </div>\n }\n </section>\n\n <!-- Preview -->\n <section\n class=\"flex flex-col gap-1 px-3 py-2 rounded-md border border-dashed border-gray-300 bg-surface-50\"\n >\n <div class=\"flex items-center justify-between gap-2\">\n <div class=\"text-xs font-medium text-gray-700\">\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 text-gray-900\">\n {{ p.summary || t(\"delegations.column.scopeSummary\") }}\n </div>\n } @else {\n <div class=\"text-sm text-red-700\">\n {{ t(\"delegations.scope.previewInvalid\") }}\n </div>\n }\n @if (p.warnings.length > 0) {\n <ul class=\"text-xs text-amber-700 list-disc list-inside\">\n @for (w of p.warnings; track w.message) {\n <li>{{ w.message }}</li>\n }\n </ul>\n }\n @if (p.deniedItems.length > 0) {\n <ul class=\"text-xs text-red-700 list-disc list-inside\">\n @for (d of p.deniedItems; track d.operationKey) {\n <li>\n {{ d.targetKey }} / {{ d.operationKey }} —\n {{ d.reasonCode }}\n </li>\n }\n </ul>\n }\n } @else {\n <div class=\"text-xs text-gray-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 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\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 styleUrls: ['./delegation-form.css'],\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 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 isSaving = this.facade.isSaving;\n\n context = new HttpContext().set(REQUEST_CONTEXT, { useBaseUrl: false });\n\n protected readonly scope = signal<DelegationScopeSelection>(EMPTY_SCOPE);\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: '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 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 delegationDaysType: 'FullRange',\n requiresApproval: true,\n });\n this.scope.set(EMPTY_SCOPE);\n }\n });\n }\n\n ngOnInit(): void {\n const editing = this.delegationForEdit();\n if (editing) {\n this.facade.getDetail(editing.delegationId);\n }\n }\n\n protected readonly canSubmit = computed(\n () => !this.readonly() && this.scope().grants.length > 0,\n );\n\n onSubmit(): void {\n if (this.readonly() || !this.delegationFormControl.valid) return;\n if (this.scope().grants.length === 0) return;\n\n const v = this.delegationFormControl.value;\n const base = {\n delegateTo: v?.delegateTo?.userId ?? v?.delegateTo?.id ?? v?.delegateTo,\n description: v?.description,\n delegateFromDateTime: v?.delegateFromDateTime,\n delegateToDateTime: v?.delegateToDateTime,\n delegationDaysType: (v?.delegationDaysType ?? 'FullRange') as\n | 'FullRange'\n | 'SpecificDays',\n specificDays:\n v?.delegationDaysType === 'SpecificDays' ? (v?.specificDays ?? []) : [],\n requiresApproval: !!v?.requiresApproval,\n scope: this.scope(),\n };\n\n const editing = this.delegationForEdit();\n if (editing) {\n const req: UpdateDelegationV2Request = {\n ...base,\n rowVersion: editing.rowVersion,\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","<ng-container *transloco=\"let t\">\n <div\n [class]=\"\n 'delegation-form-content flex min-w-0 flex-col gap-3 overflow-x-hidden p-4 max-[640px]:p-3 ' +\n modal.contentClass\n \"\n >\n <mt-dynamic-form\n [formConfig]=\"formConfig()\"\n [formControl]=\"delegationFormControl\"\n />\n\n <div class=\"mt-2 border-t border-gray-200 pt-3 flex flex-col gap-2\">\n <h3 class=\"text-sm font-semibold text-gray-800\">\n {{ t(\"delegations.scope.permissionsTitle\") }}\n </h3>\n <mt-scope-picker\n [(scope)]=\"scope\"\n [readonly]=\"readonly()\"\n ></mt-scope-picker>\n </div>\n </div>\n\n <div\n [class]=\"\n 'delegation-form-footer ' +\n modal.footerClass +\n ' flex-col gap-2 sm:flex-row sm:items-center sm:justify-end'\n \"\n >\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</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 { Avatar } from '@masterteam/components/avatar';\nimport { Button } from '@masterteam/components/button';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\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 Avatar,\n Button,\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\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());\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","<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-avatar\n icon=\"user.user-01\"\n styleClass=\"w-12! h-12! text-lg!\"\n ></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <div class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.delegatorName\") }}\n </div>\n <div class=\"text-base font-medium text-gray-900 truncate\">\n {{ d.row.delegator.displayName }}\n </div>\n @if (d.row.delegator.email) {\n <div class=\"text-xs text-gray-500 truncate\">\n {{ d.row.delegator.email }}\n </div>\n }\n </div>\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 <span class=\"text-xs text-gray-500\">\n {{ t(\"delegations.column.delegatedTo\") }}\n </span>\n <span class=\"text-sm text-gray-900\">\n {{ d.row.delegatedUser.displayName }}\n </span>\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 {{ d.row.scopeSummary || t(\"delegations.column.scopeSummary\") }}\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 {{ grant.target.displayName || grant.target.targetKey }}\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 {{ grant.action.operationKey }}\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 } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n linkedSignal,\n OnInit,\n signal,\n TemplateRef,\n viewChild,\n} from '@angular/core';\nimport { TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Breadcrumb } from '@masterteam/components/breadcrumb';\nimport { ModalService } from '@masterteam/components/modal';\nimport { ColumnDef, Table, TableAction } from '@masterteam/components/table';\nimport { finalize } from 'rxjs';\nimport {\n DelegationAllowedAction,\n DelegationListQuery,\n DelegationRow,\n} from '../../../store/delegations/delegations.model';\nimport { DelegationsFacade } from '../../../store/delegations/delegations.facade';\nimport { DelegationStatusChip } from '../delegation-status-chip/delegation-status-chip';\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';\n\ntype DelegationTab = 'my' | 'assigned';\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 Avatar,\n Breadcrumb,\n Table,\n TranslocoDirective,\n DelegationStatusChip,\n ],\n templateUrl: './delegations-list.html',\n styleUrl: './delegations-list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport default class DelegationsList implements OnInit {\n private readonly facade = inject(DelegationsFacade);\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 tabs = signal([\n {\n value: 'my' as DelegationTab,\n label: this.transloco.translate('delegations.myDelegations'),\n },\n {\n value: 'assigned' as DelegationTab,\n label: this.transloco.translate('delegations.delegatedToMe'),\n },\n ]);\n\n protected readonly isLoading = computed(() =>\n this.activeTab() === 'my'\n ? this.facade.isLoadingMy()\n : this.facade.isLoadingAssigned(),\n );\n protected readonly rows = computed(() =>\n this.activeTab() === 'my'\n ? this.facade.myItems()\n : this.facade.assignedItems(),\n );\n\n statusCol = viewChild.required<TemplateRef<unknown>>('statusCol');\n userCol = viewChild.required<TemplateRef<unknown>>('userCol');\n scopeCol = viewChild.required<TemplateRef<unknown>>('scopeCol');\n daysCol = viewChild.required<TemplateRef<unknown>>('daysCol');\n\n protected readonly tableActions = signal<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 action: (row: DelegationRow) => this.reject(row),\n hidden: (row: DelegationRow) => !this.has(row, 'Reject'),\n loading: (row: DelegationRow) =>\n this.busyIds().includes(`reject:${row.delegationId}`),\n confirmation: { type: 'popup' },\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 protected readonly tableColumns = linkedSignal<ColumnDef[]>(() => [\n {\n key: 'effectiveStatus',\n label: this.transloco.translate('delegations.column.status'),\n type: 'custom',\n customCellTpl: this.statusCol(),\n },\n {\n key: this.activeTab() === 'my' ? 'delegatedUser' : 'delegator',\n label: this.transloco.translate(\n this.activeTab() === 'my'\n ? 'delegations.column.delegatedTo'\n : 'delegations.column.delegatorName',\n ),\n type: 'custom',\n customCellTpl: this.userCol(),\n },\n {\n key: 'scopeSummary',\n label: this.transloco.translate('delegations.column.scopeSummary'),\n type: 'custom',\n customCellTpl: this.scopeCol(),\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: 'dayRuleMode',\n label: this.transloco.translate('delegations.column.days'),\n type: 'custom',\n customCellTpl: this.daysCol(),\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 private loadCurrentTab(\n query: DelegationListQuery = { page: 1, pageSize: 25 },\n ): void {\n if (this.activeTab() === 'my') {\n this.facade.getMy(query);\n } else {\n this.facade.getAssigned(query);\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 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: { delegationId: row.delegationId },\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-[42rem] xl:!w-[50rem]'\n : '!w-[min(96vw,50rem)] !max-w-[96vw] !h-[min(90vh,40rem)] !max-h-[90vh]',\n position: row ? 'end' : '',\n appendTo: row ? 'page-content' : 'body',\n dismissableMask: true,\n dismissible: true,\n inputValues: { delegationForEdit: row, readonly: false },\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 this.mark(`reject:${row.delegationId}`, true);\n this.facade\n .reject(row.delegationId, {\n rowVersion: row.rowVersion,\n reason: this.transloco.translate('delegations.action.reject'),\n })\n .pipe(finalize(() => this.mark(`reject:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private cancel(row: DelegationRow): void {\n this.mark(`cancel:${row.delegationId}`, true);\n this.facade\n .cancel(row.delegationId, row.rowVersion)\n .pipe(finalize(() => this.mark(`cancel:${row.delegationId}`, false)))\n .subscribe({ next: () => this.reloadCurrentTab() });\n }\n\n private startSession(row: DelegationRow): void {\n 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 }\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 <div class=\"flex flex-col h-full gap-2 p-4\">\n <mt-breadcrumb [items]=\"breadcrumbItems()\"></mt-breadcrumb>\n\n <div class=\"flex items-center gap-2 border-b border-gray-200\">\n @for (tab of tabs(); track tab.value) {\n <button\n type=\"button\"\n class=\"px-4 py-2 -mb-px border-b-2 text-sm font-medium transition-colors\"\n [class.border-primary]=\"activeTab() === tab.value\"\n [class.text-primary]=\"activeTab() === tab.value\"\n [class.border-transparent]=\"activeTab() !== tab.value\"\n [class.text-gray-500]=\"activeTab() !== tab.value\"\n (click)=\"switchTab(tab.value)\"\n >\n {{ tab.label }}\n </button>\n }\n </div>\n\n <mt-table\n [data]=\"rows()\"\n [columns]=\"tableColumns()\"\n [actions]=\"tableActions()\"\n [rowActions]=\"rowActions()\"\n [loading]=\"isLoading()\"\n >\n <ng-template #statusCol let-row>\n <mt-delegation-status-chip\n [status]=\"row.effectiveStatus\"\n ></mt-delegation-status-chip>\n </ng-template>\n\n <ng-template #userCol let-row>\n @let party = activeTab() === \"my\" ? row.delegatedUser : row.delegator;\n <div class=\"flex items-center gap-2\">\n <mt-avatar icon=\"user.user-01\" styleClass=\"w-8! h-8!\"></mt-avatar>\n <div class=\"flex flex-col min-w-0\">\n <span class=\"text-sm text-gray-900 truncate\">\n {{ party?.displayName }}\n </span>\n @if (party?.email) {\n <span class=\"text-xs text-gray-500 truncate\">\n {{ party.email }}\n </span>\n }\n </div>\n </div>\n </ng-template>\n\n <ng-template #scopeCol let-row>\n <span class=\"text-sm text-gray-700\" [title]=\"row.scopeSummary\">\n {{ row.scopeSummary || \"—\" }}\n </span>\n </ng-template>\n\n <ng-template #daysCol let-row>\n <span class=\"text-sm text-gray-700\">{{ formatDays(row) }}</span>\n </ng-template>\n </mt-table>\n </div>\n</ng-container>\n","import { HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { DelegationSessionFacade } from '../store/session/delegation-session.facade';\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\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 token = inject(DelegationSessionFacade).token();\n if (!token) {\n return next(req);\n }\n\n return next(\n req.clone({ setHeaders: { 'app-delegation': `Bearer ${token}` } }),\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';\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","EMPTY_SCOPE","i1","i2"],"mappings":"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"}
|