@masterteam/components 0.0.150 → 0.0.152

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-components-table.mjs","sources":["../../../../packages/masterteam/components/table/table-value.utils.ts","../../../../packages/masterteam/components/table/table-filter/table-filter.ts","../../../../packages/masterteam/components/table/table-filter/table-filter.html","../../../../packages/masterteam/components/table/table.ts","../../../../packages/masterteam/components/table/table.html","../../../../packages/masterteam/components/table/masterteam-components-table.ts"],"sourcesContent":["import { EntityData, EntityViewType } from '@masterteam/components/entities';\r\nimport { ColumnDef, FilterConfig } from './table-types';\r\n\r\nexport type TableEntityUsage = 'sort' | 'export' | 'filter';\r\n\r\nexport class TableValueResolver {\r\n private static readonly ALL_ENTITY_VIEW_TYPES: EntityViewType[] = [\r\n 'Text',\r\n 'LongText',\r\n 'Date',\r\n 'DateTime',\r\n 'Percentage',\r\n 'Status',\r\n 'Currency',\r\n 'Checkbox',\r\n 'User',\r\n 'Lookup',\r\n 'Attachment',\r\n ];\r\n\r\n private static readonly UNSORTABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>(['Attachment', 'Checkbox']);\r\n\r\n private static readonly EXPORTABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>([\r\n 'Text',\r\n 'LongText',\r\n 'Date',\r\n 'DateTime',\r\n 'Percentage',\r\n 'Status',\r\n 'Currency',\r\n 'Checkbox',\r\n 'User',\r\n 'Lookup',\r\n ]);\r\n\r\n private static readonly FILTERABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>(\r\n TableValueResolver.ALL_ENTITY_VIEW_TYPES.filter(\r\n (viewType) => viewType !== 'Attachment',\r\n ),\r\n );\r\n\r\n static getProperty(obj: unknown, key: string): unknown {\r\n return key.split('.').reduce<unknown>((current, segment) => {\r\n if (!current || typeof current !== 'object') {\r\n return undefined;\r\n }\r\n\r\n return (current as Record<string, unknown>)[segment];\r\n }, obj);\r\n }\r\n\r\n static getColumnFilterType(\r\n column: ColumnDef,\r\n row?: Record<string, unknown>,\r\n ): FilterConfig['type'] | null {\r\n if (column.filterConfig?.type) {\r\n return column.filterConfig.type;\r\n }\r\n\r\n if (column.type === 'date' || column.type === 'dateTime') {\r\n return 'date';\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return 'boolean';\r\n }\r\n\r\n if (column.type === 'user') {\r\n return 'user';\r\n }\r\n\r\n if (column.type === 'status') {\r\n return 'select';\r\n }\r\n\r\n if (column.type !== 'entity') {\r\n return null;\r\n }\r\n\r\n const viewType = TableValueResolver.getEntityViewType(column, row);\r\n if (\r\n !viewType ||\r\n !TableValueResolver.FILTERABLE_ENTITY_VIEW_TYPES.has(viewType)\r\n ) {\r\n return null;\r\n }\r\n\r\n switch (viewType) {\r\n case 'Date':\r\n case 'DateTime':\r\n return 'date';\r\n case 'Checkbox':\r\n return 'boolean';\r\n case 'Status':\r\n case 'Lookup':\r\n case 'User':\r\n return 'select';\r\n case 'Text':\r\n case 'LongText':\r\n case 'Currency':\r\n case 'Percentage':\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n static getColumnFilterValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = TableValueResolver.getProperty(row, column.key);\r\n\r\n if (cellValue === null || cellValue === undefined) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'entity') {\r\n const filterType = TableValueResolver.getColumnFilterType(column, row);\r\n\r\n if (filterType === 'date') {\r\n return TableValueResolver.getEntityValueByType(cellValue, 'sort');\r\n }\r\n\r\n return TableValueResolver.getEntityValueByType(cellValue, 'filter');\r\n }\r\n\r\n if (column.type === 'date' || column.type === 'dateTime') {\r\n return TableValueResolver.normalizeDateSortValue(cellValue);\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return TableValueResolver.resolveBooleanValue(cellValue);\r\n }\r\n\r\n return TableValueResolver.resolveDisplayValue(cellValue);\r\n }\r\n\r\n static resolveDateValue(value: unknown): string | number | Date | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (\r\n typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n value instanceof Date\r\n ) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'object') {\r\n const objectValue = value as Record<string, unknown>;\r\n return TableValueResolver.resolveDateValue(\r\n objectValue['actualValue'] ??\r\n objectValue['rawValue'] ??\r\n objectValue['value'] ??\r\n objectValue['displayValue'],\r\n );\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n static getEntityValueByType(\r\n value: unknown,\r\n usage: TableEntityUsage,\r\n ): string | number | boolean | null {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (typeof value !== 'object') {\r\n return TableValueResolver.resolveDisplayValue(value);\r\n }\r\n\r\n const entityData = value as EntityData;\r\n\r\n if (\r\n usage === 'sort' &&\r\n TableValueResolver.UNSORTABLE_ENTITY_VIEW_TYPES.has(entityData.viewType)\r\n ) {\r\n return null;\r\n }\r\n\r\n if (\r\n usage === 'export' &&\r\n !TableValueResolver.EXPORTABLE_ENTITY_VIEW_TYPES.has(entityData.viewType)\r\n ) {\r\n return TableValueResolver.resolveDisplayValue(entityData.value);\r\n }\r\n\r\n switch (entityData.viewType) {\r\n case 'Currency':\r\n case 'Percentage':\r\n return usage === 'sort'\r\n ? TableValueResolver.normalizeNumericSortValue(\r\n entityData.rawValue ?? entityData.value,\r\n )\r\n : TableValueResolver.resolveDisplayValue(entityData.value);\r\n case 'Date':\r\n case 'DateTime':\r\n return usage === 'sort'\r\n ? TableValueResolver.normalizeDateSortValue(\r\n entityData.rawValue ?? entityData.value,\r\n )\r\n : TableValueResolver.resolveDisplayValue(entityData.value);\r\n case 'Checkbox':\r\n return TableValueResolver.resolveBooleanValue(\r\n entityData.rawValue ?? entityData.value,\r\n );\r\n case 'Status':\r\n case 'Lookup':\r\n case 'User':\r\n case 'Text':\r\n case 'LongText':\r\n default:\r\n return TableValueResolver.resolveDisplayValue(entityData.value);\r\n }\r\n }\r\n\r\n static resolveDisplayValue(value: unknown): string | number | boolean | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (\r\n typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n typeof value === 'boolean'\r\n ) {\r\n return value;\r\n }\r\n\r\n if (value instanceof Date) {\r\n return value.toISOString();\r\n }\r\n\r\n if (typeof value === 'object') {\r\n const objectValue = value as Record<string, unknown>;\r\n const displayCandidate =\r\n objectValue['display'] ??\r\n objectValue['displayValue'] ??\r\n objectValue['displayName'] ??\r\n objectValue['name'] ??\r\n objectValue['label'] ??\r\n objectValue['value'];\r\n\r\n return TableValueResolver.resolveDisplayValue(displayCandidate);\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n static resolveBooleanValue(value: unknown): boolean | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return ['true', '1', 'yes', 'on'].includes(value.toLowerCase());\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return value === 1;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static normalizeTextSortValue(value: unknown): string | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n return String(value).toLocaleLowerCase();\r\n }\r\n\r\n static normalizeNumericSortValue(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const numericValue =\r\n typeof value === 'number'\r\n ? value\r\n : Number.parseFloat(String(value).replace(/[^0-9.-]/g, ''));\r\n\r\n return Number.isNaN(numericValue) ? null : numericValue;\r\n }\r\n\r\n static normalizeDateSortValue(value: unknown): number | null {\r\n const resolvedValue = TableValueResolver.resolveDateValue(value);\r\n\r\n if (\r\n resolvedValue === null ||\r\n resolvedValue === undefined ||\r\n resolvedValue === ''\r\n ) {\r\n return null;\r\n }\r\n\r\n const timestamp =\r\n resolvedValue instanceof Date\r\n ? resolvedValue.getTime()\r\n : new Date(String(resolvedValue)).getTime();\r\n\r\n return Number.isNaN(timestamp) ? null : timestamp;\r\n }\r\n\r\n private static getEntityViewType(\r\n column: ColumnDef,\r\n row?: Record<string, unknown>,\r\n ): EntityViewType | null {\r\n const explicitViewType = (column as { viewType?: unknown }).viewType;\r\n if (TableValueResolver.isEntityViewType(explicitViewType)) {\r\n return explicitViewType;\r\n }\r\n\r\n const cellValue = row\r\n ? TableValueResolver.getProperty(row, column.key)\r\n : undefined;\r\n if (\r\n cellValue &&\r\n typeof cellValue === 'object' &&\r\n 'viewType' in (cellValue as Record<string, unknown>)\r\n ) {\r\n const viewType = (cellValue as EntityData).viewType;\r\n if (TableValueResolver.isEntityViewType(viewType)) {\r\n return viewType;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static isEntityViewType(value: unknown): value is EntityViewType {\r\n return (\r\n typeof value === 'string' &&\r\n TableValueResolver.ALL_ENTITY_VIEW_TYPES.includes(value as EntityViewType)\r\n );\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n forwardRef,\r\n input,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NG_VALUE_ACCESSOR,\r\n} from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { DateField } from '@masterteam/components/date-field';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { UserSearchField } from '@masterteam/components/user-search-field';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport {\r\n ColumnDef,\r\n FilterOption,\r\n FilterValue,\r\n TableFilters,\r\n} from '../table-types';\r\nimport { TableValueResolver } from '../table-value.utils';\r\n\r\n@Component({\r\n selector: 'mt-table-filter',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n TextField,\r\n SelectField,\r\n DateField,\r\n UserSearchField,\r\n Button,\r\n PopoverModule,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './table-filter.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => TableFilter),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class TableFilter implements ControlValueAccessor {\r\n readonly columns = input.required<ColumnDef[]>();\r\n readonly data = input<any[]>([]);\r\n\r\n readonly filterApplied = output<TableFilters>();\r\n readonly filterReset = output<void>();\r\n\r\n protected pendingFilters = signal<TableFilters>({});\r\n protected appliedFilters = signal<TableFilters>({});\r\n\r\n protected booleanOptions = [\r\n { label: 'Yes', value: true },\r\n { label: 'No', value: false },\r\n ];\r\n\r\n private onChange: (value: TableFilters) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n protected filterableColumns = computed(() =>\r\n this.columns()\r\n .filter(\r\n (col) =>\r\n TableValueResolver.getColumnFilterType(col, this.data()[0]) !== null,\r\n )\r\n .map((col) => {\r\n const filterType = TableValueResolver.getColumnFilterType(\r\n col,\r\n this.data()[0],\r\n );\r\n\r\n // Auto-generate select options from data if not provided\r\n if (filterType === 'select' && !col.filterConfig?.options?.length) {\r\n const uniqueOptions = Array.from(\r\n this.data().reduce<Map<string, FilterOption>>((options, row) => {\r\n const value = TableValueResolver.getColumnFilterValue(row, col);\r\n\r\n if (value === null || value === undefined || value === '') {\r\n return options;\r\n }\r\n\r\n const optionKey = `${typeof value}:${String(value)}`;\r\n if (!options.has(optionKey)) {\r\n options.set(optionKey, {\r\n label: String(value),\r\n value,\r\n });\r\n }\r\n\r\n return options;\r\n }, new Map()),\r\n )\r\n .map(([, option]) => option)\r\n .sort((a, b) => a.label.localeCompare(b.label));\r\n\r\n return {\r\n ...col,\r\n filterConfig: {\r\n ...col.filterConfig,\r\n type: filterType,\r\n options: uniqueOptions,\r\n },\r\n };\r\n }\r\n\r\n return {\r\n ...col,\r\n filterConfig: {\r\n ...col.filterConfig,\r\n type: filterType ?? col.filterConfig?.type ?? 'text',\r\n },\r\n };\r\n }),\r\n );\r\n\r\n protected activeFilterCount = computed(() => {\r\n const filters = this.appliedFilters();\r\n return Object.values(filters).filter((v) => this.hasValue(v)).length;\r\n });\r\n\r\n protected getFilterType(col: ColumnDef): string {\r\n return (\r\n TableValueResolver.getColumnFilterType(col, this.data()[0]) ?? 'text'\r\n );\r\n }\r\n\r\n protected getFilterValue(key: string): any {\r\n const value = this.pendingFilters()[key];\r\n return value?.value ?? value ?? null;\r\n }\r\n\r\n protected getDateRangeValue(key: string, part: 'from' | 'to'): Date | null {\r\n const value = this.pendingFilters()[key] as FilterValue | undefined;\r\n if (!value || typeof value !== 'object') return null;\r\n return part === 'from' ? (value.from ?? null) : (value.to ?? null);\r\n }\r\n\r\n protected updateFilter(key: string, value: any): void {\r\n this.pendingFilters.update((filters) => ({\r\n ...filters,\r\n [key]: value,\r\n }));\r\n this.onTouched();\r\n }\r\n\r\n protected updateDateFilter(\r\n key: string,\r\n part: 'from' | 'to',\r\n value: Date | null,\r\n ): void {\r\n this.pendingFilters.update((filters) => {\r\n const current = (filters[key] as FilterValue) ?? {};\r\n return {\r\n ...filters,\r\n [key]: {\r\n ...current,\r\n [part]: value,\r\n },\r\n };\r\n });\r\n this.onTouched();\r\n }\r\n\r\n protected apply(): void {\r\n const filters = { ...this.pendingFilters() };\r\n this.appliedFilters.set(filters);\r\n this.onChange(filters);\r\n this.filterApplied.emit(filters);\r\n }\r\n\r\n protected reset(): void {\r\n this.pendingFilters.set({});\r\n this.appliedFilters.set({});\r\n this.onChange({});\r\n this.filterReset.emit();\r\n }\r\n\r\n private hasValue(value: any): boolean {\r\n if (value === null || value === undefined || value === '') return false;\r\n if (typeof value === 'object') {\r\n return value.from != null || value.to != null || value.value != null;\r\n }\r\n return true;\r\n }\r\n\r\n // ControlValueAccessor\r\n writeValue(value: TableFilters | null): void {\r\n const filters = value ?? {};\r\n this.pendingFilters.set(filters);\r\n this.appliedFilters.set(filters);\r\n }\r\n\r\n registerOnChange(fn: (value: TableFilters) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n}\r\n","<mt-button\r\n (click)=\"popover.toggle($event)\"\r\n [label]=\"'components.table.filter' | transloco\"\r\n [badge]=\"activeFilterCount()\"\r\n severity=\"primary\"\r\n icon=\"general.filter-funnel-01\"\r\n/>\r\n\r\n<p-popover #popover [style]=\"{ width: '320px' }\" appendTo=\"body\">\r\n <div class=\"flex flex-col max-h-[50vh]\">\r\n <h4\r\n class=\"text-lg py-2 font-semibold border-b border-surface-200 dark:border-surface-700 shrink-0\"\r\n >\r\n {{ \"components.table.filterOptions\" | transloco }}\r\n </h4>\r\n\r\n <div\r\n class=\"space-y-3 overflow-y-auto flex-1 py-3\"\r\n (keydown.enter)=\"apply(); popover.hide()\"\r\n >\r\n @for (col of filterableColumns(); track col.key) {\r\n <div class=\"space-y-1\">\r\n <label\r\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\n >\r\n {{ col.filterConfig?.label || col.label }}\r\n </label>\r\n\r\n @switch (getFilterType(col)) {\r\n @case (\"text\") {\r\n <mt-text-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [placeholder]=\"\r\n ('components.table.select' | transloco) +\r\n ' ' +\r\n (col.filterConfig?.label || col.label)\r\n \"\r\n />\r\n }\r\n @case (\"select\") {\r\n <mt-select-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [options]=\"col.filterConfig?.options ?? []\"\r\n [placeholder]=\"\r\n ('components.table.select' | transloco) +\r\n ' ' +\r\n (col.filterConfig?.label || col.label)\r\n \"\r\n [hasPlaceholderPrefix]=\"false\"\r\n showClear\r\n />\r\n }\r\n @case (\"date\") {\r\n <div class=\"space-y-3\">\r\n <div class=\"space-y-1\">\r\n <label\r\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\n >\r\n {{ \"components.table.from\" | transloco }}\r\n </label>\r\n <mt-date-field\r\n [ngModel]=\"getDateRangeValue(col.key, 'from')\"\r\n (ngModelChange)=\"updateDateFilter(col.key, 'from', $event)\"\r\n [placeholder]=\"'components.table.from' | transloco\"\r\n />\r\n </div>\r\n <div class=\"space-y-1\">\r\n <label\r\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\r\n >\r\n {{ \"components.table.to\" | transloco }}\r\n </label>\r\n <mt-date-field\r\n [ngModel]=\"getDateRangeValue(col.key, 'to')\"\r\n (ngModelChange)=\"updateDateFilter(col.key, 'to', $event)\"\r\n [placeholder]=\"'components.table.to' | transloco\"\r\n />\r\n </div>\r\n </div>\r\n }\r\n @case (\"boolean\") {\r\n <mt-select-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [options]=\"booleanOptions\"\r\n [placeholder]=\"'components.table.select' | transloco\"\r\n [hasPlaceholderPrefix]=\"false\"\r\n showClear\r\n />\r\n }\r\n @case (\"user\") {\r\n <mt-user-search-field\r\n [ngModel]=\"getFilterValue(col.key)\"\r\n (ngModelChange)=\"updateFilter(col.key, $event)\"\r\n [placeholder]=\"col.filterConfig?.label || col.label\"\r\n [apiUrl]=\"col.filterConfig?.apiUrl ?? ''\"\r\n [context]=\"col.filterConfig?.context\"\r\n />\r\n }\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex justify-end gap-2 pt-4 border-t border-surface-200 dark:border-surface-700 shrink-0\"\r\n >\r\n <mt-button\r\n variant=\"outlined\"\r\n (click)=\"reset(); popover.hide()\"\r\n [label]=\"'components.table.reset' | transloco\"\r\n />\r\n <mt-button\r\n (click)=\"apply(); popover.hide()\"\r\n [label]=\"'components.table.apply' | transloco\"\r\n />\r\n </div>\r\n </div>\r\n</p-popover>\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ColumnDef,\r\n TableAction,\r\n TableActionShape,\r\n CellChangeEvent,\r\n ColumnTypeForActionCell,\r\n TableFilters,\r\n FilterValue,\r\n} from './table-types';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TableFilter } from './table-filter/table-filter';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TextField } from '@masterteam/components/text-field';\r\nimport { Paginator } from '@masterteam/components/paginator';\r\nimport { CheckboxField } from '@masterteam/components/checkbox-field';\r\nimport { TableModule, TablePageEvent } from 'primeng/table';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { MTDateFormatPipe } from '@masterteam/components';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport {\r\n EntityData,\r\n EntityPreview,\r\n EntityStatusValue,\r\n} from '@masterteam/components/entities';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport { Icon, MTIcon } from '@masterteam/icons';\r\nimport { TableValueResolver } from './table-value.utils';\r\nimport * as XLSX from 'xlsx';\r\n\r\ninterface PersistedTableState {\r\n pageSize?: number;\r\n first?: number;\r\n currentPage?: number;\r\n filterTerm?: string;\r\n filters?: TableFilters;\r\n sortField?: string | null;\r\n sortDirection?: 'asc' | 'desc' | null;\r\n selectedRowKeys?: string[];\r\n}\r\n\r\n@Component({\r\n selector: 'mt-table',\r\n templateUrl: './table.html',\r\n styleUrls: ['./table.css'],\r\n standalone: true,\r\n imports: [\r\n TableModule,\r\n NgTemplateOutlet,\r\n ToggleField,\r\n FormsModule,\r\n Button,\r\n TextField,\r\n Paginator,\r\n CheckboxField,\r\n Tabs,\r\n SkeletonModule,\r\n ProgressBarModule,\r\n TranslocoModule,\r\n TableFilter,\r\n EntityPreview,\r\n PopoverModule,\r\n Icon,\r\n Card,\r\n MTDateFormatPipe,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Table {\r\n private static readonly LOADING_COLUMN_COUNT = 5;\r\n\r\n selectionChange = output<any[]>();\r\n cellChange = output<CellChangeEvent>();\r\n lazyLoad = output<any>();\r\n columnReorder = output<any>();\r\n rowReorder = output<any>();\r\n rowClick = output<any>();\r\n\r\n filters = model<TableFilters>({});\r\n\r\n data = input.required<any[]>();\r\n columns = input.required<ColumnDef[]>();\r\n rowActions = input<TableAction[]>([]);\r\n size = input<'small' | 'large' | undefined>(undefined);\r\n showGridlines = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n stripedRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n selectableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n clickableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n generalSearch = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazyLocalSearch = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n showFilters = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n loading = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n updating = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazy = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazyLocalSort = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazyTotalRecords = input<number>();\r\n reorderableColumns = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n reorderableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n dataKey = input<string>();\r\n storageKey = input<string | null>(null);\r\n storageMode = input<'local' | 'session'>('local');\r\n exportable = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n exportFilename = input<string>('download');\r\n actionShape = input<TableActionShape>('flat');\r\n tableLayout = input<'fixed' | 'auto'>('fixed');\r\n\r\n noCard = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n // Tabs inputs and outputs\r\n tabs = input<any[]>();\r\n tabsOptionLabel = input<string>('label');\r\n tabsOptionValue = input<string>('value');\r\n activeTab = model<any>();\r\n onTabChange = output<any>();\r\n\r\n // Table actions inputs and outputs\r\n actions = input<TableAction[]>([]);\r\n\r\n // Content TemplateRefs\r\n captionStartContent = contentChild<TemplateRef<any>>('captionStart');\r\n captionEndContent = contentChild<TemplateRef<any>>('captionEnd');\r\n emptyContent = contentChild<TemplateRef<any>>('empty');\r\n\r\n paginatorPosition = input<'end' | 'start' | 'center'>('end');\r\n alwaysShowPaginator = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n rowsPerPageOptions = input<number[]>([5, 10, 20, 50, 100]);\r\n pageSize = model<number>(10);\r\n currentPage = model<number>(0);\r\n first = model<number>(0);\r\n filterTerm = model<string>('');\r\n sortField = signal<string | null>(null);\r\n sortDirection = signal<'asc' | 'desc' | null>(null);\r\n confirmationService = inject(ConfirmationService);\r\n\r\n protected selectedRowKeys = signal<Set<string>>(new Set());\r\n protected transientSelectedRows = signal<Set<any>>(new Set());\r\n private readonly hydratedStorageKey = signal<string | null>(null);\r\n private readonly storageHydrated = signal(false);\r\n\r\n protected activeFilterCount = computed(() => {\r\n const filters = this.filters();\r\n return Object.values(filters).filter(\r\n (value) => value !== null && value !== undefined && value !== '',\r\n ).length;\r\n });\r\n\r\n protected filteredData = computed(() => {\r\n const data = this.data();\r\n const applyLocalSearch = !this.lazy() || this.lazyLocalSearch();\r\n const applyLocalSort = !this.lazy() || this.lazyLocalSort();\r\n const searchTerm = applyLocalSearch ? this.filterTerm().toLowerCase() : '';\r\n const filters = this.filters();\r\n const filterKeys = this.lazy() ? [] : Object.keys(filters);\r\n let result = data;\r\n\r\n // Apply search term\r\n if (searchTerm !== '') {\r\n result = result.filter((item) =>\r\n Object.values(item).some(\r\n (value) =>\r\n typeof value === 'string' &&\r\n value.toLowerCase().includes(searchTerm),\r\n ),\r\n );\r\n }\r\n\r\n // Apply column filters\r\n if (filterKeys.length > 0) {\r\n result = result.filter((item) =>\r\n filterKeys.every((key) => this.matchesFilter(item, key, filters[key])),\r\n );\r\n }\r\n\r\n return applyLocalSort ? this.sortData(result) : result;\r\n });\r\n\r\n protected renderedColumns = computed<ColumnDef[]>(() => {\r\n const columns = this.columns();\r\n if (columns.length > 0 || !this.loading()) {\r\n return columns;\r\n }\r\n\r\n return Array.from(\r\n { length: Table.LOADING_COLUMN_COUNT },\r\n (_, index): ColumnDef => ({\r\n key: `__loading-${index}`,\r\n label: '',\r\n type: 'text',\r\n }),\r\n );\r\n });\r\n\r\n protected displayData = computed(() => {\r\n if (this.loading()) {\r\n return Array.from({ length: this.pageSize() }, () => ({}));\r\n }\r\n return this.filteredData();\r\n });\r\n\r\n protected totalRecords = computed(() => {\r\n if (this.lazy() && this.lazyTotalRecords() !== undefined) {\r\n return this.lazyTotalRecords() as number;\r\n }\r\n\r\n return this.filteredData().length;\r\n });\r\n\r\n // TODO: remove after updating the toggle and checkbox logic\r\n protected paginatedData = computed(() => {\r\n const data = this.filteredData();\r\n const first = this.first();\r\n const pageSize = this.pageSize();\r\n if (this.lazy()) {\r\n return data;\r\n }\r\n return data.slice(first, first + pageSize);\r\n });\r\n\r\n protected allSelectedOnPage = computed(() => {\r\n const pageData = this.paginatedData();\r\n if (pageData.length === 0) return false;\r\n return pageData.every((row) => this.isRowSelected(row));\r\n });\r\n\r\n constructor() {\r\n effect(() => {\r\n const storageKey = this.getNormalizedStorageKey();\r\n const storage = this.getStorage();\r\n const previousStorageKey = this.hydratedStorageKey();\r\n\r\n this.storageHydrated.set(false);\r\n\r\n if (!storageKey || !storage) {\r\n this.hydratedStorageKey.set(storageKey);\r\n this.storageHydrated.set(true);\r\n return;\r\n }\r\n\r\n if (previousStorageKey === storageKey) {\r\n this.storageHydrated.set(true);\r\n return;\r\n }\r\n\r\n const persistedState = this.readPersistedState(storage, storageKey);\r\n this.applyPersistedState(persistedState);\r\n this.hydratedStorageKey.set(storageKey);\r\n this.storageHydrated.set(true);\r\n\r\n if (this.lazy() && this.shouldEmitLazyLoadAfterRestore(persistedState)) {\r\n queueMicrotask(() => this.emitLazyLoad({}));\r\n }\r\n });\r\n\r\n effect(() => {\r\n const storageKey = this.getNormalizedStorageKey();\r\n const storage = this.getStorage();\r\n\r\n if (\r\n !storageKey ||\r\n !storage ||\r\n !this.storageHydrated() ||\r\n this.hydratedStorageKey() !== storageKey\r\n ) {\r\n return;\r\n }\r\n\r\n this.writePersistedState(storage, storageKey, this.buildPersistedState());\r\n });\r\n\r\n effect(() => {\r\n if (this.lazy()) {\r\n return;\r\n }\r\n\r\n const totalRecords = this.totalRecords();\r\n const pageSize = this.pageSize();\r\n const currentFirst = this.first();\r\n\r\n if (pageSize <= 0) {\r\n return;\r\n }\r\n\r\n const maxFirst =\r\n totalRecords > 0\r\n ? Math.floor((totalRecords - 1) / pageSize) * pageSize\r\n : 0;\r\n const normalizedFirst = Math.min(currentFirst, maxFirst);\r\n const normalizedPage = Math.floor(normalizedFirst / pageSize);\r\n\r\n if (normalizedFirst !== currentFirst) {\r\n this.first.set(normalizedFirst);\r\n }\r\n\r\n if (this.currentPage() !== normalizedPage) {\r\n this.currentPage.set(normalizedPage);\r\n }\r\n });\r\n }\r\n\r\n onFilterApplied(filters: TableFilters): void {\r\n this.filters.set(filters);\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n\r\n if (this.lazy()) {\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n onFilterReset(): void {\r\n this.filters.set({});\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n\r\n if (this.lazy()) {\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n protected matchesFilter(\r\n item: any,\r\n key: string,\r\n filterValue: FilterValue | any,\r\n ): boolean {\r\n if (\r\n filterValue === null ||\r\n filterValue === undefined ||\r\n filterValue === ''\r\n ) {\r\n return true;\r\n }\r\n\r\n const column = this.columns().find((col) => col.key === key);\r\n const itemValue = this.getProperty(item, key);\r\n const normalizedFilterValue = column\r\n ? TableValueResolver.getColumnFilterValue(item, column)\r\n : TableValueResolver.resolveDisplayValue(itemValue);\r\n const filterType = column\r\n ? TableValueResolver.getColumnFilterType(column, item)\r\n : null;\r\n\r\n // Date range filter\r\n if (typeof filterValue === 'object') {\r\n if (filterValue.from || filterValue.to) {\r\n const itemDateValue =\r\n filterType === 'date'\r\n ? typeof normalizedFilterValue === 'number'\r\n ? normalizedFilterValue\r\n : null\r\n : itemValue instanceof Date\r\n ? itemValue.getTime()\r\n : new Date(String(itemValue)).getTime();\r\n\r\n if (\r\n itemDateValue === null ||\r\n itemDateValue === undefined ||\r\n Number.isNaN(itemDateValue)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n filterValue.from &&\r\n itemDateValue < new Date(filterValue.from).getTime()\r\n ) {\r\n return false;\r\n }\r\n if (\r\n filterValue.to &&\r\n itemDateValue > new Date(filterValue.to).getTime()\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n } else if (filterValue?.userName) {\r\n const normalizedItemUser = itemValue;\r\n if (!normalizedItemUser) return false;\r\n\r\n return (\r\n normalizedItemUser.id === filterValue?.id ||\r\n normalizedItemUser.userName === filterValue?.userName ||\r\n normalizedItemUser.displayName === filterValue?.displayName\r\n );\r\n }\r\n }\r\n\r\n // Boolean filter\r\n if (typeof filterValue === 'boolean') {\r\n return normalizedFilterValue === filterValue;\r\n }\r\n\r\n // Text filter\r\n if (\r\n typeof normalizedFilterValue === 'string' ||\r\n typeof normalizedFilterValue === 'number'\r\n ) {\r\n return String(normalizedFilterValue)\r\n .toLowerCase()\r\n .includes(String(filterValue).toLowerCase());\r\n }\r\n\r\n return normalizedFilterValue === filterValue;\r\n }\r\n\r\n toggleRow(row: any): void {\r\n const rowKey = this.getRowSelectionKey(row);\r\n\r\n if (rowKey !== null) {\r\n const nextSelection = new Set(this.selectedRowKeys());\r\n if (nextSelection.has(rowKey)) {\r\n nextSelection.delete(rowKey);\r\n } else {\r\n nextSelection.add(rowKey);\r\n }\r\n this.selectedRowKeys.set(nextSelection);\r\n } else {\r\n const nextSelection = new Set(this.transientSelectedRows());\r\n if (nextSelection.has(row)) {\r\n nextSelection.delete(row);\r\n } else {\r\n nextSelection.add(row);\r\n }\r\n this.transientSelectedRows.set(nextSelection);\r\n }\r\n\r\n this.emitSelectionChange();\r\n }\r\n\r\n toggleAllRowsOnPage(): void {\r\n const pageData = this.paginatedData();\r\n const allSelected = this.allSelectedOnPage();\r\n const nextSelectedRowKeys = new Set(this.selectedRowKeys());\r\n const nextTransientSelection = new Set(this.transientSelectedRows());\r\n\r\n pageData.forEach((row) => {\r\n const rowKey = this.getRowSelectionKey(row);\r\n if (rowKey !== null) {\r\n if (allSelected) {\r\n nextSelectedRowKeys.delete(rowKey);\r\n } else {\r\n nextSelectedRowKeys.add(rowKey);\r\n }\r\n return;\r\n }\r\n\r\n if (allSelected) {\r\n nextTransientSelection.delete(row);\r\n } else {\r\n nextTransientSelection.add(row);\r\n }\r\n });\r\n\r\n this.selectedRowKeys.set(nextSelectedRowKeys);\r\n this.transientSelectedRows.set(nextTransientSelection);\r\n this.emitSelectionChange();\r\n }\r\n\r\n getProperty(obj: any, key: string): any {\r\n return TableValueResolver.getProperty(obj, key);\r\n }\r\n\r\n protected getDateProperty(\r\n obj: any,\r\n key: string,\r\n ): string | number | Date | null {\r\n return TableValueResolver.resolveDateValue(this.getProperty(obj, key));\r\n }\r\n\r\n getEntityPreviewData(row: any, col: ColumnDef): EntityData | null {\r\n const cellValue = this.getProperty(row, col.key);\r\n\r\n if (col.type === 'user') {\r\n return this.buildUserEntityData(cellValue, col.label);\r\n }\r\n\r\n if (col.type === 'status') {\r\n return this.buildStatusEntityData(cellValue, col);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n tabChanged(tab: any): void {\r\n this.filterTerm.set('');\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n this.onTabChange.emit(tab);\r\n }\r\n\r\n onTablePage(event: TablePageEvent): void {\r\n if (this.lazy()) {\r\n this.handleLazyLoad(event);\r\n return;\r\n }\r\n\r\n this.updatePagingFromEvent(event);\r\n }\r\n\r\n handleLazyLoad(event: any): void {\r\n this.updatePagingFromEvent(event);\r\n this.emitLazyLoad(event);\r\n }\r\n\r\n onPaginatorPage(event: any): void {\r\n if (this.lazy()) {\r\n this.handleLazyLoad(event);\r\n return;\r\n }\r\n\r\n this.updatePagingFromEvent(event);\r\n }\r\n\r\n onSearchChange(searchTerm: string) {\r\n this.filterTerm.set(searchTerm);\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n if (this.lazy() && !this.lazyLocalSearch()) {\r\n this.filters.set({ ...this.filters(), generalSearch: searchTerm });\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n toggleSort(column: ColumnDef): void {\r\n if (!this.isColumnSortable(column)) {\r\n return;\r\n }\r\n\r\n if (this.sortField() !== column.key) {\r\n this.sortField.set(column.key);\r\n this.sortDirection.set('asc');\r\n } else {\r\n this.sortDirection.set(this.sortDirection() === 'asc' ? 'desc' : 'asc');\r\n }\r\n }\r\n\r\n isColumnSortable(column: ColumnDef): boolean {\r\n return column.sortable === true && (!this.lazy() || this.lazyLocalSort());\r\n }\r\n\r\n getSortIcon(column: ColumnDef): MTIcon {\r\n if (this.sortField() !== column.key || !this.sortDirection()) {\r\n return 'arrow.chevron-selector-vertical';\r\n }\r\n\r\n return this.sortDirection() === 'asc'\r\n ? 'arrow.arrow-up'\r\n : 'arrow.arrow-down';\r\n }\r\n\r\n onCellChange(\r\n row: any,\r\n columnKey: string,\r\n newValue: any,\r\n type?: ColumnTypeForActionCell,\r\n ): void {\r\n this.setProperty(row, columnKey, newValue);\r\n\r\n this.cellChange.emit({\r\n row,\r\n column: columnKey,\r\n value: newValue,\r\n type: type!,\r\n });\r\n }\r\n\r\n resolveActionLoading(action: TableAction, row: any): boolean | undefined {\r\n if (typeof action.loading === 'function') {\r\n return action.loading(row);\r\n }\r\n return action.loading;\r\n }\r\n\r\n getVisibleRowActions(row: any): TableAction[] {\r\n return this.rowActions().filter((action) => !action.hidden?.(row));\r\n }\r\n\r\n onColumnReorder(event: any): void {\r\n this.columnReorder.emit(event);\r\n }\r\n\r\n onRowReorder(event: any): void {\r\n this.rowReorder.emit({\r\n ...event,\r\n value: event.value ?? this.data(),\r\n });\r\n }\r\n\r\n onRowClick(event: MouseEvent, row: any): void {\r\n if (!this.clickableRows() || this.loading()) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement | null;\r\n if (\r\n target?.closest(\r\n 'button, a, input, textarea, select, label, [role=\"button\"], [data-row-click-ignore=\"true\"]',\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n this.rowClick.emit(row);\r\n }\r\n\r\n protected updatePagingFromEvent(event: any): void {\r\n const first = event?.first ?? this.first();\r\n const rows = event?.rows ?? this.pageSize();\r\n\r\n this.first.set(first);\r\n this.pageSize.set(rows);\r\n\r\n const page =\r\n typeof event?.page === 'number'\r\n ? event.page\r\n : Math.floor((first ?? 0) / (rows || 1));\r\n\r\n this.currentPage.set(page);\r\n }\r\n\r\n protected emitLazyLoad(event: any): void {\r\n this.lazyLoad.emit({\r\n ...event,\r\n pageSize: this.pageSize(),\r\n currentPage: this.currentPage() + 1,\r\n first: this.first(),\r\n filters: this.filters(),\r\n });\r\n }\r\n\r\n exportExcel(): void {\r\n if (this.loading()) {\r\n return;\r\n }\r\n\r\n const sourceColumns = this.columns().filter(\r\n (column) => column.type !== 'custom',\r\n );\r\n const workbook = XLSX.utils.book_new();\r\n const worksheet = XLSX.utils.json_to_sheet(\r\n this.buildExcelRows(this.filteredData(), sourceColumns),\r\n );\r\n\r\n XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');\r\n XLSX.writeFileXLSX(\r\n workbook,\r\n `${this.normalizeExportFilename(this.exportFilename())}.xlsx`,\r\n );\r\n }\r\n\r\n rowAction(event: Event, action: TableAction, row: any): void {\r\n if (!action.confirmation) {\r\n action.action(row);\r\n } else if (action.confirmation?.confirmationType === 'delete') {\r\n this.confirmationService.confirmDelete({\r\n event: event,\r\n ...action.confirmation,\r\n accept: () => {\r\n action.action(row);\r\n },\r\n reject: () => {},\r\n });\r\n } else {\r\n this.confirmationService.confirm({\r\n event: event,\r\n ...action.confirmation,\r\n accept: () => {\r\n action.action(row);\r\n },\r\n reject: () => {},\r\n });\r\n }\r\n }\r\n\r\n private buildUserEntityData(\r\n value: unknown,\r\n columnLabel: string,\r\n ): EntityData | null {\r\n const userValue = value;\r\n if (!userValue) return null;\r\n\r\n return {\r\n name: columnLabel,\r\n viewType: 'User',\r\n value: userValue,\r\n configuration: {\r\n showDisplayName: true,\r\n showPhoneNumber: false,\r\n showEmail: false,\r\n },\r\n };\r\n }\r\n\r\n private buildStatusEntityData(value: unknown, column: ColumnDef): EntityData {\r\n const statusValue = this.resolveStatusValue(value, column);\r\n\r\n return {\r\n name: column.label,\r\n viewType: 'Status',\r\n value: statusValue ?? '',\r\n configuration: {\r\n hideName: true,\r\n },\r\n };\r\n }\r\n\r\n private resolveStatusValue(\r\n value: unknown,\r\n column?: ColumnDef,\r\n ): EntityStatusValue | null {\r\n const unwrappedValue = this.unwrapStatusValue(value, column);\r\n if (\r\n unwrappedValue === null ||\r\n unwrappedValue === undefined ||\r\n unwrappedValue === ''\r\n ) {\r\n return null;\r\n }\r\n\r\n if (typeof unwrappedValue === 'object') {\r\n const objectValue = unwrappedValue as Record<string, unknown>;\r\n const statusKey =\r\n this.readStringProperty(objectValue, 'key') ??\r\n this.readStringProperty(objectValue, 'code') ??\r\n this.readStringProperty(objectValue, 'value') ??\r\n this.readStringProperty(objectValue, 'id') ??\r\n this.readStringProperty(objectValue, 'display') ??\r\n this.readStringProperty(objectValue, 'displayValue') ??\r\n this.readStringProperty(objectValue, 'displayName') ??\r\n this.readStringProperty(objectValue, 'label') ??\r\n this.readStringProperty(objectValue, 'name');\r\n const mappedStatus = this.resolveStatusMapValue(column, statusKey);\r\n const display =\r\n this.readStringProperty(objectValue, 'display') ??\r\n this.readStringProperty(objectValue, 'displayValue') ??\r\n this.readStringProperty(objectValue, 'displayName') ??\r\n this.readStringProperty(objectValue, 'label') ??\r\n this.readStringProperty(objectValue, 'name') ??\r\n mappedStatus?.display ??\r\n statusKey;\r\n\r\n if (!display) {\r\n return null;\r\n }\r\n\r\n return {\r\n key: statusKey ?? display,\r\n display,\r\n color:\r\n this.readStringProperty(objectValue, 'color') ??\r\n mappedStatus?.color ??\r\n this.resolveDefaultStatusColor(statusKey ?? display),\r\n description:\r\n this.readStringProperty(objectValue, 'description') ??\r\n mappedStatus?.description,\r\n };\r\n }\r\n\r\n const normalizedValue =\r\n TableValueResolver.resolveDisplayValue(unwrappedValue);\r\n if (normalizedValue === null || normalizedValue === undefined) {\r\n return null;\r\n }\r\n\r\n const statusKey = String(normalizedValue);\r\n const mappedStatus = this.resolveStatusMapValue(column, statusKey);\r\n\r\n return {\r\n key: statusKey,\r\n display: mappedStatus?.display ?? statusKey,\r\n color: mappedStatus?.color ?? this.resolveDefaultStatusColor(statusKey),\r\n description: mappedStatus?.description,\r\n };\r\n }\r\n\r\n private unwrapStatusValue(value: unknown, column?: ColumnDef): unknown {\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n\r\n const entityValue = value as Partial<EntityData>;\r\n if (!('value' in (value as Record<string, unknown>))) {\r\n return value;\r\n }\r\n\r\n if (\r\n entityValue.viewType === 'Status' ||\r\n this.isEntityStatusCompatibilityColumn(column)\r\n ) {\r\n return entityValue.value;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n private isEntityStatusCompatibilityColumn(\r\n column: ColumnDef | undefined,\r\n ): boolean {\r\n return column?.type === 'entity' && this.isStatusColumnKey(column.key);\r\n }\r\n\r\n private isStatusColumnKey(key: string | null | undefined): boolean {\r\n return typeof key === 'string' && key.trim().toLowerCase() === 'status';\r\n }\r\n\r\n private resolveStatusMapValue(\r\n column: ColumnDef | undefined,\r\n key: string | null | undefined,\r\n ) {\r\n if (!column?.statusMap || !key) {\r\n return undefined;\r\n }\r\n\r\n const directMatch = column.statusMap[key];\r\n if (directMatch) {\r\n return directMatch;\r\n }\r\n\r\n const normalizedKey = this.normalizeStatusToken(key);\r\n return Object.entries(column.statusMap).find(\r\n ([entryKey]) => this.normalizeStatusToken(entryKey) === normalizedKey,\r\n )?.[1];\r\n }\r\n\r\n private resolveDefaultStatusColor(value: string): string {\r\n const normalizedValue = this.normalizeStatusToken(value);\r\n\r\n if (\r\n [\r\n 'active',\r\n 'approved',\r\n 'completed',\r\n 'create',\r\n 'created',\r\n 'done',\r\n 'enabled',\r\n 'healthy',\r\n 'low',\r\n 'open',\r\n 'published',\r\n 'runtime',\r\n 'success',\r\n ].includes(normalizedValue)\r\n ) {\r\n return '#047857';\r\n }\r\n\r\n if (\r\n [\r\n 'change',\r\n 'current',\r\n 'draft',\r\n 'inprogress',\r\n 'info',\r\n 'medium',\r\n 'process',\r\n 'progress',\r\n 'running',\r\n 'update',\r\n 'updated',\r\n ].includes(normalizedValue)\r\n ) {\r\n return '#0369a1';\r\n }\r\n\r\n if (\r\n [\r\n 'bulkupdate',\r\n 'comment',\r\n 'configure',\r\n 'configured',\r\n 'controlpanel',\r\n 'discussion',\r\n ].includes(normalizedValue)\r\n ) {\r\n return '#4338ca';\r\n }\r\n\r\n if (\r\n [\r\n 'awaiting',\r\n 'escalation',\r\n 'high',\r\n 'hold',\r\n 'move',\r\n 'moved',\r\n 'pending',\r\n 'phasegate',\r\n 'queued',\r\n 'warning',\r\n ].includes(normalizedValue)\r\n ) {\r\n return '#b45309';\r\n }\r\n\r\n if (\r\n [\r\n 'blocked',\r\n 'cancelled',\r\n 'canceled',\r\n 'close',\r\n 'closed',\r\n 'critical',\r\n 'delete',\r\n 'deleted',\r\n 'error',\r\n 'failed',\r\n 'governance',\r\n 'inactive',\r\n 'rejected',\r\n ].includes(normalizedValue)\r\n ) {\r\n return '#be123c';\r\n }\r\n\r\n return '#475569';\r\n }\r\n\r\n private normalizeStatusToken(value: string): string {\r\n return value\r\n .trim()\r\n .toLocaleLowerCase()\r\n .replace(/[\\s_-]+/g, '');\r\n }\r\n\r\n private readStringProperty(\r\n value: Record<string, unknown>,\r\n key: string,\r\n ): string | null {\r\n const propertyValue = value[key];\r\n return typeof propertyValue === 'string' && propertyValue.trim().length > 0\r\n ? propertyValue.trim()\r\n : null;\r\n }\r\n\r\n /**\r\n * Gets the entity data for an 'entity' type column.\r\n * The row data is expected to already be in EntityData format.\r\n * Automatically hides entity name and configures User entities\r\n * to show only avatar + displayName.\r\n */\r\n getEntityColumnData(row: any, col: ColumnDef): EntityData | null {\r\n const cellValue = this.getProperty(row, col.key);\r\n if (!cellValue || typeof cellValue !== 'object') return null;\r\n\r\n const entityData = cellValue as EntityData;\r\n\r\n if (this.isEntityStatusCompatibilityColumn(col)) {\r\n return this.buildStatusEntityData(cellValue, col);\r\n }\r\n\r\n // For User entities: show avatar + displayName only\r\n if (entityData.viewType === 'User') {\r\n return {\r\n ...entityData,\r\n configuration: {\r\n ...entityData.configuration,\r\n hideName: true,\r\n showDisplayName: true,\r\n showPhoneNumber: false,\r\n showEmail: false,\r\n },\r\n };\r\n }\r\n\r\n // For all other entities: hide the name label\r\n return {\r\n ...entityData,\r\n configuration: {\r\n ...entityData.configuration,\r\n hideName: true,\r\n },\r\n };\r\n }\r\n\r\n protected getStatusEntityAccentColor(\r\n row: Record<string, unknown>,\r\n ): string | null {\r\n const statusColumn = this.columns().find((column) =>\r\n this.isStatusColumnKey(column.key),\r\n );\r\n if (!statusColumn) {\r\n return null;\r\n }\r\n\r\n return this.resolveStatusEntityAccentColor(\r\n this.getProperty(row, statusColumn.key),\r\n statusColumn,\r\n );\r\n }\r\n\r\n private resolveStatusEntityAccentColor(\r\n value: unknown,\r\n column?: ColumnDef,\r\n ): string | null {\r\n return this.resolveStatusValue(value, column)?.color ?? null;\r\n }\r\n\r\n protected getBooleanProperty(obj: any, key: string): boolean {\r\n const value = this.getProperty(obj, key);\r\n\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n return TableValueResolver.resolveBooleanValue(value) ?? false;\r\n }\r\n\r\n private setProperty(obj: any, key: string, value: any): void {\r\n const path = key.split('.');\r\n const lastKey = path.pop();\r\n\r\n if (!lastKey) {\r\n return;\r\n }\r\n\r\n const target = path.reduce((current, segment) => {\r\n if (!current?.[segment] || typeof current[segment] !== 'object') {\r\n current[segment] = {};\r\n }\r\n\r\n return current[segment];\r\n }, obj);\r\n\r\n if (target && typeof target === 'object') {\r\n target[lastKey] = value;\r\n }\r\n }\r\n\r\n private sortData(data: any[]): any[] {\r\n const field = this.sortField();\r\n const direction = this.sortDirection();\r\n\r\n if (!field || !direction) {\r\n return data;\r\n }\r\n\r\n const column = this.columns().find((item) => item.key === field);\r\n if (!column || !this.isColumnSortable(column)) {\r\n return data;\r\n }\r\n\r\n return [...data].sort((leftRow, rightRow) => {\r\n const leftValue = this.getSortValue(leftRow, column);\r\n const rightValue = this.getSortValue(rightRow, column);\r\n\r\n if (leftValue === rightValue) return 0;\r\n if (leftValue === null || leftValue === undefined || leftValue === '') {\r\n return 1;\r\n }\r\n if (\r\n rightValue === null ||\r\n rightValue === undefined ||\r\n rightValue === ''\r\n ) {\r\n return -1;\r\n }\r\n\r\n const comparison = leftValue < rightValue ? -1 : 1;\r\n return direction === 'asc' ? comparison : -comparison;\r\n });\r\n }\r\n\r\n private getSortValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | null {\r\n const cellValue = this.getProperty(row, column.key);\r\n const resolvedValue = this.getColumnResolvedValue(row, column);\r\n\r\n if (\r\n resolvedValue === null ||\r\n resolvedValue === undefined ||\r\n resolvedValue === ''\r\n ) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'date' || column.type === 'dateTime') {\r\n return TableValueResolver.normalizeDateSortValue(cellValue);\r\n }\r\n\r\n if (typeof resolvedValue === 'number') {\r\n return resolvedValue;\r\n }\r\n\r\n if (typeof resolvedValue === 'boolean') {\r\n return resolvedValue ? 1 : 0;\r\n }\r\n\r\n if (cellValue instanceof Date) {\r\n return cellValue.getTime();\r\n }\r\n\r\n return TableValueResolver.normalizeTextSortValue(resolvedValue);\r\n }\r\n\r\n private getColumnResolvedValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = this.getProperty(row, column.key);\r\n\r\n if (cellValue === null || cellValue === undefined) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'entity') {\r\n return TableValueResolver.getEntityValueByType(cellValue, 'sort');\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return this.getBooleanProperty(row, column.key);\r\n }\r\n\r\n if (column.type === 'date' || column.type === 'dateTime') {\r\n const dateValue = TableValueResolver.resolveDateValue(cellValue);\r\n return dateValue instanceof Date ? dateValue.toISOString() : dateValue;\r\n }\r\n\r\n if (typeof cellValue === 'number' || typeof cellValue === 'boolean') {\r\n return cellValue;\r\n }\r\n\r\n if (cellValue instanceof Date) {\r\n return cellValue.toISOString();\r\n }\r\n\r\n return TableValueResolver.resolveDisplayValue(cellValue);\r\n }\r\n\r\n private buildExportRows(\r\n rows: Record<string, unknown>[],\r\n columns: ColumnDef[],\r\n ): Record<string, string | number | boolean | null>[] {\r\n return rows.map((row) => {\r\n const exportRow: Record<string, string | number | boolean | null> = {};\r\n\r\n columns.forEach((column) => {\r\n exportRow[column.key] =\r\n column.type === 'entity'\r\n ? TableValueResolver.getEntityValueByType(\r\n this.getProperty(row, column.key),\r\n 'export',\r\n )\r\n : this.getColumnResolvedValue(row, column);\r\n });\r\n\r\n return exportRow;\r\n });\r\n }\r\n\r\n private buildExcelRows(\r\n rows: Record<string, unknown>[],\r\n columns: ColumnDef[],\r\n ): Record<string, string | number | boolean | null>[] {\r\n const exportRows = this.buildExportRows(rows, columns);\r\n\r\n return exportRows.map((row) => {\r\n const excelRow: Record<string, string | number | boolean | null> = {};\r\n\r\n columns.forEach((column) => {\r\n excelRow[column.label] = row[column.key] ?? null;\r\n });\r\n\r\n return excelRow;\r\n });\r\n }\r\n\r\n protected isRowSelected(row: Record<string, unknown>): boolean {\r\n const rowKey = this.getRowSelectionKey(row);\r\n\r\n if (rowKey !== null) {\r\n return this.selectedRowKeys().has(rowKey);\r\n }\r\n\r\n return this.transientSelectedRows().has(row);\r\n }\r\n\r\n protected getColumnMinWidth(column: ColumnDef): string | null {\r\n const width = column.width?.trim();\r\n if (!width || width.endsWith('%')) {\r\n return null;\r\n }\r\n\r\n return width;\r\n }\r\n\r\n private emitSelectionChange(): void {\r\n this.selectionChange.emit(this.getSelectedRows());\r\n }\r\n\r\n private getSelectedRows(): any[] {\r\n const dataKey = this.dataKey();\r\n if (!dataKey) {\r\n return Array.from(this.transientSelectedRows());\r\n }\r\n\r\n const selectedRowKeys = this.selectedRowKeys();\r\n return this.data().filter((row) => {\r\n const rowKey = this.getRowSelectionKey(row);\r\n return rowKey !== null && selectedRowKeys.has(rowKey);\r\n });\r\n }\r\n\r\n private getRowSelectionKey(row: Record<string, unknown>): string | null {\r\n const dataKey = this.dataKey();\r\n if (!dataKey) {\r\n return null;\r\n }\r\n\r\n const value = this.getProperty(row, dataKey);\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n private getNormalizedStorageKey(): string | null {\r\n const storageKey = this.storageKey()?.trim();\r\n return storageKey ? storageKey : null;\r\n }\r\n\r\n private normalizeExportFilename(value: string): string {\r\n const sanitized = value.trim().replace(/[\\\\/:*?\"<>|]+/g, '-');\r\n return sanitized.length ? sanitized : 'download';\r\n }\r\n\r\n private getStorage(): Storage | null {\r\n if (typeof window === 'undefined') {\r\n return null;\r\n }\r\n\r\n return this.storageMode() === 'session'\r\n ? window.sessionStorage\r\n : window.localStorage;\r\n }\r\n\r\n private buildPersistedState(): PersistedTableState {\r\n return {\r\n pageSize: this.pageSize(),\r\n first: this.first(),\r\n currentPage: this.currentPage(),\r\n filterTerm: this.filterTerm(),\r\n filters: this.filters(),\r\n sortField: this.sortField(),\r\n sortDirection: this.sortDirection(),\r\n selectedRowKeys: this.dataKey() ? Array.from(this.selectedRowKeys()) : [],\r\n };\r\n }\r\n\r\n private applyPersistedState(\r\n persistedState: PersistedTableState | null,\r\n ): void {\r\n this.transientSelectedRows.set(new Set());\r\n\r\n if (!persistedState) {\r\n this.selectedRowKeys.set(new Set());\r\n return;\r\n }\r\n\r\n const pageSize = this.normalizePersistedPageSize(\r\n this.toPositiveInteger(persistedState.pageSize),\r\n );\r\n if (pageSize !== null) {\r\n this.pageSize.set(pageSize);\r\n }\r\n\r\n const first = this.toNonNegativeInteger(persistedState.first);\r\n if (first !== null) {\r\n this.first.set(first);\r\n }\r\n\r\n const currentPage = this.toNonNegativeInteger(persistedState.currentPage);\r\n if (currentPage !== null) {\r\n this.currentPage.set(currentPage);\r\n } else if (first !== null && pageSize !== null) {\r\n this.currentPage.set(Math.floor(first / pageSize));\r\n }\r\n\r\n if (typeof persistedState.filterTerm === 'string') {\r\n this.filterTerm.set(persistedState.filterTerm);\r\n }\r\n\r\n if (persistedState.filters && typeof persistedState.filters === 'object') {\r\n this.filters.set(persistedState.filters);\r\n }\r\n\r\n this.sortField.set(\r\n typeof persistedState.sortField === 'string'\r\n ? persistedState.sortField\r\n : null,\r\n );\r\n\r\n this.sortDirection.set(\r\n persistedState.sortDirection === 'asc' ||\r\n persistedState.sortDirection === 'desc'\r\n ? persistedState.sortDirection\r\n : null,\r\n );\r\n\r\n this.selectedRowKeys.set(\r\n new Set(\r\n Array.isArray(persistedState.selectedRowKeys)\r\n ? persistedState.selectedRowKeys\r\n : [],\r\n ),\r\n );\r\n }\r\n\r\n private shouldEmitLazyLoadAfterRestore(\r\n persistedState: PersistedTableState | null,\r\n ): boolean {\r\n if (!persistedState) {\r\n return false;\r\n }\r\n\r\n return (\r\n persistedState.pageSize !== undefined ||\r\n persistedState.first !== undefined ||\r\n persistedState.currentPage !== undefined ||\r\n persistedState.filterTerm !== undefined ||\r\n persistedState.filters !== undefined\r\n );\r\n }\r\n\r\n private readPersistedState(\r\n storage: Storage,\r\n storageKey: string,\r\n ): PersistedTableState | null {\r\n try {\r\n const raw = storage.getItem(storageKey);\r\n if (!raw) {\r\n return null;\r\n }\r\n\r\n const parsed = JSON.parse(raw) as PersistedTableState;\r\n return parsed && typeof parsed === 'object' ? parsed : null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private writePersistedState(\r\n storage: Storage,\r\n storageKey: string,\r\n state: PersistedTableState,\r\n ): void {\r\n try {\r\n storage.setItem(storageKey, JSON.stringify(state));\r\n } catch {\r\n // Ignore storage write failures.\r\n }\r\n }\r\n\r\n private toPositiveInteger(value: unknown): number | null {\r\n const normalized = Number(value);\r\n if (!Number.isFinite(normalized) || normalized <= 0) {\r\n return null;\r\n }\r\n\r\n return Math.trunc(normalized);\r\n }\r\n\r\n private normalizePersistedPageSize(value: number | null): number | null {\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n const allowedOptions = this.rowsPerPageOptions().filter(\r\n (option) => Number.isFinite(option) && option > 0,\r\n );\r\n\r\n if (!allowedOptions.length) {\r\n return value;\r\n }\r\n\r\n return allowedOptions.includes(value) ? value : allowedOptions[0]!;\r\n }\r\n\r\n private toNonNegativeInteger(value: unknown): number | null {\r\n const normalized = Number(value);\r\n if (!Number.isFinite(normalized) || normalized < 0) {\r\n return null;\r\n }\r\n\r\n return Math.trunc(normalized);\r\n }\r\n}\r\n","@if (!noCard()) {\r\n <mt-card>\r\n <ng-container *ngTemplateOutlet=\"tableContent\" />\r\n </mt-card>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"tableContent\" />\r\n}\r\n\r\n<ng-template #tableContent>\r\n <div class=\"space-y-4 rounded-lg\">\r\n <div>\r\n @if (\r\n captionStartContent() ||\r\n captionEndContent() ||\r\n generalSearch() ||\r\n showFilters() ||\r\n tabs()?.length > 0 ||\r\n actions()?.length > 0\r\n ) {\r\n <div class=\"p-datatable-header rounded-t-2xl\">\r\n <div\r\n class=\"flex relative\"\r\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\r\n >\r\n <div class=\"flex items-center gap-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"captionStartContent()\"\r\n ></ng-container>\r\n @if (tabs()) {\r\n <mt-tabs\r\n [(active)]=\"activeTab\"\r\n [options]=\"tabs()\"\r\n [optionLabel]=\"tabsOptionLabel()\"\r\n [optionValue]=\"tabsOptionValue()\"\r\n (onChange)=\"tabChanged($event)\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n }\r\n @if (generalSearch()) {\r\n <mt-text-field\r\n [(ngModel)]=\"filterTerm\"\r\n (ngModelChange)=\"onSearchChange($event)\"\r\n icon=\"general.search-lg\"\r\n [placeholder]=\"'components.table.search' | transloco\"\r\n ></mt-text-field>\r\n }\r\n </div>\r\n <div class=\"flex items-center gap-2\">\r\n @if (showFilters()) {\r\n <mt-table-filter\r\n [columns]=\"columns()\"\r\n [data]=\"data()\"\r\n [ngModel]=\"filters()\"\r\n (filterApplied)=\"onFilterApplied($event)\"\r\n (filterReset)=\"onFilterReset()\"\r\n />\r\n }\r\n @if (exportable()) {\r\n <mt-button\r\n icon=\"file.file-x-03\"\r\n styleClass=\"text-xl! py-1.5!\"\r\n severity=\"success\"\r\n variant=\"outlined\"\r\n [tooltip]=\"'components.table.export' | transloco\"\r\n (click)=\"exportExcel()\"\r\n />\r\n }\r\n @if (actions()?.length > 0) {\r\n <div class=\"flex items-center space-x-2\">\r\n @for (action of actions(); track action.label) {\r\n <mt-button\r\n [icon]=\"action.icon\"\r\n [severity]=\"action.color\"\r\n [variant]=\"action.variant\"\r\n [size]=\"action.size\"\r\n (click)=\"action.action(row)\"\r\n [label]=\"action.label\"\r\n [tooltip]=\"action.tooltip\"\r\n ></mt-button>\r\n }\r\n </div>\r\n }\r\n <ng-container\r\n *ngTemplateOutlet=\"captionEndContent()\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n @if (!loading() && emptyContent() && data().length === 0) {\r\n <div\r\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"overflow-x-auto rounded-[10px] border border-surface-200 bg-white\"\r\n >\r\n <p-table\r\n [value]=\"displayData()\"\r\n [columns]=\"renderedColumns()\"\r\n [size]=\"size()\"\r\n [showGridlines]=\"showGridlines()\"\r\n [stripedRows]=\"stripedRows()\"\r\n [lazy]=\"lazy()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [reorderableColumns]=\"reorderableColumns()\"\r\n [reorderableRows]=\"reorderableRows()\"\r\n [dataKey]=\"dataKey()\"\r\n [first]=\"first()\"\r\n [rows]=\"pageSize()\"\r\n [exportFilename]=\"exportFilename()\"\r\n (onPage)=\"onTablePage($event)\"\r\n (onLazyLoad)=\"handleLazyLoad($event)\"\r\n (onColReorder)=\"onColumnReorder($event)\"\r\n (onRowReorder)=\"onRowReorder($event)\"\r\n paginator\r\n paginatorStyleClass=\"hidden!\"\r\n class=\"mt-table min-w-full align-middle text-sm\"\r\n [class.table-auto]=\"tableLayout() === 'auto'\"\r\n [class.table-fixed]=\"tableLayout() === 'fixed'\"\r\n >\r\n <ng-template\r\n #header\r\n let-columns\r\n class=\"bg-surface-50 dark:bg-surface-950 border-b border-surface-300 dark:border-surface-500\"\r\n >\r\n <tr>\r\n @if (reorderableRows()) {\r\n <th class=\"w-10\"></th>\r\n }\r\n @if (selectableRows()) {\r\n <th class=\"w-12 text-start\">\r\n <mt-checkbox-field\r\n [ngModel]=\"allSelectedOnPage()\"\r\n (ngModelChange)=\"toggleAllRowsOnPage()\"\r\n ></mt-checkbox-field>\r\n </th>\r\n }\r\n\r\n @for (col of columns; track col.key || col.label || $index) {\r\n @if (reorderableColumns()) {\r\n <th\r\n pReorderableColumn\r\n class=\"text-start text-sm font-normal text-[#323232]\"\r\n >\r\n <div class=\"flex items-center gap-2\">\r\n {{ col.label }}\r\n <!-- <mt-icon-->\r\n <!-- icon=\"general.menu-05\"-->\r\n <!-- class=\"text-xs text-gray-400\"-->\r\n <!-- ></mt-icon>-->\r\n <mt-button\r\n styleClass=\"cursor-move!\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n icon=\"general.menu-05\"\r\n ></mt-button>\r\n </div>\r\n </th>\r\n } @else {\r\n <th\r\n class=\"text-start text-sm font-normal text-[#323232]\"\r\n [style.width]=\"col.width ?? null\"\r\n [style.minWidth]=\"getColumnMinWidth(col)\"\r\n >\r\n @if (isColumnSortable(col)) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex items-center gap-2 cursor-pointer\"\r\n (click)=\"toggleSort(col)\"\r\n >\r\n <span>{{ col.label }}</span>\r\n <mt-icon\r\n [icon]=\"getSortIcon(col)\"\r\n class=\"text-xs text-gray-400\"\r\n />\r\n </button>\r\n } @else {\r\n {{ col.label }}\r\n }\r\n </th>\r\n }\r\n }\r\n\r\n @if (rowActions().length > 0) {\r\n <th class=\"text-end! text-sm font-normal text-[#323232]\">\r\n {{ \"components.table.actions\" | transloco }}\r\n </th>\r\n }\r\n </tr>\r\n @if (updating()) {\r\n <tr>\r\n <th\r\n [attr.colspan]=\"\r\n columns.length +\r\n (reorderableRows() ? 1 : 0) +\r\n (selectableRows() ? 1 : 0) +\r\n (rowActions().length > 0 ? 1 : 0)\r\n \"\r\n class=\"!p-0\"\r\n >\r\n <p-progressBar\r\n mode=\"indeterminate\"\r\n [style]=\"{ height: '4px' }\"\r\n />\r\n </th>\r\n </tr>\r\n }\r\n </ng-template>\r\n <ng-template\r\n #body\r\n let-row\r\n let-columns=\"columns\"\r\n let-index=\"rowIndex\"\r\n class=\"divide-y divide-gray-200\"\r\n >\r\n @if (loading()) {\r\n <tr>\r\n @if (reorderableRows()) {\r\n <td><p-skeleton /></td>\r\n }\r\n @if (selectableRows()) {\r\n <td><p-skeleton /></td>\r\n }\r\n @for (col of columns; track col.key || col.label || $index) {\r\n <td><p-skeleton /></td>\r\n }\r\n @if (rowActions().length > 0) {\r\n <td><p-skeleton /></td>\r\n }\r\n </tr>\r\n } @else {\r\n <tr\r\n class=\"border-surface-300 transition-colors duration-150 dark:border-surface-500\"\r\n [class.mt-table-clickable-row]=\"clickableRows()\"\r\n [class.mt-table-status-entity-row]=\"\r\n getStatusEntityAccentColor(row)\r\n \"\r\n [style.--mt-table-status-accent]=\"\r\n getStatusEntityAccentColor(row)\r\n \"\r\n [class.cursor-pointer]=\"clickableRows()\"\r\n [pReorderableRow]=\"index\"\r\n (click)=\"onRowClick($event, row)\"\r\n >\r\n @if (reorderableRows()) {\r\n <td class=\"w-10 text-center\">\r\n <mt-button\r\n styleClass=\"cursor-move!\"\r\n pReorderableRowHandle\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n icon=\"general.menu-05\"\r\n ></mt-button>\r\n <!-- <mt-icon-->\r\n <!-- icon=\"general.menu-05\"-->\r\n <!-- class=\"cursor-move text-gray-500\"-->\r\n <!-- pReorderableRowHandle-->\r\n <!-- ></mt-icon>-->\r\n </td>\r\n }\r\n @if (selectableRows()) {\r\n <td class=\"w-12\">\r\n <mt-checkbox-field\r\n [ngModel]=\"isRowSelected(row)\"\r\n (ngModelChange)=\"toggleRow(row)\"\r\n ></mt-checkbox-field>\r\n </td>\r\n }\r\n\r\n @for (col of columns; track col.key || col.label || $index) {\r\n <td\r\n class=\"text-sm font-normal text-[#4b4b4b]\"\r\n [style.width]=\"col.width ?? null\"\r\n [style.minWidth]=\"getColumnMinWidth(col)\"\r\n >\r\n @switch (col.type) {\r\n @case (\"boolean\") {\r\n <mt-toggle-field\r\n disabled=\"col.readonly\"\r\n [ngModel]=\"getBooleanProperty(row, col.key)\"\r\n (ngModelChange)=\"\r\n onCellChange(row, col.key, $event, 'boolean')\r\n \"\r\n ></mt-toggle-field>\r\n }\r\n @case (\"date\") {\r\n {{\r\n getDateProperty(row, col.key) | mtDateFormat: \"date\"\r\n }}\r\n }\r\n @case (\"dateTime\") {\r\n {{\r\n getDateProperty(row, col.key)\r\n | mtDateFormat: \"dateTime\"\r\n }}\r\n }\r\n @case (\"user\") {\r\n @if (getEntityPreviewData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n @case (\"status\") {\r\n @if (getEntityPreviewData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n @case (\"entity\") {\r\n @if (getEntityColumnData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n @case (\"custom\") {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n col.customCellTpl;\r\n context: { $implicit: row }\r\n \"\r\n >\r\n </ng-container>\r\n }\r\n @default {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n </td>\r\n }\r\n\r\n @if (rowActions().length > 0) {\r\n <td class=\"text-right\">\r\n @if (actionShape() === \"popover\") {\r\n <div class=\"flex items-center justify-end\">\r\n <mt-button\r\n icon=\"general.dots-vertical\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n size=\"large\"\r\n (click)=\"rowPopover.toggle($event)\"\r\n data-row-click-ignore=\"true\"\r\n ></mt-button>\r\n <p-popover #rowPopover appendTo=\"body\">\r\n <div class=\"flex flex-col min-w-40\">\r\n @for (\r\n action of getVisibleRowActions(row);\r\n track $index\r\n ) {\r\n <button\r\n class=\"flex items-center gap-2 px-2 cursor-pointer py-2 text-sm rounded transition-colors\"\r\n [class]=\"\r\n action.color === 'danger'\r\n ? 'text-red-600 hover:bg-red-50 dark:hover:bg-red-950'\r\n : 'text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-surface-700'\r\n \"\r\n (click)=\"\r\n rowAction($event, action, row);\r\n rowPopover.hide()\r\n \"\r\n >\r\n @if (action.icon) {\r\n <mt-icon\r\n [icon]=\"action.icon\"\r\n class=\"text-base\"\r\n />\r\n }\r\n <span>{{\r\n action.label || action.tooltip\r\n }}</span>\r\n </button>\r\n }\r\n </div>\r\n </p-popover>\r\n </div>\r\n } @else {\r\n <div class=\"flex items-center justify-end space-x-2\">\r\n @for (action of rowActions(); track $index) {\r\n @let hidden = action.hidden?.(row);\r\n @if (!hidden) {\r\n <mt-button\r\n [icon]=\"action.icon\"\r\n [severity]=\"action.color\"\r\n [variant]=\"action.variant\"\r\n [size]=\"action.size || 'small'\"\r\n (click)=\"rowAction($event, action, row)\"\r\n [tooltip]=\"action.tooltip\"\r\n [label]=\"action.label\"\r\n [loading]=\"resolveActionLoading(action, row)\"\r\n ></mt-button>\r\n }\r\n }\r\n </div>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </ng-template>\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td\r\n [attr.colspan]=\"\r\n renderedColumns().length +\r\n (reorderableRows() ? 1 : 0) +\r\n (selectableRows() ? 1 : 0) +\r\n (rowActions().length > 0 ? 1 : 0)\r\n \"\r\n class=\"text-center\"\r\n >\r\n <div\r\n class=\"flex min-h-44 flex-col items-center justify-center gap-3 py-8 text-center\"\r\n >\r\n <svg\r\n width=\"152\"\r\n height=\"120\"\r\n viewBox=\"0 0 152 120\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <circle cx=\"76\" cy=\"52\" r=\"52\" fill=\"#E9EAEB\" />\r\n <g filter=\"url(#filter0_ddd_2474_28277)\">\r\n <path\r\n d=\"M77.6 16C66.8273 16 57.2978 21.3233 51.4987 29.4829C49.605 29.0363 47.6301 28.8 45.6 28.8C31.4615 28.8 20 40.2615 20 54.4C20 68.5385 31.4615 80 45.6 80L109.6 80C121.971 80 132 69.9712 132 57.6C132 45.2288 121.971 35.2 109.6 35.2C108.721 35.2 107.854 35.2506 107.002 35.349C102.098 23.9677 90.7797 16 77.6 16Z\"\r\n fill=\"#FAFAFA\"\r\n />\r\n <ellipse\r\n cx=\"45.6\"\r\n cy=\"54.3998\"\r\n rx=\"25.6\"\r\n ry=\"25.6\"\r\n fill=\"url(#paint0_linear_2474_28277)\"\r\n />\r\n <circle\r\n cx=\"77.6016\"\r\n cy=\"48\"\r\n r=\"32\"\r\n fill=\"url(#paint1_linear_2474_28277)\"\r\n />\r\n <ellipse\r\n cx=\"109.599\"\r\n cy=\"57.6002\"\r\n rx=\"22.4\"\r\n ry=\"22.4\"\r\n fill=\"url(#paint2_linear_2474_28277)\"\r\n />\r\n </g>\r\n <circle cx=\"21\" cy=\"19\" r=\"5\" fill=\"#F5F5F5\" />\r\n <circle cx=\"18\" cy=\"109\" r=\"7\" fill=\"#F5F5F5\" />\r\n <circle cx=\"145\" cy=\"35\" r=\"7\" fill=\"#F5F5F5\" />\r\n <circle cx=\"134\" cy=\"8\" r=\"4\" fill=\"#F5F5F5\" />\r\n <foreignObject x=\"44\" y=\"54\" width=\"64\" height=\"64\">\r\n <div\r\n xmlns=\"http://www.w3.org/1999/xhtml\"\r\n style=\"\r\n backdrop-filter: blur(4px);\r\n clip-path: url(#bgblur_0_2474_28277_clip_path);\r\n height: 100%;\r\n width: 100%;\r\n \"\r\n ></div>\r\n </foreignObject>\r\n <g data-figma-bg-blur-radius=\"8\">\r\n <path\r\n d=\"M52 86C52 72.7452 62.7452 62 76 62C89.2548 62 100 72.7452 100 86C100 99.2548 89.2548 110 76 110C62.7452 110 52 99.2548 52 86Z\"\r\n fill=\"#344054\"\r\n fill-opacity=\"0.4\"\r\n />\r\n <path\r\n d=\"M85 95L81.5001 91.5M84 85.5C84 90.1944 80.1944 94 75.5 94C70.8056 94 67 90.1944 67 85.5C67 80.8056 70.8056 77 75.5 77C80.1944 77 84 80.8056 84 85.5Z\"\r\n stroke=\"white\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_ddd_2474_28277\"\r\n x=\"0\"\r\n y=\"16\"\r\n width=\"152\"\r\n height=\"104\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\"\r\n >\r\n <feFlood\r\n flood-opacity=\"0\"\r\n result=\"BackgroundImageFix\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"1.5\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect1_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"3\" />\r\n <feGaussianBlur stdDeviation=\"1.5\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.04 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2474_28277\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect2_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"8\" />\r\n <feGaussianBlur stdDeviation=\"4\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.03 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"effect1_dropShadow_2474_28277\"\r\n result=\"effect2_dropShadow_2474_28277\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect3_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"20\" />\r\n <feGaussianBlur stdDeviation=\"12\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.08 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"effect2_dropShadow_2474_28277\"\r\n result=\"effect3_dropShadow_2474_28277\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in=\"SourceGraphic\"\r\n in2=\"effect3_dropShadow_2474_28277\"\r\n result=\"shape\"\r\n />\r\n </filter>\r\n <clipPath\r\n id=\"bgblur_0_2474_28277_clip_path\"\r\n transform=\"translate(-44 -54)\"\r\n >\r\n <path\r\n d=\"M52 86C52 72.7452 62.7452 62 76 62C89.2548 62 100 72.7452 100 86C100 99.2548 89.2548 110 76 110C62.7452 110 52 99.2548 52 86Z\"\r\n />\r\n </clipPath>\r\n <linearGradient\r\n id=\"paint0_linear_2474_28277\"\r\n x1=\"25.9429\"\r\n y1=\"37.4855\"\r\n x2=\"71.2\"\r\n y2=\"79.9998\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop\r\n offset=\"0.350715\"\r\n stop-color=\"white\"\r\n stop-opacity=\"0\"\r\n />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint1_linear_2474_28277\"\r\n x1=\"53.0301\"\r\n y1=\"26.8571\"\r\n x2=\"109.602\"\r\n y2=\"80\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop\r\n offset=\"0.350715\"\r\n stop-color=\"white\"\r\n stop-opacity=\"0\"\r\n />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint2_linear_2474_28277\"\r\n x1=\"92.3992\"\r\n y1=\"42.8002\"\r\n x2=\"131.999\"\r\n y2=\"80.0002\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop\r\n offset=\"0.350715\"\r\n stop-color=\"white\"\r\n stop-opacity=\"0\"\r\n />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n <p class=\"m-0 text-base font-medium text-surface-500\">\r\n {{ \"components.table.no-data-found\" | transloco }}\r\n </p>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-col gap-3 pb-3 px-4\"\r\n [class]=\"'items-' + paginatorPosition()\"\r\n >\r\n <mt-paginator\r\n [(rows)]=\"pageSize\"\r\n [(first)]=\"first\"\r\n [(page)]=\"currentPage\"\r\n [totalRecords]=\"totalRecords()\"\r\n [alwaysShow]=\"alwaysShowPaginator()\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\r\n (onPageChange)=\"onPaginatorPage($event)\"\r\n ></mt-paginator>\r\n </div>\r\n </div>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i5"],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-components-table.mjs","sources":["../../../../packages/masterteam/components/table/table-actions-menu/table-actions-menu.ts","../../../../packages/masterteam/components/table/table-actions-menu/table-actions-menu.html","../../../../packages/masterteam/components/table/table-value.utils.ts","../../../../packages/masterteam/components/table/table-filter-field/table-filter-field.ts","../../../../packages/masterteam/components/table/table-filter-field/table-filter-field.html","../../../../packages/masterteam/components/table/table-filter/table-filter.ts","../../../../packages/masterteam/components/table/table-filter/table-filter.html","../../../../packages/masterteam/components/table/table-caption/table-caption.ts","../../../../packages/masterteam/components/table/table-caption/table-caption.html","../../../../packages/masterteam/components/table/table-column-filter/table-column-filter.ts","../../../../packages/masterteam/components/table/table-column-filter/table-column-filter.html","../../../../packages/masterteam/components/table/table-export/table-export.service.ts","../../../../packages/masterteam/components/table/table-grouping/table-grouping.ts","../../../../packages/masterteam/components/table/table.ts","../../../../packages/masterteam/components/table/table.html","../../../../packages/masterteam/components/table/masterteam-components-table.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n viewChild,\n} from '@angular/core';\nimport { Avatar } from '@masterteam/components/avatar';\nimport { Button } from '@masterteam/components/button';\nimport { Icon, MTIcon } from '@masterteam/icons';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport { MenuItem } from 'primeng/api';\nimport { TieredMenu, TieredMenuModule } from 'primeng/tieredmenu';\nimport { ColumnDef } from '../table-types';\n\n/** Visual variants for menu-item icon chips. */\ntype ActionMenuTone = 'emerald' | 'sky' | 'indigo' | 'secondary';\n\ninterface TableMenuItem extends MenuItem {\n /** Transloco key resolved in the template so translations stay reactive. */\n labelKey?: string;\n /** Plain, already-translated or dynamic label — used when labelKey isn't set. */\n rawLabel?: string;\n iconKey?: MTIcon;\n iconTone?: ActionMenuTone;\n /** When true, the item renders via `mt-avatar` instead of a flat tinted chip. */\n useAvatar?: boolean;\n /** Small trailing chip (e.g. the group-by item's active column name). */\n badge?: string;\n /** Used to mark the current selection in the group submenu. */\n selected?: boolean;\n}\n\n/**\n * Top-right `⋯` menu. Uses PrimeNG TieredMenu (popup mode) so submenu\n * cascading, keyboard navigation, and outside-click-to-close come for free.\n * Item rendering is overridden via the `#item` template so each row shows\n * either a flat tone chip (main actions) or an `mt-avatar` (column picker).\n */\n@Component({\n selector: 'mt-table-actions-menu',\n standalone: true,\n imports: [Avatar, Button, Icon, TieredMenuModule, TranslocoModule],\n templateUrl: './table-actions-menu.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableActionsMenu {\n readonly exportable = input(false, { transform: booleanAttribute });\n readonly printable = input(false, { transform: booleanAttribute });\n readonly groupable = input(false, { transform: booleanAttribute });\n readonly groupColumns = input<ColumnDef[]>([]);\n readonly activeGroup = input<string | null>(null);\n\n readonly exportRequested = output<void>();\n readonly printRequested = output<void>();\n readonly groupChange = output<string | null>();\n\n protected readonly menu = viewChild<TieredMenu>('menu');\n\n /** Tailwind classes for flat tone chips, keyed by `iconTone`. */\n protected readonly toneClass: Record<ActionMenuTone, string> = {\n emerald: 'bg-emerald-50 text-emerald-700',\n sky: 'bg-sky-50 text-sky-700',\n indigo: 'bg-indigo-50 text-indigo-700',\n secondary: 'bg-gray-100 text-gray-700',\n };\n\n protected readonly items = computed<TableMenuItem[]>(() => {\n const items: TableMenuItem[] = [];\n\n if (this.exportable()) {\n items.push({\n labelKey: 'components.table.exportExcel',\n iconKey: 'file.file-download-02',\n iconTone: 'emerald',\n command: () => this.exportRequested.emit(),\n });\n }\n\n if (this.printable()) {\n items.push({\n labelKey: 'components.table.printPdf',\n iconKey: 'media.printer',\n iconTone: 'sky',\n command: () => this.printRequested.emit(),\n });\n }\n\n if (this.groupable()) {\n const activeKey = this.activeGroup();\n const activeLabel =\n this.groupColumns().find((c) => c.key === activeKey)?.label ??\n activeKey ??\n null;\n\n items.push({\n labelKey: 'components.table.groupBy',\n iconKey: 'layout.columns-03',\n iconTone: 'indigo',\n badge: activeLabel ?? undefined,\n items: [\n {\n labelKey: 'components.table.noGrouping',\n iconKey: 'general.x-close',\n iconTone: 'secondary',\n useAvatar: true,\n selected: !activeKey,\n command: () => this.groupChange.emit(null),\n },\n ...this.groupColumns().map<TableMenuItem>((col) => ({\n rawLabel: col.label,\n iconKey: 'layout.columns-03',\n iconTone: 'secondary',\n useAvatar: true,\n selected: activeKey === col.key,\n command: () => this.groupChange.emit(col.key),\n })),\n ],\n });\n }\n\n return items;\n });\n\n protected toggle(event: MouseEvent): void {\n this.menu()?.toggle(event);\n }\n}\n","<mt-button\n (click)=\"toggle($event)\"\n icon=\"general.dots-horizontal\"\n severity=\"secondary\"\n variant=\"outlined\"\n size=\"small\"\n [tooltip]=\"'components.table.actions' | transloco\"\n/>\n\n<p-tieredMenu\n #menu\n [model]=\"items()\"\n [popup]=\"true\"\n appendTo=\"body\"\n styleClass=\"mt-table-actions-menu\"\n>\n <ng-template #item let-item let-hasSubmenu=\"hasSubmenu\">\n <button\n type=\"button\"\n class=\"flex items-center gap-2.5 w-full px-2.5 py-2 text-sm cursor-pointer text-gray-700 dark:text-gray-200 hover:bg-gray-50 dark:hover:bg-surface-700 transition-colors\"\n [class.bg-primary-50]=\"item.selected\"\n [class.dark:bg-primary-950]=\"item.selected\"\n [class.text-primary-700]=\"item.selected\"\n >\n @if (item.iconKey) {\n @if (item.useAvatar) {\n <mt-avatar [icon]=\"item.iconKey\" shape=\"circle\" />\n } @else {\n <span\n class=\"inline-flex items-center justify-center w-7 h-7 rounded-full shrink-0\"\n [class]=\"toneClass[item.iconTone ?? 'secondary']\"\n >\n <mt-icon [icon]=\"item.iconKey\" class=\"text-sm\" />\n </span>\n }\n }\n <span class=\"flex-1 text-start truncate\">\n @if (item.labelKey) {\n {{ item.labelKey | transloco }}\n } @else {\n {{ item.rawLabel }}\n }\n </span>\n @if (item.badge) {\n <span\n class=\"text-xs px-1.5 py-0.5 rounded-full bg-primary-50 text-primary-700 dark:bg-primary-950 dark:text-primary-300 shrink-0\"\n >\n {{ item.badge }}\n </span>\n }\n @if (hasSubmenu) {\n <mt-icon\n icon=\"arrow.chevron-right\"\n class=\"text-xs text-gray-400 shrink-0\"\n />\n }\n </button>\n </ng-template>\n</p-tieredMenu>\n","import { EntityData, EntityViewType } from '@masterteam/components/entities';\r\nimport {\r\n ColumnDef,\r\n FilterConfig,\r\n FilterOption,\r\n FilterValue,\r\n} from './table-types';\r\n\r\nexport type TableEntityUsage = 'sort' | 'export' | 'filter';\r\n\r\nexport class TableValueResolver {\r\n private static readonly ALL_ENTITY_VIEW_TYPES: EntityViewType[] = [\r\n 'Text',\r\n 'LongText',\r\n 'Date',\r\n 'DateTime',\r\n 'Percentage',\r\n 'Status',\r\n 'Currency',\r\n 'Checkbox',\r\n 'User',\r\n 'Lookup',\r\n 'Attachment',\r\n ];\r\n\r\n private static readonly UNSORTABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>(['Attachment', 'Checkbox']);\r\n\r\n private static readonly EXPORTABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>([\r\n 'Text',\r\n 'LongText',\r\n 'Date',\r\n 'DateTime',\r\n 'Percentage',\r\n 'Status',\r\n 'Currency',\r\n 'Checkbox',\r\n 'User',\r\n 'Lookup',\r\n ]);\r\n\r\n private static readonly FILTERABLE_ENTITY_VIEW_TYPES =\r\n new Set<EntityViewType>(\r\n TableValueResolver.ALL_ENTITY_VIEW_TYPES.filter(\r\n (viewType) => viewType !== 'Attachment',\r\n ),\r\n );\r\n\r\n static getProperty(obj: unknown, key: string): unknown {\r\n return key.split('.').reduce<unknown>((current, segment) => {\r\n if (!current || typeof current !== 'object') {\r\n return undefined;\r\n }\r\n\r\n return (current as Record<string, unknown>)[segment];\r\n }, obj);\r\n }\r\n\r\n static getColumnFilterType(\r\n column: ColumnDef,\r\n row?: Record<string, unknown>,\r\n ): FilterConfig['type'] | null {\r\n if (column.filterConfig?.type) {\r\n return column.filterConfig.type;\r\n }\r\n\r\n if (column.type === 'date' || column.type === 'dateTime') {\r\n return 'date';\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return 'boolean';\r\n }\r\n\r\n if (column.type === 'user') {\r\n return 'user';\r\n }\r\n\r\n if (column.type === 'status') {\r\n return 'select';\r\n }\r\n\r\n if (column.type !== 'entity') {\r\n return null;\r\n }\r\n\r\n const viewType = TableValueResolver.getEntityViewType(column, row);\r\n if (\r\n !viewType ||\r\n !TableValueResolver.FILTERABLE_ENTITY_VIEW_TYPES.has(viewType)\r\n ) {\r\n return null;\r\n }\r\n\r\n switch (viewType) {\r\n case 'Date':\r\n case 'DateTime':\r\n return 'date';\r\n case 'Checkbox':\r\n return 'boolean';\r\n case 'Status':\r\n case 'Lookup':\r\n case 'User':\r\n return 'select';\r\n case 'Text':\r\n case 'LongText':\r\n case 'Currency':\r\n case 'Percentage':\r\n default:\r\n return 'text';\r\n }\r\n }\r\n\r\n /**\r\n * Returns a column with its filterConfig normalized for rendering:\r\n * - `type` is resolved via `getColumnFilterType`\r\n * - `options` for `select` filters are auto-generated from `data` when not provided\r\n *\r\n * Used by both popover and per-column filter modes so option-building stays in one place.\r\n */\r\n static buildFilterableColumn(column: ColumnDef, data: any[]): ColumnDef {\r\n const sampleRow = data[0];\r\n const filterType = TableValueResolver.getColumnFilterType(\r\n column,\r\n sampleRow,\r\n );\r\n\r\n if (filterType === 'select' && !column.filterConfig?.options?.length) {\r\n const uniqueOptions = Array.from(\r\n data.reduce<Map<string, FilterOption>>((options, row) => {\r\n const value = TableValueResolver.getColumnFilterValue(row, column);\r\n\r\n if (value === null || value === undefined || value === '') {\r\n return options;\r\n }\r\n\r\n const optionKey = `${typeof value}:${String(value)}`;\r\n if (!options.has(optionKey)) {\r\n options.set(optionKey, {\r\n label: String(value),\r\n value,\r\n });\r\n }\r\n\r\n return options;\r\n }, new Map()),\r\n )\r\n .map(([, option]) => option)\r\n .sort((a, b) => a.label.localeCompare(b.label));\r\n\r\n return {\r\n ...column,\r\n filterConfig: {\r\n ...column.filterConfig,\r\n type: filterType,\r\n options: uniqueOptions,\r\n },\r\n };\r\n }\r\n\r\n return {\r\n ...column,\r\n filterConfig: {\r\n ...column.filterConfig,\r\n type: filterType ?? column.filterConfig?.type ?? 'text',\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Returns true when `item` passes the filter for `key`. Pure function — callers\r\n * pass `column` so the resolver can apply type-aware normalisation (entity,\r\n * status, user, date, boolean). Shared by `mt-table` row-filtering and\r\n * `client-list-cards-view` card-filtering.\r\n */\r\n static matchesFilter(\r\n item: unknown,\r\n key: string,\r\n filterValue: FilterValue | unknown,\r\n column: ColumnDef | undefined,\r\n ): boolean {\r\n if (\r\n filterValue === null ||\r\n filterValue === undefined ||\r\n filterValue === ''\r\n ) {\r\n return true;\r\n }\r\n\r\n const itemValue = TableValueResolver.getProperty(item, key);\r\n const normalizedFilterValue = column\r\n ? TableValueResolver.getColumnFilterValue(\r\n item as Record<string, unknown>,\r\n column,\r\n )\r\n : TableValueResolver.resolveDisplayValue(itemValue);\r\n const filterType = column\r\n ? TableValueResolver.getColumnFilterType(\r\n column,\r\n item as Record<string, unknown>,\r\n )\r\n : null;\r\n\r\n if (typeof filterValue === 'object' && filterValue !== null) {\r\n const objectFilter = filterValue as FilterValue & {\r\n userName?: string;\r\n id?: string;\r\n displayName?: string;\r\n };\r\n if (objectFilter.from || objectFilter.to) {\r\n const itemDateValue =\r\n filterType === 'date'\r\n ? typeof normalizedFilterValue === 'number'\r\n ? normalizedFilterValue\r\n : null\r\n : itemValue instanceof Date\r\n ? itemValue.getTime()\r\n : new Date(String(itemValue)).getTime();\r\n\r\n if (\r\n itemDateValue === null ||\r\n itemDateValue === undefined ||\r\n Number.isNaN(itemDateValue)\r\n ) {\r\n return true;\r\n }\r\n\r\n if (\r\n objectFilter.from &&\r\n itemDateValue < new Date(objectFilter.from).getTime()\r\n ) {\r\n return false;\r\n }\r\n if (\r\n objectFilter.to &&\r\n itemDateValue > new Date(objectFilter.to).getTime()\r\n ) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (objectFilter.userName) {\r\n const normalizedItemUser = itemValue as Record<string, unknown> | null;\r\n if (!normalizedItemUser) return false;\r\n return (\r\n normalizedItemUser['id'] === objectFilter.id ||\r\n normalizedItemUser['userName'] === objectFilter.userName ||\r\n normalizedItemUser['displayName'] === objectFilter.displayName\r\n );\r\n }\r\n }\r\n\r\n if (typeof filterValue === 'boolean') {\r\n return normalizedFilterValue === filterValue;\r\n }\r\n\r\n if (\r\n typeof normalizedFilterValue === 'string' ||\r\n typeof normalizedFilterValue === 'number'\r\n ) {\r\n return String(normalizedFilterValue)\r\n .toLowerCase()\r\n .includes(String(filterValue).toLowerCase());\r\n }\r\n\r\n return normalizedFilterValue === filterValue;\r\n }\r\n\r\n /**\r\n * Applies every entry of `filters` against `item` — used by cards view and\r\n * anywhere else that consumes the same filter shape as mt-table.\r\n */\r\n static matchesAllFilters(\r\n item: unknown,\r\n filters: Record<string, unknown>,\r\n columns: ColumnDef[],\r\n ): boolean {\r\n return Object.keys(filters).every((key) => {\r\n if (key === 'generalSearch') return true;\r\n const column = columns.find((col) => col.key === key);\r\n return TableValueResolver.matchesFilter(item, key, filters[key], column);\r\n });\r\n }\r\n\r\n /**\r\n * True when a filter slot holds a meaningful value (scalar, text, date-range bounds,\r\n * or user lookup). Shared by popover and per-column modes to compute active counts.\r\n */\r\n static hasFilterValue(value: unknown): boolean {\r\n if (value === null || value === undefined || value === '') {\r\n return false;\r\n }\r\n\r\n if (typeof value === 'object') {\r\n const filterValue = value as {\r\n from?: unknown;\r\n to?: unknown;\r\n value?: unknown;\r\n userName?: unknown;\r\n id?: unknown;\r\n };\r\n return (\r\n filterValue.from != null ||\r\n filterValue.to != null ||\r\n filterValue.value != null ||\r\n filterValue.userName != null ||\r\n filterValue.id != null\r\n );\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Produces the filter payload a cell-click should apply for `column`.\r\n * Returns null when the cell type is not click-filterable.\r\n *\r\n * Shapes match `Table.matchesFilter` branches:\r\n * - user / entity(User) → `{ id, userName, displayName }`\r\n * - status / entity(Status|Lookup) → scalar display string\r\n * - boolean → boolean\r\n */\r\n static buildClickFilterValue(\r\n row: unknown,\r\n column: ColumnDef,\r\n ): unknown | null {\r\n const cellValue = TableValueResolver.getProperty(row, column.key);\r\n if (cellValue === null || cellValue === undefined || cellValue === '') {\r\n return null;\r\n }\r\n\r\n const filterType = TableValueResolver.getColumnFilterType(\r\n column,\r\n row as Record<string, unknown>,\r\n );\r\n\r\n if (column.type === 'user' || filterType === 'user') {\r\n // Entity(User) envelopes store the user object under `.value`; plain user\r\n // columns may hold it directly. Both paths produce the {id,userName,displayName} shape.\r\n const source =\r\n column.type === 'entity' &&\r\n cellValue &&\r\n typeof cellValue === 'object' &&\r\n 'value' in (cellValue as Record<string, unknown>)\r\n ? (cellValue as Record<string, unknown>)['value']\r\n : cellValue;\r\n return TableValueResolver.extractUserFilterValue(source);\r\n }\r\n\r\n // Entity-typed columns carry a `{ viewType, value, rawValue, ... }` envelope.\r\n // Unwrap once so boolean / scalar branches below operate on the inner value,\r\n // matching what `matchesFilter` -> `getColumnFilterValue` compares against.\r\n const normalized =\r\n column.type === 'entity'\r\n ? TableValueResolver.getEntityValueByType(cellValue, 'filter')\r\n : cellValue;\r\n\r\n if (normalized === null || normalized === undefined || normalized === '') {\r\n return null;\r\n }\r\n\r\n if (filterType === 'boolean') {\r\n return TableValueResolver.resolveBooleanValue(normalized);\r\n }\r\n\r\n if (filterType === 'select' || filterType === 'text') {\r\n if (column.type === 'entity') {\r\n return String(normalized);\r\n }\r\n const display = TableValueResolver.resolveDisplayValue(cellValue);\r\n return display === null ? null : String(display);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * True when two filter values refer to the same thing. Mirrors the branches\r\n * in `Table.matchesFilter`: scalar equality, boolean equality, or user-object\r\n * identity on id / userName / displayName.\r\n */\r\n static isFilterValueEqual(a: unknown, b: unknown): boolean {\r\n if (a === b) return true;\r\n if (a === null || a === undefined || b === null || b === undefined) {\r\n return false;\r\n }\r\n\r\n if (typeof a === 'object' && typeof b === 'object') {\r\n const left = a as Record<string, unknown>;\r\n const right = b as Record<string, unknown>;\r\n if (left['id'] != null && left['id'] === right['id']) return true;\r\n if (left['userName'] != null && left['userName'] === right['userName']) {\r\n return true;\r\n }\r\n if (\r\n left['displayName'] != null &&\r\n left['displayName'] === right['displayName']\r\n ) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n return String(a) === String(b);\r\n }\r\n\r\n private static extractUserFilterValue(\r\n value: unknown,\r\n ): Record<string, unknown> | string | null {\r\n if (value === null || value === undefined) return null;\r\n\r\n if (typeof value === 'object') {\r\n const record = value as Record<string, unknown>;\r\n const inner =\r\n record['value'] && typeof record['value'] === 'object'\r\n ? (record['value'] as Record<string, unknown>)\r\n : record;\r\n\r\n const id = inner['id'];\r\n const userName = inner['userName'] ?? inner['username'];\r\n const displayName = inner['displayName'] ?? inner['name'];\r\n\r\n if (id == null && userName == null && displayName == null) {\r\n const fallback = TableValueResolver.resolveDisplayValue(value);\r\n return fallback === null ? null : String(fallback);\r\n }\r\n\r\n return {\r\n ...(id != null ? { id } : {}),\r\n ...(userName != null ? { userName } : {}),\r\n ...(displayName != null ? { displayName } : {}),\r\n };\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n static getColumnFilterValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = TableValueResolver.getProperty(row, column.key);\r\n\r\n if (cellValue === null || cellValue === undefined) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'entity') {\r\n const filterType = TableValueResolver.getColumnFilterType(column, row);\r\n\r\n if (filterType === 'date') {\r\n return TableValueResolver.getEntityValueByType(cellValue, 'sort');\r\n }\r\n\r\n return TableValueResolver.getEntityValueByType(cellValue, 'filter');\r\n }\r\n\r\n if (column.type === 'date' || column.type === 'dateTime') {\r\n return TableValueResolver.normalizeDateSortValue(cellValue);\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return TableValueResolver.resolveBooleanValue(cellValue);\r\n }\r\n\r\n return TableValueResolver.resolveDisplayValue(cellValue);\r\n }\r\n\r\n static resolveDateValue(value: unknown): string | number | Date | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (\r\n typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n value instanceof Date\r\n ) {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'object') {\r\n const objectValue = value as Record<string, unknown>;\r\n return TableValueResolver.resolveDateValue(\r\n objectValue['actualValue'] ??\r\n objectValue['rawValue'] ??\r\n objectValue['value'] ??\r\n objectValue['displayValue'],\r\n );\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n static getEntityValueByType(\r\n value: unknown,\r\n usage: TableEntityUsage,\r\n ): string | number | boolean | null {\r\n if (value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (typeof value !== 'object') {\r\n return TableValueResolver.resolveDisplayValue(value);\r\n }\r\n\r\n const entityData = value as EntityData;\r\n\r\n if (\r\n usage === 'sort' &&\r\n TableValueResolver.UNSORTABLE_ENTITY_VIEW_TYPES.has(entityData.viewType)\r\n ) {\r\n return null;\r\n }\r\n\r\n if (\r\n usage === 'export' &&\r\n !TableValueResolver.EXPORTABLE_ENTITY_VIEW_TYPES.has(entityData.viewType)\r\n ) {\r\n return TableValueResolver.resolveDisplayValue(entityData.value);\r\n }\r\n\r\n switch (entityData.viewType) {\r\n case 'Currency':\r\n case 'Percentage':\r\n return usage === 'sort'\r\n ? TableValueResolver.normalizeNumericSortValue(\r\n entityData.rawValue ?? entityData.value,\r\n )\r\n : TableValueResolver.resolveDisplayValue(entityData.value);\r\n case 'Date':\r\n case 'DateTime':\r\n return usage === 'sort'\r\n ? TableValueResolver.normalizeDateSortValue(\r\n entityData.rawValue ?? entityData.value,\r\n )\r\n : TableValueResolver.resolveDisplayValue(entityData.value);\r\n case 'Checkbox':\r\n return TableValueResolver.resolveBooleanValue(\r\n entityData.rawValue ?? entityData.value,\r\n );\r\n case 'Status':\r\n case 'Lookup':\r\n case 'User':\r\n case 'Text':\r\n case 'LongText':\r\n default:\r\n return TableValueResolver.resolveDisplayValue(entityData.value);\r\n }\r\n }\r\n\r\n static resolveDisplayValue(value: unknown): string | number | boolean | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (\r\n typeof value === 'string' ||\r\n typeof value === 'number' ||\r\n typeof value === 'boolean'\r\n ) {\r\n return value;\r\n }\r\n\r\n if (value instanceof Date) {\r\n return value.toISOString();\r\n }\r\n\r\n if (typeof value === 'object') {\r\n const objectValue = value as Record<string, unknown>;\r\n const displayCandidate =\r\n objectValue['display'] ??\r\n objectValue['displayValue'] ??\r\n objectValue['displayName'] ??\r\n objectValue['name'] ??\r\n objectValue['label'] ??\r\n objectValue['value'];\r\n\r\n return TableValueResolver.resolveDisplayValue(displayCandidate);\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n static resolveBooleanValue(value: unknown): boolean | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return ['true', '1', 'yes', 'on'].includes(value.toLowerCase());\r\n }\r\n\r\n if (typeof value === 'number') {\r\n return value === 1;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n static normalizeTextSortValue(value: unknown): string | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n return String(value).toLocaleLowerCase();\r\n }\r\n\r\n static normalizeNumericSortValue(value: unknown): number | null {\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const numericValue =\r\n typeof value === 'number'\r\n ? value\r\n : Number.parseFloat(String(value).replace(/[^0-9.-]/g, ''));\r\n\r\n return Number.isNaN(numericValue) ? null : numericValue;\r\n }\r\n\r\n static normalizeDateSortValue(value: unknown): number | null {\r\n const resolvedValue = TableValueResolver.resolveDateValue(value);\r\n\r\n if (\r\n resolvedValue === null ||\r\n resolvedValue === undefined ||\r\n resolvedValue === ''\r\n ) {\r\n return null;\r\n }\r\n\r\n const timestamp =\r\n resolvedValue instanceof Date\r\n ? resolvedValue.getTime()\r\n : new Date(String(resolvedValue)).getTime();\r\n\r\n return Number.isNaN(timestamp) ? null : timestamp;\r\n }\r\n\r\n private static getEntityViewType(\r\n column: ColumnDef,\r\n row?: Record<string, unknown>,\r\n ): EntityViewType | null {\r\n const explicitViewType = (column as { viewType?: unknown }).viewType;\r\n if (TableValueResolver.isEntityViewType(explicitViewType)) {\r\n return explicitViewType;\r\n }\r\n\r\n const cellValue = row\r\n ? TableValueResolver.getProperty(row, column.key)\r\n : undefined;\r\n if (\r\n cellValue &&\r\n typeof cellValue === 'object' &&\r\n 'viewType' in (cellValue as Record<string, unknown>)\r\n ) {\r\n const viewType = (cellValue as EntityData).viewType;\r\n if (TableValueResolver.isEntityViewType(viewType)) {\r\n return viewType;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n private static isEntityViewType(value: unknown): value is EntityViewType {\r\n return (\r\n typeof value === 'string' &&\r\n TableValueResolver.ALL_ENTITY_VIEW_TYPES.includes(value as EntityViewType)\r\n );\r\n }\r\n}\r\n","import {\n ChangeDetectionStrategy,\n Component,\n input,\n model,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { DateField } from '@masterteam/components/date-field';\nimport { SelectField } from '@masterteam/components/select-field';\nimport { TextField } from '@masterteam/components/text-field';\nimport { UserSearchField } from '@masterteam/components/user-search-field';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport { ColumnDef, FilterValue } from '../table-types';\n\n/**\n * Renders a single filter control for one `ColumnDef`, dispatching on\n * `column.filterConfig.type` (`text` | `select` | `date` | `boolean` | `user`).\n *\n * Two-way binds the filter value via `value` / `valueChange`. Shared by both\n * filter UX modes (popover + per-column) so field rendering lives in one place.\n * Add a new filter type by adding a `@case` in the template and extending\n * `FilterConfig['type']`.\n */\n@Component({\n selector: 'mt-table-filter-field',\n standalone: true,\n imports: [\n FormsModule,\n TextField,\n SelectField,\n DateField,\n UserSearchField,\n TranslocoModule,\n ],\n templateUrl: './table-filter-field.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableFilterField {\n readonly column = input.required<ColumnDef>();\n readonly value = model<any>(null);\n\n protected readonly booleanOptions = [\n { label: 'Yes', value: true },\n { label: 'No', value: false },\n ];\n\n protected getFilterType(): string {\n return this.column().filterConfig?.type ?? 'text';\n }\n\n protected getScalarValue(): any {\n const current = this.value();\n return current?.value ?? current ?? null;\n }\n\n protected getDateRangeValue(part: 'from' | 'to'): Date | null {\n const current = this.value() as FilterValue | undefined;\n if (!current || typeof current !== 'object') return null;\n return part === 'from' ? (current.from ?? null) : (current.to ?? null);\n }\n\n protected updateScalar(next: any): void {\n this.value.set(next);\n }\n\n protected updateDate(part: 'from' | 'to', next: Date | null): void {\n const current = (this.value() as FilterValue) ?? {};\n this.value.set({ ...current, [part]: next });\n }\n}\n","@switch (getFilterType()) {\n @case (\"text\") {\n <mt-text-field\n [ngModel]=\"getScalarValue()\"\n (ngModelChange)=\"updateScalar($event)\"\n [placeholder]=\"\n ('components.table.select' | transloco) +\n ' ' +\n (column().filterConfig?.label || column().label)\n \"\n />\n }\n @case (\"select\") {\n <mt-select-field\n [ngModel]=\"getScalarValue()\"\n (ngModelChange)=\"updateScalar($event)\"\n [options]=\"column().filterConfig?.options ?? []\"\n [placeholder]=\"\n ('components.table.select' | transloco) +\n ' ' +\n (column().filterConfig?.label || column().label)\n \"\n [hasPlaceholderPrefix]=\"false\"\n showClear\n />\n }\n @case (\"date\") {\n <div class=\"space-y-3\">\n <div class=\"space-y-1\">\n <label\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\n {{ \"components.table.from\" | transloco }}\n </label>\n <mt-date-field\n [ngModel]=\"getDateRangeValue('from')\"\n (ngModelChange)=\"updateDate('from', $event)\"\n [placeholder]=\"'components.table.from' | transloco\"\n />\n </div>\n <div class=\"space-y-1\">\n <label\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\n {{ \"components.table.to\" | transloco }}\n </label>\n <mt-date-field\n [ngModel]=\"getDateRangeValue('to')\"\n (ngModelChange)=\"updateDate('to', $event)\"\n [placeholder]=\"'components.table.to' | transloco\"\n />\n </div>\n </div>\n }\n @case (\"boolean\") {\n <mt-select-field\n [ngModel]=\"getScalarValue()\"\n (ngModelChange)=\"updateScalar($event)\"\n [options]=\"booleanOptions\"\n [placeholder]=\"'components.table.select' | transloco\"\n [hasPlaceholderPrefix]=\"false\"\n showClear\n />\n }\n @case (\"user\") {\n <mt-user-search-field\n [ngModel]=\"getScalarValue()\"\n (ngModelChange)=\"updateScalar($event)\"\n [placeholder]=\"column().filterConfig?.label || column().label\"\n [apiUrl]=\"column().filterConfig?.apiUrl ?? ''\"\n [context]=\"column().filterConfig?.context\"\n />\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n output,\n signal,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormsModule,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { Button } from '@masterteam/components/button';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport { PopoverModule } from 'primeng/popover';\nimport { ColumnDef, TableFilters } from '../table-types';\nimport { TableValueResolver } from '../table-value.utils';\nimport { TableFilterField } from '../table-filter-field/table-filter-field';\n\n@Component({\n selector: 'mt-table-filter',\n standalone: true,\n imports: [\n FormsModule,\n Button,\n PopoverModule,\n TranslocoModule,\n TableFilterField,\n ],\n templateUrl: './table-filter.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TableFilter),\n multi: true,\n },\n ],\n})\nexport class TableFilter implements ControlValueAccessor {\n readonly columns = input.required<ColumnDef[]>();\n readonly data = input<any[]>([]);\n\n readonly filterApplied = output<TableFilters>();\n readonly filterReset = output<void>();\n\n protected pendingFilters = signal<TableFilters>({});\n protected appliedFilters = signal<TableFilters>({});\n\n private onChange: (value: TableFilters) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected filterableColumns = computed(() =>\n this.columns()\n .filter(\n (col) =>\n TableValueResolver.getColumnFilterType(col, this.data()[0]) !== null,\n )\n .map((col) => TableValueResolver.buildFilterableColumn(col, this.data())),\n );\n\n protected activeFilterCount = computed(\n () =>\n Object.values(this.appliedFilters()).filter((value) =>\n TableValueResolver.hasFilterValue(value),\n ).length,\n );\n\n protected updateFilter(key: string, value: any): void {\n this.pendingFilters.update((filters) => ({\n ...filters,\n [key]: value,\n }));\n this.onTouched();\n }\n\n protected apply(): void {\n const filters = { ...this.pendingFilters() };\n this.appliedFilters.set(filters);\n this.onChange(filters);\n this.filterApplied.emit(filters);\n }\n\n protected reset(): void {\n this.pendingFilters.set({});\n this.appliedFilters.set({});\n this.onChange({});\n this.filterReset.emit();\n }\n\n // ControlValueAccessor\n writeValue(value: TableFilters | null): void {\n const filters = value ?? {};\n this.pendingFilters.set(filters);\n this.appliedFilters.set(filters);\n }\n\n registerOnChange(fn: (value: TableFilters) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n}\n","<mt-button\n (click)=\"popover.toggle($event)\"\n [label]=\"'components.table.filter' | transloco\"\n [badge]=\"activeFilterCount()\"\n severity=\"primary\"\n size=\"small\"\n icon=\"general.filter-funnel-01\"\n/>\n\n<p-popover #popover [style]=\"{ width: '320px' }\" appendTo=\"body\">\n <div class=\"flex flex-col max-h-[50vh]\">\n <h4\n class=\"text-lg py-2 font-semibold border-b border-surface-200 dark:border-surface-700 shrink-0\"\n >\n {{ \"components.table.filterOptions\" | transloco }}\n </h4>\n\n <div\n class=\"space-y-3 overflow-y-auto flex-1 py-3\"\n (keydown.enter)=\"apply(); popover.hide()\"\n >\n @for (col of filterableColumns(); track col.key) {\n <div class=\"space-y-1\">\n <label\n class=\"block text-sm font-medium text-gray-700 dark:text-gray-300\"\n >\n {{ col.filterConfig?.label || col.label }}\n </label>\n <mt-table-filter-field\n [column]=\"col\"\n [value]=\"pendingFilters()[col.key]\"\n (valueChange)=\"updateFilter(col.key, $event)\"\n />\n </div>\n }\n </div>\n\n <div\n class=\"flex justify-end gap-2 pt-4 border-t border-surface-200 dark:border-surface-700 shrink-0\"\n >\n <mt-button\n variant=\"outlined\"\n (click)=\"reset(); popover.hide()\"\n [label]=\"'components.table.reset' | transloco\"\n />\n <mt-button\n (click)=\"apply(); popover.hide()\"\n [label]=\"'components.table.apply' | transloco\"\n />\n </div>\n </div>\n</p-popover>\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n model,\n output,\n TemplateRef,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport { Button } from '@masterteam/components/button';\nimport { Tabs } from '@masterteam/components/tabs';\nimport { TextField } from '@masterteam/components/text-field';\nimport { TableActionsMenu } from '../table-actions-menu/table-actions-menu';\nimport { TableFilter } from '../table-filter/table-filter';\nimport {\n ColumnDef,\n TableAction,\n TableFilterMode,\n TableFilters,\n} from '../table-types';\n\n/**\n * Stateless, controlled toolbar used by `mt-table` and by list-style consumers\n * (e.g. `client-list-cards-view`) so the two share one caption UI without\n * duplicating the search/filter/actions markup.\n *\n * The caption only renders the popover-mode filter button — per-column filter\n * icons live in the table header itself (cards have no columns).\n */\n@Component({\n selector: 'mt-table-caption',\n standalone: true,\n imports: [\n NgTemplateOutlet,\n FormsModule,\n TranslocoModule,\n Button,\n Tabs,\n TextField,\n TableFilter,\n TableActionsMenu,\n ],\n templateUrl: './table-caption.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableCaption {\n // Capability flags\n readonly generalSearch = input(false, { transform: booleanAttribute });\n readonly showFilters = input(false, { transform: booleanAttribute });\n readonly filterMode = input<TableFilterMode>('popover');\n readonly exportable = input(false, { transform: booleanAttribute });\n readonly printable = input(false, { transform: booleanAttribute });\n readonly groupable = input(false, { transform: booleanAttribute });\n\n // Context for pickers\n readonly columns = input<ColumnDef[]>([]);\n readonly data = input<any[]>([]);\n readonly groupColumns = input<ColumnDef[]>([]);\n\n // Tabs\n readonly tabs = input<any[] | undefined>();\n readonly tabsOptionLabel = input<string>('label');\n readonly tabsOptionValue = input<string>('value');\n\n // Toolbar-level action buttons rendered inline (not the dots menu)\n readonly actions = input<TableAction[]>([]);\n\n // Projected caption slots\n readonly captionStart = input<TemplateRef<unknown> | null>(null);\n readonly captionEnd = input<TemplateRef<unknown> | null>(null);\n\n // Two-way state (the caption is a controlled component)\n readonly activeTab = model<any>();\n readonly filters = model<TableFilters>({});\n readonly filterTerm = model<string>('');\n readonly groupBy = model<string | null>(null);\n\n // Events\n readonly exportRequested = output<void>();\n readonly printRequested = output<void>();\n readonly onTabChange = output<any>();\n readonly searchChange = output<string>();\n readonly filterApplied = output<TableFilters>();\n readonly filterReset = output<void>();\n\n protected readonly showsAnything = computed(\n () =>\n !!this.captionStart() ||\n !!this.captionEnd() ||\n this.generalSearch() ||\n (this.showFilters() && this.filterMode() === 'popover') ||\n this.exportable() ||\n this.printable() ||\n this.groupable() ||\n (this.tabs()?.length ?? 0) > 0 ||\n this.actions().length > 0,\n );\n\n protected onSearch(term: string): void {\n this.filterTerm.set(term);\n this.searchChange.emit(term);\n }\n\n protected onFilterApplied(next: TableFilters): void {\n this.filters.set(next);\n this.filterApplied.emit(next);\n }\n\n protected onFilterReset(): void {\n this.filters.set({});\n this.filterReset.emit();\n }\n\n protected onGroupChange(key: string | null): void {\n this.groupBy.set(key);\n }\n\n protected tabChanged(tab: any): void {\n this.onTabChange.emit(tab);\n }\n}\n","@if (showsAnything()) {\n <div class=\"mt-table-caption\">\n <div\n class=\"flex relative items-center gap-2 pb-4\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n <div class=\"flex items-center gap-2\">\n @if (captionStart(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\n }\n @if (tabs()) {\n <mt-tabs\n [(active)]=\"activeTab\"\n [options]=\"tabs()\"\n [optionLabel]=\"tabsOptionLabel()\"\n [optionValue]=\"tabsOptionValue()\"\n (onChange)=\"tabChanged($event)\"\n size=\"large\"\n ></mt-tabs>\n }\n @if (generalSearch()) {\n <mt-text-field\n [ngModel]=\"filterTerm()\"\n (ngModelChange)=\"onSearch($event)\"\n icon=\"general.search-lg\"\n [placeholder]=\"'components.table.search' | transloco\"\n ></mt-text-field>\n }\n </div>\n <div class=\"flex items-center gap-2\">\n @if (showFilters() && filterMode() === \"popover\") {\n <mt-table-filter\n [columns]=\"columns()\"\n [data]=\"data()\"\n [ngModel]=\"filters()\"\n (filterApplied)=\"onFilterApplied($event)\"\n (filterReset)=\"onFilterReset()\"\n />\n }\n @if (exportable() || printable() || groupable()) {\n <mt-table-actions-menu\n [exportable]=\"exportable()\"\n [printable]=\"printable()\"\n [groupable]=\"groupable()\"\n [groupColumns]=\"groupColumns()\"\n [activeGroup]=\"groupBy()\"\n (exportRequested)=\"exportRequested.emit()\"\n (printRequested)=\"printRequested.emit()\"\n (groupChange)=\"onGroupChange($event)\"\n />\n }\n @if (actions().length > 0) {\n <div class=\"flex items-center space-x-2\">\n @for (action of actions(); track action.label) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n [size]=\"$any(action).size\"\n (click)=\"action.action(null)\"\n [label]=\"action.label\"\n [tooltip]=\"action.tooltip\"\n ></mt-button>\n }\n </div>\n }\n @if (captionEnd(); as tpl) {\n <ng-container *ngTemplateOutlet=\"tpl\"></ng-container>\n }\n </div>\n </div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from '@masterteam/components/button';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport { Popover, PopoverModule } from 'primeng/popover';\nimport { ColumnDef } from '../table-types';\nimport { TableFilterField } from '../table-filter-field/table-filter-field';\nimport { TableValueResolver } from '../table-value.utils';\n\n/**\n * Per-column filter affordance: a small funnel icon in the column header that\n * opens a popover with a single `TableFilterField`.\n *\n * Buffers edits in `pendingValue` until the user hits Apply — matches the\n * popover-mode UX so behavior is predictable between modes. Emits `filterChange`\n * with either the new value or `null` to clear.\n */\n@Component({\n selector: 'mt-table-column-filter',\n standalone: true,\n imports: [\n FormsModule,\n Button,\n PopoverModule,\n TranslocoModule,\n TableFilterField,\n ],\n templateUrl: './table-column-filter.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableColumnFilter {\n readonly column = input.required<ColumnDef>();\n readonly value = input<any>(null);\n\n readonly filterChange = output<any>();\n\n protected readonly pendingValue = signal<any>(null);\n\n protected readonly hasActiveValue = computed(() =>\n TableValueResolver.hasFilterValue(this.value()),\n );\n\n protected open(popover: Popover, event: Event): void {\n event.stopPropagation();\n this.pendingValue.set(this.cloneValue(this.value()));\n popover.toggle(event);\n }\n\n protected apply(popover: Popover): void {\n const next = this.pendingValue();\n this.filterChange.emit(\n TableValueResolver.hasFilterValue(next) ? next : null,\n );\n popover.hide();\n }\n\n protected clear(popover: Popover): void {\n this.pendingValue.set(null);\n this.filterChange.emit(null);\n popover.hide();\n }\n\n private cloneValue(value: any): any {\n if (value === null || value === undefined) return null;\n if (typeof value === 'object') return { ...value };\n return value;\n }\n}\n","<mt-button\n (onClick)=\"open(popover, $event)\"\n [icon]=\"\n hasActiveValue() ? 'general.filter-funnel-02' : 'general.filter-funnel-01'\n \"\n [severity]=\"hasActiveValue() ? 'primary' : 'secondary'\"\n variant=\"text\"\n size=\"small\"\n [tooltip]=\"'components.table.filter' | transloco\"\n styleClass=\"!p-1 !text-sm\"\n/>\n\n<p-popover #popover [style]=\"{ width: '280px' }\" appendTo=\"body\">\n <div\n class=\"flex flex-col gap-3\"\n (keydown.enter)=\"apply(popover)\"\n (click)=\"$event.stopPropagation()\"\n >\n <h4\n class=\"text-sm font-semibold text-gray-700 dark:text-gray-300 truncate\"\n [title]=\"column().filterConfig?.label || column().label\"\n >\n {{ column().filterConfig?.label || column().label }}\n </h4>\n\n <mt-table-filter-field\n [column]=\"column()\"\n [value]=\"pendingValue()\"\n (valueChange)=\"pendingValue.set($event)\"\n />\n\n <div\n class=\"flex justify-end gap-2 pt-2 border-t border-surface-200 dark:border-surface-700\"\n >\n <mt-button\n variant=\"outlined\"\n size=\"small\"\n (onClick)=\"clear(popover)\"\n [label]=\"'components.table.reset' | transloco\"\n />\n <mt-button\n size=\"small\"\n (onClick)=\"apply(popover)\"\n [label]=\"'components.table.apply' | transloco\"\n />\n </div>\n </div>\n</p-popover>\n","import { Injectable } from '@angular/core';\nimport * as XLSX from 'xlsx';\nimport { ColumnDef, TableExportConfig, TablePrintConfig } from '../table-types';\nimport { TableValueResolver } from '../table-value.utils';\n\n/**\n * Centralises table export/print so any `mt-table` (and future tables) can\n * drop in the behaviour without reimplementing XLSX serialisation or print\n * DOM cloning. Injected schema-agnostically via `resolveValue` on the config.\n */\n@Injectable({ providedIn: 'root' })\nexport class TableExportService {\n private static readonly PRINT_ROOT_CLASS = 'mt-printing';\n private static readonly PRINT_REGION_CLASS = 'mt-print-region';\n private static readonly PRINT_STYLE_ID = 'mt-table-print-style';\n private static readonly PRINT_CSS = `\n @media print {\n html.mt-printing body > *:not(.mt-print-region) { display: none !important; }\n html.mt-printing, html.mt-printing body { background: #ffffff !important; }\n .mt-print-region { display: block !important; padding: 16px; color: #111827;\n font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif; }\n .mt-print-region h1 { font-size: 18px; font-weight: 600; margin: 0 0 12px; }\n .mt-print-region table { width: 100%; border-collapse: collapse; font-size: 12px; }\n .mt-print-region th, .mt-print-region td { text-align: start; padding: 6px 8px;\n border: 1px solid #e5e7eb; vertical-align: top; }\n .mt-print-region thead th { background: #f3f4f6; font-weight: 600; }\n .mt-print-region tbody tr { break-inside: avoid; page-break-inside: avoid; }\n }\n .mt-print-region { display: none; }\n `;\n\n exportToExcel(config: TableExportConfig): void {\n const columns = this.getExportableColumns(config.columns);\n const workbook = XLSX.utils.book_new();\n const worksheet = XLSX.utils.json_to_sheet(\n this.buildLabeledRows(config.rows, columns, config.resolveValue),\n );\n\n XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');\n XLSX.writeFileXLSX(\n workbook,\n `${this.normalizeFilename(config.filename)}.xlsx`,\n );\n }\n\n printPdf(config: TablePrintConfig): void {\n if (typeof document === 'undefined' || typeof window === 'undefined') {\n return;\n }\n\n const columns = this.getExportableColumns(config.columns);\n const region = this.buildPrintRegion(config, columns);\n\n this.ensurePrintStyles();\n document.body.appendChild(region);\n document.documentElement.classList.add(TableExportService.PRINT_ROOT_CLASS);\n\n const cleanup = () => {\n document.documentElement.classList.remove(\n TableExportService.PRINT_ROOT_CLASS,\n );\n region.remove();\n window.removeEventListener('afterprint', cleanup);\n };\n window.addEventListener('afterprint', cleanup);\n\n window.print();\n }\n\n private ensurePrintStyles(): void {\n if (document.getElementById(TableExportService.PRINT_STYLE_ID)) {\n return;\n }\n const style = document.createElement('style');\n style.id = TableExportService.PRINT_STYLE_ID;\n style.textContent = TableExportService.PRINT_CSS;\n document.head.appendChild(style);\n }\n\n private getExportableColumns(columns: ColumnDef[]): ColumnDef[] {\n return columns.filter((column) => column.type !== 'custom');\n }\n\n /**\n * Produces rows keyed by column label (Excel header row).\n * Entity columns use the dedicated entity resolver for a clean export value.\n */\n private buildLabeledRows(\n rows: unknown[],\n columns: ColumnDef[],\n resolveValue: TableExportConfig['resolveValue'],\n ): Record<string, string | number | boolean | null>[] {\n return rows.map((row) => {\n const labeledRow: Record<string, string | number | boolean | null> = {};\n\n columns.forEach((column) => {\n const cellValue =\n column.type === 'entity'\n ? TableValueResolver.getEntityValueByType(\n TableValueResolver.getProperty(row, column.key),\n 'export',\n )\n : resolveValue(row, column);\n\n labeledRow[column.label] = cellValue ?? null;\n });\n\n return labeledRow;\n });\n }\n\n private buildPrintRegion(\n config: TablePrintConfig,\n columns: ColumnDef[],\n ): HTMLElement {\n const region = document.createElement('section');\n region.className = TableExportService.PRINT_REGION_CLASS;\n\n if (config.title) {\n const heading = document.createElement('h1');\n heading.textContent = config.title;\n region.appendChild(heading);\n }\n\n const table = document.createElement('table');\n const thead = document.createElement('thead');\n const headerRow = document.createElement('tr');\n\n columns.forEach((column) => {\n const th = document.createElement('th');\n th.textContent = column.label;\n headerRow.appendChild(th);\n });\n thead.appendChild(headerRow);\n table.appendChild(thead);\n\n const tbody = document.createElement('tbody');\n config.rows.forEach((row) => {\n const tr = document.createElement('tr');\n columns.forEach((column) => {\n const td = document.createElement('td');\n const cellValue =\n column.type === 'entity'\n ? TableValueResolver.getEntityValueByType(\n TableValueResolver.getProperty(row, column.key),\n 'export',\n )\n : config.resolveValue(row, column);\n td.textContent = cellValue === null ? '' : String(cellValue);\n tr.appendChild(td);\n });\n tbody.appendChild(tr);\n });\n table.appendChild(tbody);\n region.appendChild(table);\n\n return region;\n }\n\n private normalizeFilename(value: string): string {\n const sanitized = (value ?? '').trim().replace(/[\\\\/:*?\"<>|]+/g, '-');\n return sanitized.length ? sanitized : 'download';\n }\n}\n","import { computed, Signal, WritableSignal } from '@angular/core';\nimport { ColumnDef, FilterConfig } from '../table-types';\nimport { TableValueResolver } from '../table-value.utils';\n\n/**\n * Column filter types that produce useful (low-cardinality) row groups.\n * Unique-valued columns (plain text, dates) would create a group per row —\n * pointless visually and slow — so we exclude them from the group picker.\n */\nconst GROUPABLE_FILTER_TYPES: ReadonlySet<FilterConfig['type']> = new Set([\n 'select',\n 'boolean',\n 'user',\n]);\n\n/**\n * Pure controller owning all row-grouping concerns. Table instantiates one and\n * binds its signals — keeps grouping logic out of table.ts.\n *\n * PrimeNG's subheader grouping renders only when `sortField === groupRowsBy`.\n * `setGroup` therefore also pins the sort to the grouped column; clearing the\n * group leaves the user's sort untouched.\n */\nexport class TableGroupingController {\n constructor(\n private readonly columns: Signal<ColumnDef[]>,\n private readonly rows: Signal<unknown[]>,\n private readonly groupBy: WritableSignal<string | null>,\n private readonly sortField: WritableSignal<string | null>,\n private readonly sortDirection: WritableSignal<'asc' | 'desc' | null>,\n ) {}\n\n readonly groupableColumns = computed<ColumnDef[]>(() => {\n const sampleRow = this.rows()[0] as Record<string, unknown> | undefined;\n return this.columns().filter((col) => {\n if (col.type === 'custom') return false;\n const filterType = TableValueResolver.getColumnFilterType(col, sampleRow);\n return filterType !== null && GROUPABLE_FILTER_TYPES.has(filterType);\n });\n });\n\n /**\n * Row counts per group key — consumed by the group header template so each\n * subheader can show \"Status: Active (12)\".\n */\n readonly groupCounts = computed<Map<string, number>>(() => {\n const column = this.activeGroupColumn();\n if (!column) return new Map();\n\n const counts = new Map<string, number>();\n for (const row of this.rows()) {\n const key = this.getGroupKey(row, column);\n counts.set(key, (counts.get(key) ?? 0) + 1);\n }\n return counts;\n });\n\n getGroupCount(row: unknown): number {\n const column = this.activeGroupColumn();\n if (!column) return 0;\n return this.groupCounts().get(this.getGroupKey(row, column)) ?? 0;\n }\n\n readonly activeGroupColumn = computed<ColumnDef | null>(() => {\n const key = this.groupBy();\n if (!key) return null;\n return this.columns().find((col) => col.key === key) ?? null;\n });\n\n readonly groupingActive = computed<boolean>(\n () => this.activeGroupColumn() !== null,\n );\n\n /**\n * Returns true when the given column is the active group column and\n * therefore cannot have its sort cleared (PrimeNG requirement).\n */\n isGroupLockedSort(columnKey: string): boolean {\n return this.groupingActive() && this.activeGroupColumn()?.key === columnKey;\n }\n\n setGroup(key: string | null): void {\n this.groupBy.set(key && key.length > 0 ? key : null);\n\n if (key) {\n this.sortField.set(key);\n if (this.sortDirection() === null) {\n this.sortDirection.set('asc');\n }\n }\n }\n\n /**\n * Display label for a row's grouped value — used by the `#groupheader`\n * template. Leverages the same resolver pipeline the cells use, so status\n * maps / user display names render consistently.\n */\n getGroupLabel(row: unknown): string {\n const column = this.activeGroupColumn();\n if (!column) return '';\n\n const cellValue = TableValueResolver.getProperty(row, column.key);\n if (cellValue === null || cellValue === undefined || cellValue === '') {\n return '—';\n }\n\n if (column.type === 'entity') {\n const entityValue = TableValueResolver.getEntityValueByType(\n cellValue,\n 'export',\n );\n return entityValue === null ? '—' : String(entityValue);\n }\n\n const display = TableValueResolver.resolveDisplayValue(cellValue);\n if (display === null || display === undefined) return '—';\n if (typeof display === 'boolean') return display ? 'Yes' : 'No';\n return String(display);\n }\n\n /**\n * Accent color for status/entity-Status group headers. Reused from the\n * cell renderer's status-map pipeline so tint is consistent with the cell.\n */\n getGroupAccentColor(row: unknown): string | null {\n const column = this.activeGroupColumn();\n if (!column) return null;\n if (column.type !== 'status' && column.type !== 'entity') return null;\n\n const cellValue = TableValueResolver.getProperty(row, column.key);\n if (cellValue === null || cellValue === undefined) return null;\n\n if (typeof cellValue === 'object') {\n const obj = cellValue as Record<string, unknown>;\n const color = obj['color'];\n if (typeof color === 'string' && color.length > 0) return color;\n }\n\n return null;\n }\n\n /** Stable key used to bucket rows into groups — normalised to string. */\n private getGroupKey(row: unknown, column: ColumnDef): string {\n const cellValue = TableValueResolver.getProperty(row, column.key);\n if (cellValue === null || cellValue === undefined || cellValue === '') {\n return '__mt_group_empty__';\n }\n if (column.type === 'entity') {\n const entityValue = TableValueResolver.getEntityValueByType(\n cellValue,\n 'filter',\n );\n return entityValue === null ? '__mt_group_empty__' : String(entityValue);\n }\n const display = TableValueResolver.resolveDisplayValue(cellValue);\n return display === null || display === undefined\n ? '__mt_group_empty__'\n : String(display);\n }\n}\n","import {\r\n booleanAttribute,\r\n ChangeDetectionStrategy,\r\n Component,\r\n computed,\r\n contentChild,\r\n effect,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n ColumnDef,\r\n TableAction,\r\n TableActionShape,\r\n CellChangeEvent,\r\n ColumnTypeForActionCell,\r\n TableFilters,\r\n FilterValue,\r\n TableFilterMode,\r\n} from './table-types';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { TableCaption } from './table-caption/table-caption';\r\nimport { TableColumnFilter } from './table-column-filter/table-column-filter';\r\nimport { TableExportService } from './table-export/table-export.service';\r\nimport { TableGroupingController } from './table-grouping/table-grouping';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Paginator } from '@masterteam/components/paginator';\r\nimport { CheckboxField } from '@masterteam/components/checkbox-field';\r\nimport { TableModule, TablePageEvent } from 'primeng/table';\r\nimport { SkeletonModule } from 'primeng/skeleton';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { MTDateFormatPipe } from '@masterteam/components';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport {\r\n EntityData,\r\n EntityPreview,\r\n EntityStatusValue,\r\n} from '@masterteam/components/entities';\r\nimport { PopoverModule } from 'primeng/popover';\r\nimport { Icon, MTIcon } from '@masterteam/icons';\r\nimport { TableValueResolver } from './table-value.utils';\r\n\r\ninterface PersistedTableState {\r\n pageSize?: number;\r\n first?: number;\r\n currentPage?: number;\r\n filterTerm?: string;\r\n filters?: TableFilters;\r\n sortField?: string | null;\r\n sortDirection?: 'asc' | 'desc' | null;\r\n selectedRowKeys?: string[];\r\n groupBy?: string | null;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-table',\r\n templateUrl: './table.html',\r\n styleUrls: ['./table.css'],\r\n standalone: true,\r\n providers: [MTDateFormatPipe],\r\n imports: [\r\n TableModule,\r\n NgTemplateOutlet,\r\n ToggleField,\r\n FormsModule,\r\n Button,\r\n Paginator,\r\n CheckboxField,\r\n SkeletonModule,\r\n ProgressBarModule,\r\n TranslocoModule,\r\n TableCaption,\r\n TableColumnFilter,\r\n EntityPreview,\r\n PopoverModule,\r\n Icon,\r\n Card,\r\n MTDateFormatPipe,\r\n ],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class Table {\r\n private static readonly LOADING_COLUMN_COUNT = 5;\r\n\r\n selectionChange = output<any[]>();\r\n cellChange = output<CellChangeEvent>();\r\n lazyLoad = output<any>();\r\n columnReorder = output<any>();\r\n rowReorder = output<any>();\r\n rowClick = output<any>();\r\n\r\n filters = model<TableFilters>({});\r\n\r\n data = input.required<any[]>();\r\n columns = input.required<ColumnDef[]>();\r\n rowActions = input<TableAction[]>([]);\r\n size = input<'small' | 'large' | undefined>(undefined);\r\n showGridlines = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n stripedRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n selectableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n clickableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n generalSearch = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazyLocalSearch = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n showFilters = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n filterMode = input<TableFilterMode>('popover');\r\n loading = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n updating = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazy = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazyLocalSort = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n lazyTotalRecords = input<number>();\r\n reorderableColumns = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n reorderableRows = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n dataKey = input<string>();\r\n storageKey = input<string | null>(null);\r\n storageMode = input<'local' | 'session'>('local');\r\n exportable = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n printable = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n groupable = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n cellClickFilter = input<boolean, unknown>(false, {\r\n transform: booleanAttribute,\r\n });\r\n printTitle = input<string>('');\r\n exportFilename = input<string>('download');\r\n actionShape = input<TableActionShape>('flat');\r\n tableLayout = input<'fixed' | 'auto'>('fixed');\r\n\r\n noCard = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n private readonly dateFormat = inject(MTDateFormatPipe);\r\n\r\n // Tabs inputs and outputs\r\n tabs = input<any[]>();\r\n tabsOptionLabel = input<string>('label');\r\n tabsOptionValue = input<string>('value');\r\n activeTab = model<any>();\r\n onTabChange = output<any>();\r\n\r\n // Table actions inputs and outputs\r\n actions = input<TableAction[]>([]);\r\n\r\n // Content TemplateRefs\r\n captionStartContent = contentChild<TemplateRef<any>>('captionStart');\r\n captionEndContent = contentChild<TemplateRef<any>>('captionEnd');\r\n emptyContent = contentChild<TemplateRef<any>>('empty');\r\n\r\n paginatorPosition = input<'end' | 'start' | 'center'>('end');\r\n alwaysShowPaginator = input<boolean, unknown>(true, {\r\n transform: booleanAttribute,\r\n });\r\n rowsPerPageOptions = input<number[]>([5, 10, 20, 50, 100]);\r\n pageSize = model<number>(10);\r\n currentPage = model<number>(0);\r\n first = model<number>(0);\r\n filterTerm = model<string>('');\r\n groupBy = model<string | null>(null);\r\n sortField = signal<string | null>(null);\r\n sortDirection = signal<'asc' | 'desc' | null>(null);\r\n confirmationService = inject(ConfirmationService);\r\n private readonly exportService = inject(TableExportService);\r\n protected readonly grouping: TableGroupingController;\r\n\r\n protected selectedRowKeys = signal<Set<string>>(new Set());\r\n protected transientSelectedRows = signal<Set<any>>(new Set());\r\n private readonly hydratedStorageKey = signal<string | null>(null);\r\n private readonly storageHydrated = signal(false);\r\n\r\n protected readonly isColumnFilterMode = computed(\r\n () => this.showFilters() && this.filterMode() === 'column',\r\n );\r\n\r\n protected filterableColumnMap = computed<Map<string, ColumnDef>>(() => {\r\n if (!this.isColumnFilterMode()) {\r\n return new Map();\r\n }\r\n\r\n const data = this.data();\r\n const map = new Map<string, ColumnDef>();\r\n\r\n this.columns().forEach((col) => {\r\n if (TableValueResolver.getColumnFilterType(col, data[0]) === null) {\r\n return;\r\n }\r\n map.set(col.key, TableValueResolver.buildFilterableColumn(col, data));\r\n });\r\n\r\n return map;\r\n });\r\n\r\n protected getFilterableColumn(key: string): ColumnDef | undefined {\r\n return this.filterableColumnMap().get(key);\r\n }\r\n\r\n onColumnFilterChange(key: string, value: any): void {\r\n const next = { ...this.filters() };\r\n if (value === null || value === undefined) {\r\n delete next[key];\r\n } else {\r\n next[key] = value;\r\n }\r\n this.onFilterApplied(next);\r\n }\r\n\r\n protected activeFilterCount = computed(() => {\r\n const filters = this.filters();\r\n return Object.values(filters).filter(\r\n (value) => value !== null && value !== undefined && value !== '',\r\n ).length;\r\n });\r\n\r\n protected filteredData = computed(() => {\r\n const data = this.data();\r\n const applyLocalSearch = !this.lazy() || this.lazyLocalSearch();\r\n const applyLocalSort = !this.lazy() || this.lazyLocalSort();\r\n const searchTerm = applyLocalSearch ? this.filterTerm().toLowerCase() : '';\r\n const filters = this.filters();\r\n const filterKeys = this.lazy() ? [] : Object.keys(filters);\r\n let result = data;\r\n\r\n // Apply search term\r\n if (searchTerm !== '') {\r\n result = result.filter((item) =>\r\n Object.values(item).some(\r\n (value) =>\r\n typeof value === 'string' &&\r\n value.toLowerCase().includes(searchTerm),\r\n ),\r\n );\r\n }\r\n\r\n // Apply column filters\r\n if (filterKeys.length > 0) {\r\n result = result.filter((item) =>\r\n filterKeys.every((key) => this.matchesFilter(item, key, filters[key])),\r\n );\r\n }\r\n\r\n return applyLocalSort ? this.sortData(result) : result;\r\n });\r\n\r\n protected renderedColumns = computed<ColumnDef[]>(() => {\r\n const columns = this.columns();\r\n if (columns.length > 0 || !this.loading()) {\r\n return columns;\r\n }\r\n\r\n return Array.from(\r\n { length: Table.LOADING_COLUMN_COUNT },\r\n (_, index): ColumnDef => ({\r\n key: `__loading-${index}`,\r\n label: '',\r\n type: 'text',\r\n }),\r\n );\r\n });\r\n\r\n protected displayData = computed(() => {\r\n if (this.loading()) {\r\n return Array.from({ length: this.pageSize() }, () => ({}));\r\n }\r\n return this.filteredData();\r\n });\r\n\r\n protected totalRecords = computed(() => {\r\n if (this.lazy() && this.lazyTotalRecords() !== undefined) {\r\n return this.lazyTotalRecords() as number;\r\n }\r\n\r\n return this.filteredData().length;\r\n });\r\n\r\n // TODO: remove after updating the toggle and checkbox logic\r\n protected paginatedData = computed(() => {\r\n const data = this.filteredData();\r\n const first = this.first();\r\n const pageSize = this.pageSize();\r\n if (this.lazy()) {\r\n return data;\r\n }\r\n return data.slice(first, first + pageSize);\r\n });\r\n\r\n protected allSelectedOnPage = computed(() => {\r\n const pageData = this.paginatedData();\r\n if (pageData.length === 0) return false;\r\n return pageData.every((row) => this.isRowSelected(row));\r\n });\r\n\r\n protected totalColumnSpan = computed(\r\n () =>\r\n this.renderedColumns().length +\r\n (this.reorderableRows() ? 1 : 0) +\r\n (this.selectableRows() ? 1 : 0) +\r\n (this.rowActions().length > 0 ? 1 : 0),\r\n );\r\n\r\n constructor() {\r\n this.grouping = new TableGroupingController(\r\n this.columns,\r\n this.filteredData,\r\n this.groupBy,\r\n this.sortField,\r\n this.sortDirection,\r\n );\r\n\r\n effect(() => {\r\n const storageKey = this.getNormalizedStorageKey();\r\n const storage = this.getStorage();\r\n const previousStorageKey = this.hydratedStorageKey();\r\n\r\n this.storageHydrated.set(false);\r\n\r\n if (!storageKey || !storage) {\r\n this.hydratedStorageKey.set(storageKey);\r\n this.storageHydrated.set(true);\r\n return;\r\n }\r\n\r\n if (previousStorageKey === storageKey) {\r\n this.storageHydrated.set(true);\r\n return;\r\n }\r\n\r\n const persistedState = this.readPersistedState(storage, storageKey);\r\n this.applyPersistedState(persistedState);\r\n this.hydratedStorageKey.set(storageKey);\r\n this.storageHydrated.set(true);\r\n\r\n if (this.lazy() && this.shouldEmitLazyLoadAfterRestore(persistedState)) {\r\n queueMicrotask(() => this.emitLazyLoad({}));\r\n }\r\n });\r\n\r\n effect(() => {\r\n const storageKey = this.getNormalizedStorageKey();\r\n const storage = this.getStorage();\r\n\r\n if (\r\n !storageKey ||\r\n !storage ||\r\n !this.storageHydrated() ||\r\n this.hydratedStorageKey() !== storageKey\r\n ) {\r\n return;\r\n }\r\n\r\n this.writePersistedState(storage, storageKey, this.buildPersistedState());\r\n });\r\n\r\n // Drop filters / groupBy whose column no longer exists. Dynamic tables\r\n // (e.g. runtime schemas) can drop columns between fetches, which would\r\n // otherwise strand a filter the user can't clear from the UI.\r\n effect(() => {\r\n const columns = this.columns();\r\n if (columns.length === 0 || this.loading()) {\r\n return;\r\n }\r\n\r\n const validKeys = new Set(columns.map((c) => c.key));\r\n\r\n const currentFilters = this.filters();\r\n const staleFilterKeys = Object.keys(currentFilters).filter(\r\n (key) => key !== 'generalSearch' && !validKeys.has(key),\r\n );\r\n if (staleFilterKeys.length > 0) {\r\n const next = { ...currentFilters };\r\n staleFilterKeys.forEach((key) => delete next[key]);\r\n this.filters.set(next);\r\n }\r\n\r\n const currentGroup = this.groupBy();\r\n if (currentGroup && !validKeys.has(currentGroup)) {\r\n this.groupBy.set(null);\r\n }\r\n });\r\n\r\n effect(() => {\r\n if (this.lazy()) {\r\n return;\r\n }\r\n\r\n const totalRecords = this.totalRecords();\r\n const pageSize = this.pageSize();\r\n const currentFirst = this.first();\r\n\r\n if (pageSize <= 0) {\r\n return;\r\n }\r\n\r\n const maxFirst =\r\n totalRecords > 0\r\n ? Math.floor((totalRecords - 1) / pageSize) * pageSize\r\n : 0;\r\n const normalizedFirst = Math.min(currentFirst, maxFirst);\r\n const normalizedPage = Math.floor(normalizedFirst / pageSize);\r\n\r\n if (normalizedFirst !== currentFirst) {\r\n this.first.set(normalizedFirst);\r\n }\r\n\r\n if (this.currentPage() !== normalizedPage) {\r\n this.currentPage.set(normalizedPage);\r\n }\r\n });\r\n }\r\n\r\n onFilterApplied(filters: TableFilters): void {\r\n this.filters.set(filters);\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n\r\n if (this.lazy()) {\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n onFilterReset(): void {\r\n this.filters.set({});\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n\r\n if (this.lazy()) {\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n protected matchesFilter(\r\n item: any,\r\n key: string,\r\n filterValue: FilterValue | any,\r\n ): boolean {\r\n const column = this.columns().find((col) => col.key === key);\r\n return TableValueResolver.matchesFilter(item, key, filterValue, column);\r\n }\r\n\r\n toggleRow(row: any): void {\r\n const rowKey = this.getRowSelectionKey(row);\r\n\r\n if (rowKey !== null) {\r\n const nextSelection = new Set(this.selectedRowKeys());\r\n if (nextSelection.has(rowKey)) {\r\n nextSelection.delete(rowKey);\r\n } else {\r\n nextSelection.add(rowKey);\r\n }\r\n this.selectedRowKeys.set(nextSelection);\r\n } else {\r\n const nextSelection = new Set(this.transientSelectedRows());\r\n if (nextSelection.has(row)) {\r\n nextSelection.delete(row);\r\n } else {\r\n nextSelection.add(row);\r\n }\r\n this.transientSelectedRows.set(nextSelection);\r\n }\r\n\r\n this.emitSelectionChange();\r\n }\r\n\r\n toggleAllRowsOnPage(): void {\r\n const pageData = this.paginatedData();\r\n const allSelected = this.allSelectedOnPage();\r\n const nextSelectedRowKeys = new Set(this.selectedRowKeys());\r\n const nextTransientSelection = new Set(this.transientSelectedRows());\r\n\r\n pageData.forEach((row) => {\r\n const rowKey = this.getRowSelectionKey(row);\r\n if (rowKey !== null) {\r\n if (allSelected) {\r\n nextSelectedRowKeys.delete(rowKey);\r\n } else {\r\n nextSelectedRowKeys.add(rowKey);\r\n }\r\n return;\r\n }\r\n\r\n if (allSelected) {\r\n nextTransientSelection.delete(row);\r\n } else {\r\n nextTransientSelection.add(row);\r\n }\r\n });\r\n\r\n this.selectedRowKeys.set(nextSelectedRowKeys);\r\n this.transientSelectedRows.set(nextTransientSelection);\r\n this.emitSelectionChange();\r\n }\r\n\r\n getProperty(obj: any, key: string): any {\r\n return TableValueResolver.getProperty(obj, key);\r\n }\r\n\r\n protected getDateProperty(\r\n obj: any,\r\n key: string,\r\n ): string | number | Date | null {\r\n return TableValueResolver.resolveDateValue(this.getProperty(obj, key));\r\n }\r\n\r\n getEntityPreviewData(row: any, col: ColumnDef): EntityData | null {\r\n const cellValue = this.getProperty(row, col.key);\r\n\r\n if (col.type === 'user') {\r\n return this.buildUserEntityData(cellValue, col.label);\r\n }\r\n\r\n if (col.type === 'status') {\r\n return this.buildStatusEntityData(cellValue, col);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Entity data resolver that abstracts over the `user` / `status` vs `entity`\r\n * distinction — used by the shared filterable-cell template so the three\r\n * cases don't duplicate markup.\r\n */\r\n resolveCellEntityData(row: any, col: ColumnDef): EntityData | null {\r\n if (col.type === 'entity') {\r\n return this.getEntityColumnData(row, col);\r\n }\r\n if (col.type === 'user' || col.type === 'status') {\r\n return this.getEntityPreviewData(row, col);\r\n }\r\n return null;\r\n }\r\n\r\n tabChanged(tab: any): void {\r\n this.filterTerm.set('');\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n this.onTabChange.emit(tab);\r\n }\r\n\r\n onTablePage(event: TablePageEvent): void {\r\n if (this.lazy()) {\r\n this.handleLazyLoad(event);\r\n return;\r\n }\r\n\r\n this.updatePagingFromEvent(event);\r\n }\r\n\r\n handleLazyLoad(event: any): void {\r\n this.updatePagingFromEvent(event);\r\n this.emitLazyLoad(event);\r\n }\r\n\r\n onPaginatorPage(event: any): void {\r\n if (this.lazy()) {\r\n this.handleLazyLoad(event);\r\n return;\r\n }\r\n\r\n this.updatePagingFromEvent(event);\r\n }\r\n\r\n onSearchChange(searchTerm: string) {\r\n this.filterTerm.set(searchTerm);\r\n this.first.set(0);\r\n this.currentPage.set(0);\r\n if (this.lazy() && !this.lazyLocalSearch()) {\r\n this.filters.set({ ...this.filters(), generalSearch: searchTerm });\r\n this.emitLazyLoad({});\r\n }\r\n }\r\n\r\n toggleSort(column: ColumnDef): void {\r\n if (!this.isColumnSortable(column)) {\r\n return;\r\n }\r\n\r\n if (this.sortField() !== column.key) {\r\n this.sortField.set(column.key);\r\n this.sortDirection.set('asc');\r\n return;\r\n }\r\n\r\n const direction = this.sortDirection();\r\n if (direction === 'asc') {\r\n this.sortDirection.set('desc');\r\n return;\r\n }\r\n\r\n if (direction === 'desc') {\r\n // Tri-state reset. PrimeNG subheader grouping breaks without a matching\r\n // sort, so when this column is the active group we wrap to 'asc' instead.\r\n if (this.grouping.isGroupLockedSort(column.key)) {\r\n this.sortDirection.set('asc');\r\n } else {\r\n this.sortField.set(null);\r\n this.sortDirection.set(null);\r\n }\r\n return;\r\n }\r\n\r\n this.sortDirection.set('asc');\r\n }\r\n\r\n isColumnSortable(column: ColumnDef): boolean {\r\n return column.sortable === true && (!this.lazy() || this.lazyLocalSort());\r\n }\r\n\r\n getSortIcon(column: ColumnDef): MTIcon {\r\n if (this.sortField() !== column.key || !this.sortDirection()) {\r\n return 'arrow.chevron-selector-vertical';\r\n }\r\n\r\n return this.sortDirection() === 'asc'\r\n ? 'arrow.arrow-up'\r\n : 'arrow.arrow-down';\r\n }\r\n\r\n onCellChange(\r\n row: any,\r\n columnKey: string,\r\n newValue: any,\r\n type?: ColumnTypeForActionCell,\r\n ): void {\r\n this.setProperty(row, columnKey, newValue);\r\n\r\n this.cellChange.emit({\r\n row,\r\n column: columnKey,\r\n value: newValue,\r\n type: type!,\r\n });\r\n }\r\n\r\n resolveActionLoading(action: TableAction, row: any): boolean | undefined {\r\n if (typeof action.loading === 'function') {\r\n return action.loading(row);\r\n }\r\n return action.loading;\r\n }\r\n\r\n getVisibleRowActions(row: any): TableAction[] {\r\n return this.rowActions().filter((action) => !action.hidden?.(row));\r\n }\r\n\r\n onColumnReorder(event: any): void {\r\n this.columnReorder.emit(event);\r\n }\r\n\r\n onRowReorder(event: any): void {\r\n this.rowReorder.emit({\r\n ...event,\r\n value: event.value ?? this.data(),\r\n });\r\n }\r\n\r\n onRowClick(event: MouseEvent, row: any): void {\r\n if (!this.clickableRows() || this.loading()) {\r\n return;\r\n }\r\n\r\n const target = event.target as HTMLElement | null;\r\n if (\r\n target?.closest(\r\n 'button, a, input, textarea, select, label, [role=\"button\"], [data-row-click-ignore=\"true\"]',\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n this.rowClick.emit(row);\r\n }\r\n\r\n protected updatePagingFromEvent(event: any): void {\r\n const first = event?.first ?? this.first();\r\n const rows = event?.rows ?? this.pageSize();\r\n\r\n this.first.set(first);\r\n this.pageSize.set(rows);\r\n\r\n const page =\r\n typeof event?.page === 'number'\r\n ? event.page\r\n : Math.floor((first ?? 0) / (rows || 1));\r\n\r\n this.currentPage.set(page);\r\n }\r\n\r\n protected emitLazyLoad(event: any): void {\r\n this.lazyLoad.emit({\r\n ...event,\r\n pageSize: this.pageSize(),\r\n currentPage: this.currentPage() + 1,\r\n first: this.first(),\r\n filters: this.filters(),\r\n });\r\n }\r\n\r\n exportExcel(): void {\r\n if (this.loading()) {\r\n return;\r\n }\r\n\r\n this.exportService.exportToExcel({\r\n rows: this.filteredData(),\r\n columns: this.columns(),\r\n filename: this.exportFilename(),\r\n resolveValue: (row, column) =>\r\n this.getColumnExportValue(row as any, column),\r\n });\r\n }\r\n\r\n printPdf(): void {\r\n if (this.loading()) {\r\n return;\r\n }\r\n\r\n this.exportService.printPdf({\r\n rows: this.filteredData(),\r\n columns: this.columns(),\r\n filename: this.exportFilename(),\r\n title: this.printTitle() || undefined,\r\n resolveValue: (row, column) =>\r\n this.getColumnExportValue(row as any, column),\r\n });\r\n }\r\n\r\n onCellFilterClick(event: Event, row: any, column: ColumnDef): void {\r\n if (!this.cellClickFilter()) return;\r\n\r\n const next = TableValueResolver.buildClickFilterValue(row, column);\r\n if (next === null || next === undefined) return;\r\n\r\n event.stopPropagation();\r\n\r\n const current = this.filters();\r\n const patched: TableFilters = { ...current };\r\n if (TableValueResolver.isFilterValueEqual(current[column.key], next)) {\r\n delete patched[column.key];\r\n } else {\r\n patched[column.key] = next;\r\n }\r\n this.onFilterApplied(patched);\r\n }\r\n\r\n isCellFilterActive(row: any, column: ColumnDef): boolean {\r\n if (!this.cellClickFilter()) return false;\r\n const current = this.filters()[column.key];\r\n if (current === null || current === undefined) return false;\r\n const next = TableValueResolver.buildClickFilterValue(row, column);\r\n if (next === null || next === undefined) return false;\r\n return TableValueResolver.isFilterValueEqual(current, next);\r\n }\r\n\r\n isCellClickFilterable(column: ColumnDef, row: unknown): boolean {\r\n if (!this.cellClickFilter()) return false;\r\n if (column.type === 'boolean') {\r\n // Editable booleans keep the toggle interaction; only readonly ones filter.\r\n return column.readonly === true;\r\n }\r\n if (column.type === 'status' || column.type === 'user') return true;\r\n if (column.type === 'entity') {\r\n const filterType = TableValueResolver.getColumnFilterType(\r\n column,\r\n row as Record<string, unknown>,\r\n );\r\n return (\r\n filterType === 'select' ||\r\n filterType === 'user' ||\r\n filterType === 'boolean'\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n rowAction(event: Event, action: TableAction, row: any): void {\r\n if (!action.confirmation) {\r\n action.action(row);\r\n } else if (action.confirmation?.confirmationType === 'delete') {\r\n this.confirmationService.confirmDelete({\r\n event: event,\r\n ...action.confirmation,\r\n accept: () => {\r\n action.action(row);\r\n },\r\n reject: () => {},\r\n });\r\n } else {\r\n this.confirmationService.confirm({\r\n event: event,\r\n ...action.confirmation,\r\n accept: () => {\r\n action.action(row);\r\n },\r\n reject: () => {},\r\n });\r\n }\r\n }\r\n\r\n private buildUserEntityData(\r\n value: unknown,\r\n columnLabel: string,\r\n ): EntityData | null {\r\n const userValue = value;\r\n if (!userValue) return null;\r\n\r\n return {\r\n name: columnLabel,\r\n viewType: 'User',\r\n value: userValue,\r\n configuration: {\r\n showDisplayName: true,\r\n showPhoneNumber: false,\r\n showEmail: false,\r\n },\r\n };\r\n }\r\n\r\n private buildStatusEntityData(value: unknown, column: ColumnDef): EntityData {\r\n const statusValue = this.resolveStatusValue(value, column);\r\n\r\n return {\r\n name: column.label,\r\n viewType: 'Status',\r\n value: statusValue ?? '',\r\n configuration: {\r\n hideName: true,\r\n },\r\n };\r\n }\r\n\r\n private resolveStatusValue(\r\n value: unknown,\r\n column?: ColumnDef,\r\n ): EntityStatusValue | null {\r\n const unwrappedValue = this.unwrapStatusValue(value, column);\r\n if (\r\n unwrappedValue === null ||\r\n unwrappedValue === undefined ||\r\n unwrappedValue === ''\r\n ) {\r\n return null;\r\n }\r\n\r\n if (typeof unwrappedValue === 'object') {\r\n const objectValue = unwrappedValue as Record<string, unknown>;\r\n const statusKey =\r\n this.readStringProperty(objectValue, 'key') ??\r\n this.readStringProperty(objectValue, 'code') ??\r\n this.readStringProperty(objectValue, 'value') ??\r\n this.readStringProperty(objectValue, 'id') ??\r\n this.readStringProperty(objectValue, 'display') ??\r\n this.readStringProperty(objectValue, 'displayValue') ??\r\n this.readStringProperty(objectValue, 'displayName') ??\r\n this.readStringProperty(objectValue, 'label') ??\r\n this.readStringProperty(objectValue, 'name');\r\n const mappedStatus = this.resolveStatusMapValue(column, statusKey);\r\n const display =\r\n this.readStringProperty(objectValue, 'display') ??\r\n this.readStringProperty(objectValue, 'displayValue') ??\r\n this.readStringProperty(objectValue, 'displayName') ??\r\n this.readStringProperty(objectValue, 'label') ??\r\n this.readStringProperty(objectValue, 'name') ??\r\n mappedStatus?.display ??\r\n statusKey;\r\n\r\n if (!display) {\r\n return null;\r\n }\r\n\r\n return {\r\n key: statusKey ?? display,\r\n display,\r\n color:\r\n this.readStringProperty(objectValue, 'color') ??\r\n mappedStatus?.color ??\r\n this.resolveDefaultStatusColor(statusKey ?? display),\r\n description:\r\n this.readStringProperty(objectValue, 'description') ??\r\n mappedStatus?.description,\r\n };\r\n }\r\n\r\n const normalizedValue =\r\n TableValueResolver.resolveDisplayValue(unwrappedValue);\r\n if (normalizedValue === null || normalizedValue === undefined) {\r\n return null;\r\n }\r\n\r\n const statusKey = String(normalizedValue);\r\n const mappedStatus = this.resolveStatusMapValue(column, statusKey);\r\n\r\n return {\r\n key: statusKey,\r\n display: mappedStatus?.display ?? statusKey,\r\n color: mappedStatus?.color ?? this.resolveDefaultStatusColor(statusKey),\r\n description: mappedStatus?.description,\r\n };\r\n }\r\n\r\n private unwrapStatusValue(value: unknown, column?: ColumnDef): unknown {\r\n if (!value || typeof value !== 'object') {\r\n return value;\r\n }\r\n\r\n const entityValue = value as Partial<EntityData>;\r\n if (!('value' in (value as Record<string, unknown>))) {\r\n return value;\r\n }\r\n\r\n if (\r\n entityValue.viewType === 'Status' ||\r\n this.isEntityStatusCompatibilityColumn(column)\r\n ) {\r\n return entityValue.value;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n private isEntityStatusCompatibilityColumn(\r\n column: ColumnDef | undefined,\r\n ): boolean {\r\n return column?.type === 'entity' && this.isStatusColumnKey(column.key);\r\n }\r\n\r\n private isStatusColumnKey(key: string | null | undefined): boolean {\r\n return typeof key === 'string' && key.trim().toLowerCase() === 'status';\r\n }\r\n\r\n private resolveStatusMapValue(\r\n column: ColumnDef | undefined,\r\n key: string | null | undefined,\r\n ) {\r\n if (!column?.statusMap || !key) {\r\n return undefined;\r\n }\r\n\r\n const directMatch = column.statusMap[key];\r\n if (directMatch) {\r\n return directMatch;\r\n }\r\n\r\n const normalizedKey = this.normalizeStatusToken(key);\r\n return Object.entries(column.statusMap).find(\r\n ([entryKey]) => this.normalizeStatusToken(entryKey) === normalizedKey,\r\n )?.[1];\r\n }\r\n\r\n private resolveDefaultStatusColor(value: string): string {\r\n const normalizedValue = this.normalizeStatusToken(value);\r\n\r\n if (\r\n [\r\n 'active',\r\n 'approved',\r\n 'completed',\r\n 'create',\r\n 'created',\r\n 'done',\r\n 'enabled',\r\n 'healthy',\r\n 'low',\r\n 'open',\r\n 'published',\r\n 'runtime',\r\n 'success',\r\n ].includes(normalizedValue)\r\n ) {\r\n return '#047857';\r\n }\r\n\r\n if (\r\n [\r\n 'change',\r\n 'current',\r\n 'draft',\r\n 'inprogress',\r\n 'info',\r\n 'medium',\r\n 'process',\r\n 'progress',\r\n 'running',\r\n 'update',\r\n 'updated',\r\n ].includes(normalizedValue)\r\n ) {\r\n return '#0369a1';\r\n }\r\n\r\n if (\r\n [\r\n 'bulkupdate',\r\n 'comment',\r\n 'configure',\r\n 'configured',\r\n 'controlpanel',\r\n 'discussion',\r\n ].includes(normalizedValue)\r\n ) {\r\n return '#4338ca';\r\n }\r\n\r\n if (\r\n [\r\n 'awaiting',\r\n 'escalation',\r\n 'high',\r\n 'hold',\r\n 'move',\r\n 'moved',\r\n 'pending',\r\n 'phasegate',\r\n 'queued',\r\n 'warning',\r\n ].includes(normalizedValue)\r\n ) {\r\n return '#b45309';\r\n }\r\n\r\n if (\r\n [\r\n 'blocked',\r\n 'cancelled',\r\n 'canceled',\r\n 'close',\r\n 'closed',\r\n 'critical',\r\n 'delete',\r\n 'deleted',\r\n 'error',\r\n 'failed',\r\n 'governance',\r\n 'inactive',\r\n 'rejected',\r\n ].includes(normalizedValue)\r\n ) {\r\n return '#be123c';\r\n }\r\n\r\n return '#475569';\r\n }\r\n\r\n private normalizeStatusToken(value: string): string {\r\n return value\r\n .trim()\r\n .toLocaleLowerCase()\r\n .replace(/[\\s_-]+/g, '');\r\n }\r\n\r\n private readStringProperty(\r\n value: Record<string, unknown>,\r\n key: string,\r\n ): string | null {\r\n const propertyValue = value[key];\r\n return typeof propertyValue === 'string' && propertyValue.trim().length > 0\r\n ? propertyValue.trim()\r\n : null;\r\n }\r\n\r\n /**\r\n * Gets the entity data for an 'entity' type column.\r\n * The row data is expected to already be in EntityData format.\r\n * Automatically hides entity name and configures User entities\r\n * to show only avatar + displayName.\r\n */\r\n getEntityColumnData(row: any, col: ColumnDef): EntityData | null {\r\n const cellValue = this.getProperty(row, col.key);\r\n if (!cellValue || typeof cellValue !== 'object') return null;\r\n\r\n const entityData = cellValue as EntityData;\r\n\r\n if (this.isEntityStatusCompatibilityColumn(col)) {\r\n return this.buildStatusEntityData(cellValue, col);\r\n }\r\n\r\n // For User entities: show avatar + displayName only\r\n if (entityData.viewType === 'User') {\r\n return {\r\n ...entityData,\r\n configuration: {\r\n ...entityData.configuration,\r\n hideName: true,\r\n showDisplayName: true,\r\n showPhoneNumber: false,\r\n showEmail: false,\r\n },\r\n };\r\n }\r\n\r\n // For all other entities: hide the name label\r\n return {\r\n ...entityData,\r\n configuration: {\r\n ...entityData.configuration,\r\n hideName: true,\r\n },\r\n };\r\n }\r\n\r\n protected getStatusEntityAccentColor(\r\n row: Record<string, unknown>,\r\n ): string | null {\r\n const statusColumn = this.columns().find((column) =>\r\n this.isStatusColumnKey(column.key),\r\n );\r\n if (!statusColumn) {\r\n return null;\r\n }\r\n\r\n return this.resolveStatusEntityAccentColor(\r\n this.getProperty(row, statusColumn.key),\r\n statusColumn,\r\n );\r\n }\r\n\r\n private resolveStatusEntityAccentColor(\r\n value: unknown,\r\n column?: ColumnDef,\r\n ): string | null {\r\n return this.resolveStatusValue(value, column)?.color ?? null;\r\n }\r\n\r\n protected getBooleanProperty(obj: any, key: string): boolean {\r\n const value = this.getProperty(obj, key);\r\n\r\n if (typeof value === 'boolean') {\r\n return value;\r\n }\r\n\r\n return TableValueResolver.resolveBooleanValue(value) ?? false;\r\n }\r\n\r\n private setProperty(obj: any, key: string, value: any): void {\r\n const path = key.split('.');\r\n const lastKey = path.pop();\r\n\r\n if (!lastKey) {\r\n return;\r\n }\r\n\r\n const target = path.reduce((current, segment) => {\r\n if (!current?.[segment] || typeof current[segment] !== 'object') {\r\n current[segment] = {};\r\n }\r\n\r\n return current[segment];\r\n }, obj);\r\n\r\n if (target && typeof target === 'object') {\r\n target[lastKey] = value;\r\n }\r\n }\r\n\r\n private sortData(data: any[]): any[] {\r\n const field = this.sortField();\r\n const direction = this.sortDirection();\r\n\r\n if (!field || !direction) {\r\n return data;\r\n }\r\n\r\n const column = this.columns().find((item) => item.key === field);\r\n if (!column || !this.isColumnSortable(column)) {\r\n return data;\r\n }\r\n\r\n return [...data].sort((leftRow, rightRow) => {\r\n const leftValue = this.getSortValue(leftRow, column);\r\n const rightValue = this.getSortValue(rightRow, column);\r\n\r\n if (leftValue === rightValue) return 0;\r\n if (leftValue === null || leftValue === undefined || leftValue === '') {\r\n return 1;\r\n }\r\n if (\r\n rightValue === null ||\r\n rightValue === undefined ||\r\n rightValue === ''\r\n ) {\r\n return -1;\r\n }\r\n\r\n const comparison = leftValue < rightValue ? -1 : 1;\r\n return direction === 'asc' ? comparison : -comparison;\r\n });\r\n }\r\n\r\n private getSortValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | null {\r\n const cellValue = this.getProperty(row, column.key);\r\n const resolvedValue = this.getColumnResolvedValue(row, column);\r\n\r\n if (\r\n resolvedValue === null ||\r\n resolvedValue === undefined ||\r\n resolvedValue === ''\r\n ) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'date' || column.type === 'dateTime') {\r\n return TableValueResolver.normalizeDateSortValue(cellValue);\r\n }\r\n\r\n if (typeof resolvedValue === 'number') {\r\n return resolvedValue;\r\n }\r\n\r\n if (typeof resolvedValue === 'boolean') {\r\n return resolvedValue ? 1 : 0;\r\n }\r\n\r\n if (cellValue instanceof Date) {\r\n return cellValue.getTime();\r\n }\r\n\r\n return TableValueResolver.normalizeTextSortValue(resolvedValue);\r\n }\r\n\r\n /**\r\n * Export/print value resolver — same pipeline as `getColumnResolvedValue`\r\n * except date / dateTime columns (and their entity counterparts) are\r\n * formatted via the MT date pipe so Excel and PDF show locale-aware dates\r\n * instead of raw ISO strings. Sort path keeps the ISO form for ordering.\r\n */\r\n private getColumnExportValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = this.getProperty(row, column.key);\r\n if (cellValue === null || cellValue === undefined) return null;\r\n\r\n const dateType = this.resolveDateColumnType(column, row);\r\n if (dateType) {\r\n const dateValue = TableValueResolver.resolveDateValue(\r\n column.type === 'entity'\r\n ? TableValueResolver.getEntityValueByType(cellValue, 'sort')\r\n : cellValue,\r\n );\r\n if (dateValue === null) return null;\r\n const formatted = this.dateFormat.transform(dateValue, dateType);\r\n return formatted || null;\r\n }\r\n\r\n return this.getColumnResolvedValue(row, column);\r\n }\r\n\r\n /**\r\n * Detects whether a column should be treated as a date for export purposes:\r\n * native `date` / `dateTime` types, or entity columns whose viewType is\r\n * `Date` / `DateTime`.\r\n */\r\n private resolveDateColumnType(\r\n column: ColumnDef,\r\n row: Record<string, unknown>,\r\n ): 'date' | 'dateTime' | null {\r\n if (column.type === 'date') return 'date';\r\n if (column.type === 'dateTime') return 'dateTime';\r\n if (column.type === 'entity') {\r\n const filterType = TableValueResolver.getColumnFilterType(column, row);\r\n if (filterType !== 'date') return null;\r\n const viewType = (column as { viewType?: unknown }).viewType;\r\n if (\r\n typeof viewType === 'string' &&\r\n viewType.toLowerCase() === 'datetime'\r\n ) {\r\n return 'dateTime';\r\n }\r\n const cellValue = this.getProperty(row, column.key);\r\n if (\r\n cellValue &&\r\n typeof cellValue === 'object' &&\r\n (cellValue as { viewType?: string }).viewType === 'DateTime'\r\n ) {\r\n return 'dateTime';\r\n }\r\n return 'date';\r\n }\r\n return null;\r\n }\r\n\r\n private getColumnResolvedValue(\r\n row: Record<string, unknown>,\r\n column: ColumnDef,\r\n ): string | number | boolean | null {\r\n const cellValue = this.getProperty(row, column.key);\r\n\r\n if (cellValue === null || cellValue === undefined) {\r\n return null;\r\n }\r\n\r\n if (column.type === 'entity') {\r\n return TableValueResolver.getEntityValueByType(cellValue, 'sort');\r\n }\r\n\r\n if (column.type === 'boolean') {\r\n return this.getBooleanProperty(row, column.key);\r\n }\r\n\r\n if (column.type === 'date' || column.type === 'dateTime') {\r\n const dateValue = TableValueResolver.resolveDateValue(cellValue);\r\n return dateValue instanceof Date ? dateValue.toISOString() : dateValue;\r\n }\r\n\r\n if (typeof cellValue === 'number' || typeof cellValue === 'boolean') {\r\n return cellValue;\r\n }\r\n\r\n if (cellValue instanceof Date) {\r\n return cellValue.toISOString();\r\n }\r\n\r\n return TableValueResolver.resolveDisplayValue(cellValue);\r\n }\r\n\r\n protected isRowSelected(row: Record<string, unknown>): boolean {\r\n const rowKey = this.getRowSelectionKey(row);\r\n\r\n if (rowKey !== null) {\r\n return this.selectedRowKeys().has(rowKey);\r\n }\r\n\r\n return this.transientSelectedRows().has(row);\r\n }\r\n\r\n protected getColumnMinWidth(column: ColumnDef): string | null {\r\n const width = column.width?.trim();\r\n if (!width || width.endsWith('%')) {\r\n return null;\r\n }\r\n\r\n return width;\r\n }\r\n\r\n private emitSelectionChange(): void {\r\n this.selectionChange.emit(this.getSelectedRows());\r\n }\r\n\r\n private getSelectedRows(): any[] {\r\n const dataKey = this.dataKey();\r\n if (!dataKey) {\r\n return Array.from(this.transientSelectedRows());\r\n }\r\n\r\n const selectedRowKeys = this.selectedRowKeys();\r\n return this.data().filter((row) => {\r\n const rowKey = this.getRowSelectionKey(row);\r\n return rowKey !== null && selectedRowKeys.has(rowKey);\r\n });\r\n }\r\n\r\n private getRowSelectionKey(row: Record<string, unknown>): string | null {\r\n const dataKey = this.dataKey();\r\n if (!dataKey) {\r\n return null;\r\n }\r\n\r\n const value = this.getProperty(row, dataKey);\r\n if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n return String(value);\r\n }\r\n\r\n private getNormalizedStorageKey(): string | null {\r\n const storageKey = this.storageKey()?.trim();\r\n return storageKey ? storageKey : null;\r\n }\r\n\r\n private getStorage(): Storage | null {\r\n if (typeof window === 'undefined') {\r\n return null;\r\n }\r\n\r\n return this.storageMode() === 'session'\r\n ? window.sessionStorage\r\n : window.localStorage;\r\n }\r\n\r\n private buildPersistedState(): PersistedTableState {\r\n return {\r\n pageSize: this.pageSize(),\r\n first: this.first(),\r\n currentPage: this.currentPage(),\r\n filterTerm: this.filterTerm(),\r\n filters: this.filters(),\r\n sortField: this.sortField(),\r\n sortDirection: this.sortDirection(),\r\n selectedRowKeys: this.dataKey() ? Array.from(this.selectedRowKeys()) : [],\r\n groupBy: this.groupBy(),\r\n };\r\n }\r\n\r\n private applyPersistedState(\r\n persistedState: PersistedTableState | null,\r\n ): void {\r\n this.transientSelectedRows.set(new Set());\r\n\r\n if (!persistedState) {\r\n this.selectedRowKeys.set(new Set());\r\n return;\r\n }\r\n\r\n const pageSize = this.normalizePersistedPageSize(\r\n this.toPositiveInteger(persistedState.pageSize),\r\n );\r\n if (pageSize !== null) {\r\n this.pageSize.set(pageSize);\r\n }\r\n\r\n const first = this.toNonNegativeInteger(persistedState.first);\r\n if (first !== null) {\r\n this.first.set(first);\r\n }\r\n\r\n const currentPage = this.toNonNegativeInteger(persistedState.currentPage);\r\n if (currentPage !== null) {\r\n this.currentPage.set(currentPage);\r\n } else if (first !== null && pageSize !== null) {\r\n this.currentPage.set(Math.floor(first / pageSize));\r\n }\r\n\r\n if (typeof persistedState.filterTerm === 'string') {\r\n this.filterTerm.set(persistedState.filterTerm);\r\n }\r\n\r\n if (persistedState.filters && typeof persistedState.filters === 'object') {\r\n this.filters.set(persistedState.filters);\r\n }\r\n\r\n this.sortField.set(\r\n typeof persistedState.sortField === 'string'\r\n ? persistedState.sortField\r\n : null,\r\n );\r\n\r\n this.sortDirection.set(\r\n persistedState.sortDirection === 'asc' ||\r\n persistedState.sortDirection === 'desc'\r\n ? persistedState.sortDirection\r\n : null,\r\n );\r\n\r\n this.selectedRowKeys.set(\r\n new Set(\r\n Array.isArray(persistedState.selectedRowKeys)\r\n ? persistedState.selectedRowKeys\r\n : [],\r\n ),\r\n );\r\n\r\n this.groupBy.set(\r\n typeof persistedState.groupBy === 'string' && persistedState.groupBy\r\n ? persistedState.groupBy\r\n : null,\r\n );\r\n }\r\n\r\n private shouldEmitLazyLoadAfterRestore(\r\n persistedState: PersistedTableState | null,\r\n ): boolean {\r\n if (!persistedState) {\r\n return false;\r\n }\r\n\r\n return (\r\n persistedState.pageSize !== undefined ||\r\n persistedState.first !== undefined ||\r\n persistedState.currentPage !== undefined ||\r\n persistedState.filterTerm !== undefined ||\r\n persistedState.filters !== undefined\r\n );\r\n }\r\n\r\n private readPersistedState(\r\n storage: Storage,\r\n storageKey: string,\r\n ): PersistedTableState | null {\r\n try {\r\n const raw = storage.getItem(storageKey);\r\n if (!raw) {\r\n return null;\r\n }\r\n\r\n const parsed = JSON.parse(raw) as PersistedTableState;\r\n return parsed && typeof parsed === 'object' ? parsed : null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private writePersistedState(\r\n storage: Storage,\r\n storageKey: string,\r\n state: PersistedTableState,\r\n ): void {\r\n try {\r\n storage.setItem(storageKey, JSON.stringify(state));\r\n } catch {\r\n // Ignore storage write failures.\r\n }\r\n }\r\n\r\n private toPositiveInteger(value: unknown): number | null {\r\n const normalized = Number(value);\r\n if (!Number.isFinite(normalized) || normalized <= 0) {\r\n return null;\r\n }\r\n\r\n return Math.trunc(normalized);\r\n }\r\n\r\n private normalizePersistedPageSize(value: number | null): number | null {\r\n if (value === null) {\r\n return null;\r\n }\r\n\r\n const allowedOptions = this.rowsPerPageOptions().filter(\r\n (option) => Number.isFinite(option) && option > 0,\r\n );\r\n\r\n if (!allowedOptions.length) {\r\n return value;\r\n }\r\n\r\n return allowedOptions.includes(value) ? value : allowedOptions[0]!;\r\n }\r\n\r\n private toNonNegativeInteger(value: unknown): number | null {\r\n const normalized = Number(value);\r\n if (!Number.isFinite(normalized) || normalized < 0) {\r\n return null;\r\n }\r\n\r\n return Math.trunc(normalized);\r\n }\r\n}\r\n","@if (!noCard()) {\r\n <mt-card>\r\n <ng-container *ngTemplateOutlet=\"tableContent\" />\r\n </mt-card>\r\n} @else {\r\n <ng-container *ngTemplateOutlet=\"tableContent\" />\r\n}\r\n\r\n<ng-template #tableContent>\r\n <div class=\"space-y-4 rounded-lg\">\r\n <div>\r\n <mt-table-caption\r\n [generalSearch]=\"generalSearch()\"\r\n [showFilters]=\"showFilters()\"\r\n [filterMode]=\"filterMode()\"\r\n [exportable]=\"exportable()\"\r\n [printable]=\"printable()\"\r\n [groupable]=\"groupable()\"\r\n [columns]=\"columns()\"\r\n [data]=\"data()\"\r\n [groupColumns]=\"grouping.groupableColumns()\"\r\n [tabs]=\"tabs()\"\r\n [tabsOptionLabel]=\"tabsOptionLabel()\"\r\n [tabsOptionValue]=\"tabsOptionValue()\"\r\n [actions]=\"actions()\"\r\n [captionStart]=\"captionStartContent() ?? null\"\r\n [captionEnd]=\"captionEndContent() ?? null\"\r\n [(activeTab)]=\"activeTab\"\r\n [(filters)]=\"filters\"\r\n [(filterTerm)]=\"filterTerm\"\r\n [(groupBy)]=\"groupBy\"\r\n (exportRequested)=\"exportExcel()\"\r\n (printRequested)=\"printPdf()\"\r\n (onTabChange)=\"tabChanged($event)\"\r\n (searchChange)=\"onSearchChange($event)\"\r\n (filterApplied)=\"onFilterApplied($event)\"\r\n (filterReset)=\"onFilterReset()\"\r\n />\r\n\r\n @if (!loading() && emptyContent() && data().length === 0) {\r\n <div\r\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\r\n </div>\r\n } @else {\r\n <div\r\n class=\"overflow-x-auto rounded-[10px] border border-surface-200 bg-white\"\r\n >\r\n <p-table\r\n [value]=\"displayData()\"\r\n [columns]=\"renderedColumns()\"\r\n [size]=\"size()\"\r\n [showGridlines]=\"showGridlines()\"\r\n [stripedRows]=\"stripedRows()\"\r\n [lazy]=\"lazy()\"\r\n [totalRecords]=\"totalRecords()\"\r\n [reorderableColumns]=\"reorderableColumns()\"\r\n [reorderableRows]=\"reorderableRows()\"\r\n [dataKey]=\"dataKey()\"\r\n [first]=\"first()\"\r\n [rows]=\"pageSize()\"\r\n [exportFilename]=\"exportFilename()\"\r\n [rowGroupMode]=\"grouping.groupingActive() ? 'subheader' : null\"\r\n [groupRowsBy]=\"grouping.activeGroupColumn()?.key ?? null\"\r\n [sortField]=\"sortField()\"\r\n [sortOrder]=\"sortDirection() === 'desc' ? -1 : 1\"\r\n (onPage)=\"onTablePage($event)\"\r\n (onLazyLoad)=\"handleLazyLoad($event)\"\r\n (onColReorder)=\"onColumnReorder($event)\"\r\n (onRowReorder)=\"onRowReorder($event)\"\r\n paginator\r\n paginatorStyleClass=\"hidden!\"\r\n class=\"mt-table min-w-full align-middle text-sm\"\r\n [class.table-auto]=\"tableLayout() === 'auto'\"\r\n [class.table-fixed]=\"tableLayout() === 'fixed'\"\r\n >\r\n <ng-template\r\n #header\r\n let-columns\r\n class=\"bg-surface-50 dark:bg-surface-950 border-b border-surface-300 dark:border-surface-500\"\r\n >\r\n <tr>\r\n @if (reorderableRows()) {\r\n <th class=\"w-10\"></th>\r\n }\r\n @if (selectableRows()) {\r\n <th class=\"w-12 text-start\">\r\n <mt-checkbox-field\r\n [ngModel]=\"allSelectedOnPage()\"\r\n (ngModelChange)=\"toggleAllRowsOnPage()\"\r\n ></mt-checkbox-field>\r\n </th>\r\n }\r\n\r\n @for (col of columns; track col.key || col.label || $index) {\r\n @if (reorderableColumns()) {\r\n <th\r\n pReorderableColumn\r\n class=\"text-start text-sm font-normal text-[#323232]\"\r\n >\r\n <div class=\"flex items-center gap-2\">\r\n {{ col.label }}\r\n @if (\r\n isColumnFilterMode() && getFilterableColumn(col.key);\r\n as filterableCol\r\n ) {\r\n <mt-table-column-filter\r\n [column]=\"filterableCol\"\r\n [value]=\"filters()[col.key]\"\r\n (filterChange)=\"\r\n onColumnFilterChange(col.key, $event)\r\n \"\r\n />\r\n }\r\n <mt-button\r\n styleClass=\"cursor-move!\"\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n icon=\"general.menu-05\"\r\n ></mt-button>\r\n </div>\r\n </th>\r\n } @else {\r\n <th\r\n class=\"text-start text-sm font-normal text-[#323232]\"\r\n [style.width]=\"col.width ?? null\"\r\n [style.minWidth]=\"getColumnMinWidth(col)\"\r\n >\r\n <div class=\"inline-flex items-center gap-1\">\r\n @if (isColumnSortable(col)) {\r\n <button\r\n type=\"button\"\r\n class=\"inline-flex items-center gap-2 cursor-pointer\"\r\n (click)=\"toggleSort(col)\"\r\n >\r\n <span>{{ col.label }}</span>\r\n <mt-icon\r\n [icon]=\"getSortIcon(col)\"\r\n class=\"text-xs text-gray-400\"\r\n />\r\n </button>\r\n } @else {\r\n {{ col.label }}\r\n }\r\n @if (\r\n isColumnFilterMode() && getFilterableColumn(col.key);\r\n as filterableCol\r\n ) {\r\n <mt-table-column-filter\r\n [column]=\"filterableCol\"\r\n [value]=\"filters()[col.key]\"\r\n (filterChange)=\"\r\n onColumnFilterChange(col.key, $event)\r\n \"\r\n />\r\n }\r\n </div>\r\n </th>\r\n }\r\n }\r\n\r\n @if (rowActions().length > 0) {\r\n <th class=\"text-end! text-sm font-normal text-[#323232]\">\r\n {{ \"components.table.actions\" | transloco }}\r\n </th>\r\n }\r\n </tr>\r\n @if (updating()) {\r\n <tr>\r\n <th [attr.colspan]=\"totalColumnSpan()\" class=\"!p-0\">\r\n <p-progressBar\r\n mode=\"indeterminate\"\r\n [style]=\"{ height: '4px' }\"\r\n />\r\n </th>\r\n </tr>\r\n }\r\n </ng-template>\r\n <ng-template\r\n #body\r\n let-row\r\n let-columns=\"columns\"\r\n let-index=\"rowIndex\"\r\n class=\"divide-y divide-gray-200\"\r\n >\r\n @if (loading()) {\r\n <tr>\r\n @if (reorderableRows()) {\r\n <td><p-skeleton /></td>\r\n }\r\n @if (selectableRows()) {\r\n <td><p-skeleton /></td>\r\n }\r\n @for (col of columns; track col.key || col.label || $index) {\r\n <td><p-skeleton /></td>\r\n }\r\n @if (rowActions().length > 0) {\r\n <td><p-skeleton /></td>\r\n }\r\n </tr>\r\n } @else {\r\n <tr\r\n class=\"border-surface-300 transition-colors duration-150 dark:border-surface-500\"\r\n [class.mt-table-clickable-row]=\"clickableRows()\"\r\n [class.mt-table-status-entity-row]=\"\r\n getStatusEntityAccentColor(row)\r\n \"\r\n [style.--mt-table-status-accent]=\"\r\n getStatusEntityAccentColor(row)\r\n \"\r\n [class.cursor-pointer]=\"clickableRows()\"\r\n [pReorderableRow]=\"index\"\r\n (click)=\"onRowClick($event, row)\"\r\n >\r\n @if (reorderableRows()) {\r\n <td class=\"w-10 text-center\">\r\n <mt-button\r\n styleClass=\"cursor-move!\"\r\n pReorderableRowHandle\r\n severity=\"secondary\"\r\n variant=\"outlined\"\r\n size=\"small\"\r\n icon=\"general.menu-05\"\r\n ></mt-button>\r\n <!-- <mt-icon-->\r\n <!-- icon=\"general.menu-05\"-->\r\n <!-- class=\"cursor-move text-gray-500\"-->\r\n <!-- pReorderableRowHandle-->\r\n <!-- ></mt-icon>-->\r\n </td>\r\n }\r\n @if (selectableRows()) {\r\n <td class=\"w-12\">\r\n <mt-checkbox-field\r\n [ngModel]=\"isRowSelected(row)\"\r\n (ngModelChange)=\"toggleRow(row)\"\r\n ></mt-checkbox-field>\r\n </td>\r\n }\r\n\r\n @for (col of columns; track col.key || col.label || $index) {\r\n <td\r\n class=\"text-sm font-normal text-[#4b4b4b]\"\r\n [style.width]=\"col.width ?? null\"\r\n [style.minWidth]=\"getColumnMinWidth(col)\"\r\n >\r\n @switch (col.type) {\r\n @case (\"boolean\") {\r\n @if (isCellClickFilterable(col, row)) {\r\n <span\r\n data-row-click-ignore=\"true\"\r\n class=\"inline-flex items-center cursor-pointer px-1.5 py-0.5 rounded transition-colors\"\r\n [class.ring-2]=\"isCellFilterActive(row, col)\"\r\n [class.ring-primary-400]=\"\r\n isCellFilterActive(row, col)\r\n \"\r\n [class.hover:underline]=\"\r\n !isCellFilterActive(row, col)\r\n \"\r\n (click)=\"onCellFilterClick($event, row, col)\"\r\n >\r\n {{\r\n getBooleanProperty(row, col.key) ? \"Yes\" : \"No\"\r\n }}\r\n </span>\r\n } @else {\r\n <mt-toggle-field\r\n [disabled]=\"col.readonly\"\r\n [ngModel]=\"getBooleanProperty(row, col.key)\"\r\n (ngModelChange)=\"\r\n onCellChange(row, col.key, $event, 'boolean')\r\n \"\r\n ></mt-toggle-field>\r\n }\r\n }\r\n @case (\"date\") {\r\n {{\r\n getDateProperty(row, col.key) | mtDateFormat: \"date\"\r\n }}\r\n }\r\n @case (\"dateTime\") {\r\n {{\r\n getDateProperty(row, col.key)\r\n | mtDateFormat: \"dateTime\"\r\n }}\r\n }\r\n @case (\"user\") {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n filterableCell;\r\n context: { row: row, col: col }\r\n \"\r\n ></ng-container>\r\n }\r\n @case (\"status\") {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n filterableCell;\r\n context: { row: row, col: col }\r\n \"\r\n ></ng-container>\r\n }\r\n @case (\"entity\") {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n filterableCell;\r\n context: { row: row, col: col }\r\n \"\r\n ></ng-container>\r\n }\r\n @case (\"custom\") {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n col.customCellTpl;\r\n context: { $implicit: row }\r\n \"\r\n >\r\n </ng-container>\r\n }\r\n @default {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n </td>\r\n }\r\n\r\n @if (rowActions().length > 0) {\r\n <td class=\"text-right\">\r\n @if (actionShape() === \"popover\") {\r\n <div class=\"flex items-center justify-end\">\r\n <mt-button\r\n icon=\"general.dots-vertical\"\r\n severity=\"secondary\"\r\n variant=\"text\"\r\n size=\"large\"\r\n (click)=\"rowPopover.toggle($event)\"\r\n data-row-click-ignore=\"true\"\r\n ></mt-button>\r\n <p-popover #rowPopover appendTo=\"body\">\r\n <div class=\"flex flex-col min-w-40\">\r\n @for (\r\n action of getVisibleRowActions(row);\r\n track $index\r\n ) {\r\n <button\r\n class=\"flex items-center gap-2 px-2 cursor-pointer py-2 text-sm rounded transition-colors\"\r\n [class]=\"\r\n action.color === 'danger'\r\n ? 'text-red-600 hover:bg-red-50 dark:hover:bg-red-950'\r\n : 'text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-surface-700'\r\n \"\r\n (click)=\"\r\n rowAction($event, action, row);\r\n rowPopover.hide()\r\n \"\r\n >\r\n @if (action.icon) {\r\n <mt-icon\r\n [icon]=\"action.icon\"\r\n class=\"text-base\"\r\n />\r\n }\r\n <span>{{\r\n action.label || action.tooltip\r\n }}</span>\r\n </button>\r\n }\r\n </div>\r\n </p-popover>\r\n </div>\r\n } @else {\r\n <div class=\"flex items-center justify-end space-x-2\">\r\n @for (action of rowActions(); track $index) {\r\n @let hidden = action.hidden?.(row);\r\n @if (!hidden) {\r\n <mt-button\r\n [icon]=\"action.icon\"\r\n [severity]=\"action.color\"\r\n [variant]=\"action.variant\"\r\n [size]=\"action.size || 'small'\"\r\n (click)=\"rowAction($event, action, row)\"\r\n [tooltip]=\"action.tooltip\"\r\n [label]=\"action.label\"\r\n [loading]=\"resolveActionLoading(action, row)\"\r\n ></mt-button>\r\n }\r\n }\r\n </div>\r\n }\r\n </td>\r\n }\r\n </tr>\r\n }\r\n </ng-template>\r\n <ng-template #filterableCell let-row=\"row\" let-col=\"col\">\r\n @let filterable = isCellClickFilterable(col, row);\r\n @let active = isCellFilterActive(row, col);\r\n @if (filterable) {\r\n <span\r\n data-row-click-ignore=\"true\"\r\n class=\"flex w-full items-center rounded transition-colors cursor-pointer\"\r\n [class.ring-2]=\"active\"\r\n [class.ring-primary-400]=\"active\"\r\n (click)=\"onCellFilterClick($event, row, col)\"\r\n >\r\n @if (resolveCellEntityData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n </span>\r\n } @else {\r\n @if (resolveCellEntityData(row, col); as entityData) {\r\n <mt-entity-preview\r\n [data]=\"entityData\"\r\n attachmentShape=\"compact\"\r\n ></mt-entity-preview>\r\n } @else {\r\n {{ getProperty(row, col.key) }}\r\n }\r\n }\r\n </ng-template>\r\n <ng-template #groupheader let-row>\r\n @if (grouping.groupingActive()) {\r\n <tr\r\n class=\"mt-group-header\"\r\n [style.--mt-group-accent]=\"\r\n grouping.getGroupAccentColor(row) ??\r\n 'var(--p-primary-color)'\r\n \"\r\n >\r\n <td [attr.colspan]=\"totalColumnSpan()\" class=\"!p-0\">\r\n <div\r\n class=\"flex items-center gap-3 px-4 py-2 bg-surface-50 dark:bg-surface-900 border-y border-surface-200 dark:border-surface-700\"\r\n >\r\n <span\r\n class=\"mt-group-header__accent inline-block w-1 h-5 rounded-full\"\r\n ></span>\r\n <span\r\n class=\"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400\"\r\n >\r\n {{ grouping.activeGroupColumn()?.label }}\r\n </span>\r\n <span\r\n class=\"text-sm font-semibold text-gray-900 dark:text-gray-100\"\r\n >\r\n {{ grouping.getGroupLabel(row) }}\r\n </span>\r\n <span\r\n class=\"ml-auto inline-flex items-center gap-1 text-xs px-2 py-0.5 rounded-full bg-primary-50 text-primary-700 dark:bg-primary-950 dark:text-primary-300\"\r\n >\r\n {{ grouping.getGroupCount(row) }}\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n }\r\n </ng-template>\r\n <ng-template #emptymessage>\r\n <tr>\r\n <td [attr.colspan]=\"totalColumnSpan()\" class=\"text-center\">\r\n <div\r\n class=\"flex min-h-44 flex-col items-center justify-center gap-3 py-8 text-center\"\r\n >\r\n <svg\r\n width=\"152\"\r\n height=\"120\"\r\n viewBox=\"0 0 152 120\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <circle cx=\"76\" cy=\"52\" r=\"52\" fill=\"#E9EAEB\" />\r\n <g filter=\"url(#filter0_ddd_2474_28277)\">\r\n <path\r\n d=\"M77.6 16C66.8273 16 57.2978 21.3233 51.4987 29.4829C49.605 29.0363 47.6301 28.8 45.6 28.8C31.4615 28.8 20 40.2615 20 54.4C20 68.5385 31.4615 80 45.6 80L109.6 80C121.971 80 132 69.9712 132 57.6C132 45.2288 121.971 35.2 109.6 35.2C108.721 35.2 107.854 35.2506 107.002 35.349C102.098 23.9677 90.7797 16 77.6 16Z\"\r\n fill=\"#FAFAFA\"\r\n />\r\n <ellipse\r\n cx=\"45.6\"\r\n cy=\"54.3998\"\r\n rx=\"25.6\"\r\n ry=\"25.6\"\r\n fill=\"url(#paint0_linear_2474_28277)\"\r\n />\r\n <circle\r\n cx=\"77.6016\"\r\n cy=\"48\"\r\n r=\"32\"\r\n fill=\"url(#paint1_linear_2474_28277)\"\r\n />\r\n <ellipse\r\n cx=\"109.599\"\r\n cy=\"57.6002\"\r\n rx=\"22.4\"\r\n ry=\"22.4\"\r\n fill=\"url(#paint2_linear_2474_28277)\"\r\n />\r\n </g>\r\n <circle cx=\"21\" cy=\"19\" r=\"5\" fill=\"#F5F5F5\" />\r\n <circle cx=\"18\" cy=\"109\" r=\"7\" fill=\"#F5F5F5\" />\r\n <circle cx=\"145\" cy=\"35\" r=\"7\" fill=\"#F5F5F5\" />\r\n <circle cx=\"134\" cy=\"8\" r=\"4\" fill=\"#F5F5F5\" />\r\n <foreignObject x=\"44\" y=\"54\" width=\"64\" height=\"64\">\r\n <div\r\n xmlns=\"http://www.w3.org/1999/xhtml\"\r\n style=\"\r\n backdrop-filter: blur(4px);\r\n clip-path: url(#bgblur_0_2474_28277_clip_path);\r\n height: 100%;\r\n width: 100%;\r\n \"\r\n ></div>\r\n </foreignObject>\r\n <g data-figma-bg-blur-radius=\"8\">\r\n <path\r\n d=\"M52 86C52 72.7452 62.7452 62 76 62C89.2548 62 100 72.7452 100 86C100 99.2548 89.2548 110 76 110C62.7452 110 52 99.2548 52 86Z\"\r\n fill=\"#344054\"\r\n fill-opacity=\"0.4\"\r\n />\r\n <path\r\n d=\"M85 95L81.5001 91.5M84 85.5C84 90.1944 80.1944 94 75.5 94C70.8056 94 67 90.1944 67 85.5C67 80.8056 70.8056 77 75.5 77C80.1944 77 84 80.8056 84 85.5Z\"\r\n stroke=\"white\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </g>\r\n <defs>\r\n <filter\r\n id=\"filter0_ddd_2474_28277\"\r\n x=\"0\"\r\n y=\"16\"\r\n width=\"152\"\r\n height=\"104\"\r\n filterUnits=\"userSpaceOnUse\"\r\n color-interpolation-filters=\"sRGB\"\r\n >\r\n <feFlood\r\n flood-opacity=\"0\"\r\n result=\"BackgroundImageFix\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"1.5\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect1_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"3\" />\r\n <feGaussianBlur stdDeviation=\"1.5\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.04 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"BackgroundImageFix\"\r\n result=\"effect1_dropShadow_2474_28277\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect2_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"8\" />\r\n <feGaussianBlur stdDeviation=\"4\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.03 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"effect1_dropShadow_2474_28277\"\r\n result=\"effect2_dropShadow_2474_28277\"\r\n />\r\n <feColorMatrix\r\n in=\"SourceAlpha\"\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\r\n result=\"hardAlpha\"\r\n />\r\n <feMorphology\r\n radius=\"4\"\r\n operator=\"erode\"\r\n in=\"SourceAlpha\"\r\n result=\"effect3_dropShadow_2474_28277\"\r\n />\r\n <feOffset dy=\"20\" />\r\n <feGaussianBlur stdDeviation=\"12\" />\r\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\r\n <feColorMatrix\r\n type=\"matrix\"\r\n values=\"0 0 0 0 0.0392157 0 0 0 0 0.0496732 0 0 0 0 0.0705882 0 0 0 0.08 0\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in2=\"effect2_dropShadow_2474_28277\"\r\n result=\"effect3_dropShadow_2474_28277\"\r\n />\r\n <feBlend\r\n mode=\"normal\"\r\n in=\"SourceGraphic\"\r\n in2=\"effect3_dropShadow_2474_28277\"\r\n result=\"shape\"\r\n />\r\n </filter>\r\n <clipPath\r\n id=\"bgblur_0_2474_28277_clip_path\"\r\n transform=\"translate(-44 -54)\"\r\n >\r\n <path\r\n d=\"M52 86C52 72.7452 62.7452 62 76 62C89.2548 62 100 72.7452 100 86C100 99.2548 89.2548 110 76 110C62.7452 110 52 99.2548 52 86Z\"\r\n />\r\n </clipPath>\r\n <linearGradient\r\n id=\"paint0_linear_2474_28277\"\r\n x1=\"25.9429\"\r\n y1=\"37.4855\"\r\n x2=\"71.2\"\r\n y2=\"79.9998\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop\r\n offset=\"0.350715\"\r\n stop-color=\"white\"\r\n stop-opacity=\"0\"\r\n />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint1_linear_2474_28277\"\r\n x1=\"53.0301\"\r\n y1=\"26.8571\"\r\n x2=\"109.602\"\r\n y2=\"80\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop\r\n offset=\"0.350715\"\r\n stop-color=\"white\"\r\n stop-opacity=\"0\"\r\n />\r\n </linearGradient>\r\n <linearGradient\r\n id=\"paint2_linear_2474_28277\"\r\n x1=\"92.3992\"\r\n y1=\"42.8002\"\r\n x2=\"131.999\"\r\n y2=\"80.0002\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color=\"#D0D5DD\" />\r\n <stop\r\n offset=\"0.350715\"\r\n stop-color=\"white\"\r\n stop-opacity=\"0\"\r\n />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n <p class=\"m-0 text-base font-medium text-surface-500\">\r\n {{ \"components.table.no-data-found\" | transloco }}\r\n </p>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-template>\r\n </p-table>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div\r\n class=\"flex flex-col gap-3 pb-3 px-4\"\r\n [class]=\"'items-' + paginatorPosition()\"\r\n >\r\n <mt-paginator\r\n [(rows)]=\"pageSize\"\r\n [(first)]=\"first\"\r\n [(page)]=\"currentPage\"\r\n [totalRecords]=\"totalRecords()\"\r\n [alwaysShow]=\"alwaysShowPaginator()\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\r\n (onPageChange)=\"onPaginatorPage($event)\"\r\n ></mt-paginator>\r\n </div>\r\n </div>\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i5"],"mappings":"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"}