@masterteam/client-components 0.0.10 → 0.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-client-components-client-instance-preview.mjs","sources":["../../../../packages/masterteam/client-components/client-instance-preview/client-instance-preview-api.service.ts","../../../../packages/masterteam/client-components/client-instance-preview/client-instance-preview.ts","../../../../packages/masterteam/client-components/client-instance-preview/client-instance-preview.html","../../../../packages/masterteam/client-components/client-instance-preview/masterteam-client-components-client-instance-preview.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { forkJoin, map, Observable } from 'rxjs';\nimport {\n ClientInstancePreviewConfig,\n DisplayConfiguration,\n PreviewFetchRecordResponse,\n PreviewResponse,\n Response,\n} from './client-instance-preview.model';\n\n@Injectable({ providedIn: 'root' })\nexport class ClientInstancePreviewApiService {\n private readonly http = inject(HttpClient);\n private readonly fetchBaseUrl = 'fetch';\n private readonly displayConfigBaseUrl = 'display-configurations';\n\n resolve(\n config: ClientInstancePreviewConfig,\n ): Observable<Response<PreviewResponse>> {\n const contextKey = config.contextKey;\n const areaKeys = config.displayAreas?.length\n ? config.displayAreas\n : ['card'];\n\n return forkJoin({\n recordResponse: this.http.get<Response<PreviewFetchRecordResponse>>(\n `${this.fetchBaseUrl}/records/${config.instanceId}`,\n {\n params: { contextKey },\n },\n ),\n displayConfigResponse: this.http.get<Response<DisplayConfiguration[]>>(\n this.displayConfigBaseUrl,\n {\n params: {\n contextKey,\n areaKeys,\n },\n },\n ),\n }).pipe(\n map(({ recordResponse, displayConfigResponse }) => ({\n endpoint: recordResponse.endpoint,\n status: recordResponse.status,\n code: recordResponse.code,\n locale: recordResponse.locale,\n message: recordResponse.message,\n errors: recordResponse.errors,\n cacheSession: recordResponse.cacheSession,\n data: {\n contextKey,\n schemas: recordResponse.data?.schemas ?? [],\n catalog: recordResponse.data?.catalog ?? { properties: [] },\n record: recordResponse.data?.record ?? null,\n displayConfigurations: displayConfigResponse.data ?? [],\n },\n })),\n );\n }\n}\n","import {\n Component,\n computed,\n effect,\n inject,\n input,\n OnDestroy,\n signal,\n untracked,\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { EntitiesPreview, EntityData } from '@masterteam/components/entities';\n\nimport { ClientInstancePreviewApiService } from './client-instance-preview-api.service';\nimport {\n ClientInstancePreviewConfig,\n DisplayConfiguration,\n PreviewFetchPropertyMeta,\n PreviewFetchRecord,\n PreviewFetchValueCell,\n PreviewResponse,\n} from './client-instance-preview.model';\n\n@Component({\n selector: 'mt-client-instance-preview',\n standalone: true,\n imports: [EntitiesPreview],\n templateUrl: './client-instance-preview.html',\n})\nexport class ClientInstancePreview implements OnDestroy {\n private readonly clientInstancePreviewApiService = inject(\n ClientInstancePreviewApiService,\n );\n private loadSub?: Subscription;\n\n readonly config = input.required<ClientInstancePreviewConfig>();\n readonly loading = signal(false);\n readonly error = signal<string | null>(null);\n readonly response = signal<PreviewResponse | null>(null);\n\n readonly entities = computed(() =>\n mapPreviewToEntities(\n this.response(),\n this.config().displayAreas ?? ['card'],\n ),\n );\n\n constructor() {\n effect(() => {\n const config = this.config();\n if (!config) {\n return;\n }\n\n untracked(() => this.load(config));\n });\n }\n\n load(config: ClientInstancePreviewConfig): void {\n this.loadSub?.unsubscribe();\n this.loading.set(true);\n this.error.set(null);\n\n this.loadSub = this.clientInstancePreviewApiService\n .resolve(config)\n .subscribe({\n next: (response) => {\n this.loading.set(false);\n this.response.set(response.data);\n },\n error: (error) => {\n this.loading.set(false);\n this.response.set(null);\n const message =\n error?.error?.message ??\n error?.message ??\n 'Failed to load instance preview';\n this.error.set(message);\n },\n });\n }\n\n ngOnDestroy(): void {\n this.loadSub?.unsubscribe();\n }\n}\n\nfunction mapPreviewToEntities(\n response: PreviewResponse | null,\n areaKeys: string[],\n): EntityData[] {\n const record = response?.record;\n if (!record) {\n return [];\n }\n\n const properties = response?.catalog?.properties ?? [];\n const propertyMetaByKey = new Map(\n properties.map((property) => [property.normalizedKey, property]),\n );\n const displayConfigurations = response?.displayConfigurations ?? [];\n const orderedKeys = resolvePropertyKeys(\n record,\n properties,\n displayConfigurations,\n areaKeys,\n );\n\n return orderedKeys\n .map((propertyKey) =>\n toEntityData(\n propertyKey,\n record.values?.[propertyKey],\n propertyMetaByKey.get(propertyKey),\n displayConfigurations,\n areaKeys,\n record.id,\n ),\n )\n .filter((entity): entity is EntityData => entity !== null);\n}\n\nfunction resolvePropertyKeys(\n record: PreviewFetchRecord,\n properties: PreviewFetchPropertyMeta[],\n displayConfigurations: DisplayConfiguration[],\n areaKeys: string[],\n): string[] {\n const orderedDisplayKeys = new Set<string>();\n\n displayConfigurations\n .filter((config) => areaKeys.includes(config.areaKey))\n .sort((a, b) => {\n const areaDiff =\n areaKeys.indexOf(a.areaKey) - areaKeys.indexOf(b.areaKey);\n\n return areaDiff === 0 ? a.order - b.order : areaDiff;\n })\n .forEach((config) => {\n if (config.propertyKey) {\n orderedDisplayKeys.add(config.propertyKey);\n }\n });\n\n if (orderedDisplayKeys.size) {\n return Array.from(orderedDisplayKeys);\n }\n\n const propertyKeysWithValues = [...properties]\n .filter((property) => record.values?.[property.normalizedKey] !== undefined)\n .sort((a, b) => a.order - b.order)\n .map((property) => property.normalizedKey);\n\n if (propertyKeysWithValues.length) {\n return propertyKeysWithValues;\n }\n\n return Object.keys(record.values ?? {});\n}\n\nfunction toEntityData(\n propertyKey: string,\n cell: PreviewFetchValueCell | undefined,\n meta: PreviewFetchPropertyMeta | undefined,\n displayConfigurations: DisplayConfiguration[],\n areaKeys: string[],\n recordId: number,\n): EntityData | null {\n const displayConfig = resolveDisplayConfiguration(\n propertyKey,\n displayConfigurations,\n areaKeys,\n );\n const viewType = toEntityViewType(meta?.viewType);\n\n return {\n id: recordId,\n propertyId: meta?.id,\n key: meta?.key ?? propertyKey,\n normalizedKey: meta?.normalizedKey ?? propertyKey,\n name: meta?.label ?? propertyKey,\n rawValue: toRawValue(cell?.raw),\n value: toEntityValue(cell, viewType),\n viewType,\n type: meta?.source,\n order: displayConfig?.order,\n configuration:\n displayConfig?.configuration ?? meta?.configuration ?? undefined,\n };\n}\n\nfunction resolveDisplayConfiguration(\n propertyKey: string,\n displayConfigurations: DisplayConfiguration[],\n areaKeys: string[],\n): DisplayConfiguration | undefined {\n return displayConfigurations\n .filter(\n (config) =>\n config.propertyKey === propertyKey && areaKeys.includes(config.areaKey),\n )\n .sort((a, b) => {\n const areaDiff =\n areaKeys.indexOf(a.areaKey) - areaKeys.indexOf(b.areaKey);\n\n return areaDiff === 0 ? a.order - b.order : areaDiff;\n })[0];\n}\n\nfunction toEntityValue(\n cell: PreviewFetchValueCell | undefined,\n viewType: EntityData['viewType'],\n): EntityData['value'] {\n const displayValue = readCellDisplayValue(cell);\n\n switch (viewType) {\n case 'Status':\n case 'Lookup':\n case 'User':\n case 'Attachment':\n return (cell?.value ?? null) as EntityData['value'];\n default:\n return displayValue;\n }\n}\n\nfunction readCellDisplayValue(cell: PreviewFetchValueCell | undefined): string {\n return String(cell?.display ?? cell?.value ?? cell?.raw ?? '');\n}\n\nfunction toRawValue(value: unknown): string | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n return String(value);\n}\n\nfunction toEntityViewType(value: string | undefined): EntityData['viewType'] {\n return (value ?? 'Text') as EntityData['viewType'];\n}\n","@if (loading()) {\r\n <div class=\"grid grid-cols-1 gap-3 md:grid-cols-2\">\r\n @for (item of [1, 2, 3, 4]; track item) {\r\n <div class=\"rounded-2xl border border-surface-200 bg-surface-50 p-4\">\r\n <div class=\"mb-3 h-4 w-28 animate-pulse rounded bg-surface-200\"></div>\r\n <div class=\"h-5 w-40 animate-pulse rounded bg-surface-200\"></div>\r\n </div>\r\n }\r\n </div>\r\n} @else if (error()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-2xl border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ error() }}\r\n </p>\r\n </div>\r\n} @else if (entities().length) {\r\n <mt-entities-preview [entities]=\"entities()\" />\r\n} @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-2xl border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n No preview data is available for this instance.\r\n </p>\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-client-components-client-instance-preview.mjs","sources":["../../../../packages/masterteam/client-components/client-instance-preview/client-instance-preview-api.service.ts","../../../../packages/masterteam/client-components/client-instance-preview/client-instance-preview.ts","../../../../packages/masterteam/client-components/client-instance-preview/client-instance-preview.html","../../../../packages/masterteam/client-components/client-instance-preview/masterteam-client-components-client-instance-preview.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { forkJoin, map, Observable } from 'rxjs';\r\nimport {\r\n ClientInstancePreviewConfig,\r\n DisplayConfiguration,\r\n PreviewFetchRecordResponse,\r\n PreviewResponse,\r\n Response,\r\n} from './client-instance-preview.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientInstancePreviewApiService {\r\n private readonly http = inject(HttpClient);\r\n private readonly fetchBaseUrl = 'fetch';\r\n private readonly displayConfigBaseUrl = 'display-configurations';\r\n\r\n resolve(\r\n config: ClientInstancePreviewConfig,\r\n ): Observable<Response<PreviewResponse>> {\r\n const contextKey = config.contextKey;\r\n const areaKeys = config.displayAreas?.length\r\n ? config.displayAreas\r\n : ['card'];\r\n\r\n return forkJoin({\r\n recordResponse: this.http.get<Response<PreviewFetchRecordResponse>>(\r\n `${this.fetchBaseUrl}/records/${config.instanceId}`,\r\n {\r\n params: { contextKey },\r\n },\r\n ),\r\n displayConfigResponse: this.http.get<Response<DisplayConfiguration[]>>(\r\n this.displayConfigBaseUrl,\r\n {\r\n params: {\r\n contextKey,\r\n areaKeys,\r\n },\r\n },\r\n ),\r\n }).pipe(\r\n map(({ recordResponse, displayConfigResponse }) => ({\r\n endpoint: recordResponse.endpoint,\r\n status: recordResponse.status,\r\n code: recordResponse.code,\r\n locale: recordResponse.locale,\r\n message: recordResponse.message,\r\n errors: recordResponse.errors,\r\n cacheSession: recordResponse.cacheSession,\r\n data: {\r\n contextKey,\r\n schemas: recordResponse.data?.schemas ?? [],\r\n catalog: recordResponse.data?.catalog ?? { properties: [] },\r\n record: recordResponse.data?.record ?? null,\r\n displayConfigurations: displayConfigResponse.data ?? [],\r\n },\r\n })),\r\n );\r\n }\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n effect,\r\n inject,\r\n input,\r\n OnDestroy,\r\n signal,\r\n untracked,\r\n} from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { EntitiesPreview, EntityData } from '@masterteam/components/entities';\r\n\r\nimport { ClientInstancePreviewApiService } from './client-instance-preview-api.service';\r\nimport {\r\n ClientInstancePreviewConfig,\r\n DisplayConfiguration,\r\n PreviewFetchPropertyMeta,\r\n PreviewFetchRecord,\r\n PreviewFetchValueCell,\r\n PreviewResponse,\r\n} from './client-instance-preview.model';\r\n\r\n@Component({\r\n selector: 'mt-client-instance-preview',\r\n standalone: true,\r\n imports: [EntitiesPreview],\r\n templateUrl: './client-instance-preview.html',\r\n})\r\nexport class ClientInstancePreview implements OnDestroy {\r\n private readonly clientInstancePreviewApiService = inject(\r\n ClientInstancePreviewApiService,\r\n );\r\n private loadSub?: Subscription;\r\n\r\n readonly config = input.required<ClientInstancePreviewConfig>();\r\n readonly loading = signal(false);\r\n readonly error = signal<string | null>(null);\r\n readonly response = signal<PreviewResponse | null>(null);\r\n\r\n readonly entities = computed(() =>\r\n mapPreviewToEntities(\r\n this.response(),\r\n this.config().displayAreas ?? ['card'],\r\n ),\r\n );\r\n\r\n constructor() {\r\n effect(() => {\r\n const config = this.config();\r\n if (!config) {\r\n return;\r\n }\r\n\r\n untracked(() => this.load(config));\r\n });\r\n }\r\n\r\n load(config: ClientInstancePreviewConfig): void {\r\n this.loadSub?.unsubscribe();\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n this.loadSub = this.clientInstancePreviewApiService\r\n .resolve(config)\r\n .subscribe({\r\n next: (response) => {\r\n this.loading.set(false);\r\n this.response.set(response.data);\r\n },\r\n error: (error) => {\r\n this.loading.set(false);\r\n this.response.set(null);\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to load instance preview';\r\n this.error.set(message);\r\n },\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.loadSub?.unsubscribe();\r\n }\r\n}\r\n\r\nfunction mapPreviewToEntities(\r\n response: PreviewResponse | null,\r\n areaKeys: string[],\r\n): EntityData[] {\r\n const record = response?.record;\r\n if (!record) {\r\n return [];\r\n }\r\n\r\n const properties = response?.catalog?.properties ?? [];\r\n const propertyMetaByKey = new Map(\r\n properties.map((property) => [property.normalizedKey, property]),\r\n );\r\n const displayConfigurations = response?.displayConfigurations ?? [];\r\n const orderedKeys = resolvePropertyKeys(\r\n record,\r\n properties,\r\n displayConfigurations,\r\n areaKeys,\r\n );\r\n\r\n return orderedKeys\r\n .map((propertyKey) =>\r\n toEntityData(\r\n propertyKey,\r\n record.values?.[propertyKey],\r\n propertyMetaByKey.get(propertyKey),\r\n displayConfigurations,\r\n areaKeys,\r\n record.id,\r\n ),\r\n )\r\n .filter((entity): entity is EntityData => entity !== null);\r\n}\r\n\r\nfunction resolvePropertyKeys(\r\n record: PreviewFetchRecord,\r\n properties: PreviewFetchPropertyMeta[],\r\n displayConfigurations: DisplayConfiguration[],\r\n areaKeys: string[],\r\n): string[] {\r\n const orderedDisplayKeys = new Set<string>();\r\n\r\n displayConfigurations\r\n .filter((config) => areaKeys.includes(config.areaKey))\r\n .sort((a, b) => {\r\n const areaDiff =\r\n areaKeys.indexOf(a.areaKey) - areaKeys.indexOf(b.areaKey);\r\n\r\n return areaDiff === 0 ? a.order - b.order : areaDiff;\r\n })\r\n .forEach((config) => {\r\n if (config.propertyKey) {\r\n orderedDisplayKeys.add(config.propertyKey);\r\n }\r\n });\r\n\r\n if (orderedDisplayKeys.size) {\r\n return Array.from(orderedDisplayKeys);\r\n }\r\n\r\n const propertyKeysWithValues = [...properties]\r\n .filter((property) => record.values?.[property.normalizedKey] !== undefined)\r\n .sort((a, b) => a.order - b.order)\r\n .map((property) => property.normalizedKey);\r\n\r\n if (propertyKeysWithValues.length) {\r\n return propertyKeysWithValues;\r\n }\r\n\r\n return Object.keys(record.values ?? {});\r\n}\r\n\r\nfunction toEntityData(\r\n propertyKey: string,\r\n cell: PreviewFetchValueCell | undefined,\r\n meta: PreviewFetchPropertyMeta | undefined,\r\n displayConfigurations: DisplayConfiguration[],\r\n areaKeys: string[],\r\n recordId: number,\r\n): EntityData | null {\r\n const displayConfig = resolveDisplayConfiguration(\r\n propertyKey,\r\n displayConfigurations,\r\n areaKeys,\r\n );\r\n const viewType = toEntityViewType(meta?.viewType);\r\n\r\n return {\r\n id: recordId,\r\n propertyId: meta?.id,\r\n key: meta?.key ?? propertyKey,\r\n normalizedKey: meta?.normalizedKey ?? propertyKey,\r\n name: meta?.label ?? propertyKey,\r\n rawValue: toRawValue(cell?.raw),\r\n value: toEntityValue(cell, viewType),\r\n viewType,\r\n type: meta?.source,\r\n order: displayConfig?.order,\r\n configuration:\r\n displayConfig?.configuration ?? meta?.configuration ?? undefined,\r\n };\r\n}\r\n\r\nfunction resolveDisplayConfiguration(\r\n propertyKey: string,\r\n displayConfigurations: DisplayConfiguration[],\r\n areaKeys: string[],\r\n): DisplayConfiguration | undefined {\r\n return displayConfigurations\r\n .filter(\r\n (config) =>\r\n config.propertyKey === propertyKey && areaKeys.includes(config.areaKey),\r\n )\r\n .sort((a, b) => {\r\n const areaDiff =\r\n areaKeys.indexOf(a.areaKey) - areaKeys.indexOf(b.areaKey);\r\n\r\n return areaDiff === 0 ? a.order - b.order : areaDiff;\r\n })[0];\r\n}\r\n\r\nfunction toEntityValue(\r\n cell: PreviewFetchValueCell | undefined,\r\n viewType: EntityData['viewType'],\r\n): EntityData['value'] {\r\n const displayValue = readCellDisplayValue(cell);\r\n\r\n switch (viewType) {\r\n case 'Status':\r\n case 'Lookup':\r\n case 'User':\r\n case 'Attachment':\r\n return (cell?.value ?? null) as EntityData['value'];\r\n default:\r\n return displayValue;\r\n }\r\n}\r\n\r\nfunction readCellDisplayValue(cell: PreviewFetchValueCell | undefined): string {\r\n return String(cell?.display ?? cell?.value ?? cell?.raw ?? '');\r\n}\r\n\r\nfunction toRawValue(value: unknown): string | undefined {\r\n if (value === null || value === undefined) {\r\n return undefined;\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nfunction toEntityViewType(value: string | undefined): EntityData['viewType'] {\r\n return (value ?? 'Text') as EntityData['viewType'];\r\n}\r\n","@if (loading()) {\r\n <div class=\"grid grid-cols-1 gap-3 md:grid-cols-2\">\r\n @for (item of [1, 2, 3, 4]; track item) {\r\n <div class=\"rounded-2xl border border-surface-200 bg-surface-50 p-4\">\r\n <div class=\"mb-3 h-4 w-28 animate-pulse rounded bg-surface-200\"></div>\r\n <div class=\"h-5 w-40 animate-pulse rounded bg-surface-200\"></div>\r\n </div>\r\n }\r\n </div>\r\n} @else if (error()) {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-2xl border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n {{ error() }}\r\n </p>\r\n </div>\r\n} @else if (entities().length) {\r\n <mt-entities-preview [entities]=\"entities()\" />\r\n} @else {\r\n <div\r\n class=\"flex min-h-[22rem] items-center justify-center rounded-2xl border border-dashed border-surface-300 bg-surface-50 p-6\"\r\n >\r\n <p class=\"max-w-md text-center text-sm text-surface-500\">\r\n No preview data is available for this instance.\r\n </p>\r\n </div>\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAYa,+BAA+B,CAAA;AACzB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IACzB,YAAY,GAAG,OAAO;IACtB,oBAAoB,GAAG,wBAAwB;AAEhE,IAAA,OAAO,CACL,MAAmC,EAAA;AAEnC,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU;AACpC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE;cAClC,MAAM,CAAC;AACT,cAAE,CAAC,MAAM,CAAC;AAEZ,QAAA,OAAO,QAAQ,CAAC;AACd,YAAA,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAC3B,CAAA,EAAG,IAAI,CAAC,YAAY,CAAA,SAAA,EAAY,MAAM,CAAC,UAAU,EAAE,EACnD;gBACE,MAAM,EAAE,EAAE,UAAU,EAAE;aACvB,CACF;YACD,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAClC,IAAI,CAAC,oBAAoB,EACzB;AACE,gBAAA,MAAM,EAAE;oBACN,UAAU;oBACV,QAAQ;AACT,iBAAA;aACF,CACF;AACF,SAAA,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM;YAClD,QAAQ,EAAE,cAAc,CAAC,QAAQ;YACjC,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,IAAI,EAAE,cAAc,CAAC,IAAI;YACzB,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,OAAO,EAAE,cAAc,CAAC,OAAO;YAC/B,MAAM,EAAE,cAAc,CAAC,MAAM;YAC7B,YAAY,EAAE,cAAc,CAAC,YAAY;AACzC,YAAA,IAAI,EAAE;gBACJ,UAAU;AACV,gBAAA,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE;gBAC3C,OAAO,EAAE,cAAc,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE;AAC3D,gBAAA,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI;AAC3C,gBAAA,qBAAqB,EAAE,qBAAqB,CAAC,IAAI,IAAI,EAAE;AACxD,aAAA;SACF,CAAC,CAAC,CACJ;IACH;uGA/CW,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,cADlB,MAAM,EAAA,CAAA;;2FACnB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAD3C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCmBrB,qBAAqB,CAAA;AACf,IAAA,+BAA+B,GAAG,MAAM,CACvD,+BAA+B,CAChC;AACO,IAAA,OAAO;AAEN,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,iDAA+B;AACtD,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AACnC,IAAA,QAAQ,GAAG,MAAM,CAAyB,IAAI,oDAAC;IAE/C,QAAQ,GAAG,QAAQ,CAAC,MAC3B,oBAAoB,CAClB,IAAI,CAAC,QAAQ,EAAE,EACf,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,CACvC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACF;AAED,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;YAC5B,IAAI,CAAC,MAAM,EAAE;gBACX;YACF;YAEA,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpC,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,CAAC,MAAmC,EAAA;AACtC,QAAA,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE;AAC3B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AAEpB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;aACjB,OAAO,CAAC,MAAM;AACd,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;gBACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAClC,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;AACvB,gBAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,gBAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,iCAAiC;AACnC,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC;YACzB,CAAC;AACF,SAAA,CAAC;IACN;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE;IAC7B;uGAvDW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAArB,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,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,EC9BlC,ulCA4BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDDY,eAAe,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGd,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP,CAAC,eAAe,CAAC,EAAA,QAAA,EAAA,ulCAAA,EAAA;;AA6D5B,SAAS,oBAAoB,CAC3B,QAAgC,EAChC,QAAkB,EAAA;AAElB,IAAA,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM;IAC/B,IAAI,CAAC,MAAM,EAAE;AACX,QAAA,OAAO,EAAE;IACX;IAEA,MAAM,UAAU,GAAG,QAAQ,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE;IACtD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CACjE;AACD,IAAA,MAAM,qBAAqB,GAAG,QAAQ,EAAE,qBAAqB,IAAI,EAAE;AACnE,IAAA,MAAM,WAAW,GAAG,mBAAmB,CACrC,MAAM,EACN,UAAU,EACV,qBAAqB,EACrB,QAAQ,CACT;AAED,IAAA,OAAO;AACJ,SAAA,GAAG,CAAC,CAAC,WAAW,KACf,YAAY,CACV,WAAW,EACX,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,EAC5B,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,EAClC,qBAAqB,EACrB,QAAQ,EACR,MAAM,CAAC,EAAE,CACV;SAEF,MAAM,CAAC,CAAC,MAAM,KAA2B,MAAM,KAAK,IAAI,CAAC;AAC9D;AAEA,SAAS,mBAAmB,CAC1B,MAA0B,EAC1B,UAAsC,EACtC,qBAA6C,EAC7C,QAAkB,EAAA;AAElB,IAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU;IAE5C;AACG,SAAA,MAAM,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;AACpD,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,QAAA,MAAM,QAAQ,GACZ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAE3D,QAAA,OAAO,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,QAAQ;AACtD,IAAA,CAAC;AACA,SAAA,OAAO,CAAC,CAAC,MAAM,KAAI;AAClB,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE;AACtB,YAAA,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;QAC5C;AACF,IAAA,CAAC,CAAC;AAEJ,IAAA,IAAI,kBAAkB,CAAC,IAAI,EAAE;AAC3B,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC;IACvC;AAEA,IAAA,MAAM,sBAAsB,GAAG,CAAC,GAAG,UAAU;AAC1C,SAAA,MAAM,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,SAAS;AAC1E,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;SAChC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,aAAa,CAAC;AAE5C,IAAA,IAAI,sBAAsB,CAAC,MAAM,EAAE;AACjC,QAAA,OAAO,sBAAsB;IAC/B;IAEA,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;AACzC;AAEA,SAAS,YAAY,CACnB,WAAmB,EACnB,IAAuC,EACvC,IAA0C,EAC1C,qBAA6C,EAC7C,QAAkB,EAClB,QAAgB,EAAA;IAEhB,MAAM,aAAa,GAAG,2BAA2B,CAC/C,WAAW,EACX,qBAAqB,EACrB,QAAQ,CACT;IACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC;IAEjD,OAAO;AACL,QAAA,EAAE,EAAE,QAAQ;QACZ,UAAU,EAAE,IAAI,EAAE,EAAE;AACpB,QAAA,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,WAAW;AAC7B,QAAA,aAAa,EAAE,IAAI,EAAE,aAAa,IAAI,WAAW;AACjD,QAAA,IAAI,EAAE,IAAI,EAAE,KAAK,IAAI,WAAW;AAChC,QAAA,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;AAC/B,QAAA,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC;QACpC,QAAQ;QACR,IAAI,EAAE,IAAI,EAAE,MAAM;QAClB,KAAK,EAAE,aAAa,EAAE,KAAK;QAC3B,aAAa,EACX,aAAa,EAAE,aAAa,IAAI,IAAI,EAAE,aAAa,IAAI,SAAS;KACnE;AACH;AAEA,SAAS,2BAA2B,CAClC,WAAmB,EACnB,qBAA6C,EAC7C,QAAkB,EAAA;AAElB,IAAA,OAAO;SACJ,MAAM,CACL,CAAC,MAAM,KACL,MAAM,CAAC,WAAW,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;AAE1E,SAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AACb,QAAA,MAAM,QAAQ,GACZ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AAE3D,QAAA,OAAO,QAAQ,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,QAAQ;AACtD,IAAA,CAAC,CAAC,CAAC,CAAC,CAAC;AACT;AAEA,SAAS,aAAa,CACpB,IAAuC,EACvC,QAAgC,EAAA;AAEhC,IAAA,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC;IAE/C,QAAQ,QAAQ;AACd,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,QAAQ;AACb,QAAA,KAAK,MAAM;AACX,QAAA,KAAK,YAAY;AACf,YAAA,QAAQ,IAAI,EAAE,KAAK,IAAI,IAAI;AAC7B,QAAA;AACE,YAAA,OAAO,YAAY;;AAEzB;AAEA,SAAS,oBAAoB,CAAC,IAAuC,EAAA;AACnE,IAAA,OAAO,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;AAChE;AAEA,SAAS,UAAU,CAAC,KAAc,EAAA;IAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AACzC,QAAA,OAAO,SAAS;IAClB;AAEA,IAAA,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB;AAEA,SAAS,gBAAgB,CAAC,KAAyB,EAAA;AACjD,IAAA,QAAQ,KAAK,IAAI,MAAM;AACzB;;AEjPA;;AAEG;;;;"}
@@ -17,22 +17,22 @@ class ClientListApiService {
17
17
  runtimeFetchBaseUrl = 'fetch/query';
18
18
  tableSettingsBaseUrl = 'table-display-settings';
19
19
  informativeBaseUrl = 'Modules';
20
- getRows(contextKey, instanceId, query) {
20
+ getRows(contextKey, instanceId, query, filters = []) {
21
21
  return this.resolveTablePropertyKeys(contextKey, query).pipe(switchMap((propertyKeys) => this.queryRuntime({
22
22
  contextKey,
23
23
  projection: 'Table',
24
24
  surfaceKey: 'table',
25
25
  propertyKeys: propertyKeys?.length ? propertyKeys : undefined,
26
- filters: this.buildInstanceFilters(instanceId),
26
+ filters: this.mergeFilters(this.buildInstanceFilters(instanceId), filters),
27
27
  page: this.toPage(query.skip, query.take),
28
28
  pageSize: query.take,
29
29
  })));
30
30
  }
31
- getCards(contextKey, instanceId) {
31
+ getCards(contextKey, instanceId, filters = []) {
32
32
  return this.queryRuntime({
33
33
  contextKey,
34
34
  projection: 'Card',
35
- filters: instanceId != null ? this.buildInstanceFilters(instanceId) : undefined,
35
+ filters: this.mergeFilters(instanceId != null ? this.buildInstanceFilters(instanceId) : undefined, filters),
36
36
  display: { areas: ['card'] },
37
37
  });
38
38
  }
@@ -63,6 +63,10 @@ class ClientListApiService {
63
63
  },
64
64
  ];
65
65
  }
66
+ mergeFilters(baseFilters, extraFilters = []) {
67
+ const merged = [...(baseFilters ?? []), ...extraFilters];
68
+ return merged.length ? merged : undefined;
69
+ }
66
70
  toPage(skip, take) {
67
71
  if (take <= 0) {
68
72
  return 1;
@@ -403,6 +407,7 @@ const DEFAULT_GRID_COLUMNS$2 = 12;
403
407
  class ClientListTableView {
404
408
  state = input.required(...(ngDevMode ? [{ debugName: "state" }] : []));
405
409
  rowActions = input([], ...(ngDevMode ? [{ debugName: "rowActions" }] : []));
410
+ actionShape = input(undefined, ...(ngDevMode ? [{ debugName: "actionShape" }] : []));
406
411
  lazyLoad = output();
407
412
  rowClick = output();
408
413
  table = computed(() => {
@@ -423,23 +428,23 @@ class ClientListTableView {
423
428
  };
424
429
  }
425
430
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ClientListTableView, deps: [], target: i0.ɵɵFactoryTarget.Component });
426
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: ClientListTableView, isStandalone: true, selector: "mt-client-list-table-view", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: true, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { lazyLoad: "lazyLoad", rowClick: "rowClick" }, ngImport: i0, template: "<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n <mt-card>\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n [rowActions]=\"rowActions()\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [pageSize]=\"table().config.isPaginated ? table().take : 10\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: Table, selector: "mt-table", inputs: ["filters", "data", "columns", "rowActions", "size", "showGridlines", "stripedRows", "selectableRows", "clickableRows", "generalSearch", "showFilters", "loading", "updating", "lazy", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "exportable", "exportFilename", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "pageSize", "currentPage", "first", "filterTerm"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "rowClick", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }] });
431
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: ClientListTableView, isStandalone: true, selector: "mt-client-list-table-view", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: true, transformFunction: null }, rowActions: { classPropertyName: "rowActions", publicName: "rowActions", isSignal: true, isRequired: false, transformFunction: null }, actionShape: { classPropertyName: "actionShape", publicName: "actionShape", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { lazyLoad: "lazyLoad", rowClick: "rowClick" }, ngImport: i0, template: "<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n <mt-card>\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\n [data]=\"table().rows\"\n [columns]=\"table().columns\"\n [rowActions]=\"rowActions()\"\n [actionShape]=\"actionShape()\"\n [loading]=\"table().loading\"\n [clickableRows]=\"true\"\n [lazy]=\"table().config.isPaginated\"\n [lazyTotalRecords]=\"table().totalCount\"\r\n [pageSize]=\"table().config.isPaginated ? table().take : 10\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: Table, selector: "mt-table", inputs: ["filters", "data", "columns", "rowActions", "size", "showGridlines", "stripedRows", "selectableRows", "clickableRows", "generalSearch", "showFilters", "loading", "updating", "lazy", "lazyTotalRecords", "reorderableColumns", "reorderableRows", "dataKey", "exportable", "exportFilename", "actionShape", "tabs", "tabsOptionLabel", "tabsOptionValue", "activeTab", "actions", "paginatorPosition", "pageSize", "currentPage", "first", "filterTerm"], outputs: ["selectionChange", "cellChange", "lazyLoad", "columnReorder", "rowReorder", "rowClick", "filtersChange", "activeTabChange", "onTabChange", "pageSizeChange", "currentPageChange", "firstChange", "filterTermChange"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }] });
427
432
  }
428
433
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ClientListTableView, decorators: [{
429
434
  type: Component,
430
- args: [{ selector: 'mt-client-list-table-view', standalone: true, imports: [CommonModule, Card, Table, SkeletonModule], template: "<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n <mt-card>\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n [rowActions]=\"rowActions()\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [pageSize]=\"table().config.isPaginated ? table().take : 10\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n" }]
431
- }], propDecorators: { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: true }] }], rowActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowActions", required: false }] }], lazyLoad: [{ type: i0.Output, args: ["lazyLoad"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }] } });
435
+ args: [{ selector: 'mt-client-list-table-view', standalone: true, imports: [CommonModule, Card, Table, SkeletonModule], template: "<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n <mt-card>\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\n [data]=\"table().rows\"\n [columns]=\"table().columns\"\n [rowActions]=\"rowActions()\"\n [actionShape]=\"actionShape()\"\n [loading]=\"table().loading\"\n [clickableRows]=\"true\"\n [lazy]=\"table().config.isPaginated\"\n [lazyTotalRecords]=\"table().totalCount\"\r\n [pageSize]=\"table().config.isPaginated ? table().take : 10\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n" }]
436
+ }], propDecorators: { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: true }] }], rowActions: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowActions", required: false }] }], actionShape: [{ type: i0.Input, args: [{ isSignal: true, alias: "actionShape", required: false }] }], lazyLoad: [{ type: i0.Output, args: ["lazyLoad"] }], rowClick: [{ type: i0.Output, args: ["rowClick"] }] } });
432
437
 
433
438
  class ClientListCardsView {
434
439
  state = input.required(...(ngDevMode ? [{ debugName: "state" }] : []));
435
440
  cardClick = output();
436
441
  cardsState = computed(() => this.state(), ...(ngDevMode ? [{ debugName: "cardsState" }] : []));
437
442
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ClientListCardsView, deps: [], target: i0.ɵɵFactoryTarget.Component });
438
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: ClientListCardsView, isStandalone: true, selector: "mt-client-list-cards-view", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { cardClick: "cardClick" }, ngImport: i0, template: "@if (cardsState().loading && cardsState().cards.length === 0) {\r\n <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"20rem\" borderRadius=\"1rem\" />\r\n }\r\n </div>\r\n} @else if (cardsState().error) {\r\n <div class=\"rounded-lg border border-red-200 bg-red-50 p-6 text-red-600\">\r\n {{ cardsState().error }}\r\n </div>\r\n} @else if (cardsState().cards.length === 0) {\r\n <div class=\"p-6 text-center text-gray-400\">No cards found.</div>\r\n} @else {\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\n @for (card of cardsState().cards; track card.id) {\n <mt-card class=\"cursor-pointer p-3\" (click)=\"cardClick.emit(card)\">\n <ng-template #headless>\n <mt-entities-preview [entities]=\"card.entities\" />\n </ng-template>\n </mt-card>\n }\n </div>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: EntitiesPreview, selector: "mt-entities-preview", inputs: ["entities"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }] });
443
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: ClientListCardsView, isStandalone: true, selector: "mt-client-list-cards-view", inputs: { state: { classPropertyName: "state", publicName: "state", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { cardClick: "cardClick" }, ngImport: i0, template: "@if (cardsState().loading && cardsState().cards.length === 0) {\r\n <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"20rem\" borderRadius=\"1rem\" />\r\n }\r\n </div>\r\n} @else if (cardsState().error) {\r\n <div class=\"rounded-lg border border-red-200 bg-red-50 p-6 text-red-600\">\r\n {{ cardsState().error }}\r\n </div>\r\n} @else if (cardsState().cards.length === 0) {\r\n <div class=\"p-6 text-center text-gray-400\">No cards found.</div>\r\n} @else {\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of cardsState().cards; track card.id) {\r\n <mt-card class=\"cursor-pointer p-3\" (click)=\"cardClick.emit(card)\">\r\n <ng-template #headless>\r\n <mt-entities-preview [entities]=\"card.entities\" />\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n}\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: EntitiesPreview, selector: "mt-entities-preview", inputs: ["entities"] }, { kind: "ngmodule", type: SkeletonModule }, { kind: "component", type: i2.Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }] });
439
444
  }
440
445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ClientListCardsView, decorators: [{
441
446
  type: Component,
442
- args: [{ selector: 'mt-client-list-cards-view', standalone: true, imports: [CommonModule, Card, EntitiesPreview, SkeletonModule], template: "@if (cardsState().loading && cardsState().cards.length === 0) {\r\n <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"20rem\" borderRadius=\"1rem\" />\r\n }\r\n </div>\r\n} @else if (cardsState().error) {\r\n <div class=\"rounded-lg border border-red-200 bg-red-50 p-6 text-red-600\">\r\n {{ cardsState().error }}\r\n </div>\r\n} @else if (cardsState().cards.length === 0) {\r\n <div class=\"p-6 text-center text-gray-400\">No cards found.</div>\r\n} @else {\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\n @for (card of cardsState().cards; track card.id) {\n <mt-card class=\"cursor-pointer p-3\" (click)=\"cardClick.emit(card)\">\n <ng-template #headless>\n <mt-entities-preview [entities]=\"card.entities\" />\n </ng-template>\n </mt-card>\n }\n </div>\n}\n" }]
447
+ args: [{ selector: 'mt-client-list-cards-view', standalone: true, imports: [CommonModule, Card, EntitiesPreview, SkeletonModule], template: "@if (cardsState().loading && cardsState().cards.length === 0) {\r\n <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"20rem\" borderRadius=\"1rem\" />\r\n }\r\n </div>\r\n} @else if (cardsState().error) {\r\n <div class=\"rounded-lg border border-red-200 bg-red-50 p-6 text-red-600\">\r\n {{ cardsState().error }}\r\n </div>\r\n} @else if (cardsState().cards.length === 0) {\r\n <div class=\"p-6 text-center text-gray-400\">No cards found.</div>\r\n} @else {\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of cardsState().cards; track card.id) {\r\n <mt-card class=\"cursor-pointer p-3\" (click)=\"cardClick.emit(card)\">\r\n <ng-template #headless>\r\n <mt-entities-preview [entities]=\"card.entities\" />\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n}\r\n" }]
443
448
  }], propDecorators: { state: [{ type: i0.Input, args: [{ isSignal: true, alias: "state", required: true }] }], cardClick: [{ type: i0.Output, args: ["cardClick"] }] } });
444
449
 
445
450
  const DEFAULT_GRID_COLUMNS$1 = 12;
@@ -692,7 +697,7 @@ class ClientList {
692
697
  this.state.setLoading(key, true);
693
698
  this.state.setError(key, null);
694
699
  const sub = this.api
695
- .getRows(config.contextKey, config.instanceId, query)
700
+ .getRows(config.contextKey, config.instanceId, query, config.filters)
696
701
  .subscribe({
697
702
  next: (response) => {
698
703
  let hasLoadedData = false;
@@ -743,7 +748,7 @@ class ClientList {
743
748
  this.state.setLoading(key, true);
744
749
  this.state.setError(key, null);
745
750
  const sub = this.api
746
- .getCards(config.contextKey, config.instanceId)
751
+ .getCards(config.contextKey, config.instanceId, config.filters)
747
752
  .subscribe({
748
753
  next: (response) => {
749
754
  let hasLoadedData = false;
@@ -840,6 +845,7 @@ class ClientList {
840
845
  return {
841
846
  contextKey: formConfig?.contextKey ?? null,
842
847
  instanceId: formConfig?.instanceId ?? null,
848
+ filters: formConfig?.filters ?? [],
843
849
  moduleId: informativeConfig?.moduleId ?? 0,
844
850
  type,
845
851
  areaType,
@@ -855,6 +861,7 @@ class ClientList {
855
861
  contentEnd: config.contentEnd,
856
862
  templateContent: config.templateContent,
857
863
  rowActions: config.rowActions ?? [],
864
+ actionShape: config.actionShape,
858
865
  dataLoaded: config.dataLoaded,
859
866
  collapse: {
860
867
  enabled: collapseEnabled,
@@ -872,6 +879,7 @@ class ClientList {
872
879
  return [
873
880
  config.contextKey,
874
881
  config.instanceId ?? 'scope',
882
+ this.serializeFilters(config.filters),
875
883
  config.areaType ?? DEFAULT_AREA_TYPE,
876
884
  index,
877
885
  ].join('-');
@@ -933,6 +941,7 @@ class ClientList {
933
941
  config.areaType,
934
942
  config.contextKey ?? 'x',
935
943
  config.instanceId ?? 'scope',
944
+ this.serializeFilters(config.filters),
936
945
  query.mode,
937
946
  query.skip,
938
947
  query.take,
@@ -945,6 +954,7 @@ class ClientList {
945
954
  config.areaType,
946
955
  config.contextKey ?? 'x',
947
956
  config.instanceId ?? 'scope',
957
+ this.serializeFilters(config.filters),
948
958
  'Card',
949
959
  ].join('|');
950
960
  }
@@ -981,8 +991,11 @@ class ClientList {
981
991
  asFormConfig(config) {
982
992
  return this.isInformativeConfig(config) ? null : config;
983
993
  }
994
+ serializeFilters(filters) {
995
+ return JSON.stringify(filters ?? []);
996
+ }
984
997
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ClientList, deps: [], target: i0.ɵɵFactoryTarget.Component });
985
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: ClientList, isStandalone: true, selector: "mt-client-list", inputs: { configurations: { classPropertyName: "configurations", publicName: "configurations", isSignal: true, isRequired: true, transformFunction: null }, defaultTake: { classPropertyName: "defaultTake", publicName: "defaultTake", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loaded: "loaded", errored: "errored", itemClicked: "itemClicked" }, providers: [ClientListStateService], ngImport: i0, template: "<div class=\"flex flex-col gap-4\">\r\n @for (item of items(); track item.key) {\r\n <section class=\"flex flex-col gap-4\">\r\n @if (item.config.showHeader) {\r\n <div class=\"flex w-full items-center gap-2\">\r\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\r\n @if (item.config.collapse.enabled) {\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [icon]=\"\r\n item.expanded\r\n ? item.config.collapse.collapseIcon\r\n : item.config.collapse.expandIcon\r\n \"\r\n (onClick)=\"toggleExpanded(item.key)\"\r\n />\r\n }\r\n <h3 class=\"m-0 text-lg font-bold\">\r\n {{ item.title || item.moduleKey || defaultTitle(item) }}\r\n </h3>\r\n @if (item.config.headerStart) {\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerStart\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if (item.config.headerEnd) {\r\n <div class=\"ml-auto flex shrink-0 items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.expanded || !item.config.collapse.enabled) {\r\n @if (item.config.templateContent) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.templateContent\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n } @else if (item.type === \"informative\") {\r\n <mt-client-list-informative-view [state]=\"item\" />\r\n } @else if (item.areaType === \"table\") {\r\n <mt-client-list-table-view\r\n [state]=\"item\"\r\n [rowActions]=\"item.config.rowActions\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (rowClick)=\"onTableRowClick(item, $event)\"\r\n />\r\n } @else {\r\n <mt-client-list-cards-view\r\n [state]=\"item\"\r\n (cardClick)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n }\r\n </section>\r\n }\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: ClientListTableView, selector: "mt-client-list-table-view", inputs: ["state", "rowActions"], outputs: ["lazyLoad", "rowClick"] }, { kind: "component", type: ClientListCardsView, selector: "mt-client-list-cards-view", inputs: ["state"], outputs: ["cardClick"] }, { kind: "component", type: ClientListInformativeView, selector: "mt-client-list-informative-view", inputs: ["state"] }] });
998
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: ClientList, isStandalone: true, selector: "mt-client-list", inputs: { configurations: { classPropertyName: "configurations", publicName: "configurations", isSignal: true, isRequired: true, transformFunction: null }, defaultTake: { classPropertyName: "defaultTake", publicName: "defaultTake", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { loaded: "loaded", errored: "errored", itemClicked: "itemClicked" }, providers: [ClientListStateService], ngImport: i0, template: "<div class=\"flex flex-col gap-4\">\r\n @for (item of items(); track item.key) {\r\n <section class=\"flex flex-col gap-4\">\r\n @if (item.config.showHeader) {\r\n <div class=\"flex w-full items-center gap-2\">\r\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\r\n @if (item.config.collapse.enabled) {\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [icon]=\"\r\n item.expanded\r\n ? item.config.collapse.collapseIcon\r\n : item.config.collapse.expandIcon\r\n \"\r\n (onClick)=\"toggleExpanded(item.key)\"\r\n />\r\n }\r\n <h3 class=\"m-0 text-lg font-bold\">\r\n {{ item.title || item.moduleKey || defaultTitle(item) }}\r\n </h3>\r\n @if (item.config.headerStart) {\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerStart\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if (item.config.headerEnd) {\r\n <div class=\"ml-auto flex shrink-0 items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.expanded || !item.config.collapse.enabled) {\r\n @if (item.config.templateContent) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.templateContent\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n } @else if (item.type === \"informative\") {\r\n <mt-client-list-informative-view [state]=\"item\" />\r\n } @else if (item.areaType === \"table\") {\n <mt-client-list-table-view\n [state]=\"item\"\n [rowActions]=\"item.config.rowActions\"\n [actionShape]=\"item.config.actionShape\"\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\n (rowClick)=\"onTableRowClick(item, $event)\"\n />\n } @else {\r\n <mt-client-list-cards-view\r\n [state]=\"item\"\r\n (cardClick)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n }\r\n </section>\r\n }\r\n</div>\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: ClientListTableView, selector: "mt-client-list-table-view", inputs: ["state", "rowActions", "actionShape"], outputs: ["lazyLoad", "rowClick"] }, { kind: "component", type: ClientListCardsView, selector: "mt-client-list-cards-view", inputs: ["state"], outputs: ["cardClick"] }, { kind: "component", type: ClientListInformativeView, selector: "mt-client-list-informative-view", inputs: ["state"] }] });
986
999
  }
987
1000
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ClientList, decorators: [{
988
1001
  type: Component,
@@ -992,7 +1005,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
992
1005
  ClientListTableView,
993
1006
  ClientListCardsView,
994
1007
  ClientListInformativeView,
995
- ], providers: [ClientListStateService], template: "<div class=\"flex flex-col gap-4\">\r\n @for (item of items(); track item.key) {\r\n <section class=\"flex flex-col gap-4\">\r\n @if (item.config.showHeader) {\r\n <div class=\"flex w-full items-center gap-2\">\r\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\r\n @if (item.config.collapse.enabled) {\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [icon]=\"\r\n item.expanded\r\n ? item.config.collapse.collapseIcon\r\n : item.config.collapse.expandIcon\r\n \"\r\n (onClick)=\"toggleExpanded(item.key)\"\r\n />\r\n }\r\n <h3 class=\"m-0 text-lg font-bold\">\r\n {{ item.title || item.moduleKey || defaultTitle(item) }}\r\n </h3>\r\n @if (item.config.headerStart) {\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerStart\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if (item.config.headerEnd) {\r\n <div class=\"ml-auto flex shrink-0 items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.expanded || !item.config.collapse.enabled) {\r\n @if (item.config.templateContent) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.templateContent\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n } @else if (item.type === \"informative\") {\r\n <mt-client-list-informative-view [state]=\"item\" />\r\n } @else if (item.areaType === \"table\") {\r\n <mt-client-list-table-view\r\n [state]=\"item\"\r\n [rowActions]=\"item.config.rowActions\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (rowClick)=\"onTableRowClick(item, $event)\"\r\n />\r\n } @else {\r\n <mt-client-list-cards-view\r\n [state]=\"item\"\r\n (cardClick)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n }\r\n </section>\r\n }\r\n</div>\r\n" }]
1008
+ ], providers: [ClientListStateService], template: "<div class=\"flex flex-col gap-4\">\r\n @for (item of items(); track item.key) {\r\n <section class=\"flex flex-col gap-4\">\r\n @if (item.config.showHeader) {\r\n <div class=\"flex w-full items-center gap-2\">\r\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\r\n @if (item.config.collapse.enabled) {\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [icon]=\"\r\n item.expanded\r\n ? item.config.collapse.collapseIcon\r\n : item.config.collapse.expandIcon\r\n \"\r\n (onClick)=\"toggleExpanded(item.key)\"\r\n />\r\n }\r\n <h3 class=\"m-0 text-lg font-bold\">\r\n {{ item.title || item.moduleKey || defaultTitle(item) }}\r\n </h3>\r\n @if (item.config.headerStart) {\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerStart\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if (item.config.headerEnd) {\r\n <div class=\"ml-auto flex shrink-0 items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.expanded || !item.config.collapse.enabled) {\r\n @if (item.config.templateContent) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.templateContent\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n } @else if (item.type === \"informative\") {\r\n <mt-client-list-informative-view [state]=\"item\" />\r\n } @else if (item.areaType === \"table\") {\n <mt-client-list-table-view\n [state]=\"item\"\n [rowActions]=\"item.config.rowActions\"\n [actionShape]=\"item.config.actionShape\"\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\n (rowClick)=\"onTableRowClick(item, $event)\"\n />\n } @else {\r\n <mt-client-list-cards-view\r\n [state]=\"item\"\r\n (cardClick)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n }\r\n </section>\r\n }\r\n</div>\r\n" }]
996
1009
  }], ctorParameters: () => [], propDecorators: { configurations: [{ type: i0.Input, args: [{ isSignal: true, alias: "configurations", required: true }] }], defaultTake: [{ type: i0.Input, args: [{ isSignal: true, alias: "defaultTake", required: false }] }], loaded: [{ type: i0.Output, args: ["loaded"] }], errored: [{ type: i0.Output, args: ["errored"] }], itemClicked: [{ type: i0.Output, args: ["itemClicked"] }] } });
997
1010
 
998
1011
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-client-components-client-list.mjs","sources":["../../../../packages/masterteam/client-components/client-list/services/client-list-api.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-state.service.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.html","../../../../packages/masterteam/client-components/client-list/client-list.ts","../../../../packages/masterteam/client-components/client-list/client-list.html","../../../../packages/masterteam/client-components/client-list/masterteam-client-components-client-list.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { map, Observable, of, switchMap } from 'rxjs';\r\nimport {\r\n ClientListFetchRequestFilter,\r\n ClientListCardsPayload,\r\n ClientListFetchQueryRequest,\r\n ClientListRuntimeContext,\r\n ClientListInformativeDashboardPayload,\r\n ClientListTableSettingsCatalogResponse,\r\n ClientListTableQuery,\r\n Response,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientListApiService {\r\n private readonly http = inject(HttpClient);\r\n private readonly runtimeFetchBaseUrl = 'fetch/query';\r\n private readonly tableSettingsBaseUrl = 'table-display-settings';\r\n private readonly informativeBaseUrl = 'Modules';\r\n\r\n getRows(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId: number,\r\n query: ClientListTableQuery,\r\n ): Observable<Response<RuntimeTableRowsResponse>> {\r\n return this.resolveTablePropertyKeys(contextKey, query).pipe(\r\n switchMap((propertyKeys) =>\r\n this.queryRuntime<RuntimeTableRowsResponse>({\r\n contextKey,\r\n projection: 'Table',\r\n surfaceKey: 'table',\r\n propertyKeys: propertyKeys?.length ? propertyKeys : undefined,\r\n filters: this.buildInstanceFilters(instanceId),\r\n page: this.toPage(query.skip, query.take),\r\n pageSize: query.take,\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n getCards(\n contextKey: ClientListRuntimeContext,\n instanceId?: number | null,\n ): Observable<Response<ClientListCardsPayload>> {\n return this.queryRuntime<ClientListCardsPayload>({\n contextKey,\n projection: 'Card',\n filters:\n instanceId != null ? this.buildInstanceFilters(instanceId) : undefined,\n display: { areas: ['card'] },\n });\n }\n\r\n getInformativeDashboard(\r\n moduleId: number,\r\n ): Observable<Response<ClientListInformativeDashboardPayload>> {\r\n return this.http.get<Response<ClientListInformativeDashboardPayload>>(\r\n `${this.informativeBaseUrl}/${moduleId}/dashboard`,\r\n );\r\n }\r\n\r\n private queryRuntime<T>(\r\n payload: ClientListFetchQueryRequest,\r\n ): Observable<Response<T>> {\r\n return this.http.post<Response<T>>(this.runtimeFetchBaseUrl, payload);\r\n }\r\n\r\n private resolveTablePropertyKeys(\r\n contextKey: ClientListRuntimeContext,\r\n query: ClientListTableQuery,\r\n ): Observable<string[] | undefined> {\r\n if (query.columnKeys?.length) {\r\n return of(query.columnKeys);\r\n }\r\n\r\n const context = this.readTableSettingsContext(contextKey);\r\n if (!context) {\r\n return of(undefined);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<ClientListTableSettingsCatalogResponse>\r\n >(`${this.tableSettingsBaseUrl}/level/${context.levelId}/module/${context.moduleId}/catalog`)\r\n .pipe(\r\n map((response) =>\r\n this.toEffectiveColumnKeys(response.data?.effectiveColumns ?? []),\r\n ),\r\n );\r\n }\r\n\r\n private buildInstanceFilters(\r\n instanceId: number,\r\n ): ClientListFetchRequestFilter[] {\r\n return [\r\n {\r\n key: 'levelDataId',\r\n operator: 'Equals',\r\n value: String(instanceId),\r\n },\r\n ];\r\n }\r\n\r\n private toPage(skip: number, take: number): number {\r\n if (take <= 0) {\r\n return 1;\r\n }\r\n\r\n return Math.floor(skip / take) + 1;\r\n }\r\n\r\n private toEffectiveColumnKeys(\r\n columns: ClientListTableSettingsCatalogResponse['effectiveColumns'],\r\n ): string[] | undefined {\r\n const keys = (columns ?? [])\r\n .filter((column) =>\r\n typeof column === 'string' ? true : column.visible !== false,\r\n )\r\n .sort(\r\n (a, b) =>\r\n (typeof a === 'string' ? 0 : (a.order ?? 0)) -\r\n (typeof b === 'string' ? 0 : (b.order ?? 0)),\r\n )\r\n .map((column) =>\r\n typeof column === 'string'\r\n ? column\r\n : (column.key ?? column.propertyKey ?? ''),\r\n )\r\n .filter((key) => key.length > 0);\r\n\r\n return keys.length ? keys : undefined;\r\n }\r\n\r\n private readTableSettingsContext(\n contextKey: string,\n ): { levelId: string; moduleId: string } | null {\n const [levelPart, modulePart] = contextKey.split('/');\r\n const levelId = levelPart?.split(':')[1];\r\n const moduleId = modulePart?.split(':')[1];\r\n\r\n if (!levelId || !moduleId) {\r\n return null;\r\n }\r\n\n return { levelId, moduleId };\n }\n}\n","import { Injectable, computed, signal } from '@angular/core';\nimport {\n DashboardBuilderData,\n DashboardChartItem,\n} from '@masterteam/dashboard-builder';\nimport { EntityData } from '@masterteam/components/entities';\nimport {\n ClientListCard,\n ClientListCardsPayload,\n ClientListFetchPropertyMeta,\n ClientListFetchRecord,\n ClientListInformativeDashboardPayload,\n ClientListState,\n NormalizedClientListConfiguration,\n RuntimeEntityColumnDef,\n RuntimeTableDisplayRow,\n RuntimeTableRowsResponse,\n} from '../models/client-list.model';\n\n@Injectable()\nexport class ClientListStateService {\n readonly itemsByKey = signal<Record<string, ClientListState>>({});\n\n readonly items = computed<ClientListState[]>(() =>\n Object.values(this.itemsByKey()).sort((a, b) =>\n a.config.moduleId === b.config.moduleId\n ? (a.config.instanceId ?? 0) - (b.config.instanceId ?? 0)\n : a.config.moduleId - b.config.moduleId,\n ),\n );\n\n setConfigs(configs: ClientListState[]): void {\n const currentItems = this.itemsByKey();\n const next: Record<string, ClientListState> = {};\n\n configs.forEach((item) => {\n next[item.key] = this.mergeItemState(item, currentItems[item.key]);\n });\n\n this.itemsByKey.set(next);\n }\n\n setLoading(key: string, loading: boolean): void {\n const target = this.itemsByKey()[key];\n if (!target) return;\n\n this.itemsByKey.set({\n ...this.itemsByKey(),\n [key]: {\n ...target,\n loading,\n },\n });\n }\n\n setError(key: string, message: string | null): void {\n const target = this.itemsByKey()[key];\n if (!target) return;\n\n this.itemsByKey.set({\n ...this.itemsByKey(),\n [key]: {\n ...target,\n error: message,\n },\n });\n }\n\n setRowsResult(\n key: string,\n response: RuntimeTableRowsResponse,\n config: NormalizedClientListConfiguration,\n skip: number,\n take: number,\n ): void {\n const target = this.itemsByKey()[key];\n if (\n !target ||\n target.type === 'informative' ||\n target.areaType !== 'table'\n ) {\n return;\n }\n\n const columns: RuntimeEntityColumnDef[] = (\n response.projectionMeta?.columns ?? []\n )\n .filter((column) => column.visible)\n .sort((a, b) => a.order - b.order)\n .map((column) => ({\n key: column.key,\n label: column.label,\n type: 'entity' as const,\n viewType: column.viewType,\n order: column.order,\n visible: column.visible,\n configuration: column.configuration ?? null,\n }));\n\n const propertiesByKey = new Map(\n (response.catalog?.properties ?? []).map((property) => [\n property.normalizedKey,\n property,\n ]),\n );\n\n const rows: RuntimeTableDisplayRow[] = (response.records ?? []).map(\n (record) => {\n const row: RuntimeTableDisplayRow = { Id: record.id };\n\n columns.forEach((column) => {\n row[column.key] = this.toEntityData(\n column.key,\n record.values?.[column.key],\n propertiesByKey.get(column.key),\n column.viewType,\n column.label,\n column.configuration,\n record.id,\n );\n });\n\n return row;\n },\n );\n\n const schema = response.schemas?.find(\n (item) => item.id === response.records?.[0]?.schemaId,\n );\n const title =\n (config.title ?? '').trim() || schema?.name || schema?.key || '';\n const totalCount =\n config.isPaginated === false\n ? rows.length\n : (response.pagination?.totalCount ?? rows.length);\n\n this.itemsByKey.set({\n ...this.itemsByKey(),\n [key]: {\n ...target,\n title,\n moduleKey: schema?.key ?? '',\n columns,\n rows,\n cards: [],\n skip,\n take,\n totalCount,\n error: null,\n rawData: response,\n },\n });\n }\n\n setCardsResult(\n key: string,\n response: ClientListCardsPayload,\n config: NormalizedClientListConfiguration,\n ): void {\n const target = this.itemsByKey()[key];\n if (\n !target ||\n target.type === 'informative' ||\n target.areaType !== 'cards'\n ) {\n return;\n }\n\n const cards = this.toCards(response);\n const firstCardModule = cards[0]?.module;\n const moduleKey = firstCardModule?.key ?? target.moduleKey ?? '';\n const title =\n (config.title ?? '').trim() ||\n firstCardModule?.name ||\n moduleKey ||\n target.title;\n\n this.itemsByKey.set({\n ...this.itemsByKey(),\n [key]: {\n ...target,\n title,\n moduleKey,\n columns: [],\n rows: [],\n cards,\n skip: 0,\n take: 0,\n totalCount: cards.length,\n error: null,\n rawData: response,\n },\n });\n }\n\n setInformativeResult(\n key: string,\n response: ClientListInformativeDashboardPayload | null,\n config: NormalizedClientListConfiguration,\n ): void {\n const target = this.itemsByKey()[key];\n if (!target || target.type !== 'informative') return;\n\n const moduleKey = target.moduleKey || `Module ${config.moduleId}`;\n const title =\n (config.title ?? '').trim() || target.title || 'Informative Dashboard';\n const dashboardData = response\n ? this.toDashboardData(response, title)\n : null;\n\n this.itemsByKey.set({\n ...this.itemsByKey(),\n [key]: {\n ...target,\n title,\n moduleKey,\n columns: [],\n rows: [],\n cards: [],\n skip: 0,\n take: 0,\n totalCount: dashboardData?.charts?.length ?? 0,\n dashboardData,\n error: null,\n rawData: response,\n },\n });\n }\n\n toggleExpanded(key: string): void {\n const target = this.itemsByKey()[key];\n if (!target) return;\n\n this.itemsByKey.set({\n ...this.itemsByKey(),\n [key]: {\n ...target,\n expanded: !target.expanded,\n },\n });\n }\n\n private mergeItemState(\n item: ClientListState,\n existing?: ClientListState,\n ): ClientListState {\n if (\n !existing ||\n existing.type !== item.type ||\n existing.areaType !== item.areaType\n ) {\n return item;\n }\n\n return {\n ...item,\n loading: existing.loading,\n error: existing.error,\n title: item.title || existing.title,\n moduleKey: existing.moduleKey || item.moduleKey,\n totalCount: existing.totalCount,\n columns: existing.columns,\n rows: existing.rows,\n cards: existing.cards,\n skip: existing.skip,\n take: existing.take,\n expanded: existing.expanded,\n dashboardData: existing.dashboardData,\n rawData: existing.rawData,\n };\n }\n\n private toCards(data?: ClientListCardsPayload): ClientListCard[] {\n const records = this.orderRecords(\n data?.records ?? [],\n data?.projectionMeta?.groups ?? [],\n );\n const propertiesByKey = new Map(\n (data?.catalog?.properties ?? []).map((property) => [\n property.normalizedKey,\n property,\n ]),\n );\n const displayOrder = [...(data?.projectionMeta?.displayOrder ?? [])].sort(\n (a, b) => a.order - b.order,\n );\n\n return records.map((record) => {\n const schema = data?.schemas?.find((item) => item.id === record.schemaId);\n const propertyKeys = displayOrder.length\n ? displayOrder.map((item) => item.propertyKey)\n : (data?.catalog?.properties ?? [])\n .filter(\n (property) =>\n record.values?.[property.normalizedKey] !== undefined,\n )\n .sort((a, b) => a.order - b.order)\n .map((property) => property.normalizedKey);\n\n const keys = propertyKeys.length\n ? propertyKeys\n : Object.keys(record.values ?? {});\n const properties = keys.map((propertyKey) => {\n const property = propertiesByKey.get(propertyKey);\n const displayConfig = displayOrder.find(\n (item) => item.propertyKey === propertyKey,\n );\n\n return this.toEntityData(\n propertyKey,\n record.values?.[propertyKey],\n property,\n property?.viewType,\n property?.label,\n displayConfig?.configuration ?? property?.configuration ?? null,\n record.id,\n );\n });\n\n return {\n id: record.id,\n name: record.name ?? `Record ${record.id}`,\n module: schema\n ? {\n id: schema.id,\n key: schema.key,\n name: schema.name,\n order: schema.order,\n typeGroup: schema.typeGroup,\n }\n : undefined,\n instanceId: record.id,\n properties,\n entities: properties,\n };\n });\n }\n\n private orderRecords(\n records: ClientListFetchRecord[],\n groups: Array<{ recordIds: number[] }>,\n ): ClientListFetchRecord[] {\n if (!groups.length) {\n return records;\n }\n\n const recordsById = new Map(records.map((record) => [record.id, record]));\n const ordered: ClientListFetchRecord[] = [];\n const seen = new Set<number>();\n\n groups.forEach((group) => {\n group.recordIds.forEach((recordId) => {\n const record = recordsById.get(recordId);\n if (!record || seen.has(recordId)) {\n return;\n }\n\n ordered.push(record);\n seen.add(recordId);\n });\n });\n\n records.forEach((record) => {\n if (!seen.has(record.id)) {\n ordered.push(record);\n }\n });\n\n return ordered;\n }\n\n private toEntityData(\n propertyKey: string,\n cell: ClientListFetchRecord['values'][string] | undefined,\n property: ClientListFetchPropertyMeta | undefined,\n viewType: string | undefined,\n label: string | undefined,\n configuration: EntityData['configuration'] | null | undefined,\n recordId: number,\n ): EntityData {\n const resolvedViewType = (viewType ?? 'Text') as EntityData['viewType'];\n\n return {\n id: recordId,\n propertyId: property?.id,\n key: property?.key ?? propertyKey,\n normalizedKey: property?.normalizedKey ?? propertyKey,\n name: label ?? property?.label ?? propertyKey,\n rawValue:\n cell?.raw === null || cell?.raw === undefined\n ? undefined\n : String(cell.raw),\n value:\n resolvedViewType === 'Status' ||\n resolvedViewType === 'Lookup' ||\n resolvedViewType === 'User' ||\n resolvedViewType === 'Attachment'\n ? (cell?.value as EntityData['value'])\n : String(cell?.display ?? cell?.value ?? cell?.raw ?? ''),\n viewType: resolvedViewType,\n type: property?.source,\n configuration: configuration as EntityData['configuration'] | undefined,\n };\n }\n\n private toDashboardData(\n data: ClientListInformativeDashboardPayload,\n title: string,\n ): DashboardBuilderData {\n const charts: DashboardChartItem[] = (data.chartLinks ?? []).map((link) => {\n const configuration = link.configuration ?? {};\n\n return {\n ...configuration,\n id: link.id,\n chartComponentId: link.chartComponentId,\n } as DashboardChartItem;\n });\n\n return {\n page: {\n id: data.moduleId,\n name: { en: title, ar: title },\n type: 'Dashboard',\n dashboardConfig: {\n ignoreQueryFilter: data.ignoreQueryFilter,\n filters: data.filters,\n versionNumber: data.versionNumber,\n extraInfo: data.extraInfo,\n },\n },\n charts,\n dialogs: [],\n filters: [],\n };\n }\n}\n","import { Component, computed, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Table, TableAction } from '@masterteam/components/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListLazyLoadEvent,\r\n RuntimeTableDisplayRow,\r\n ClientListState,\r\n ClientListTableState,\r\n} from '../../models/client-list.model';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-table-view',\r\n standalone: true,\r\n imports: [CommonModule, Card, Table, SkeletonModule],\r\n templateUrl: './client-list-table-view.html',\r\n})\r\nexport class ClientListTableView {\r\n readonly state = input.required<ClientListState>();\r\n readonly rowActions = input<TableAction[]>([]);\r\n readonly lazyLoad = output<ClientListLazyLoadEvent>();\r\n readonly rowClick = output<RuntimeTableDisplayRow>();\r\n\r\n protected readonly table = computed(() => {\r\n return this.state() as ClientListTableState;\r\n });\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n <mt-card>\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\r\n [data]=\"table().rows\"\r\n [columns]=\"table().columns\"\r\n [rowActions]=\"rowActions()\"\r\n [loading]=\"table().loading\"\r\n [clickableRows]=\"true\"\r\n [lazy]=\"table().config.isPaginated\"\r\n [lazyTotalRecords]=\"table().totalCount\"\r\n [pageSize]=\"table().config.isPaginated ? table().take : 10\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import { Component, computed, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { EntitiesPreview } from '@masterteam/components/entities';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListCard,\r\n ClientListCardsState,\r\n ClientListState,\r\n} from '../../models/client-list.model';\r\n\r\n@Component({\r\n selector: 'mt-client-list-cards-view',\r\n standalone: true,\r\n imports: [CommonModule, Card, EntitiesPreview, SkeletonModule],\r\n templateUrl: './client-list-cards-view.html',\r\n})\r\nexport class ClientListCardsView {\n readonly state = input.required<ClientListState>();\n readonly cardClick = output<ClientListCard>();\n\n protected readonly cardsState = computed(\n () => this.state() as ClientListCardsState,\n );\n}\n","@if (cardsState().loading && cardsState().cards.length === 0) {\r\n <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"20rem\" borderRadius=\"1rem\" />\r\n }\r\n </div>\r\n} @else if (cardsState().error) {\r\n <div class=\"rounded-lg border border-red-200 bg-red-50 p-6 text-red-600\">\r\n {{ cardsState().error }}\r\n </div>\r\n} @else if (cardsState().cards.length === 0) {\r\n <div class=\"p-6 text-center text-gray-400\">No cards found.</div>\r\n} @else {\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\n @for (card of cardsState().cards; track card.id) {\n <mt-card class=\"cursor-pointer p-3\" (click)=\"cardClick.emit(card)\">\n <ng-template #headless>\n <mt-entities-preview [entities]=\"card.entities\" />\n </ng-template>\n </mt-card>\n }\n </div>\n}\n","import { Component, computed, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { DashboardViewer } from '@masterteam/dashboard-builder';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListInformativeState,\r\n ClientListState,\r\n} from '../../models/client-list.model';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-informative-view',\r\n standalone: true,\r\n imports: [CommonModule, Card, DashboardViewer, SkeletonModule],\r\n templateUrl: './client-list-informative-view.html',\r\n})\r\nexport class ClientListInformativeView {\r\n readonly state = input.required<ClientListState>();\r\n\r\n protected readonly informativeState = computed(\r\n () => this.state() as ClientListInformativeState,\r\n );\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (informativeState().config.contentStart) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.startSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.tableSpan)\r\n \"\r\n >\r\n <mt-card>\r\n @if (\r\n informativeState().loading &&\r\n !informativeState().dashboardData?.charts?.length\r\n ) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"6rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n </div>\r\n } @else if (informativeState().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ informativeState().error }}\r\n </div>\r\n } @else if (!informativeState().dashboardData?.charts?.length) {\r\n <div class=\"p-6 text-center text-gray-400\">\r\n No informative dashboard found.\r\n </div>\r\n } @else {\r\n <div class=\"min-h-[420px]\">\r\n <mt-dashboard-viewer\r\n [isPage]=\"false\"\r\n [showFilters]=\"false\"\r\n [dashboardData]=\"informativeState().dashboardData\"\r\n />\r\n </div>\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (informativeState().config.contentEnd) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.endSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subscription } from 'rxjs';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ClientListApiService } from './services/client-list-api.service';\r\nimport { ClientListStateService } from './services/client-list-state.service';\r\nimport {\r\n ClientListAreaType,\r\n ClientListConfiguration,\r\n ClientListContentTemplateContext,\r\n ClientListFormConfiguration,\r\n ClientListItemClickedEvent,\r\n ClientListInformativeConfiguration,\r\n ClientListLazyLoadEvent,\r\n ClientListLayoutConfig,\r\n ClientListMode,\r\n ClientListState,\r\n RuntimeTableDisplayRow,\r\n ClientListTableQuery,\r\n ClientListType,\r\n NormalizedClientListConfiguration,\r\n ClientListCard,\r\n} from './models/client-list.model';\r\nimport { ClientListTableView } from './components/client-list-table-view/client-list-table-view';\r\nimport { ClientListCardsView } from './components/client-list-cards-view/client-list-cards-view';\r\nimport { ClientListInformativeView } from './components/client-list-informative-view/client-list-informative-view';\r\n\r\nconst DEFAULT_AREA_TYPE: ClientListAreaType = 'table';\r\nconst DEFAULT_MODE: ClientListMode = 'auto';\r\nconst DEFAULT_TYPE: ClientListType = 'form';\r\nconst DEFAULT_SERVER_PAGE_SIZE = 50;\r\nconst LOCAL_PAGE_SIZE_SOURCE = 100000;\r\nconst DEFAULT_COLLAPSE_ICON = 'arrow.chevron-up';\r\nconst DEFAULT_EXPAND_ICON = 'arrow.chevron-down';\r\nconst DEFAULT_SIDE_CONTENT_SPAN = 3;\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n ClientListTableView,\r\n ClientListCardsView,\r\n ClientListInformativeView,\r\n ],\r\n providers: [ClientListStateService],\r\n templateUrl: './client-list.html',\r\n})\r\nexport class ClientList implements OnDestroy {\r\n private readonly api = inject(ClientListApiService);\r\n protected readonly state = inject(ClientListStateService);\r\n\r\n readonly configurations = input.required<ClientListConfiguration[]>();\r\n readonly defaultTake = input(DEFAULT_SERVER_PAGE_SIZE);\r\n\r\n readonly loaded = output<string>();\r\n readonly errored = output<{ key: string; message: string }>();\r\n readonly itemClicked = output<ClientListItemClickedEvent>();\r\n\r\n protected readonly items = this.state.items;\r\n private readonly subscriptions = new Map<string, Subscription>();\r\n private readonly inFlightRequestSignatures = new Map<string, string>();\r\n private readonly fulfilledRequestSignatures = new Map<string, string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const configs = this.configurations();\r\n untracked(() => this.configureItems(configs));\r\n\r\n untracked(() => {\r\n this.state.items().forEach((item) => {\r\n this.loadItem(item);\r\n });\r\n });\r\n });\r\n }\r\n\r\n onLazyLoad(itemKey: string, event: ClientListLazyLoadEvent): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (\r\n !item ||\r\n item.type === 'informative' ||\r\n item.areaType !== 'table' ||\r\n !item.config.isPaginated\r\n ) {\r\n return;\r\n }\r\n\r\n const take = Number(event.pageSize ?? item.take);\r\n const skip = Number(event.first ?? 0);\r\n this.loadTable(item.key, item.config, skip, take);\r\n }\r\n\r\n reload(itemKey?: string): void {\r\n if (itemKey) {\r\n this.reloadByKey(itemKey);\r\n return;\r\n }\r\n\r\n this.items().forEach((item) => {\r\n this.loadItem(item, true);\r\n });\r\n }\r\n\r\n reloadByKey(itemKey: string): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (!item) return;\r\n\r\n this.loadItem(item, true);\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n this.state.toggleExpanded(key);\r\n }\r\n\r\n onTableRowClick(item: ClientListState, row: RuntimeTableDisplayRow): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'table',\r\n item: row,\r\n state: item,\r\n });\r\n }\r\n\r\n onCardClick(item: ClientListState, card: ClientListCard): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'cards',\r\n item: card,\r\n state: item,\r\n });\r\n }\r\n\r\n templateContext(item: ClientListState): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n\r\n defaultTitle(item: ClientListState): string {\r\n if (item.type === 'informative') {\r\n return 'Informative Dashboard';\r\n }\r\n\r\n return item.areaType === 'cards' ? 'Cards' : 'Table';\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.forEach((sub) => sub.unsubscribe());\r\n this.subscriptions.clear();\r\n }\r\n\r\n private configureItems(configs: ClientListConfiguration[]): void {\r\n const previousItems = this.state.itemsByKey();\r\n const hasMultipleConfigs = (configs ?? []).length > 1;\r\n\r\n const normalized: ClientListState[] = (configs ?? []).map(\r\n (config, index) => {\r\n const type = this.resolveType(config);\r\n const isInformative = type === 'informative';\r\n const formConfig = isInformative ? null : this.asFormConfig(config);\r\n const areaType = isInformative\r\n ? DEFAULT_AREA_TYPE\r\n : this.resolveAreaType(formConfig?.areaType);\r\n const mode = isInformative\r\n ? DEFAULT_MODE\r\n : this.resolveMode(formConfig?.mode, formConfig?.columnKeys);\r\n const isPaginated =\r\n !isInformative &&\r\n areaType === 'table' &&\r\n (formConfig?.isPaginated ?? true);\r\n const showHeader = config.showHeader ?? true;\r\n const take =\r\n !isInformative && areaType === 'table'\r\n ? isPaginated\r\n ? (formConfig?.take ?? this.defaultTake())\r\n : LOCAL_PAGE_SIZE_SOURCE\r\n : 0;\r\n const collapseEnabled =\r\n showHeader &&\r\n (config.collapse?.enabled ?? true) &&\r\n hasMultipleConfigs;\r\n const layout = this.resolveLayout(config);\r\n const key = config.key ?? this.createItemKey(config, index);\r\n const existing = previousItems[key];\r\n const normalizedConfig = this.toNormalizedConfig(\r\n config,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n showHeader,\r\n collapseEnabled,\r\n layout,\r\n );\r\n\r\n if (isInformative) {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'informative',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: existing?.dashboardData ?? null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n if (areaType === 'cards') {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'cards',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: existing?.areaType === 'table' ? existing.skip : 0,\r\n take,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n },\r\n );\r\n\r\n this.state.setConfigs(normalized);\r\n this.cleanupStaleResources(new Set(normalized.map((item) => item.key)));\r\n }\r\n\r\n private loadItem(item: ClientListState, force = false): void {\r\n if (item.type === 'informative') {\r\n this.loadInformative(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n if (item.areaType === 'cards') {\r\n this.loadCards(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n this.loadTable(item.key, item.config, item.skip, item.take, force);\r\n }\r\n\r\n private loadTable(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const query = this.toTableQuery(config, skip, take);\r\n const requestSignature = this.createTableRequestSignature(config, query);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getRows(config.contextKey!, config.instanceId!, query)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setRowsResult(\r\n key,\r\n response.data,\r\n config,\r\n query.skip,\r\n query.take,\r\n );\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message = response.message ?? 'Failed to load table rows';\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to load rows';\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadCards(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createCardsRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getCards(config.contextKey!, config.instanceId)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setCardsResult(key, response.data, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message = response.message ?? 'Failed to load cards';\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to load cards';\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadInformative(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createInformativeRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api.getInformativeDashboard(config.moduleId).subscribe({\r\n next: (response) => {\r\n this.state.setInformativeResult(key, response.data ?? null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n },\r\n error: (error) => {\r\n if (error?.status === 404) {\r\n this.state.setInformativeResult(key, null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n return;\r\n }\r\n\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to load informative dashboard';\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private resolveAreaType(\r\n areaType: ClientListAreaType | undefined,\r\n ): ClientListAreaType {\r\n return areaType === 'cards' ? 'cards' : DEFAULT_AREA_TYPE;\r\n }\r\n\r\n private resolveType(config: ClientListConfiguration): ClientListType {\r\n return config.type === 'informative' ? 'informative' : DEFAULT_TYPE;\r\n }\r\n\r\n private resolveMode(\r\n mode: ClientListMode | undefined,\r\n columnKeys: string[] | undefined,\r\n ): ClientListMode {\r\n if (mode !== 'override') return DEFAULT_MODE;\r\n return (columnKeys ?? []).length > 0 ? 'override' : DEFAULT_MODE;\r\n }\r\n\r\n private toNormalizedConfig(\r\n config: ClientListConfiguration,\r\n type: ClientListType,\r\n areaType: ClientListAreaType,\r\n mode: ClientListMode,\r\n isPaginated: boolean,\r\n take: number,\r\n showHeader: boolean,\r\n collapseEnabled: boolean,\r\n layout: Required<ClientListLayoutConfig>,\r\n ): NormalizedClientListConfiguration {\r\n const informativeConfig = this.asInformativeConfig(config);\r\n const formConfig = this.asFormConfig(config);\r\n\r\n return {\r\n contextKey: formConfig?.contextKey ?? null,\r\n instanceId: formConfig?.instanceId ?? null,\r\n moduleId: informativeConfig?.moduleId ?? 0,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n title: config.title,\r\n showHeader,\r\n columnKeys: formConfig?.columnKeys ?? [],\r\n headerStart: config.headerStart,\r\n headerEnd: config.headerEnd,\r\n contentStart: config.contentStart,\r\n contentEnd: config.contentEnd,\r\n templateContent: config.templateContent,\r\n rowActions: config.rowActions ?? [],\r\n dataLoaded: config.dataLoaded,\r\n collapse: {\r\n enabled: collapseEnabled,\r\n expandedByDefault: config.collapse?.expandedByDefault ?? true,\r\n collapseIcon: config.collapse?.collapseIcon ?? DEFAULT_COLLAPSE_ICON,\r\n expandIcon: config.collapse?.expandIcon ?? DEFAULT_EXPAND_ICON,\r\n },\r\n layout,\r\n };\r\n }\r\n\r\n private createItemKey(\r\n config: ClientListConfiguration,\r\n index: number,\r\n ): string {\r\n if (this.isInformativeConfig(config)) {\r\n return `informative-${config.moduleId}-${index}`;\r\n }\r\n\r\n return [\r\n config.contextKey,\r\n config.instanceId ?? 'scope',\r\n config.areaType ?? DEFAULT_AREA_TYPE,\r\n index,\r\n ].join('-');\r\n }\r\n\r\n private resolveLayout(\r\n config: ClientListConfiguration,\r\n ): Required<ClientListLayoutConfig> {\r\n const hasStart = !!config.contentStart;\r\n const hasEnd = !!config.contentEnd;\r\n\r\n const startSpan = hasStart\r\n ? this.clampSpan(config.layout?.startSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n let endSpan = hasEnd\r\n ? this.clampSpan(config.layout?.endSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n\r\n if (startSpan + endSpan >= DEFAULT_GRID_COLUMNS) {\r\n endSpan = Math.max(0, DEFAULT_GRID_COLUMNS - startSpan - 1);\r\n }\r\n\r\n const availableForTable = Math.max(\r\n 1,\r\n DEFAULT_GRID_COLUMNS - startSpan - endSpan,\r\n );\r\n const tableSpan = this.clampSpan(\r\n config.layout?.tableSpan ?? availableForTable,\r\n 1,\r\n availableForTable,\r\n );\r\n\r\n return {\r\n startSpan,\r\n tableSpan,\r\n endSpan,\r\n };\r\n }\r\n\r\n private clampSpan(\r\n value: number | undefined,\r\n min = 0,\r\n max = DEFAULT_GRID_COLUMNS,\r\n ): number {\r\n const normalized = Number(value ?? min);\r\n if (!Number.isFinite(normalized)) return min;\r\n return Math.min(max, Math.max(min, Math.trunc(normalized)));\r\n }\r\n\r\n private cleanupStaleResources(activeKeys: Set<string>): void {\r\n for (const [key, sub] of this.subscriptions.entries()) {\r\n if (!activeKeys.has(key)) {\r\n sub.unsubscribe();\r\n this.subscriptions.delete(key);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n }\r\n }\r\n }\r\n\r\n private notifyDataLoaded(key: string): void {\r\n const item = this.state.itemsByKey()[key];\r\n if (!item) {\r\n return;\r\n }\r\n\r\n item.config.dataLoaded?.(this.templateContext(item));\r\n }\r\n\r\n private toTableQuery(\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): ClientListTableQuery {\r\n return {\r\n mode: config.mode,\r\n columnKeys: config.mode === 'override' ? config.columnKeys : undefined,\r\n skip: config.isPaginated ? skip : 0,\r\n take: config.isPaginated ? take : LOCAL_PAGE_SIZE_SOURCE,\r\n };\r\n }\r\n\r\n private createTableRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n query: ClientListTableQuery,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n query.mode,\r\n query.skip,\r\n query.take,\r\n ...(query.columnKeys ?? []),\r\n ].join('|');\r\n }\r\n\r\n private createCardsRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n 'Card',\r\n ].join('|');\r\n }\r\n\r\n private createInformativeRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [config.type, config.moduleId, 'dashboard'].join('|');\r\n }\r\n\r\n private hasValidIdentifiers(\r\n config: NormalizedClientListConfiguration,\r\n ): boolean {\r\n if (config.type === 'informative') {\r\n return Number.isFinite(config.moduleId) && config.moduleId > 0;\r\n }\r\n\r\n if (!config.contextKey?.trim()) {\r\n return false;\r\n }\r\n\r\n if (config.areaType === 'cards') {\r\n return true;\r\n }\r\n\r\n const instanceId = config.instanceId;\r\n return instanceId != null && Number.isFinite(instanceId) && instanceId > 0;\r\n }\r\n\r\n private getMissingIdentifiersMessage(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n if (config.type === 'informative') {\r\n return 'Missing identifiers: moduleId is required';\r\n }\r\n\r\n return config.areaType === 'cards'\r\n ? 'Missing identifiers: contextKey is required'\r\n : 'Missing identifiers: contextKey and instanceId are required';\r\n }\r\n\r\n private isInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): config is ClientListInformativeConfiguration {\r\n return config.type === 'informative';\r\n }\r\n\r\n private asInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListInformativeConfiguration | null {\r\n return this.isInformativeConfig(config) ? config : null;\r\n }\r\n\r\n private asFormConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListFormConfiguration | null {\r\n return this.isInformativeConfig(config) ? null : config;\r\n }\r\n}\r\n","<div class=\"flex flex-col gap-4\">\r\n @for (item of items(); track item.key) {\r\n <section class=\"flex flex-col gap-4\">\r\n @if (item.config.showHeader) {\r\n <div class=\"flex w-full items-center gap-2\">\r\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\r\n @if (item.config.collapse.enabled) {\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [icon]=\"\r\n item.expanded\r\n ? item.config.collapse.collapseIcon\r\n : item.config.collapse.expandIcon\r\n \"\r\n (onClick)=\"toggleExpanded(item.key)\"\r\n />\r\n }\r\n <h3 class=\"m-0 text-lg font-bold\">\r\n {{ item.title || item.moduleKey || defaultTitle(item) }}\r\n </h3>\r\n @if (item.config.headerStart) {\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerStart\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if (item.config.headerEnd) {\r\n <div class=\"ml-auto flex shrink-0 items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.expanded || !item.config.collapse.enabled) {\r\n @if (item.config.templateContent) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.templateContent\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n } @else if (item.type === \"informative\") {\r\n <mt-client-list-informative-view [state]=\"item\" />\r\n } @else if (item.areaType === \"table\") {\r\n <mt-client-list-table-view\r\n [state]=\"item\"\r\n [rowActions]=\"item.config.rowActions\"\r\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\r\n (rowClick)=\"onTableRowClick(item, $event)\"\r\n />\r\n } @else {\r\n <mt-client-list-cards-view\r\n [state]=\"item\"\r\n (cardClick)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n }\r\n </section>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_GRID_COLUMNS","i1"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-client-components-client-list.mjs","sources":["../../../../packages/masterteam/client-components/client-list/services/client-list-api.service.ts","../../../../packages/masterteam/client-components/client-list/services/client-list-state.service.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-table-view/client-list-table-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-cards-view/client-list-cards-view.html","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.ts","../../../../packages/masterteam/client-components/client-list/components/client-list-informative-view/client-list-informative-view.html","../../../../packages/masterteam/client-components/client-list/client-list.ts","../../../../packages/masterteam/client-components/client-list/client-list.html","../../../../packages/masterteam/client-components/client-list/masterteam-client-components-client-list.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { map, Observable, of, switchMap } from 'rxjs';\r\nimport {\r\n ClientListFetchRequestFilter,\r\n ClientListCardsPayload,\r\n ClientListFetchQueryRequest,\r\n ClientListRuntimeContext,\r\n ClientListInformativeDashboardPayload,\r\n ClientListTableSettingsCatalogResponse,\r\n ClientListTableQuery,\r\n Response,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClientListApiService {\r\n private readonly http = inject(HttpClient);\r\n private readonly runtimeFetchBaseUrl = 'fetch/query';\r\n private readonly tableSettingsBaseUrl = 'table-display-settings';\r\n private readonly informativeBaseUrl = 'Modules';\r\n\r\n getRows(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId: number,\r\n query: ClientListTableQuery,\r\n filters: ClientListFetchRequestFilter[] = [],\r\n ): Observable<Response<RuntimeTableRowsResponse>> {\r\n return this.resolveTablePropertyKeys(contextKey, query).pipe(\r\n switchMap((propertyKeys) =>\r\n this.queryRuntime<RuntimeTableRowsResponse>({\r\n contextKey,\r\n projection: 'Table',\r\n surfaceKey: 'table',\r\n propertyKeys: propertyKeys?.length ? propertyKeys : undefined,\r\n filters: this.mergeFilters(\r\n this.buildInstanceFilters(instanceId),\r\n filters,\r\n ),\r\n page: this.toPage(query.skip, query.take),\r\n pageSize: query.take,\r\n }),\r\n ),\r\n );\r\n }\r\n\r\n getCards(\r\n contextKey: ClientListRuntimeContext,\r\n instanceId?: number | null,\r\n filters: ClientListFetchRequestFilter[] = [],\r\n ): Observable<Response<ClientListCardsPayload>> {\r\n return this.queryRuntime<ClientListCardsPayload>({\r\n contextKey,\r\n projection: 'Card',\r\n filters: this.mergeFilters(\r\n instanceId != null ? this.buildInstanceFilters(instanceId) : undefined,\r\n filters,\r\n ),\r\n display: { areas: ['card'] },\r\n });\r\n }\r\n\r\n getInformativeDashboard(\r\n moduleId: number,\r\n ): Observable<Response<ClientListInformativeDashboardPayload>> {\r\n return this.http.get<Response<ClientListInformativeDashboardPayload>>(\r\n `${this.informativeBaseUrl}/${moduleId}/dashboard`,\r\n );\r\n }\r\n\r\n private queryRuntime<T>(\r\n payload: ClientListFetchQueryRequest,\r\n ): Observable<Response<T>> {\r\n return this.http.post<Response<T>>(this.runtimeFetchBaseUrl, payload);\r\n }\r\n\r\n private resolveTablePropertyKeys(\r\n contextKey: ClientListRuntimeContext,\r\n query: ClientListTableQuery,\r\n ): Observable<string[] | undefined> {\r\n if (query.columnKeys?.length) {\r\n return of(query.columnKeys);\r\n }\r\n\r\n const context = this.readTableSettingsContext(contextKey);\r\n if (!context) {\r\n return of(undefined);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<ClientListTableSettingsCatalogResponse>\r\n >(`${this.tableSettingsBaseUrl}/level/${context.levelId}/module/${context.moduleId}/catalog`)\r\n .pipe(\r\n map((response) =>\r\n this.toEffectiveColumnKeys(response.data?.effectiveColumns ?? []),\r\n ),\r\n );\r\n }\r\n\r\n private buildInstanceFilters(\r\n instanceId: number,\r\n ): ClientListFetchRequestFilter[] {\r\n return [\r\n {\r\n key: 'levelDataId',\r\n operator: 'Equals',\r\n value: String(instanceId),\r\n },\r\n ];\r\n }\r\n\r\n private mergeFilters(\r\n baseFilters?: ClientListFetchRequestFilter[],\r\n extraFilters: ClientListFetchRequestFilter[] = [],\r\n ): ClientListFetchRequestFilter[] | undefined {\r\n const merged = [...(baseFilters ?? []), ...extraFilters];\r\n return merged.length ? merged : undefined;\r\n }\r\n\r\n private toPage(skip: number, take: number): number {\r\n if (take <= 0) {\r\n return 1;\r\n }\r\n\r\n return Math.floor(skip / take) + 1;\r\n }\r\n\r\n private toEffectiveColumnKeys(\r\n columns: ClientListTableSettingsCatalogResponse['effectiveColumns'],\r\n ): string[] | undefined {\r\n const keys = (columns ?? [])\r\n .filter((column) =>\r\n typeof column === 'string' ? true : column.visible !== false,\r\n )\r\n .sort(\r\n (a, b) =>\r\n (typeof a === 'string' ? 0 : (a.order ?? 0)) -\r\n (typeof b === 'string' ? 0 : (b.order ?? 0)),\r\n )\r\n .map((column) =>\r\n typeof column === 'string'\r\n ? column\r\n : (column.key ?? column.propertyKey ?? ''),\r\n )\r\n .filter((key) => key.length > 0);\r\n\r\n return keys.length ? keys : undefined;\r\n }\r\n\r\n private readTableSettingsContext(\r\n contextKey: string,\r\n ): { levelId: string; moduleId: string } | null {\r\n const [levelPart, modulePart] = contextKey.split('/');\r\n const levelId = levelPart?.split(':')[1];\r\n const moduleId = modulePart?.split(':')[1];\r\n\r\n if (!levelId || !moduleId) {\r\n return null;\r\n }\r\n\r\n return { levelId, moduleId };\r\n }\r\n}\r\n","import { Injectable, computed, signal } from '@angular/core';\r\nimport {\r\n DashboardBuilderData,\r\n DashboardChartItem,\r\n} from '@masterteam/dashboard-builder';\r\nimport { EntityData } from '@masterteam/components/entities';\r\nimport {\r\n ClientListCard,\r\n ClientListCardsPayload,\r\n ClientListFetchPropertyMeta,\r\n ClientListFetchRecord,\r\n ClientListInformativeDashboardPayload,\r\n ClientListState,\r\n NormalizedClientListConfiguration,\r\n RuntimeEntityColumnDef,\r\n RuntimeTableDisplayRow,\r\n RuntimeTableRowsResponse,\r\n} from '../models/client-list.model';\r\n\r\n@Injectable()\r\nexport class ClientListStateService {\r\n readonly itemsByKey = signal<Record<string, ClientListState>>({});\r\n\r\n readonly items = computed<ClientListState[]>(() =>\r\n Object.values(this.itemsByKey()).sort((a, b) =>\r\n a.config.moduleId === b.config.moduleId\r\n ? (a.config.instanceId ?? 0) - (b.config.instanceId ?? 0)\r\n : a.config.moduleId - b.config.moduleId,\r\n ),\r\n );\r\n\r\n setConfigs(configs: ClientListState[]): void {\r\n const currentItems = this.itemsByKey();\r\n const next: Record<string, ClientListState> = {};\r\n\r\n configs.forEach((item) => {\r\n next[item.key] = this.mergeItemState(item, currentItems[item.key]);\r\n });\r\n\r\n this.itemsByKey.set(next);\r\n }\r\n\r\n setLoading(key: string, loading: boolean): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n loading,\r\n },\r\n });\r\n }\r\n\r\n setError(key: string, message: string | null): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n error: message,\r\n },\r\n });\r\n }\r\n\r\n setRowsResult(\r\n key: string,\r\n response: RuntimeTableRowsResponse,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (\r\n !target ||\r\n target.type === 'informative' ||\r\n target.areaType !== 'table'\r\n ) {\r\n return;\r\n }\r\n\r\n const columns: RuntimeEntityColumnDef[] = (\r\n response.projectionMeta?.columns ?? []\r\n )\r\n .filter((column) => column.visible)\r\n .sort((a, b) => a.order - b.order)\r\n .map((column) => ({\r\n key: column.key,\r\n label: column.label,\r\n type: 'entity' as const,\r\n viewType: column.viewType,\r\n order: column.order,\r\n visible: column.visible,\r\n configuration: column.configuration ?? null,\r\n }));\r\n\r\n const propertiesByKey = new Map(\r\n (response.catalog?.properties ?? []).map((property) => [\r\n property.normalizedKey,\r\n property,\r\n ]),\r\n );\r\n\r\n const rows: RuntimeTableDisplayRow[] = (response.records ?? []).map(\r\n (record) => {\r\n const row: RuntimeTableDisplayRow = { Id: record.id };\r\n\r\n columns.forEach((column) => {\r\n row[column.key] = this.toEntityData(\r\n column.key,\r\n record.values?.[column.key],\r\n propertiesByKey.get(column.key),\r\n column.viewType,\r\n column.label,\r\n column.configuration,\r\n record.id,\r\n );\r\n });\r\n\r\n return row;\r\n },\r\n );\r\n\r\n const schema = response.schemas?.find(\r\n (item) => item.id === response.records?.[0]?.schemaId,\r\n );\r\n const title =\r\n (config.title ?? '').trim() || schema?.name || schema?.key || '';\r\n const totalCount =\r\n config.isPaginated === false\r\n ? rows.length\r\n : (response.pagination?.totalCount ?? rows.length);\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey: schema?.key ?? '',\r\n columns,\r\n rows,\r\n cards: [],\r\n skip,\r\n take,\r\n totalCount,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n setCardsResult(\r\n key: string,\r\n response: ClientListCardsPayload,\r\n config: NormalizedClientListConfiguration,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (\r\n !target ||\r\n target.type === 'informative' ||\r\n target.areaType !== 'cards'\r\n ) {\r\n return;\r\n }\r\n\r\n const cards = this.toCards(response);\r\n const firstCardModule = cards[0]?.module;\r\n const moduleKey = firstCardModule?.key ?? target.moduleKey ?? '';\r\n const title =\r\n (config.title ?? '').trim() ||\r\n firstCardModule?.name ||\r\n moduleKey ||\r\n target.title;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey,\r\n columns: [],\r\n rows: [],\r\n cards,\r\n skip: 0,\r\n take: 0,\r\n totalCount: cards.length,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n setInformativeResult(\r\n key: string,\r\n response: ClientListInformativeDashboardPayload | null,\r\n config: NormalizedClientListConfiguration,\r\n ): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target || target.type !== 'informative') return;\r\n\r\n const moduleKey = target.moduleKey || `Module ${config.moduleId}`;\r\n const title =\r\n (config.title ?? '').trim() || target.title || 'Informative Dashboard';\r\n const dashboardData = response\r\n ? this.toDashboardData(response, title)\r\n : null;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n title,\r\n moduleKey,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n totalCount: dashboardData?.charts?.length ?? 0,\r\n dashboardData,\r\n error: null,\r\n rawData: response,\r\n },\r\n });\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n const target = this.itemsByKey()[key];\r\n if (!target) return;\r\n\r\n this.itemsByKey.set({\r\n ...this.itemsByKey(),\r\n [key]: {\r\n ...target,\r\n expanded: !target.expanded,\r\n },\r\n });\r\n }\r\n\r\n private mergeItemState(\r\n item: ClientListState,\r\n existing?: ClientListState,\r\n ): ClientListState {\r\n if (\r\n !existing ||\r\n existing.type !== item.type ||\r\n existing.areaType !== item.areaType\r\n ) {\r\n return item;\r\n }\r\n\r\n return {\r\n ...item,\r\n loading: existing.loading,\r\n error: existing.error,\r\n title: item.title || existing.title,\r\n moduleKey: existing.moduleKey || item.moduleKey,\r\n totalCount: existing.totalCount,\r\n columns: existing.columns,\r\n rows: existing.rows,\r\n cards: existing.cards,\r\n skip: existing.skip,\r\n take: existing.take,\r\n expanded: existing.expanded,\r\n dashboardData: existing.dashboardData,\r\n rawData: existing.rawData,\r\n };\r\n }\r\n\r\n private toCards(data?: ClientListCardsPayload): ClientListCard[] {\r\n const records = this.orderRecords(\r\n data?.records ?? [],\r\n data?.projectionMeta?.groups ?? [],\r\n );\r\n const propertiesByKey = new Map(\r\n (data?.catalog?.properties ?? []).map((property) => [\r\n property.normalizedKey,\r\n property,\r\n ]),\r\n );\r\n const displayOrder = [...(data?.projectionMeta?.displayOrder ?? [])].sort(\r\n (a, b) => a.order - b.order,\r\n );\r\n\r\n return records.map((record) => {\r\n const schema = data?.schemas?.find((item) => item.id === record.schemaId);\r\n const propertyKeys = displayOrder.length\r\n ? displayOrder.map((item) => item.propertyKey)\r\n : (data?.catalog?.properties ?? [])\r\n .filter(\r\n (property) =>\r\n record.values?.[property.normalizedKey] !== undefined,\r\n )\r\n .sort((a, b) => a.order - b.order)\r\n .map((property) => property.normalizedKey);\r\n\r\n const keys = propertyKeys.length\r\n ? propertyKeys\r\n : Object.keys(record.values ?? {});\r\n const properties = keys.map((propertyKey) => {\r\n const property = propertiesByKey.get(propertyKey);\r\n const displayConfig = displayOrder.find(\r\n (item) => item.propertyKey === propertyKey,\r\n );\r\n\r\n return this.toEntityData(\r\n propertyKey,\r\n record.values?.[propertyKey],\r\n property,\r\n property?.viewType,\r\n property?.label,\r\n displayConfig?.configuration ?? property?.configuration ?? null,\r\n record.id,\r\n );\r\n });\r\n\r\n return {\r\n id: record.id,\r\n name: record.name ?? `Record ${record.id}`,\r\n module: schema\r\n ? {\r\n id: schema.id,\r\n key: schema.key,\r\n name: schema.name,\r\n order: schema.order,\r\n typeGroup: schema.typeGroup,\r\n }\r\n : undefined,\r\n instanceId: record.id,\r\n properties,\r\n entities: properties,\r\n };\r\n });\r\n }\r\n\r\n private orderRecords(\r\n records: ClientListFetchRecord[],\r\n groups: Array<{ recordIds: number[] }>,\r\n ): ClientListFetchRecord[] {\r\n if (!groups.length) {\r\n return records;\r\n }\r\n\r\n const recordsById = new Map(records.map((record) => [record.id, record]));\r\n const ordered: ClientListFetchRecord[] = [];\r\n const seen = new Set<number>();\r\n\r\n groups.forEach((group) => {\r\n group.recordIds.forEach((recordId) => {\r\n const record = recordsById.get(recordId);\r\n if (!record || seen.has(recordId)) {\r\n return;\r\n }\r\n\r\n ordered.push(record);\r\n seen.add(recordId);\r\n });\r\n });\r\n\r\n records.forEach((record) => {\r\n if (!seen.has(record.id)) {\r\n ordered.push(record);\r\n }\r\n });\r\n\r\n return ordered;\r\n }\r\n\r\n private toEntityData(\r\n propertyKey: string,\r\n cell: ClientListFetchRecord['values'][string] | undefined,\r\n property: ClientListFetchPropertyMeta | undefined,\r\n viewType: string | undefined,\r\n label: string | undefined,\r\n configuration: EntityData['configuration'] | null | undefined,\r\n recordId: number,\r\n ): EntityData {\r\n const resolvedViewType = (viewType ?? 'Text') as EntityData['viewType'];\r\n\r\n return {\r\n id: recordId,\r\n propertyId: property?.id,\r\n key: property?.key ?? propertyKey,\r\n normalizedKey: property?.normalizedKey ?? propertyKey,\r\n name: label ?? property?.label ?? propertyKey,\r\n rawValue:\r\n cell?.raw === null || cell?.raw === undefined\r\n ? undefined\r\n : String(cell.raw),\r\n value:\r\n resolvedViewType === 'Status' ||\r\n resolvedViewType === 'Lookup' ||\r\n resolvedViewType === 'User' ||\r\n resolvedViewType === 'Attachment'\r\n ? (cell?.value as EntityData['value'])\r\n : String(cell?.display ?? cell?.value ?? cell?.raw ?? ''),\r\n viewType: resolvedViewType,\r\n type: property?.source,\r\n configuration: configuration as EntityData['configuration'] | undefined,\r\n };\r\n }\r\n\r\n private toDashboardData(\r\n data: ClientListInformativeDashboardPayload,\r\n title: string,\r\n ): DashboardBuilderData {\r\n const charts: DashboardChartItem[] = (data.chartLinks ?? []).map((link) => {\r\n const configuration = link.configuration ?? {};\r\n\r\n return {\r\n ...configuration,\r\n id: link.id,\r\n chartComponentId: link.chartComponentId,\r\n } as DashboardChartItem;\r\n });\r\n\r\n return {\r\n page: {\r\n id: data.moduleId,\r\n name: { en: title, ar: title },\r\n type: 'Dashboard',\r\n dashboardConfig: {\r\n ignoreQueryFilter: data.ignoreQueryFilter,\r\n filters: data.filters,\r\n versionNumber: data.versionNumber,\r\n extraInfo: data.extraInfo,\r\n },\r\n },\r\n charts,\r\n dialogs: [],\r\n filters: [],\r\n };\r\n }\r\n}\r\n","import { Component, computed, input, output } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Card } from '@masterteam/components/card';\nimport {\n Table,\n TableAction,\n TableActionShape,\n} from '@masterteam/components/table';\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListLazyLoadEvent,\r\n RuntimeTableDisplayRow,\r\n ClientListState,\r\n ClientListTableState,\r\n} from '../../models/client-list.model';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-table-view',\r\n standalone: true,\r\n imports: [CommonModule, Card, Table, SkeletonModule],\r\n templateUrl: './client-list-table-view.html',\r\n})\r\nexport class ClientListTableView {\n readonly state = input.required<ClientListState>();\n readonly rowActions = input<TableAction[]>([]);\n readonly actionShape = input<TableActionShape | undefined>(undefined);\n readonly lazyLoad = output<ClientListLazyLoadEvent>();\n readonly rowClick = output<RuntimeTableDisplayRow>();\n\r\n protected readonly table = computed(() => {\r\n return this.state() as ClientListTableState;\r\n });\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (table().config.contentStart) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.startSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.tableSpan)\">\r\n <mt-card>\r\n @if (table().loading && table().rows.length === 0) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n <p-skeleton height=\"3rem\" />\r\n </div>\r\n } @else if (table().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ table().error }}\r\n </div>\r\n } @else {\r\n <mt-table\n [data]=\"table().rows\"\n [columns]=\"table().columns\"\n [rowActions]=\"rowActions()\"\n [actionShape]=\"actionShape()\"\n [loading]=\"table().loading\"\n [clickableRows]=\"true\"\n [lazy]=\"table().config.isPaginated\"\n [lazyTotalRecords]=\"table().totalCount\"\r\n [pageSize]=\"table().config.isPaginated ? table().take : 10\"\r\n (lazyLoad)=\"lazyLoad.emit($event)\"\r\n (rowClick)=\"rowClick.emit($event)\"\r\n />\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (table().config.contentEnd) {\r\n <div [style.gridColumn]=\"slotGridSpan(table().config.layout.endSpan)\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"table().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(table())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import { Component, computed, input, output } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { EntitiesPreview } from '@masterteam/components/entities';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListCard,\r\n ClientListCardsState,\r\n ClientListState,\r\n} from '../../models/client-list.model';\r\n\r\n@Component({\r\n selector: 'mt-client-list-cards-view',\r\n standalone: true,\r\n imports: [CommonModule, Card, EntitiesPreview, SkeletonModule],\r\n templateUrl: './client-list-cards-view.html',\r\n})\r\nexport class ClientListCardsView {\r\n readonly state = input.required<ClientListState>();\r\n readonly cardClick = output<ClientListCard>();\r\n\r\n protected readonly cardsState = computed(\r\n () => this.state() as ClientListCardsState,\r\n );\r\n}\r\n","@if (cardsState().loading && cardsState().cards.length === 0) {\r\n <div class=\"grid grid-cols-1 gap-6 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (i of [1, 2, 3, 4, 5, 6]; track i) {\r\n <p-skeleton height=\"20rem\" borderRadius=\"1rem\" />\r\n }\r\n </div>\r\n} @else if (cardsState().error) {\r\n <div class=\"rounded-lg border border-red-200 bg-red-50 p-6 text-red-600\">\r\n {{ cardsState().error }}\r\n </div>\r\n} @else if (cardsState().cards.length === 0) {\r\n <div class=\"p-6 text-center text-gray-400\">No cards found.</div>\r\n} @else {\r\n <div class=\"grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-3\">\r\n @for (card of cardsState().cards; track card.id) {\r\n <mt-card class=\"cursor-pointer p-3\" (click)=\"cardClick.emit(card)\">\r\n <ng-template #headless>\r\n <mt-entities-preview [entities]=\"card.entities\" />\r\n </ng-template>\r\n </mt-card>\r\n }\r\n </div>\r\n}\r\n","import { Component, computed, input } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { DashboardViewer } from '@masterteam/dashboard-builder';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport {\r\n ClientListContentTemplateContext,\r\n ClientListInformativeState,\r\n ClientListState,\r\n} from '../../models/client-list.model';\r\n\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list-informative-view',\r\n standalone: true,\r\n imports: [CommonModule, Card, DashboardViewer, SkeletonModule],\r\n templateUrl: './client-list-informative-view.html',\r\n})\r\nexport class ClientListInformativeView {\r\n readonly state = input.required<ClientListState>();\r\n\r\n protected readonly informativeState = computed(\r\n () => this.state() as ClientListInformativeState,\r\n );\r\n protected readonly gridTemplateColumns = `repeat(${DEFAULT_GRID_COLUMNS}, minmax(0, 1fr))`;\r\n\r\n protected slotGridSpan(span: number): string {\r\n return `span ${span} / span ${span}`;\r\n }\r\n\r\n protected templateContext(\r\n item: ClientListState,\r\n ): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n}\r\n","<div class=\"grid gap-4\" [style.gridTemplateColumns]=\"gridTemplateColumns\">\r\n @if (informativeState().config.contentStart) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.startSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentStart\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.tableSpan)\r\n \"\r\n >\r\n <mt-card>\r\n @if (\r\n informativeState().loading &&\r\n !informativeState().dashboardData?.charts?.length\r\n ) {\r\n <div class=\"flex flex-col gap-3 py-3\">\r\n <p-skeleton height=\"6rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n <p-skeleton height=\"12rem\" />\r\n </div>\r\n } @else if (informativeState().error) {\r\n <div\r\n class=\"rounded-lg border border-red-200 bg-red-50 p-3 text-sm text-red-700\"\r\n >\r\n {{ informativeState().error }}\r\n </div>\r\n } @else if (!informativeState().dashboardData?.charts?.length) {\r\n <div class=\"p-6 text-center text-gray-400\">\r\n No informative dashboard found.\r\n </div>\r\n } @else {\r\n <div class=\"min-h-[420px]\">\r\n <mt-dashboard-viewer\r\n [isPage]=\"false\"\r\n [showFilters]=\"false\"\r\n [dashboardData]=\"informativeState().dashboardData\"\r\n />\r\n </div>\r\n }\r\n </mt-card>\r\n </div>\r\n\r\n @if (informativeState().config.contentEnd) {\r\n <div\r\n [style.gridColumn]=\"\r\n slotGridSpan(informativeState().config.layout.endSpan)\r\n \"\r\n >\r\n <ng-container\r\n [ngTemplateOutlet]=\"informativeState().config.contentEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(informativeState())\"\r\n />\r\n </div>\r\n }\r\n</div>\r\n","import {\r\n Component,\r\n effect,\r\n inject,\r\n input,\r\n output,\r\n untracked,\r\n OnDestroy,\r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { Subscription } from 'rxjs';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { ClientListApiService } from './services/client-list-api.service';\r\nimport { ClientListStateService } from './services/client-list-state.service';\r\nimport {\r\n ClientListAreaType,\r\n ClientListConfiguration,\r\n ClientListContentTemplateContext,\r\n ClientListFormConfiguration,\r\n ClientListItemClickedEvent,\r\n ClientListInformativeConfiguration,\r\n ClientListLazyLoadEvent,\r\n ClientListLayoutConfig,\r\n ClientListMode,\r\n ClientListState,\r\n RuntimeTableDisplayRow,\r\n ClientListTableQuery,\r\n ClientListType,\r\n NormalizedClientListConfiguration,\r\n ClientListCard,\r\n} from './models/client-list.model';\r\nimport { ClientListTableView } from './components/client-list-table-view/client-list-table-view';\r\nimport { ClientListCardsView } from './components/client-list-cards-view/client-list-cards-view';\r\nimport { ClientListInformativeView } from './components/client-list-informative-view/client-list-informative-view';\r\n\r\nconst DEFAULT_AREA_TYPE: ClientListAreaType = 'table';\r\nconst DEFAULT_MODE: ClientListMode = 'auto';\r\nconst DEFAULT_TYPE: ClientListType = 'form';\r\nconst DEFAULT_SERVER_PAGE_SIZE = 50;\r\nconst LOCAL_PAGE_SIZE_SOURCE = 100000;\r\nconst DEFAULT_COLLAPSE_ICON = 'arrow.chevron-up';\r\nconst DEFAULT_EXPAND_ICON = 'arrow.chevron-down';\r\nconst DEFAULT_SIDE_CONTENT_SPAN = 3;\r\nconst DEFAULT_GRID_COLUMNS = 12;\r\n\r\n@Component({\r\n selector: 'mt-client-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n Button,\r\n ClientListTableView,\r\n ClientListCardsView,\r\n ClientListInformativeView,\r\n ],\r\n providers: [ClientListStateService],\r\n templateUrl: './client-list.html',\r\n})\r\nexport class ClientList implements OnDestroy {\r\n private readonly api = inject(ClientListApiService);\r\n protected readonly state = inject(ClientListStateService);\r\n\r\n readonly configurations = input.required<ClientListConfiguration[]>();\r\n readonly defaultTake = input(DEFAULT_SERVER_PAGE_SIZE);\r\n\r\n readonly loaded = output<string>();\r\n readonly errored = output<{ key: string; message: string }>();\r\n readonly itemClicked = output<ClientListItemClickedEvent>();\r\n\r\n protected readonly items = this.state.items;\r\n private readonly subscriptions = new Map<string, Subscription>();\r\n private readonly inFlightRequestSignatures = new Map<string, string>();\r\n private readonly fulfilledRequestSignatures = new Map<string, string>();\r\n\r\n constructor() {\r\n effect(() => {\r\n const configs = this.configurations();\r\n untracked(() => this.configureItems(configs));\r\n\r\n untracked(() => {\r\n this.state.items().forEach((item) => {\r\n this.loadItem(item);\r\n });\r\n });\r\n });\r\n }\r\n\r\n onLazyLoad(itemKey: string, event: ClientListLazyLoadEvent): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (\r\n !item ||\r\n item.type === 'informative' ||\r\n item.areaType !== 'table' ||\r\n !item.config.isPaginated\r\n ) {\r\n return;\r\n }\r\n\r\n const take = Number(event.pageSize ?? item.take);\r\n const skip = Number(event.first ?? 0);\r\n this.loadTable(item.key, item.config, skip, take);\r\n }\r\n\r\n reload(itemKey?: string): void {\r\n if (itemKey) {\r\n this.reloadByKey(itemKey);\r\n return;\r\n }\r\n\r\n this.items().forEach((item) => {\r\n this.loadItem(item, true);\r\n });\r\n }\r\n\r\n reloadByKey(itemKey: string): void {\r\n const item = this.state.itemsByKey()[itemKey];\r\n if (!item) return;\r\n\r\n this.loadItem(item, true);\r\n }\r\n\r\n toggleExpanded(key: string): void {\r\n this.state.toggleExpanded(key);\r\n }\r\n\r\n onTableRowClick(item: ClientListState, row: RuntimeTableDisplayRow): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'table',\r\n item: row,\r\n state: item,\r\n });\r\n }\r\n\r\n onCardClick(item: ClientListState, card: ClientListCard): void {\r\n this.itemClicked.emit({\r\n key: item.key,\r\n areaType: 'cards',\r\n item: card,\r\n state: item,\r\n });\r\n }\r\n\r\n templateContext(item: ClientListState): ClientListContentTemplateContext {\r\n return {\r\n $implicit: item,\r\n table: item,\r\n item,\r\n loading: item.loading,\r\n error: item.error,\r\n data: item.rawData,\r\n };\r\n }\r\n\r\n defaultTitle(item: ClientListState): string {\r\n if (item.type === 'informative') {\r\n return 'Informative Dashboard';\r\n }\r\n\r\n return item.areaType === 'cards' ? 'Cards' : 'Table';\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.forEach((sub) => sub.unsubscribe());\r\n this.subscriptions.clear();\r\n }\r\n\r\n private configureItems(configs: ClientListConfiguration[]): void {\r\n const previousItems = this.state.itemsByKey();\r\n const hasMultipleConfigs = (configs ?? []).length > 1;\r\n\r\n const normalized: ClientListState[] = (configs ?? []).map(\r\n (config, index) => {\r\n const type = this.resolveType(config);\r\n const isInformative = type === 'informative';\r\n const formConfig = isInformative ? null : this.asFormConfig(config);\r\n const areaType = isInformative\r\n ? DEFAULT_AREA_TYPE\r\n : this.resolveAreaType(formConfig?.areaType);\r\n const mode = isInformative\r\n ? DEFAULT_MODE\r\n : this.resolveMode(formConfig?.mode, formConfig?.columnKeys);\r\n const isPaginated =\r\n !isInformative &&\r\n areaType === 'table' &&\r\n (formConfig?.isPaginated ?? true);\r\n const showHeader = config.showHeader ?? true;\r\n const take =\r\n !isInformative && areaType === 'table'\r\n ? isPaginated\r\n ? (formConfig?.take ?? this.defaultTake())\r\n : LOCAL_PAGE_SIZE_SOURCE\r\n : 0;\r\n const collapseEnabled =\r\n showHeader &&\r\n (config.collapse?.enabled ?? true) &&\r\n hasMultipleConfigs;\r\n const layout = this.resolveLayout(config);\r\n const key = config.key ?? this.createItemKey(config, index);\r\n const existing = previousItems[key];\r\n const normalizedConfig = this.toNormalizedConfig(\r\n config,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n showHeader,\r\n collapseEnabled,\r\n layout,\r\n );\r\n\r\n if (isInformative) {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'informative',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: existing?.dashboardData ?? null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n if (areaType === 'cards') {\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'cards',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: 0,\r\n take: 0,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n }\r\n\r\n return {\r\n key,\r\n config: normalizedConfig,\r\n type: 'form',\r\n areaType: 'table',\r\n loading: false,\r\n error: null,\r\n title: config.title?.trim() || '',\r\n moduleKey: '',\r\n totalCount: 0,\r\n columns: [],\r\n rows: [],\r\n cards: [],\r\n skip: existing?.areaType === 'table' ? existing.skip : 0,\r\n take,\r\n expanded:\r\n existing?.expanded ?? config.collapse?.expandedByDefault ?? true,\r\n dashboardData: null,\r\n rawData: existing?.rawData ?? null,\r\n };\r\n },\r\n );\r\n\r\n this.state.setConfigs(normalized);\r\n this.cleanupStaleResources(new Set(normalized.map((item) => item.key)));\r\n }\r\n\r\n private loadItem(item: ClientListState, force = false): void {\r\n if (item.type === 'informative') {\r\n this.loadInformative(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n if (item.areaType === 'cards') {\r\n this.loadCards(item.key, item.config, force);\r\n return;\r\n }\r\n\r\n this.loadTable(item.key, item.config, item.skip, item.take, force);\r\n }\r\n\r\n private loadTable(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const query = this.toTableQuery(config, skip, take);\r\n const requestSignature = this.createTableRequestSignature(config, query);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getRows(config.contextKey!, config.instanceId!, query, config.filters)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setRowsResult(\r\n key,\r\n response.data,\r\n config,\r\n query.skip,\r\n query.take,\r\n );\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message = response.message ?? 'Failed to load table rows';\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to load rows';\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadCards(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createCardsRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api\r\n .getCards(config.contextKey!, config.instanceId, config.filters)\r\n .subscribe({\r\n next: (response) => {\r\n let hasLoadedData = false;\r\n\r\n if (response.data) {\r\n this.state.setCardsResult(key, response.data, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n hasLoadedData = true;\r\n } else {\r\n const message = response.message ?? 'Failed to load cards';\r\n this.state.setError(key, message);\r\n this.errored.emit({ key, message });\r\n }\r\n\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n\r\n if (hasLoadedData) {\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n }\r\n },\r\n error: (error) => {\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to load cards';\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private loadInformative(\r\n key: string,\r\n config: NormalizedClientListConfiguration,\r\n force = false,\r\n ): void {\r\n if (!this.hasValidIdentifiers(config)) {\r\n this.state.setLoading(key, false);\r\n this.state.setError(key, this.getMissingIdentifiersMessage(config));\r\n return;\r\n }\r\n\r\n const requestSignature = this.createInformativeRequestSignature(config);\r\n\r\n if (force) {\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n } else if (\r\n this.inFlightRequestSignatures.get(key) === requestSignature ||\r\n this.fulfilledRequestSignatures.get(key) === requestSignature\r\n ) {\r\n return;\r\n }\r\n\r\n this.subscriptions.get(key)?.unsubscribe();\r\n this.inFlightRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, true);\r\n this.state.setError(key, null);\r\n\r\n const sub = this.api.getInformativeDashboard(config.moduleId).subscribe({\r\n next: (response) => {\r\n this.state.setInformativeResult(key, response.data ?? null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n },\r\n error: (error) => {\r\n if (error?.status === 404) {\r\n this.state.setInformativeResult(key, null, config);\r\n this.fulfilledRequestSignatures.set(key, requestSignature);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.notifyDataLoaded(key);\r\n this.loaded.emit(key);\r\n return;\r\n }\r\n\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to load informative dashboard';\r\n this.state.setError(key, message);\r\n this.state.setLoading(key, false);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.errored.emit({ key, message });\r\n },\r\n });\r\n\r\n this.subscriptions.set(key, sub);\r\n }\r\n\r\n private resolveAreaType(\r\n areaType: ClientListAreaType | undefined,\r\n ): ClientListAreaType {\r\n return areaType === 'cards' ? 'cards' : DEFAULT_AREA_TYPE;\r\n }\r\n\r\n private resolveType(config: ClientListConfiguration): ClientListType {\r\n return config.type === 'informative' ? 'informative' : DEFAULT_TYPE;\r\n }\r\n\r\n private resolveMode(\r\n mode: ClientListMode | undefined,\r\n columnKeys: string[] | undefined,\r\n ): ClientListMode {\r\n if (mode !== 'override') return DEFAULT_MODE;\r\n return (columnKeys ?? []).length > 0 ? 'override' : DEFAULT_MODE;\r\n }\r\n\r\n private toNormalizedConfig(\r\n config: ClientListConfiguration,\r\n type: ClientListType,\r\n areaType: ClientListAreaType,\r\n mode: ClientListMode,\r\n isPaginated: boolean,\r\n take: number,\r\n showHeader: boolean,\r\n collapseEnabled: boolean,\r\n layout: Required<ClientListLayoutConfig>,\r\n ): NormalizedClientListConfiguration {\r\n const informativeConfig = this.asInformativeConfig(config);\r\n const formConfig = this.asFormConfig(config);\r\n\r\n return {\r\n contextKey: formConfig?.contextKey ?? null,\r\n instanceId: formConfig?.instanceId ?? null,\r\n filters: formConfig?.filters ?? [],\r\n moduleId: informativeConfig?.moduleId ?? 0,\r\n type,\r\n areaType,\r\n mode,\r\n isPaginated,\r\n take,\r\n title: config.title,\r\n showHeader,\r\n columnKeys: formConfig?.columnKeys ?? [],\r\n headerStart: config.headerStart,\r\n headerEnd: config.headerEnd,\r\n contentStart: config.contentStart,\n contentEnd: config.contentEnd,\n templateContent: config.templateContent,\n rowActions: config.rowActions ?? [],\n actionShape: config.actionShape,\n dataLoaded: config.dataLoaded,\n collapse: {\n enabled: collapseEnabled,\r\n expandedByDefault: config.collapse?.expandedByDefault ?? true,\r\n collapseIcon: config.collapse?.collapseIcon ?? DEFAULT_COLLAPSE_ICON,\r\n expandIcon: config.collapse?.expandIcon ?? DEFAULT_EXPAND_ICON,\r\n },\r\n layout,\r\n };\r\n }\r\n\r\n private createItemKey(\r\n config: ClientListConfiguration,\r\n index: number,\r\n ): string {\r\n if (this.isInformativeConfig(config)) {\r\n return `informative-${config.moduleId}-${index}`;\r\n }\r\n\r\n return [\r\n config.contextKey,\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n config.areaType ?? DEFAULT_AREA_TYPE,\r\n index,\r\n ].join('-');\r\n }\r\n\r\n private resolveLayout(\r\n config: ClientListConfiguration,\r\n ): Required<ClientListLayoutConfig> {\r\n const hasStart = !!config.contentStart;\r\n const hasEnd = !!config.contentEnd;\r\n\r\n const startSpan = hasStart\r\n ? this.clampSpan(config.layout?.startSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n let endSpan = hasEnd\r\n ? this.clampSpan(config.layout?.endSpan ?? DEFAULT_SIDE_CONTENT_SPAN)\r\n : 0;\r\n\r\n if (startSpan + endSpan >= DEFAULT_GRID_COLUMNS) {\r\n endSpan = Math.max(0, DEFAULT_GRID_COLUMNS - startSpan - 1);\r\n }\r\n\r\n const availableForTable = Math.max(\r\n 1,\r\n DEFAULT_GRID_COLUMNS - startSpan - endSpan,\r\n );\r\n const tableSpan = this.clampSpan(\r\n config.layout?.tableSpan ?? availableForTable,\r\n 1,\r\n availableForTable,\r\n );\r\n\r\n return {\r\n startSpan,\r\n tableSpan,\r\n endSpan,\r\n };\r\n }\r\n\r\n private clampSpan(\r\n value: number | undefined,\r\n min = 0,\r\n max = DEFAULT_GRID_COLUMNS,\r\n ): number {\r\n const normalized = Number(value ?? min);\r\n if (!Number.isFinite(normalized)) return min;\r\n return Math.min(max, Math.max(min, Math.trunc(normalized)));\r\n }\r\n\r\n private cleanupStaleResources(activeKeys: Set<string>): void {\r\n for (const [key, sub] of this.subscriptions.entries()) {\r\n if (!activeKeys.has(key)) {\r\n sub.unsubscribe();\r\n this.subscriptions.delete(key);\r\n this.inFlightRequestSignatures.delete(key);\r\n this.fulfilledRequestSignatures.delete(key);\r\n }\r\n }\r\n }\r\n\r\n private notifyDataLoaded(key: string): void {\r\n const item = this.state.itemsByKey()[key];\r\n if (!item) {\r\n return;\r\n }\r\n\r\n item.config.dataLoaded?.(this.templateContext(item));\r\n }\r\n\r\n private toTableQuery(\r\n config: NormalizedClientListConfiguration,\r\n skip: number,\r\n take: number,\r\n ): ClientListTableQuery {\r\n return {\r\n mode: config.mode,\r\n columnKeys: config.mode === 'override' ? config.columnKeys : undefined,\r\n skip: config.isPaginated ? skip : 0,\r\n take: config.isPaginated ? take : LOCAL_PAGE_SIZE_SOURCE,\r\n };\r\n }\r\n\r\n private createTableRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n query: ClientListTableQuery,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n query.mode,\r\n query.skip,\r\n query.take,\r\n ...(query.columnKeys ?? []),\r\n ].join('|');\r\n }\r\n\r\n private createCardsRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [\r\n config.type,\r\n config.areaType,\r\n config.contextKey ?? 'x',\r\n config.instanceId ?? 'scope',\r\n this.serializeFilters(config.filters),\r\n 'Card',\r\n ].join('|');\r\n }\r\n\r\n private createInformativeRequestSignature(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n return [config.type, config.moduleId, 'dashboard'].join('|');\r\n }\r\n\r\n private hasValidIdentifiers(\r\n config: NormalizedClientListConfiguration,\r\n ): boolean {\r\n if (config.type === 'informative') {\r\n return Number.isFinite(config.moduleId) && config.moduleId > 0;\r\n }\r\n\r\n if (!config.contextKey?.trim()) {\r\n return false;\r\n }\r\n\r\n if (config.areaType === 'cards') {\r\n return true;\r\n }\r\n\r\n const instanceId = config.instanceId;\r\n return instanceId != null && Number.isFinite(instanceId) && instanceId > 0;\r\n }\r\n\r\n private getMissingIdentifiersMessage(\r\n config: NormalizedClientListConfiguration,\r\n ): string {\r\n if (config.type === 'informative') {\r\n return 'Missing identifiers: moduleId is required';\r\n }\r\n\r\n return config.areaType === 'cards'\r\n ? 'Missing identifiers: contextKey is required'\r\n : 'Missing identifiers: contextKey and instanceId are required';\r\n }\r\n\r\n private isInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): config is ClientListInformativeConfiguration {\r\n return config.type === 'informative';\r\n }\r\n\r\n private asInformativeConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListInformativeConfiguration | null {\r\n return this.isInformativeConfig(config) ? config : null;\r\n }\r\n\r\n private asFormConfig(\r\n config: ClientListConfiguration,\r\n ): ClientListFormConfiguration | null {\r\n return this.isInformativeConfig(config) ? null : config;\r\n }\r\n\r\n private serializeFilters(\r\n filters: NormalizedClientListConfiguration['filters'] | undefined,\r\n ): string {\r\n return JSON.stringify(filters ?? []);\r\n }\r\n}\r\n","<div class=\"flex flex-col gap-4\">\r\n @for (item of items(); track item.key) {\r\n <section class=\"flex flex-col gap-4\">\r\n @if (item.config.showHeader) {\r\n <div class=\"flex w-full items-center gap-2\">\r\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\r\n @if (item.config.collapse.enabled) {\r\n <mt-button\r\n variant=\"text\"\r\n severity=\"secondary\"\r\n [icon]=\"\r\n item.expanded\r\n ? item.config.collapse.collapseIcon\r\n : item.config.collapse.expandIcon\r\n \"\r\n (onClick)=\"toggleExpanded(item.key)\"\r\n />\r\n }\r\n <h3 class=\"m-0 text-lg font-bold\">\r\n {{ item.title || item.moduleKey || defaultTitle(item) }}\r\n </h3>\r\n @if (item.config.headerStart) {\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerStart\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n @if (item.config.headerEnd) {\r\n <div class=\"ml-auto flex shrink-0 items-center gap-2\">\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.headerEnd\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (item.expanded || !item.config.collapse.enabled) {\r\n @if (item.config.templateContent) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"item.config.templateContent\"\r\n [ngTemplateOutletContext]=\"templateContext(item)\"\r\n />\r\n } @else if (item.type === \"informative\") {\r\n <mt-client-list-informative-view [state]=\"item\" />\r\n } @else if (item.areaType === \"table\") {\n <mt-client-list-table-view\n [state]=\"item\"\n [rowActions]=\"item.config.rowActions\"\n [actionShape]=\"item.config.actionShape\"\n (lazyLoad)=\"onLazyLoad(item.key, $event)\"\n (rowClick)=\"onTableRowClick(item, $event)\"\n />\n } @else {\r\n <mt-client-list-cards-view\r\n [state]=\"item\"\r\n (cardClick)=\"onCardClick(item, $event)\"\r\n />\r\n }\r\n }\r\n </section>\r\n }\r\n</div>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["DEFAULT_GRID_COLUMNS","i1"],"mappings":";;;;;;;;;;;;;;MAgBa,oBAAoB,CAAA;AACd,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IACzB,mBAAmB,GAAG,aAAa;IACnC,oBAAoB,GAAG,wBAAwB;IAC/C,kBAAkB,GAAG,SAAS;IAE/C,OAAO,CACL,UAAoC,EACpC,UAAkB,EAClB,KAA2B,EAC3B,UAA0C,EAAE,EAAA;QAE5C,OAAO,IAAI,CAAC,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,IAAI,CAC1D,SAAS,CAAC,CAAC,YAAY,KACrB,IAAI,CAAC,YAAY,CAA2B;YAC1C,UAAU;AACV,YAAA,UAAU,EAAE,OAAO;AACnB,YAAA,UAAU,EAAE,OAAO;YACnB,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;AAC7D,YAAA,OAAO,EAAE,IAAI,CAAC,YAAY,CACxB,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,EACrC,OAAO,CACR;AACD,YAAA,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;YACzC,QAAQ,EAAE,KAAK,CAAC,IAAI;SACrB,CAAC,CACH,CACF;IACH;AAEA,IAAA,QAAQ,CACN,UAAoC,EACpC,UAA0B,EAC1B,UAA0C,EAAE,EAAA;QAE5C,OAAO,IAAI,CAAC,YAAY,CAAyB;YAC/C,UAAU;AACV,YAAA,UAAU,EAAE,MAAM;YAClB,OAAO,EAAE,IAAI,CAAC,YAAY,CACxB,UAAU,IAAI,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,GAAG,SAAS,EACtE,OAAO,CACR;AACD,YAAA,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE;AAC7B,SAAA,CAAC;IACJ;AAEA,IAAA,uBAAuB,CACrB,QAAgB,EAAA;AAEhB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAClB,CAAA,EAAG,IAAI,CAAC,kBAAkB,CAAA,CAAA,EAAI,QAAQ,CAAA,UAAA,CAAY,CACnD;IACH;AAEQ,IAAA,YAAY,CAClB,OAAoC,EAAA;AAEpC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAc,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC;IACvE;IAEQ,wBAAwB,CAC9B,UAAoC,EACpC,KAA2B,EAAA;AAE3B,QAAA,IAAI,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE;AAC5B,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC;QAC7B;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;QACzD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE,CAAC,SAAS,CAAC;QACtB;QAEA,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAEF,CAAA,EAAG,IAAI,CAAC,oBAAoB,CAAA,OAAA,EAAU,OAAO,CAAC,OAAO,CAAA,QAAA,EAAW,OAAO,CAAC,QAAQ,UAAU;aAC3F,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KACX,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,IAAI,EAAE,CAAC,CAClE,CACF;IACL;AAEQ,IAAA,oBAAoB,CAC1B,UAAkB,EAAA;QAElB,OAAO;AACL,YAAA;AACE,gBAAA,GAAG,EAAE,aAAa;AAClB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC;AAC1B,aAAA;SACF;IACH;AAEQ,IAAA,YAAY,CAClB,WAA4C,EAC5C,YAAA,GAA+C,EAAE,EAAA;AAEjD,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,YAAY,CAAC;QACxD,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,SAAS;IAC3C;IAEQ,MAAM,CAAC,IAAY,EAAE,IAAY,EAAA;AACvC,QAAA,IAAI,IAAI,IAAI,CAAC,EAAE;AACb,YAAA,OAAO,CAAC;QACV;QAEA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;IACpC;AAEQ,IAAA,qBAAqB,CAC3B,OAAmE,EAAA;AAEnE,QAAA,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,EAAE;aACxB,MAAM,CAAC,CAAC,MAAM,KACb,OAAO,MAAM,KAAK,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC,OAAO,KAAK,KAAK;aAE7D,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,KACH,CAAC,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC3C,aAAC,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;aAE/C,GAAG,CAAC,CAAC,MAAM,KACV,OAAO,MAAM,KAAK;AAChB,cAAE;AACF,eAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;AAE7C,aAAA,MAAM,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QAElC,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS;IACvC;AAEQ,IAAA,wBAAwB,CAC9B,UAAkB,EAAA;AAElB,QAAA,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;QACrD,MAAM,OAAO,GAAG,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1C,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE;IAC9B;uGAlJW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCKrB,sBAAsB,CAAA;AACxB,IAAA,UAAU,GAAG,MAAM,CAAkC,EAAE,sDAAC;AAExD,IAAA,KAAK,GAAG,QAAQ,CAAoB,MAC3C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KACzC,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,CAAC;AAC7B,UAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC;AACxD,UAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAC1C,iDACF;AAED,IAAA,UAAU,CAAC,OAA0B,EAAA;AACnC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE;QACtC,MAAM,IAAI,GAAoC,EAAE;AAEhD,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AACvB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpE,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IAC3B;IAEA,UAAU,CAAC,GAAW,EAAE,OAAgB,EAAA;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;gBACT,OAAO;AACR,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,QAAQ,CAAC,GAAW,EAAE,OAAsB,EAAA;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;AACT,gBAAA,KAAK,EAAE,OAAO;AACf,aAAA;AACF,SAAA,CAAC;IACJ;IAEA,aAAa,CACX,GAAW,EACX,QAAkC,EAClC,MAAyC,EACzC,IAAY,EACZ,IAAY,EAAA;QAEZ,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IACE,CAAC,MAAM;YACP,MAAM,CAAC,IAAI,KAAK,aAAa;AAC7B,YAAA,MAAM,CAAC,QAAQ,KAAK,OAAO,EAC3B;YACA;QACF;QAEA,MAAM,OAAO,GAA6B,CACxC,QAAQ,CAAC,cAAc,EAAE,OAAO,IAAI,EAAE;aAErC,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,OAAO;AACjC,aAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;AAChC,aAAA,GAAG,CAAC,CAAC,MAAM,MAAM;YAChB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,KAAK,EAAE,MAAM,CAAC,KAAK;AACnB,YAAA,IAAI,EAAE,QAAiB;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;AACvB,YAAA,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;AAC5C,SAAA,CAAC,CAAC;QAEL,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK;AACrD,YAAA,QAAQ,CAAC,aAAa;YACtB,QAAQ;AACT,SAAA,CAAC,CACH;AAED,QAAA,MAAM,IAAI,GAA6B,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CACjE,CAAC,MAAM,KAAI;YACT,MAAM,GAAG,GAA2B,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE;AAErD,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;gBACzB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CACjC,MAAM,CAAC,GAAG,EACV,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,EAC3B,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAC/B,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,aAAa,EACpB,MAAM,CAAC,EAAE,CACV;AACH,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,GAAG;AACZ,QAAA,CAAC,CACF;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,IAAI,CACnC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE,QAAQ,CACtD;QACD,MAAM,KAAK,GACT,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,IAAI,IAAI,MAAM,EAAE,GAAG,IAAI,EAAE;AAClE,QAAA,MAAM,UAAU,GACd,MAAM,CAAC,WAAW,KAAK;cACnB,IAAI,CAAC;AACP,eAAG,QAAQ,CAAC,UAAU,EAAE,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC;AAEtD,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;gBACT,KAAK;AACL,gBAAA,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE;gBAC5B,OAAO;gBACP,IAAI;AACJ,gBAAA,KAAK,EAAE,EAAE;gBACT,IAAI;gBACJ,IAAI;gBACJ,UAAU;AACV,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE,QAAQ;AAClB,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,cAAc,CACZ,GAAW,EACX,QAAgC,EAChC,MAAyC,EAAA;QAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IACE,CAAC,MAAM;YACP,MAAM,CAAC,IAAI,KAAK,aAAa;AAC7B,YAAA,MAAM,CAAC,QAAQ,KAAK,OAAO,EAC3B;YACA;QACF;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QACpC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM;QACxC,MAAM,SAAS,GAAG,eAAe,EAAE,GAAG,IAAI,MAAM,CAAC,SAAS,IAAI,EAAE;QAChE,MAAM,KAAK,GACT,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE;AAC3B,YAAA,eAAe,EAAE,IAAI;YACrB,SAAS;YACT,MAAM,CAAC,KAAK;AAEd,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;gBACT,KAAK;gBACL,SAAS;AACT,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,IAAI,EAAE,EAAE;gBACR,KAAK;AACL,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE,CAAC;gBACP,UAAU,EAAE,KAAK,CAAC,MAAM;AACxB,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE,QAAQ;AAClB,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,oBAAoB,CAClB,GAAW,EACX,QAAsD,EACtD,MAAyC,EAAA;QAEzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;YAAE;QAE9C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,CAAA,OAAA,EAAU,MAAM,CAAC,QAAQ,CAAA,CAAE;AACjE,QAAA,MAAM,KAAK,GACT,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,IAAI,uBAAuB;QACxE,MAAM,aAAa,GAAG;cAClB,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK;cACpC,IAAI;AAER,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;gBACT,KAAK;gBACL,SAAS;AACT,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,IAAI,EAAE,CAAC;AACP,gBAAA,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;gBAC9C,aAAa;AACb,gBAAA,KAAK,EAAE,IAAI;AACX,gBAAA,OAAO,EAAE,QAAQ;AAClB,aAAA;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,cAAc,CAAC,GAAW,EAAA;QACxB,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM;YAAE;AAEb,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAClB,GAAG,IAAI,CAAC,UAAU,EAAE;YACpB,CAAC,GAAG,GAAG;AACL,gBAAA,GAAG,MAAM;AACT,gBAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ;AAC3B,aAAA;AACF,SAAA,CAAC;IACJ;IAEQ,cAAc,CACpB,IAAqB,EACrB,QAA0B,EAAA;AAE1B,QAAA,IACE,CAAC,QAAQ;AACT,YAAA,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AAC3B,YAAA,QAAQ,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,EACnC;AACA,YAAA,OAAO,IAAI;QACb;QAEA,OAAO;AACL,YAAA,GAAG,IAAI;YACP,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;AACrB,YAAA,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;AACnC,YAAA,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;YAC/C,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,OAAO,EAAE,QAAQ,CAAC,OAAO;SAC1B;IACH;AAEQ,IAAA,OAAO,CAAC,IAA6B,EAAA;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAC/B,IAAI,EAAE,OAAO,IAAI,EAAE,EACnB,IAAI,EAAE,cAAc,EAAE,MAAM,IAAI,EAAE,CACnC;QACD,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAK;AAClD,YAAA,QAAQ,CAAC,aAAa;YACtB,QAAQ;AACT,SAAA,CAAC,CACH;AACD,QAAA,MAAM,YAAY,GAAG,CAAC,IAAI,IAAI,EAAE,cAAc,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACvE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAC5B;AAED,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;YAC5B,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC;AACzE,YAAA,MAAM,YAAY,GAAG,YAAY,CAAC;AAChC,kBAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW;kBAC3C,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI,EAAE;AAC7B,qBAAA,MAAM,CACL,CAAC,QAAQ,KACP,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,SAAS;AAExD,qBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;qBAChC,GAAG,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,aAAa,CAAC;AAEhD,YAAA,MAAM,IAAI,GAAG,YAAY,CAAC;AACxB,kBAAE;kBACA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,KAAI;gBAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC;AACjD,gBAAA,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CACrC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,KAAK,WAAW,CAC3C;AAED,gBAAA,OAAO,IAAI,CAAC,YAAY,CACtB,WAAW,EACX,MAAM,CAAC,MAAM,GAAG,WAAW,CAAC,EAC5B,QAAQ,EACR,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,aAAa,IAAI,QAAQ,EAAE,aAAa,IAAI,IAAI,EAC/D,MAAM,CAAC,EAAE,CACV;AACH,YAAA,CAAC,CAAC;YAEF,OAAO;gBACL,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAA,OAAA,EAAU,MAAM,CAAC,EAAE,CAAA,CAAE;AAC1C,gBAAA,MAAM,EAAE;AACN,sBAAE;wBACE,EAAE,EAAE,MAAM,CAAC,EAAE;wBACb,GAAG,EAAE,MAAM,CAAC,GAAG;wBACf,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;AAC5B;AACH,sBAAE,SAAS;gBACb,UAAU,EAAE,MAAM,CAAC,EAAE;gBACrB,UAAU;AACV,gBAAA,QAAQ,EAAE,UAAU;aACrB;AACH,QAAA,CAAC,CAAC;IACJ;IAEQ,YAAY,CAClB,OAAgC,EAChC,MAAsC,EAAA;AAEtC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAClB,YAAA,OAAO,OAAO;QAChB;QAEA,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,GAA4B,EAAE;AAC3C,QAAA,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU;AAE9B,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACvB,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAI;gBACnC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACxC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBACjC;gBACF;AAEA,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACpB,gBAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACpB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;YACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AACxB,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACtB;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,YAAY,CAClB,WAAmB,EACnB,IAAyD,EACzD,QAAiD,EACjD,QAA4B,EAC5B,KAAyB,EACzB,aAA6D,EAC7D,QAAgB,EAAA;AAEhB,QAAA,MAAM,gBAAgB,IAAI,QAAQ,IAAI,MAAM,CAA2B;QAEvE,OAAO;AACL,YAAA,EAAE,EAAE,QAAQ;YACZ,UAAU,EAAE,QAAQ,EAAE,EAAE;AACxB,YAAA,GAAG,EAAE,QAAQ,EAAE,GAAG,IAAI,WAAW;AACjC,YAAA,aAAa,EAAE,QAAQ,EAAE,aAAa,IAAI,WAAW;AACrD,YAAA,IAAI,EAAE,KAAK,IAAI,QAAQ,EAAE,KAAK,IAAI,WAAW;YAC7C,QAAQ,EACN,IAAI,EAAE,GAAG,KAAK,IAAI,IAAI,IAAI,EAAE,GAAG,KAAK;AAClC,kBAAE;AACF,kBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YACtB,KAAK,EACH,gBAAgB,KAAK,QAAQ;AAC7B,gBAAA,gBAAgB,KAAK,QAAQ;AAC7B,gBAAA,gBAAgB,KAAK,MAAM;AAC3B,gBAAA,gBAAgB,KAAK;kBAChB,IAAI,EAAE;AACT,kBAAE,MAAM,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC;AAC7D,YAAA,QAAQ,EAAE,gBAAgB;YAC1B,IAAI,EAAE,QAAQ,EAAE,MAAM;AACtB,YAAA,aAAa,EAAE,aAAwD;SACxE;IACH;IAEQ,eAAe,CACrB,IAA2C,EAC3C,KAAa,EAAA;AAEb,QAAA,MAAM,MAAM,GAAyB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,KAAI;AACxE,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,EAAE;YAE9C,OAAO;AACL,gBAAA,GAAG,aAAa;gBAChB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;aAClB;AACzB,QAAA,CAAC,CAAC;QAEF,OAAO;AACL,YAAA,IAAI,EAAE;gBACJ,EAAE,EAAE,IAAI,CAAC,QAAQ;gBACjB,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE;AAC9B,gBAAA,IAAI,EAAE,WAAW;AACjB,gBAAA,eAAe,EAAE;oBACf,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;oBACzC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,aAAa,EAAE,IAAI,CAAC,aAAa;oBACjC,SAAS,EAAE,IAAI,CAAC,SAAS;AAC1B,iBAAA;AACF,aAAA;YACD,MAAM;AACN,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,OAAO,EAAE,EAAE;SACZ;IACH;uGA/ZW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAtB,sBAAsB,EAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;ACFD,MAAMA,sBAAoB,GAAG,EAAE;MAQlB,mBAAmB,CAAA;AACrB,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAmB;AACzC,IAAA,UAAU,GAAG,KAAK,CAAgB,EAAE,sDAAC;AACrC,IAAA,WAAW,GAAG,KAAK,CAA+B,SAAS,uDAAC;IAC5D,QAAQ,GAAG,MAAM,EAA2B;IAC5C,QAAQ,GAAG,MAAM,EAA0B;AAEjC,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACvC,QAAA,OAAO,IAAI,CAAC,KAAK,EAA0B;AAC7C,IAAA,CAAC,iDAAC;AACiB,IAAA,mBAAmB,GAAG,CAAA,OAAA,EAAUA,sBAAoB,CAAA,iBAAA,CAAmB;AAEhF,IAAA,YAAY,CAAC,IAAY,EAAA;AACjC,QAAA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,QAAA,EAAW,IAAI,EAAE;IACtC;AAEU,IAAA,eAAe,CACvB,IAAqB,EAAA;QAErB,OAAO;AACL,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,KAAK,EAAE,IAAI;YACX,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,OAAO;SACnB;IACH;uGA3BW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzBhC,i2DAmDA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED7BY,YAAY,sMAAE,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,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,aAAA,EAAA,SAAA,EAAA,UAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,aAAA,EAAA,MAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,OAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,aAAA,EAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGxC,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,i2DAAA,EAAA;;;MELzC,mBAAmB,CAAA;AACrB,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAmB;IACzC,SAAS,GAAG,MAAM,EAAkB;IAE1B,UAAU,GAAG,QAAQ,CACtC,MAAM,IAAI,CAAC,KAAK,EAA0B,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC3C;uGANU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBhC,+7BAuBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDTY,YAAY,+BAAE,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGlD,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAN/B,SAAS;+BACE,2BAA2B,EAAA,UAAA,EACzB,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,+7BAAA,EAAA;;;AEHhE,MAAMD,sBAAoB,GAAG,EAAE;MAQlB,yBAAyB,CAAA;AAC3B,IAAA,KAAK,GAAG,KAAK,CAAC,QAAQ,gDAAmB;IAE/B,gBAAgB,GAAG,QAAQ,CAC5C,MAAM,IAAI,CAAC,KAAK,EAAgC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,kBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CACjD;AACkB,IAAA,mBAAmB,GAAG,CAAA,OAAA,EAAUA,sBAAoB,CAAA,iBAAA,CAAmB;AAEhF,IAAA,YAAY,CAAC,IAAY,EAAA;AACjC,QAAA,OAAO,CAAA,KAAA,EAAQ,IAAI,CAAA,QAAA,EAAW,IAAI,EAAE;IACtC;AAEU,IAAA,eAAe,CACvB,IAAqB,EAAA;QAErB,OAAO;AACL,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,KAAK,EAAE,IAAI;YACX,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,OAAO;SACnB;IACH;uGAvBW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnBtC,oiEAgEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDhDY,YAAY,sMAAE,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,eAAe,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,WAAA,EAAA,YAAA,EAAA,QAAA,EAAA,eAAA,EAAA,YAAA,EAAA,aAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAGlD,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBANrC,SAAS;+BACE,iCAAiC,EAAA,UAAA,EAC/B,IAAI,EAAA,OAAA,EACP,CAAC,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,cAAc,CAAC,EAAA,QAAA,EAAA,oiEAAA,EAAA;;;AEmBhE,MAAM,iBAAiB,GAAuB,OAAO;AACrD,MAAM,YAAY,GAAmB,MAAM;AAC3C,MAAM,YAAY,GAAmB,MAAM;AAC3C,MAAM,wBAAwB,GAAG,EAAE;AACnC,MAAM,sBAAsB,GAAG,MAAM;AACrC,MAAM,qBAAqB,GAAG,kBAAkB;AAChD,MAAM,mBAAmB,GAAG,oBAAoB;AAChD,MAAM,yBAAyB,GAAG,CAAC;AACnC,MAAM,oBAAoB,GAAG,EAAE;MAelB,UAAU,CAAA;AACJ,IAAA,GAAG,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAChC,IAAA,KAAK,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAEhD,IAAA,cAAc,GAAG,KAAK,CAAC,QAAQ,yDAA6B;AAC5D,IAAA,WAAW,GAAG,KAAK,CAAC,wBAAwB,uDAAC;IAE7C,MAAM,GAAG,MAAM,EAAU;IACzB,OAAO,GAAG,MAAM,EAAoC;IACpD,WAAW,GAAG,MAAM,EAA8B;AAExC,IAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK;AAC1B,IAAA,aAAa,GAAG,IAAI,GAAG,EAAwB;AAC/C,IAAA,yBAAyB,GAAG,IAAI,GAAG,EAAkB;AACrD,IAAA,0BAA0B,GAAG,IAAI,GAAG,EAAkB;AAEvE,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;YACrC,SAAS,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAE7C,SAAS,CAAC,MAAK;gBACb,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAClC,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrB,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEA,UAAU,CAAC,OAAe,EAAE,KAA8B,EAAA;QACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC;AAC7C,QAAA,IACE,CAAC,IAAI;YACL,IAAI,CAAC,IAAI,KAAK,aAAa;YAC3B,IAAI,CAAC,QAAQ,KAAK,OAAO;AACzB,YAAA,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EACxB;YACA;QACF;AAEA,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;IACnD;AAEA,IAAA,MAAM,CAAC,OAAgB,EAAA;QACrB,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YACzB;QACF;QAEA,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;AAC5B,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;AAC3B,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,WAAW,CAAC,OAAe,EAAA;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC;AAC7C,QAAA,IAAI,CAAC,IAAI;YAAE;AAEX,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAC3B;AAEA,IAAA,cAAc,CAAC,GAAW,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC;IAChC;IAEA,eAAe,CAAC,IAAqB,EAAE,GAA2B,EAAA;AAChE,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,IAAI,EAAE,GAAG;AACT,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA,CAAC;IACJ;IAEA,WAAW,CAAC,IAAqB,EAAE,IAAoB,EAAA;AACrD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;YACpB,GAAG,EAAE,IAAI,CAAC,GAAG;AACb,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA,CAAC;IACJ;AAEA,IAAA,eAAe,CAAC,IAAqB,EAAA;QACnC,OAAO;AACL,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,KAAK,EAAE,IAAI;YACX,IAAI;YACJ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI,EAAE,IAAI,CAAC,OAAO;SACnB;IACH;AAEA,IAAA,YAAY,CAAC,IAAqB,EAAA;AAChC,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,YAAA,OAAO,uBAAuB;QAChC;AAEA,QAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,OAAO;IACtD;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;IAC5B;AAEQ,IAAA,cAAc,CAAC,OAAkC,EAAA;QACvD,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;QAC7C,MAAM,kBAAkB,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC;AAErD,QAAA,MAAM,UAAU,GAAsB,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CACvD,CAAC,MAAM,EAAE,KAAK,KAAI;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACrC,YAAA,MAAM,aAAa,GAAG,IAAI,KAAK,aAAa;AAC5C,YAAA,MAAM,UAAU,GAAG,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;YACnE,MAAM,QAAQ,GAAG;AACf,kBAAE;kBACA,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;YAC9C,MAAM,IAAI,GAAG;AACX,kBAAE;AACF,kBAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC;YAC9D,MAAM,WAAW,GACf,CAAC,aAAa;AACd,gBAAA,QAAQ,KAAK,OAAO;AACpB,iBAAC,UAAU,EAAE,WAAW,IAAI,IAAI,CAAC;AACnC,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI;AAC5C,YAAA,MAAM,IAAI,GACR,CAAC,aAAa,IAAI,QAAQ,KAAK;AAC7B,kBAAE;uBACG,UAAU,EAAE,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE;AACzC,sBAAE;kBACF,CAAC;YACP,MAAM,eAAe,GACnB,UAAU;AACV,iBAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,IAAI,IAAI,CAAC;AAClC,gBAAA,kBAAkB;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AACzC,YAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC;AAC3D,YAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC;YACnC,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAC9C,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,WAAW,EACX,IAAI,EACJ,UAAU,EACV,eAAe,EACf,MAAM,CACP;YAED,IAAI,aAAa,EAAE;gBACjB,OAAO;oBACL,GAAG;AACH,oBAAA,MAAM,EAAE,gBAAgB;AACxB,oBAAA,IAAI,EAAE,aAAa;AACnB,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACjC,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,UAAU,EAAE,CAAC;AACb,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,IAAI,EAAE,CAAC;oBACP,QAAQ,EACN,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,iBAAiB,IAAI,IAAI;AAClE,oBAAA,aAAa,EAAE,QAAQ,EAAE,aAAa,IAAI,IAAI;AAC9C,oBAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI;iBACnC;YACH;AAEA,YAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;gBACxB,OAAO;oBACL,GAAG;AACH,oBAAA,MAAM,EAAE,gBAAgB;AACxB,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,KAAK,EAAE,IAAI;oBACX,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACjC,oBAAA,SAAS,EAAE,EAAE;AACb,oBAAA,UAAU,EAAE,CAAC;AACb,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,IAAI,EAAE,EAAE;AACR,oBAAA,KAAK,EAAE,EAAE;AACT,oBAAA,IAAI,EAAE,CAAC;AACP,oBAAA,IAAI,EAAE,CAAC;oBACP,QAAQ,EACN,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,iBAAiB,IAAI,IAAI;AAClE,oBAAA,aAAa,EAAE,IAAI;AACnB,oBAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI;iBACnC;YACH;YAEA,OAAO;gBACL,GAAG;AACH,gBAAA,MAAM,EAAE,gBAAgB;AACxB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AACjC,gBAAA,SAAS,EAAE,EAAE;AACb,gBAAA,UAAU,EAAE,CAAC;AACb,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,IAAI,EAAE,EAAE;AACR,gBAAA,KAAK,EAAE,EAAE;AACT,gBAAA,IAAI,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,GAAG,QAAQ,CAAC,IAAI,GAAG,CAAC;gBACxD,IAAI;gBACJ,QAAQ,EACN,QAAQ,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,iBAAiB,IAAI,IAAI;AAClE,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI;aACnC;AACH,QAAA,CAAC,CACF;AAED,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE;AAEQ,IAAA,QAAQ,CAAC,IAAqB,EAAE,KAAK,GAAG,KAAK,EAAA;AACnD,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE;AAC/B,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;YAClD;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC7B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;YAC5C;QACF;QAEA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC;IACpE;IAEQ,SAAS,CACf,GAAW,EACX,MAAyC,EACzC,IAAY,EACZ,IAAY,EACZ,KAAK,GAAG,KAAK,EAAA;QAEb,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;YACnE;QACF;AAEA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;QACnD,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,KAAK,CAAC;QAExE,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C;aAAO,IACL,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB;YAC5D,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB,EAC7D;YACA;QACF;QAEA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE;QAC1C,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;AAE9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC;AACd,aAAA,OAAO,CAAC,MAAM,CAAC,UAAW,EAAE,MAAM,CAAC,UAAW,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO;AACrE,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,aAAa,GAAG,KAAK;AAEzB,gBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;oBACjB,IAAI,CAAC,KAAK,CAAC,aAAa,CACtB,GAAG,EACH,QAAQ,CAAC,IAAI,EACb,MAAM,EACN,KAAK,CAAC,IAAI,EACV,KAAK,CAAC,IAAI,CACX;oBACD,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;oBAC1D,aAAa,GAAG,IAAI;gBACtB;qBAAO;AACL,oBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,2BAA2B;oBAC/D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;oBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;gBACrC;gBAEA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;gBAE1C,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBACvB;YACF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,qBAAqB;gBAClE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACrC,CAAC;AACF,SAAA,CAAC;QAEJ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAClC;AAEQ,IAAA,SAAS,CACf,GAAW,EACX,MAAyC,EACzC,KAAK,GAAG,KAAK,EAAA;QAEb,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;YACnE;QACF;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC;QAEjE,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C;aAAO,IACL,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB;YAC5D,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB,EAC7D;YACA;QACF;QAEA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE;QAC1C,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;AAE9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC;AACd,aAAA,QAAQ,CAAC,MAAM,CAAC,UAAW,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO;AAC9D,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;gBACjB,IAAI,aAAa,GAAG,KAAK;AAEzB,gBAAA,IAAI,QAAQ,CAAC,IAAI,EAAE;AACjB,oBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;oBACrD,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;oBAC1D,aAAa,GAAG,IAAI;gBACtB;qBAAO;AACL,oBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,sBAAsB;oBAC1D,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;oBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;gBACrC;gBAEA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;gBAE1C,IAAI,aAAa,EAAE;AACjB,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBACvB;YACF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,sBAAsB;gBACnE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACrC,CAAC;AACF,SAAA,CAAC;QAEJ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAClC;AAEQ,IAAA,eAAe,CACrB,GAAW,EACX,MAAyC,EACzC,KAAK,GAAG,KAAK,EAAA;QAEb,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC;YACnE;QACF;QAEA,MAAM,gBAAgB,GAAG,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAAC;QAEvE,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,YAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC;QAC7C;aAAO,IACL,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB;YAC5D,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,gBAAgB,EAC7D;YACA;QACF;QAEA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE;QAC1C,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;QACzD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;AAE9B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;AACtE,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,CAAC;gBACnE,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;gBAC1D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,gBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC1B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;YACvB,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;AACf,gBAAA,IAAI,KAAK,EAAE,MAAM,KAAK,GAAG,EAAE;oBACzB,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;oBAClD,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC;oBAC1D,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,oBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC;AAC1B,oBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;oBACrB;gBACF;AAEA,gBAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,oBAAA,KAAK,EAAE,OAAO;AACd,oBAAA,sCAAsC;gBACxC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;AACjC,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;YACrC,CAAC;AACF,SAAA,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;IAClC;AAEQ,IAAA,eAAe,CACrB,QAAwC,EAAA;QAExC,OAAO,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,iBAAiB;IAC3D;AAEQ,IAAA,WAAW,CAAC,MAA+B,EAAA;AACjD,QAAA,OAAO,MAAM,CAAC,IAAI,KAAK,aAAa,GAAG,aAAa,GAAG,YAAY;IACrE;IAEQ,WAAW,CACjB,IAAgC,EAChC,UAAgC,EAAA;QAEhC,IAAI,IAAI,KAAK,UAAU;AAAE,YAAA,OAAO,YAAY;AAC5C,QAAA,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,YAAY;IAClE;AAEQ,IAAA,kBAAkB,CACxB,MAA+B,EAC/B,IAAoB,EACpB,QAA4B,EAC5B,IAAoB,EACpB,WAAoB,EACpB,IAAY,EACZ,UAAmB,EACnB,eAAwB,EACxB,MAAwC,EAAA;QAExC,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;QAE5C,OAAO;AACL,YAAA,UAAU,EAAE,UAAU,EAAE,UAAU,IAAI,IAAI;AAC1C,YAAA,UAAU,EAAE,UAAU,EAAE,UAAU,IAAI,IAAI;AAC1C,YAAA,OAAO,EAAE,UAAU,EAAE,OAAO,IAAI,EAAE;AAClC,YAAA,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,IAAI,CAAC;YAC1C,IAAI;YACJ,QAAQ;YACR,IAAI;YACJ,WAAW;YACX,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU;AACV,YAAA,UAAU,EAAE,UAAU,EAAE,UAAU,IAAI,EAAE;YACxC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,eAAe,EAAE,MAAM,CAAC,eAAe;AACvC,YAAA,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;YACnC,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;AAC7B,YAAA,QAAQ,EAAE;AACR,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,iBAAiB,IAAI,IAAI;AAC7D,gBAAA,YAAY,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,IAAI,qBAAqB;AACpE,gBAAA,UAAU,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,IAAI,mBAAmB;AAC/D,aAAA;YACD,MAAM;SACP;IACH;IAEQ,aAAa,CACnB,MAA+B,EAC/B,KAAa,EAAA;AAEb,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE;AACpC,YAAA,OAAO,eAAe,MAAM,CAAC,QAAQ,CAAA,CAAA,EAAI,KAAK,EAAE;QAClD;QAEA,OAAO;AACL,YAAA,MAAM,CAAC,UAAU;YACjB,MAAM,CAAC,UAAU,IAAI,OAAO;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;YACrC,MAAM,CAAC,QAAQ,IAAI,iBAAiB;YACpC,KAAK;AACN,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACb;AAEQ,IAAA,aAAa,CACnB,MAA+B,EAAA;AAE/B,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY;AACtC,QAAA,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU;QAElC,MAAM,SAAS,GAAG;AAChB,cAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,yBAAyB;cACpE,CAAC;QACL,IAAI,OAAO,GAAG;AACZ,cAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI,yBAAyB;cAClE,CAAC;AAEL,QAAA,IAAI,SAAS,GAAG,OAAO,IAAI,oBAAoB,EAAE;AAC/C,YAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,oBAAoB,GAAG,SAAS,GAAG,CAAC,CAAC;QAC7D;AAEA,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAChC,CAAC,EACD,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAC3C;AACD,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAC9B,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI,iBAAiB,EAC7C,CAAC,EACD,iBAAiB,CAClB;QAED,OAAO;YACL,SAAS;YACT,SAAS;YACT,OAAO;SACR;IACH;IAEQ,SAAS,CACf,KAAyB,EACzB,GAAG,GAAG,CAAC,EACP,GAAG,GAAG,oBAAoB,EAAA;QAE1B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;AAAE,YAAA,OAAO,GAAG;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D;AAEQ,IAAA,qBAAqB,CAAC,UAAuB,EAAA;AACnD,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE;YACrD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBACxB,GAAG,CAAC,WAAW,EAAE;AACjB,gBAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;AAC9B,gBAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC1C,gBAAA,IAAI,CAAC,0BAA0B,CAAC,MAAM,CAAC,GAAG,CAAC;YAC7C;QACF;IACF;AAEQ,IAAA,gBAAgB,CAAC,GAAW,EAAA;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE;YACT;QACF;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD;AAEQ,IAAA,YAAY,CAClB,MAAyC,EACzC,IAAY,EACZ,IAAY,EAAA;QAEZ,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,UAAU,EAAE,MAAM,CAAC,IAAI,KAAK,UAAU,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS;YACtE,IAAI,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC;YACnC,IAAI,EAAE,MAAM,CAAC,WAAW,GAAG,IAAI,GAAG,sBAAsB;SACzD;IACH;IAEQ,2BAA2B,CACjC,MAAyC,EACzC,KAA2B,EAAA;QAE3B,OAAO;AACL,YAAA,MAAM,CAAC,IAAI;AACX,YAAA,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,UAAU,IAAI,GAAG;YACxB,MAAM,CAAC,UAAU,IAAI,OAAO;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;AACrC,YAAA,KAAK,CAAC,IAAI;AACV,YAAA,KAAK,CAAC,IAAI;AACV,YAAA,KAAK,CAAC,IAAI;AACV,YAAA,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;AAC5B,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACb;AAEQ,IAAA,2BAA2B,CACjC,MAAyC,EAAA;QAEzC,OAAO;AACL,YAAA,MAAM,CAAC,IAAI;AACX,YAAA,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,UAAU,IAAI,GAAG;YACxB,MAAM,CAAC,UAAU,IAAI,OAAO;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;YACrC,MAAM;AACP,SAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IACb;AAEQ,IAAA,iCAAiC,CACvC,MAAyC,EAAA;AAEzC,QAAA,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAC9D;AAEQ,IAAA,mBAAmB,CACzB,MAAyC,EAAA;AAEzC,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;AACjC,YAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC;QAChE;QAEA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE;AAC9B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;AAC/B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU;AACpC,QAAA,OAAO,UAAU,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC;IAC5E;AAEQ,IAAA,4BAA4B,CAClC,MAAyC,EAAA;AAEzC,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,EAAE;AACjC,YAAA,OAAO,2CAA2C;QACpD;AAEA,QAAA,OAAO,MAAM,CAAC,QAAQ,KAAK;AACzB,cAAE;cACA,6DAA6D;IACnE;AAEQ,IAAA,mBAAmB,CACzB,MAA+B,EAAA;AAE/B,QAAA,OAAO,MAAM,CAAC,IAAI,KAAK,aAAa;IACtC;AAEQ,IAAA,mBAAmB,CACzB,MAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI;IACzD;AAEQ,IAAA,YAAY,CAClB,MAA+B,EAAA;AAE/B,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM;IACzD;AAEQ,IAAA,gBAAgB,CACtB,OAAiE,EAAA;QAEjE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC;IACtC;uGAhrBW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAV,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAU,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,aAAA,EAAA,EAAA,SAAA,EAHV,CAAC,sBAAsB,CAAC,0BCvDrC,ikFAmEA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDlBI,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,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,mBAAmB,EAAA,QAAA,EAAA,2BAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,YAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,mBAAmB,iHACnB,yBAAyB,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAKhB,UAAU,EAAA,UAAA,EAAA,CAAA;kBAbtB,SAAS;+BACE,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,MAAM;wBACN,mBAAmB;wBACnB,mBAAmB;wBACnB,yBAAyB;qBAC1B,EAAA,SAAA,EACU,CAAC,sBAAsB,CAAC,EAAA,QAAA,EAAA,ikFAAA,EAAA;;;AEvDrC;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/client-components",
3
- "version": "0.0.10",
3
+ "version": "0.0.12",
4
4
  "publishConfig": {
5
5
  "directory": "../../../dist/masterteam/client-components",
6
6
  "linkDirectory": true,
@@ -16,9 +16,9 @@
16
16
  "rxjs": "^7.8.2",
17
17
  "tailwindcss": "^4.1.17",
18
18
  "tailwindcss-primeui": "^0.6.1",
19
- "@masterteam/forms": "^0.0.47",
20
- "@masterteam/components": "^0.0.101",
21
- "@masterteam/dashboard-builder": "^0.0.5"
19
+ "@masterteam/components": "^0.0.105",
20
+ "@masterteam/forms": "^0.0.49",
21
+ "@masterteam/dashboard-builder": "^0.0.7"
22
22
  },
23
23
  "dependencies": {
24
24
  "tslib": "^2.8.1"
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { TemplateRef, OnDestroy } from '@angular/core';
3
3
  import { DashboardBuilderData } from '@masterteam/dashboard-builder';
4
4
  import { EntityData, EntityConfiguration } from '@masterteam/components/entities';
5
- import { TableAction, ColumnDef } from '@masterteam/components/table';
5
+ import { TableAction, TableActionShape, ColumnDef } from '@masterteam/components/table';
6
6
  import { Observable } from 'rxjs';
7
7
 
8
8
  type ClientListMode = 'auto' | 'override';
@@ -31,6 +31,7 @@ interface ClientListBaseConfiguration {
31
31
  contentEnd?: TemplateRef<ClientListContentTemplateContext>;
32
32
  templateContent?: TemplateRef<ClientListContentTemplateContext>;
33
33
  rowActions?: TableAction[];
34
+ actionShape?: TableActionShape;
34
35
  dataLoaded?: ClientListDataLoadedHandler;
35
36
  }
36
37
  interface ClientListFormConfiguration extends ClientListBaseConfiguration {
@@ -38,6 +39,7 @@ interface ClientListFormConfiguration extends ClientListBaseConfiguration {
38
39
  areaType?: ClientListAreaType;
39
40
  contextKey: ClientListRuntimeContext;
40
41
  instanceId?: number;
42
+ filters?: ClientListFetchRequestFilter[];
41
43
  mode?: ClientListMode;
42
44
  columnKeys?: string[];
43
45
  isPaginated?: boolean;
@@ -69,8 +71,8 @@ interface ClientListTableQuery {
69
71
  type ClientListFetchProjection = 'Card' | 'Table';
70
72
  interface ClientListFetchRequestFilter {
71
73
  key: string;
72
- operator: 'Equals';
73
- value: string;
74
+ operator: string;
75
+ value: unknown;
74
76
  }
75
77
  interface ClientListFetchRequestDisplay {
76
78
  areas: string[];
@@ -250,6 +252,7 @@ interface ClientListItemClickedEvent {
250
252
  interface NormalizedClientListConfiguration {
251
253
  contextKey: ClientListRuntimeContext | null;
252
254
  instanceId: number | null;
255
+ filters: ClientListFetchRequestFilter[];
253
256
  moduleId: number;
254
257
  type: ClientListType;
255
258
  areaType: ClientListAreaType;
@@ -267,6 +270,7 @@ interface NormalizedClientListConfiguration {
267
270
  contentEnd?: TemplateRef<ClientListContentTemplateContext>;
268
271
  templateContent?: TemplateRef<ClientListContentTemplateContext>;
269
272
  rowActions: TableAction[];
273
+ actionShape?: TableActionShape;
270
274
  dataLoaded?: ClientListDataLoadedHandler;
271
275
  }
272
276
  interface ClientListContentTemplateContext {
@@ -351,6 +355,7 @@ declare class ClientList implements OnDestroy {
351
355
  private isInformativeConfig;
352
356
  private asInformativeConfig;
353
357
  private asFormConfig;
358
+ private serializeFilters;
354
359
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClientList, never>;
355
360
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClientList, "mt-client-list", never, { "configurations": { "alias": "configurations"; "required": true; "isSignal": true; }; "defaultTake": { "alias": "defaultTake"; "required": false; "isSignal": true; }; }, { "loaded": "loaded"; "errored": "errored"; "itemClicked": "itemClicked"; }, never, never, true, never>;
356
361
  }
@@ -360,12 +365,13 @@ declare class ClientListApiService {
360
365
  private readonly runtimeFetchBaseUrl;
361
366
  private readonly tableSettingsBaseUrl;
362
367
  private readonly informativeBaseUrl;
363
- getRows(contextKey: ClientListRuntimeContext, instanceId: number, query: ClientListTableQuery): Observable<Response<RuntimeTableRowsResponse>>;
364
- getCards(contextKey: ClientListRuntimeContext, instanceId?: number | null): Observable<Response<ClientListCardsPayload>>;
368
+ getRows(contextKey: ClientListRuntimeContext, instanceId: number, query: ClientListTableQuery, filters?: ClientListFetchRequestFilter[]): Observable<Response<RuntimeTableRowsResponse>>;
369
+ getCards(contextKey: ClientListRuntimeContext, instanceId?: number | null, filters?: ClientListFetchRequestFilter[]): Observable<Response<ClientListCardsPayload>>;
365
370
  getInformativeDashboard(moduleId: number): Observable<Response<ClientListInformativeDashboardPayload>>;
366
371
  private queryRuntime;
367
372
  private resolveTablePropertyKeys;
368
373
  private buildInstanceFilters;
374
+ private mergeFilters;
369
375
  private toPage;
370
376
  private toEffectiveColumnKeys;
371
377
  private readTableSettingsContext;