@masterteam/components 0.0.142 → 0.0.144

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.
Files changed (32) hide show
  1. package/assets/common.css +1 -1
  2. package/fesm2022/masterteam-components-business-fields.mjs +1 -1
  3. package/fesm2022/masterteam-components-business-fields.mjs.map +1 -1
  4. package/fesm2022/masterteam-components-client-page-menu.mjs +2 -2
  5. package/fesm2022/masterteam-components-client-page-menu.mjs.map +1 -1
  6. package/fesm2022/masterteam-components-client-page.mjs +4 -8
  7. package/fesm2022/masterteam-components-client-page.mjs.map +1 -1
  8. package/fesm2022/masterteam-components-drawer.mjs +2 -2
  9. package/fesm2022/masterteam-components-drawer.mjs.map +1 -1
  10. package/fesm2022/masterteam-components-entities.mjs +269 -63
  11. package/fesm2022/masterteam-components-entities.mjs.map +1 -1
  12. package/fesm2022/masterteam-components-formula.mjs +2 -2
  13. package/fesm2022/masterteam-components-formula.mjs.map +1 -1
  14. package/fesm2022/masterteam-components-paginator.mjs +2 -2
  15. package/fesm2022/masterteam-components-paginator.mjs.map +1 -1
  16. package/fesm2022/masterteam-components-sidebar.mjs +2 -2
  17. package/fesm2022/masterteam-components-sidebar.mjs.map +1 -1
  18. package/fesm2022/masterteam-components-slider-field.mjs +2 -2
  19. package/fesm2022/masterteam-components-slider-field.mjs.map +1 -1
  20. package/fesm2022/masterteam-components-statistic-card.mjs +2 -2
  21. package/fesm2022/masterteam-components-statistic-card.mjs.map +1 -1
  22. package/fesm2022/masterteam-components-table.mjs +60 -14
  23. package/fesm2022/masterteam-components-table.mjs.map +1 -1
  24. package/fesm2022/masterteam-components-topbar.mjs +2 -2
  25. package/fesm2022/masterteam-components-topbar.mjs.map +1 -1
  26. package/fesm2022/masterteam-components.mjs +138 -78
  27. package/fesm2022/masterteam-components.mjs.map +1 -1
  28. package/package.json +1 -1
  29. package/types/masterteam-components-client-page.d.ts +0 -2
  30. package/types/masterteam-components-entities.d.ts +81 -14
  31. package/types/masterteam-components-table.d.ts +6 -2
  32. package/types/masterteam-components.d.ts +22 -3
@@ -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') {\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 === 'boolean') {\r\n return TableValueResolver.resolveBooleanValue(cellValue);\r\n }\r\n\r\n return TableValueResolver.resolveDisplayValue(cellValue);\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 if (value === null || value === undefined || value === '') {\r\n return null;\r\n }\r\n\r\n const timestamp =\r\n value instanceof Date\r\n ? value.getTime()\r\n : new Date(String(value)).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 {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { DatePipe, NgTemplateOutlet } from '@angular/common';\nimport {\n ColumnDef,\n TableAction,\n TableActionShape,\n CellChangeEvent,\n ColumnTypeForActionCell,\n TableFilters,\n FilterValue,\n} from './table-types';\nimport { TableFilter } from './table-filter/table-filter';\nimport { ToggleField } from '@masterteam/components/toggle-field';\nimport { FormsModule } from '@angular/forms';\nimport { Button } from '@masterteam/components/button';\nimport { TextField } from '@masterteam/components/text-field';\nimport { Paginator } from '@masterteam/components/paginator';\nimport { CheckboxField } from '@masterteam/components/checkbox-field';\nimport { TableModule, TablePageEvent } from 'primeng/table';\nimport { Tabs } from '@masterteam/components/tabs';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { ProgressBarModule } from 'primeng/progressbar';\nimport { ConfirmationService } from '@masterteam/components/confirmation';\nimport { TranslocoModule } from '@jsverse/transloco';\nimport {\n EntityData,\n EntityPreview,\n EntityStatusValue,\n} from '@masterteam/components/entities';\nimport { PopoverModule } from 'primeng/popover';\nimport { Icon, MTIcon } from '@masterteam/icons';\nimport { TableValueResolver } from './table-value.utils';\nimport * as XLSX from 'xlsx';\n\ninterface PersistedTableState {\n pageSize?: number;\n first?: number;\n currentPage?: number;\n filterTerm?: string;\n filters?: TableFilters;\n sortField?: string | null;\n sortDirection?: 'asc' | 'desc' | null;\n selectedRowKeys?: string[];\n}\n\n@Component({\n selector: 'mt-table',\n templateUrl: './table.html',\n styleUrls: ['./table.css'],\n standalone: true,\n imports: [\n TableModule,\n NgTemplateOutlet,\n DatePipe,\n ToggleField,\n FormsModule,\n Button,\n TextField,\n Paginator,\n CheckboxField,\n Tabs,\n SkeletonModule,\n ProgressBarModule,\n TranslocoModule,\n TableFilter,\n EntityPreview,\n PopoverModule,\n Icon,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class Table {\n selectionChange = output<any[]>();\n cellChange = output<CellChangeEvent>();\n lazyLoad = output<any>();\n columnReorder = output<any>();\n rowReorder = output<any>();\n rowClick = output<any>();\n\n filters = model<TableFilters>({});\n\n data = input.required<any[]>();\n columns = input.required<ColumnDef[]>();\n rowActions = input<TableAction[]>([]);\n size = input<'small' | 'large' | undefined>(undefined);\n showGridlines = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n stripedRows = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n selectableRows = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n clickableRows = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n generalSearch = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n lazyLocalSearch = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n showFilters = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n loading = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n updating = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n lazy = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n lazyLocalSort = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n lazyTotalRecords = input<number>();\n reorderableColumns = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n reorderableRows = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n dataKey = input<string>();\n storageKey = input<string | null>(null);\n storageMode = input<'local' | 'session'>('local');\n exportable = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n exportFilename = input<string>('download');\n actionShape = input<TableActionShape>('flat');\n tableLayout = input<'fixed' | 'auto'>('fixed');\n\n // Tabs inputs and outputs\n tabs = input<any[]>();\n tabsOptionLabel = input<string>();\n tabsOptionValue = input<string>();\n activeTab = model<any>();\n onTabChange = output<any>();\n\n // Table actions inputs and outputs\n actions = input<TableAction[]>([]);\n\n // Content TemplateRefs\n captionStartContent = contentChild<TemplateRef<any>>('captionStart');\n captionEndContent = contentChild<TemplateRef<any>>('captionEnd');\n emptyContent = contentChild<TemplateRef<any>>('empty');\n\n paginatorPosition = input<'end' | 'start' | 'center'>('end');\n alwaysShowPaginator = input<boolean, unknown>(false, {\n transform: booleanAttribute,\n });\n rowsPerPageOptions = input<number[]>([5, 10, 20, 50, 100]);\n pageSize = model<number>(10);\n currentPage = model<number>(0);\n first = model<number>(0);\n filterTerm = model<string>('');\n sortField = signal<string | null>(null);\n sortDirection = signal<'asc' | 'desc' | null>(null);\n confirmationService = inject(ConfirmationService);\n\n protected selectedRowKeys = signal<Set<string>>(new Set());\n protected transientSelectedRows = signal<Set<any>>(new Set());\n private readonly hydratedStorageKey = signal<string | null>(null);\n private readonly storageHydrated = signal(false);\n\n protected activeFilterCount = computed(() => {\n const filters = this.filters();\n return Object.values(filters).filter(\n (value) => value !== null && value !== undefined && value !== '',\n ).length;\n });\n\n protected filteredData = computed(() => {\n const data = this.data();\n const applyLocalSearch = !this.lazy() || this.lazyLocalSearch();\n const applyLocalSort = !this.lazy() || this.lazyLocalSort();\n const searchTerm = applyLocalSearch ? this.filterTerm().toLowerCase() : '';\n const filters = this.filters();\n const filterKeys = this.lazy() ? [] : Object.keys(filters);\n let result = data;\n\n // Apply search term\n if (searchTerm !== '') {\n result = result.filter((item) =>\n Object.values(item).some(\n (value) =>\n typeof value === 'string' &&\n value.toLowerCase().includes(searchTerm),\n ),\n );\n }\n\n // Apply column filters\n if (filterKeys.length > 0) {\n result = result.filter((item) =>\n filterKeys.every((key) => this.matchesFilter(item, key, filters[key])),\n );\n }\n\n return applyLocalSort ? this.sortData(result) : result;\n });\n\n protected displayData = computed(() => {\n if (this.loading()) {\n return Array.from({ length: this.pageSize() }, () => ({}));\n }\n return this.filteredData();\n });\n\n protected totalRecords = computed(() => {\n if (this.lazy() && this.lazyTotalRecords() !== undefined) {\n return this.lazyTotalRecords() as number;\n }\n\n return this.filteredData().length;\n });\n\n // TODO: remove after updating the toggle and checkbox logic\n protected paginatedData = computed(() => {\n const data = this.filteredData();\n const first = this.first();\n const pageSize = this.pageSize();\n if (this.lazy()) {\n return data;\n }\n return data.slice(first, first + pageSize);\n });\n\n protected allSelectedOnPage = computed(() => {\n const pageData = this.paginatedData();\n if (pageData.length === 0) return false;\n return pageData.every((row) => this.isRowSelected(row));\n });\n\n constructor() {\n effect(() => {\n const storageKey = this.getNormalizedStorageKey();\n const storage = this.getStorage();\n const previousStorageKey = this.hydratedStorageKey();\n\n this.storageHydrated.set(false);\n\n if (!storageKey || !storage) {\n this.hydratedStorageKey.set(storageKey);\n this.storageHydrated.set(true);\n return;\n }\n\n if (previousStorageKey === storageKey) {\n this.storageHydrated.set(true);\n return;\n }\n\n const persistedState = this.readPersistedState(storage, storageKey);\n this.applyPersistedState(persistedState);\n this.hydratedStorageKey.set(storageKey);\n this.storageHydrated.set(true);\n\n if (this.lazy() && this.shouldEmitLazyLoadAfterRestore(persistedState)) {\n queueMicrotask(() => this.emitLazyLoad({}));\n }\n });\n\n effect(() => {\n const storageKey = this.getNormalizedStorageKey();\n const storage = this.getStorage();\n\n if (\n !storageKey ||\n !storage ||\n !this.storageHydrated() ||\n this.hydratedStorageKey() !== storageKey\n ) {\n return;\n }\n\n this.writePersistedState(storage, storageKey, this.buildPersistedState());\n });\n\n effect(() => {\n if (this.lazy()) {\n return;\n }\n\n const totalRecords = this.totalRecords();\n const pageSize = this.pageSize();\n const currentFirst = this.first();\n\n if (pageSize <= 0) {\n return;\n }\n\n const maxFirst =\n totalRecords > 0\n ? Math.floor((totalRecords - 1) / pageSize) * pageSize\n : 0;\n const normalizedFirst = Math.min(currentFirst, maxFirst);\n const normalizedPage = Math.floor(normalizedFirst / pageSize);\n\n if (normalizedFirst !== currentFirst) {\n this.first.set(normalizedFirst);\n }\n\n if (this.currentPage() !== normalizedPage) {\n this.currentPage.set(normalizedPage);\n }\n });\n }\n\n onFilterApplied(filters: TableFilters): void {\n this.filters.set(filters);\n this.first.set(0);\n this.currentPage.set(0);\n\n if (this.lazy()) {\n this.emitLazyLoad({});\n }\n }\n\n onFilterReset(): void {\n this.filters.set({});\n this.first.set(0);\n this.currentPage.set(0);\n\n if (this.lazy()) {\n this.emitLazyLoad({});\n }\n }\n\n protected matchesFilter(\n item: any,\n key: string,\n filterValue: FilterValue | any,\n ): boolean {\n if (\n filterValue === null ||\n filterValue === undefined ||\n filterValue === ''\n ) {\n return true;\n }\n\n const column = this.columns().find((col) => col.key === key);\n const itemValue = this.getProperty(item, key);\n const normalizedFilterValue = column\n ? TableValueResolver.getColumnFilterValue(item, column)\n : TableValueResolver.resolveDisplayValue(itemValue);\n const filterType = column\n ? TableValueResolver.getColumnFilterType(column, item)\n : null;\n\n // Date range filter\n if (typeof filterValue === 'object') {\n if (filterValue.from || filterValue.to) {\n const itemDateValue =\n filterType === 'date'\n ? typeof normalizedFilterValue === 'number'\n ? normalizedFilterValue\n : null\n : itemValue instanceof Date\n ? itemValue.getTime()\n : new Date(String(itemValue)).getTime();\n\n if (\n itemDateValue === null ||\n itemDateValue === undefined ||\n Number.isNaN(itemDateValue)\n ) {\n return true;\n }\n\n if (\n filterValue.from &&\n itemDateValue < new Date(filterValue.from).getTime()\n ) {\n return false;\n }\n if (\n filterValue.to &&\n itemDateValue > new Date(filterValue.to).getTime()\n ) {\n return false;\n }\n return true;\n } else if (filterValue?.userName) {\n const normalizedItemUser = itemValue;\n if (!normalizedItemUser) return false;\n\n return (\n normalizedItemUser.id === filterValue?.id ||\n normalizedItemUser.userName === filterValue?.userName ||\n normalizedItemUser.displayName === filterValue?.displayName\n );\n }\n }\n\n // Boolean filter\n if (typeof filterValue === 'boolean') {\n return normalizedFilterValue === filterValue;\n }\n\n // Text filter\n if (\n typeof normalizedFilterValue === 'string' ||\n typeof normalizedFilterValue === 'number'\n ) {\n return String(normalizedFilterValue)\n .toLowerCase()\n .includes(String(filterValue).toLowerCase());\n }\n\n return normalizedFilterValue === filterValue;\n }\n\n toggleRow(row: any): void {\n const rowKey = this.getRowSelectionKey(row);\n\n if (rowKey !== null) {\n const nextSelection = new Set(this.selectedRowKeys());\n if (nextSelection.has(rowKey)) {\n nextSelection.delete(rowKey);\n } else {\n nextSelection.add(rowKey);\n }\n this.selectedRowKeys.set(nextSelection);\n } else {\n const nextSelection = new Set(this.transientSelectedRows());\n if (nextSelection.has(row)) {\n nextSelection.delete(row);\n } else {\n nextSelection.add(row);\n }\n this.transientSelectedRows.set(nextSelection);\n }\n\n this.emitSelectionChange();\n }\n\n toggleAllRowsOnPage(): void {\n const pageData = this.paginatedData();\n const allSelected = this.allSelectedOnPage();\n const nextSelectedRowKeys = new Set(this.selectedRowKeys());\n const nextTransientSelection = new Set(this.transientSelectedRows());\n\n pageData.forEach((row) => {\n const rowKey = this.getRowSelectionKey(row);\n if (rowKey !== null) {\n if (allSelected) {\n nextSelectedRowKeys.delete(rowKey);\n } else {\n nextSelectedRowKeys.add(rowKey);\n }\n return;\n }\n\n if (allSelected) {\n nextTransientSelection.delete(row);\n } else {\n nextTransientSelection.add(row);\n }\n });\n\n this.selectedRowKeys.set(nextSelectedRowKeys);\n this.transientSelectedRows.set(nextTransientSelection);\n this.emitSelectionChange();\n }\n\n getProperty(obj: any, key: string): any {\n return TableValueResolver.getProperty(obj, key);\n }\n\n getEntityPreviewData(row: any, col: ColumnDef): EntityData | null {\n const cellValue = this.getProperty(row, col.key);\n\n if (col.type === 'user') {\n return this.buildUserEntityData(cellValue, col.label);\n }\n\n if (col.type === 'status') {\n return this.buildStatusEntityData(cellValue, col);\n }\n\n return null;\n }\n\n tabChanged(tab: any): void {\n this.filterTerm.set('');\n this.first.set(0);\n this.currentPage.set(0);\n this.onTabChange.emit(tab);\n }\n\n onTablePage(event: TablePageEvent): void {\n if (this.lazy()) {\n this.handleLazyLoad(event);\n return;\n }\n\n this.updatePagingFromEvent(event);\n }\n\n handleLazyLoad(event: any): void {\n this.updatePagingFromEvent(event);\n this.emitLazyLoad(event);\n }\n\n onPaginatorPage(event: any): void {\n if (this.lazy()) {\n this.handleLazyLoad(event);\n return;\n }\n\n this.updatePagingFromEvent(event);\n }\n\n onSearchChange(searchTerm: string) {\n this.filterTerm.set(searchTerm);\n this.first.set(0);\n this.currentPage.set(0);\n if (this.lazy() && !this.lazyLocalSearch()) {\n this.filters.set({ ...this.filters(), generalSearch: searchTerm });\n this.emitLazyLoad({});\n }\n }\n\n toggleSort(column: ColumnDef): void {\n if (!this.isColumnSortable(column)) {\n return;\n }\n\n if (this.sortField() !== column.key) {\n this.sortField.set(column.key);\n this.sortDirection.set('asc');\n } else {\n this.sortDirection.set(this.sortDirection() === 'asc' ? 'desc' : 'asc');\n }\n }\n\n isColumnSortable(column: ColumnDef): boolean {\n return column.sortable === true && (!this.lazy() || this.lazyLocalSort());\n }\n\n getSortIcon(column: ColumnDef): MTIcon {\n if (this.sortField() !== column.key || !this.sortDirection()) {\n return 'arrow.chevron-selector-vertical';\n }\n\n return this.sortDirection() === 'asc'\n ? 'arrow.arrow-up'\n : 'arrow.arrow-down';\n }\n\n onCellChange(\n row: any,\n columnKey: string,\n newValue: any,\n type?: ColumnTypeForActionCell,\n ): void {\n this.setProperty(row, columnKey, newValue);\n\n this.cellChange.emit({\n row,\n column: columnKey,\n value: newValue,\n type: type!,\n });\n }\n\n resolveActionLoading(action: TableAction, row: any): boolean | undefined {\n if (typeof action.loading === 'function') {\n return action.loading(row);\n }\n return action.loading;\n }\n\n getVisibleRowActions(row: any): TableAction[] {\n return this.rowActions().filter((action) => !action.hidden?.(row));\n }\n\n onColumnReorder(event: any): void {\n this.columnReorder.emit(event);\n }\n\n onRowReorder(event: any): void {\n this.rowReorder.emit({\n ...event,\n value: event.value ?? this.data(),\n });\n }\n\n onRowClick(event: MouseEvent, row: any): void {\n if (!this.clickableRows() || this.loading()) {\n return;\n }\n\n const target = event.target as HTMLElement | null;\n if (\n target?.closest(\n 'button, a, input, textarea, select, label, [role=\"button\"], [data-row-click-ignore=\"true\"]',\n )\n ) {\n return;\n }\n\n this.rowClick.emit(row);\n }\n\n protected updatePagingFromEvent(event: any): void {\n const first = event?.first ?? this.first();\n const rows = event?.rows ?? this.pageSize();\n\n this.first.set(first);\n this.pageSize.set(rows);\n\n const page =\n typeof event?.page === 'number'\n ? event.page\n : Math.floor((first ?? 0) / (rows || 1));\n\n this.currentPage.set(page);\n }\n\n protected emitLazyLoad(event: any): void {\n this.lazyLoad.emit({\n ...event,\n pageSize: this.pageSize(),\n currentPage: this.currentPage() + 1,\n first: this.first(),\n filters: this.filters(),\n });\n }\n\n exportExcel(): void {\n if (this.loading()) {\n return;\n }\n\n const sourceColumns = this.columns().filter(\n (column) => column.type !== 'custom',\n );\n const workbook = XLSX.utils.book_new();\n const worksheet = XLSX.utils.json_to_sheet(\n this.buildExcelRows(this.filteredData(), sourceColumns),\n );\n\n XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');\n XLSX.writeFileXLSX(\n workbook,\n `${this.normalizeExportFilename(this.exportFilename())}.xlsx`,\n );\n }\n\n rowAction(event: Event, action: TableAction, row: any): void {\n if (!action.confirmation) {\n action.action(row);\n } else if (action.confirmation?.confirmationType === 'delete') {\n this.confirmationService.confirmDelete({\n event: event,\n ...action.confirmation,\n accept: () => {\n action.action(row);\n },\n reject: () => {},\n });\n } else {\n this.confirmationService.confirm({\n event: event,\n ...action.confirmation,\n accept: () => {\n action.action(row);\n },\n reject: () => {},\n });\n }\n }\n\n private buildUserEntityData(\n value: unknown,\n columnLabel: string,\n ): EntityData | null {\n const userValue = value;\n if (!userValue) return null;\n\n return {\n name: columnLabel,\n viewType: 'User',\n value: userValue,\n configuration: {\n showDisplayName: true,\n showPhoneNumber: false,\n showEmail: false,\n },\n };\n }\n\n private buildStatusEntityData(value: unknown, column: ColumnDef): EntityData {\n const statusValue = this.resolveStatusValue(value, column);\n\n return {\n name: column.label,\n viewType: 'Status',\n value: statusValue ?? '',\n configuration: {\n hideName: true,\n },\n };\n }\n\n private resolveStatusValue(\n value: unknown,\n column?: ColumnDef,\n ): EntityStatusValue | null {\n const unwrappedValue = this.unwrapStatusValue(value, column);\n if (\n unwrappedValue === null ||\n unwrappedValue === undefined ||\n unwrappedValue === ''\n ) {\n return null;\n }\n\n if (typeof unwrappedValue === 'object') {\n const objectValue = unwrappedValue as Record<string, unknown>;\n const statusKey =\n this.readStringProperty(objectValue, 'key') ??\n this.readStringProperty(objectValue, 'code') ??\n this.readStringProperty(objectValue, 'value') ??\n this.readStringProperty(objectValue, 'id') ??\n this.readStringProperty(objectValue, 'display') ??\n this.readStringProperty(objectValue, 'displayValue') ??\n this.readStringProperty(objectValue, 'displayName') ??\n this.readStringProperty(objectValue, 'label') ??\n this.readStringProperty(objectValue, 'name');\n const mappedStatus = this.resolveStatusMapValue(column, statusKey);\n const display =\n this.readStringProperty(objectValue, 'display') ??\n this.readStringProperty(objectValue, 'displayValue') ??\n this.readStringProperty(objectValue, 'displayName') ??\n this.readStringProperty(objectValue, 'label') ??\n this.readStringProperty(objectValue, 'name') ??\n mappedStatus?.display ??\n statusKey;\n\n if (!display) {\n return null;\n }\n\n return {\n key: statusKey ?? display,\n display,\n color:\n this.readStringProperty(objectValue, 'color') ??\n mappedStatus?.color ??\n this.resolveDefaultStatusColor(statusKey ?? display),\n description:\n this.readStringProperty(objectValue, 'description') ??\n mappedStatus?.description,\n };\n }\n\n const normalizedValue =\n TableValueResolver.resolveDisplayValue(unwrappedValue);\n if (normalizedValue === null || normalizedValue === undefined) {\n return null;\n }\n\n const statusKey = String(normalizedValue);\n const mappedStatus = this.resolveStatusMapValue(column, statusKey);\n\n return {\n key: statusKey,\n display: mappedStatus?.display ?? statusKey,\n color: mappedStatus?.color ?? this.resolveDefaultStatusColor(statusKey),\n description: mappedStatus?.description,\n };\n }\n\n private unwrapStatusValue(value: unknown, column?: ColumnDef): unknown {\n if (!value || typeof value !== 'object') {\n return value;\n }\n\n const entityValue = value as Partial<EntityData>;\n if (!('value' in (value as Record<string, unknown>))) {\n return value;\n }\n\n if (\n entityValue.viewType === 'Status' ||\n this.isEntityStatusCompatibilityColumn(column)\n ) {\n return entityValue.value;\n }\n\n return value;\n }\n\n private isEntityStatusCompatibilityColumn(\n column: ColumnDef | undefined,\n ): boolean {\n return column?.type === 'entity' && this.isStatusColumnKey(column.key);\n }\n\n private isStatusColumnKey(key: string | null | undefined): boolean {\n return typeof key === 'string' && key.trim().toLowerCase() === 'status';\n }\n\n private resolveStatusMapValue(\n column: ColumnDef | undefined,\n key: string | null | undefined,\n ) {\n if (!column?.statusMap || !key) {\n return undefined;\n }\n\n const directMatch = column.statusMap[key];\n if (directMatch) {\n return directMatch;\n }\n\n const normalizedKey = this.normalizeStatusToken(key);\n return Object.entries(column.statusMap).find(\n ([entryKey]) => this.normalizeStatusToken(entryKey) === normalizedKey,\n )?.[1];\n }\n\n private resolveDefaultStatusColor(value: string): string {\n const normalizedValue = this.normalizeStatusToken(value);\n\n if (\n [\n 'active',\n 'approved',\n 'completed',\n 'create',\n 'created',\n 'done',\n 'enabled',\n 'healthy',\n 'low',\n 'open',\n 'published',\n 'runtime',\n 'success',\n ].includes(normalizedValue)\n ) {\n return '#047857';\n }\n\n if (\n [\n 'change',\n 'current',\n 'draft',\n 'inprogress',\n 'info',\n 'medium',\n 'process',\n 'progress',\n 'running',\n 'update',\n 'updated',\n ].includes(normalizedValue)\n ) {\n return '#0369a1';\n }\n\n if (\n [\n 'bulkupdate',\n 'comment',\n 'configure',\n 'configured',\n 'controlpanel',\n 'discussion',\n ].includes(normalizedValue)\n ) {\n return '#4338ca';\n }\n\n if (\n [\n 'awaiting',\n 'escalation',\n 'high',\n 'hold',\n 'move',\n 'moved',\n 'pending',\n 'phasegate',\n 'queued',\n 'warning',\n ].includes(normalizedValue)\n ) {\n return '#b45309';\n }\n\n if (\n [\n 'blocked',\n 'cancelled',\n 'canceled',\n 'close',\n 'closed',\n 'critical',\n 'delete',\n 'deleted',\n 'error',\n 'failed',\n 'governance',\n 'inactive',\n 'rejected',\n ].includes(normalizedValue)\n ) {\n return '#be123c';\n }\n\n return '#475569';\n }\n\n private normalizeStatusToken(value: string): string {\n return value\n .trim()\n .toLocaleLowerCase()\n .replace(/[\\s_-]+/g, '');\n }\n\n private readStringProperty(\n value: Record<string, unknown>,\n key: string,\n ): string | null {\n const propertyValue = value[key];\n return typeof propertyValue === 'string' && propertyValue.trim().length > 0\n ? propertyValue.trim()\n : null;\n }\n\n /**\n * Gets the entity data for an 'entity' type column.\n * The row data is expected to already be in EntityData format.\n * Automatically hides entity name and configures User entities\n * to show only avatar + displayName.\n */\n getEntityColumnData(row: any, col: ColumnDef): EntityData | null {\n const cellValue = this.getProperty(row, col.key);\n if (!cellValue || typeof cellValue !== 'object') return null;\n\n const entityData = cellValue as EntityData;\n\n if (this.isEntityStatusCompatibilityColumn(col)) {\n return this.buildStatusEntityData(cellValue, col);\n }\n\n // For User entities: show avatar + displayName only\n if (entityData.viewType === 'User') {\n return {\n ...entityData,\n configuration: {\n ...entityData.configuration,\n hideName: true,\n showDisplayName: true,\n showPhoneNumber: false,\n showEmail: false,\n },\n };\n }\n\n // For all other entities: hide the name label\n return {\n ...entityData,\n configuration: {\n ...entityData.configuration,\n hideName: true,\n },\n };\n }\n\n protected getStatusEntityAccentColor(\n row: Record<string, unknown>,\n ): string | null {\n const statusColumn = this.columns().find((column) =>\n this.isStatusColumnKey(column.key),\n );\n if (!statusColumn) {\n return null;\n }\n\n return this.resolveStatusEntityAccentColor(\n this.getProperty(row, statusColumn.key),\n statusColumn,\n );\n }\n\n private resolveStatusEntityAccentColor(\n value: unknown,\n column?: ColumnDef,\n ): string | null {\n return this.resolveStatusValue(value, column)?.color ?? null;\n }\n\n protected getBooleanProperty(obj: any, key: string): boolean {\n const value = this.getProperty(obj, key);\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n return TableValueResolver.resolveBooleanValue(value) ?? false;\n }\n\n private setProperty(obj: any, key: string, value: any): void {\n const path = key.split('.');\n const lastKey = path.pop();\n\n if (!lastKey) {\n return;\n }\n\n const target = path.reduce((current, segment) => {\n if (!current?.[segment] || typeof current[segment] !== 'object') {\n current[segment] = {};\n }\n\n return current[segment];\n }, obj);\n\n if (target && typeof target === 'object') {\n target[lastKey] = value;\n }\n }\n\n private sortData(data: any[]): any[] {\n const field = this.sortField();\n const direction = this.sortDirection();\n\n if (!field || !direction) {\n return data;\n }\n\n const column = this.columns().find((item) => item.key === field);\n if (!column || !this.isColumnSortable(column)) {\n return data;\n }\n\n return [...data].sort((leftRow, rightRow) => {\n const leftValue = this.getSortValue(leftRow, column);\n const rightValue = this.getSortValue(rightRow, column);\n\n if (leftValue === rightValue) return 0;\n if (leftValue === null || leftValue === undefined || leftValue === '') {\n return 1;\n }\n if (\n rightValue === null ||\n rightValue === undefined ||\n rightValue === ''\n ) {\n return -1;\n }\n\n const comparison = leftValue < rightValue ? -1 : 1;\n return direction === 'asc' ? comparison : -comparison;\n });\n }\n\n private getSortValue(\n row: Record<string, unknown>,\n column: ColumnDef,\n ): string | number | null {\n const cellValue = this.getProperty(row, column.key);\n const resolvedValue = this.getColumnResolvedValue(row, column);\n\n if (\n resolvedValue === null ||\n resolvedValue === undefined ||\n resolvedValue === ''\n ) {\n return null;\n }\n\n if (column.type === 'date') {\n const timestamp = new Date(String(cellValue)).getTime();\n return Number.isNaN(timestamp) ? null : timestamp;\n }\n\n if (typeof resolvedValue === 'number') {\n return resolvedValue;\n }\n\n if (typeof resolvedValue === 'boolean') {\n return resolvedValue ? 1 : 0;\n }\n\n if (cellValue instanceof Date) {\n return cellValue.getTime();\n }\n\n return TableValueResolver.normalizeTextSortValue(resolvedValue);\n }\n\n private getColumnResolvedValue(\n row: Record<string, unknown>,\n column: ColumnDef,\n ): string | number | boolean | null {\n const cellValue = this.getProperty(row, column.key);\n\n if (cellValue === null || cellValue === undefined) {\n return null;\n }\n\n if (column.type === 'entity') {\n return TableValueResolver.getEntityValueByType(cellValue, 'sort');\n }\n\n if (column.type === 'boolean') {\n return this.getBooleanProperty(row, column.key);\n }\n\n if (typeof cellValue === 'number' || typeof cellValue === 'boolean') {\n return cellValue;\n }\n\n if (cellValue instanceof Date) {\n return cellValue.toISOString();\n }\n\n return TableValueResolver.resolveDisplayValue(cellValue);\n }\n\n private buildExportRows(\n rows: Record<string, unknown>[],\n columns: ColumnDef[],\n ): Record<string, string | number | boolean | null>[] {\n return rows.map((row) => {\n const exportRow: Record<string, string | number | boolean | null> = {};\n\n columns.forEach((column) => {\n exportRow[column.key] =\n column.type === 'entity'\n ? TableValueResolver.getEntityValueByType(\n this.getProperty(row, column.key),\n 'export',\n )\n : this.getColumnResolvedValue(row, column);\n });\n\n return exportRow;\n });\n }\n\n private buildExcelRows(\n rows: Record<string, unknown>[],\n columns: ColumnDef[],\n ): Record<string, string | number | boolean | null>[] {\n const exportRows = this.buildExportRows(rows, columns);\n\n return exportRows.map((row) => {\n const excelRow: Record<string, string | number | boolean | null> = {};\n\n columns.forEach((column) => {\n excelRow[column.label] = row[column.key] ?? null;\n });\n\n return excelRow;\n });\n }\n\n protected isRowSelected(row: Record<string, unknown>): boolean {\n const rowKey = this.getRowSelectionKey(row);\n\n if (rowKey !== null) {\n return this.selectedRowKeys().has(rowKey);\n }\n\n return this.transientSelectedRows().has(row);\n }\n\n protected getColumnMinWidth(column: ColumnDef): string | null {\n const width = column.width?.trim();\n if (!width || width.endsWith('%')) {\n return null;\n }\n\n return width;\n }\n\n private emitSelectionChange(): void {\n this.selectionChange.emit(this.getSelectedRows());\n }\n\n private getSelectedRows(): any[] {\n const dataKey = this.dataKey();\n if (!dataKey) {\n return Array.from(this.transientSelectedRows());\n }\n\n const selectedRowKeys = this.selectedRowKeys();\n return this.data().filter((row) => {\n const rowKey = this.getRowSelectionKey(row);\n return rowKey !== null && selectedRowKeys.has(rowKey);\n });\n }\n\n private getRowSelectionKey(row: Record<string, unknown>): string | null {\n const dataKey = this.dataKey();\n if (!dataKey) {\n return null;\n }\n\n const value = this.getProperty(row, dataKey);\n if (value === null || value === undefined || value === '') {\n return null;\n }\n\n return String(value);\n }\n\n private getNormalizedStorageKey(): string | null {\n const storageKey = this.storageKey()?.trim();\n return storageKey ? storageKey : null;\n }\n\n private normalizeExportFilename(value: string): string {\n const sanitized = value.trim().replace(/[\\\\/:*?\"<>|]+/g, '-');\n return sanitized.length ? sanitized : 'download';\n }\n\n private getStorage(): Storage | null {\n if (typeof window === 'undefined') {\n return null;\n }\n\n return this.storageMode() === 'session'\n ? window.sessionStorage\n : window.localStorage;\n }\n\n private buildPersistedState(): PersistedTableState {\n return {\n pageSize: this.pageSize(),\n first: this.first(),\n currentPage: this.currentPage(),\n filterTerm: this.filterTerm(),\n filters: this.filters(),\n sortField: this.sortField(),\n sortDirection: this.sortDirection(),\n selectedRowKeys: this.dataKey() ? Array.from(this.selectedRowKeys()) : [],\n };\n }\n\n private applyPersistedState(\n persistedState: PersistedTableState | null,\n ): void {\n this.transientSelectedRows.set(new Set());\n\n if (!persistedState) {\n this.selectedRowKeys.set(new Set());\n return;\n }\n\n const pageSize = this.normalizePersistedPageSize(\n this.toPositiveInteger(persistedState.pageSize),\n );\n if (pageSize !== null) {\n this.pageSize.set(pageSize);\n }\n\n const first = this.toNonNegativeInteger(persistedState.first);\n if (first !== null) {\n this.first.set(first);\n }\n\n const currentPage = this.toNonNegativeInteger(persistedState.currentPage);\n if (currentPage !== null) {\n this.currentPage.set(currentPage);\n } else if (first !== null && pageSize !== null) {\n this.currentPage.set(Math.floor(first / pageSize));\n }\n\n if (typeof persistedState.filterTerm === 'string') {\n this.filterTerm.set(persistedState.filterTerm);\n }\n\n if (persistedState.filters && typeof persistedState.filters === 'object') {\n this.filters.set(persistedState.filters);\n }\n\n this.sortField.set(\n typeof persistedState.sortField === 'string'\n ? persistedState.sortField\n : null,\n );\n\n this.sortDirection.set(\n persistedState.sortDirection === 'asc' ||\n persistedState.sortDirection === 'desc'\n ? persistedState.sortDirection\n : null,\n );\n\n this.selectedRowKeys.set(\n new Set(\n Array.isArray(persistedState.selectedRowKeys)\n ? persistedState.selectedRowKeys\n : [],\n ),\n );\n }\n\n private shouldEmitLazyLoadAfterRestore(\n persistedState: PersistedTableState | null,\n ): boolean {\n if (!persistedState) {\n return false;\n }\n\n return (\n persistedState.pageSize !== undefined ||\n persistedState.first !== undefined ||\n persistedState.currentPage !== undefined ||\n persistedState.filterTerm !== undefined ||\n persistedState.filters !== undefined\n );\n }\n\n private readPersistedState(\n storage: Storage,\n storageKey: string,\n ): PersistedTableState | null {\n try {\n const raw = storage.getItem(storageKey);\n if (!raw) {\n return null;\n }\n\n const parsed = JSON.parse(raw) as PersistedTableState;\n return parsed && typeof parsed === 'object' ? parsed : null;\n } catch {\n return null;\n }\n }\n\n private writePersistedState(\n storage: Storage,\n storageKey: string,\n state: PersistedTableState,\n ): void {\n try {\n storage.setItem(storageKey, JSON.stringify(state));\n } catch {\n // Ignore storage write failures.\n }\n }\n\n private toPositiveInteger(value: unknown): number | null {\n const normalized = Number(value);\n if (!Number.isFinite(normalized) || normalized <= 0) {\n return null;\n }\n\n return Math.trunc(normalized);\n }\n\n private normalizePersistedPageSize(value: number | null): number | null {\n if (value === null) {\n return null;\n }\n\n const allowedOptions = this.rowsPerPageOptions().filter(\n (option) => Number.isFinite(option) && option > 0,\n );\n\n if (!allowedOptions.length) {\n return value;\n }\n\n return allowedOptions.includes(value) ? value : allowedOptions[0]!;\n }\n\n private toNonNegativeInteger(value: unknown): number | null {\n const normalized = Number(value);\n if (!Number.isFinite(normalized) || normalized < 0) {\n return null;\n }\n\n return Math.trunc(normalized);\n }\n}\n","<div class=\"space-y-4 rounded-lg\">\n <div>\n @if (\n captionStartContent() ||\n captionEndContent() ||\n generalSearch() ||\n showFilters() ||\n tabs()?.length > 0 ||\n actions()?.length > 0\n ) {\n <div class=\"p-datatable-header rounded-t-2xl\">\n <div\n class=\"flex relative\"\n [class]=\"!generalSearch() ? 'justify-end' : 'justify-between'\"\n >\n <div class=\"flex items-center gap-2\">\n <ng-container\n *ngTemplateOutlet=\"captionStartContent()\"\n ></ng-container>\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)=\"onSearchChange($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()) {\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()) {\n <mt-button\n icon=\"file.file-x-03\"\n [tooltip]=\"'components.table.export' | transloco\"\n (click)=\"exportExcel()\"\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]=\"action.size\"\n (click)=\"action.action(row)\"\n [label]=\"action.label\"\n [tooltip]=\"action.tooltip\"\n ></mt-button>\n }\n </div>\n }\n <ng-container\n *ngTemplateOutlet=\"captionEndContent()\"\n ></ng-container>\n </div>\n </div>\n </div>\n }\n @if (!loading() && emptyContent() && data().length === 0) {\n <div\n class=\"p-4 bg-content rounded-md text-center text-gray-600 dark:text-gray-300\"\n >\n <ng-container *ngTemplateOutlet=\"emptyContent()\"></ng-container>\n </div>\n } @else {\n <div\n class=\"overflow-x-auto rounded-[10px] border border-surface-200 bg-white\"\n >\n <p-table\n [value]=\"displayData()\"\n [columns]=\"columns()\"\n [size]=\"size()\"\n [showGridlines]=\"showGridlines()\"\n [stripedRows]=\"stripedRows()\"\n [lazy]=\"lazy()\"\n [totalRecords]=\"totalRecords()\"\n [reorderableColumns]=\"reorderableColumns()\"\n [reorderableRows]=\"reorderableRows()\"\n [dataKey]=\"dataKey()\"\n [first]=\"first()\"\n [rows]=\"pageSize()\"\n [exportFilename]=\"exportFilename()\"\n (onPage)=\"onTablePage($event)\"\n (onLazyLoad)=\"handleLazyLoad($event)\"\n (onColReorder)=\"onColumnReorder($event)\"\n (onRowReorder)=\"onRowReorder($event)\"\n paginator\n paginatorStyleClass=\"hidden!\"\n class=\"mt-table min-w-full align-middle text-sm\"\n [class.table-auto]=\"tableLayout() === 'auto'\"\n [class.table-fixed]=\"tableLayout() === 'fixed'\"\n >\n <ng-template\n #header\n let-columns\n class=\"bg-surface-50 dark:bg-surface-950 border-b border-surface-300 dark:border-surface-500\"\n >\n <tr>\n @if (reorderableRows()) {\n <th class=\"w-10\"></th>\n }\n @if (selectableRows()) {\n <th class=\"w-12 text-start\">\n <mt-checkbox-field\n [ngModel]=\"allSelectedOnPage()\"\n (ngModelChange)=\"toggleAllRowsOnPage()\"\n ></mt-checkbox-field>\n </th>\n }\n\n @for (col of columns; track col.key || col.label || $index) {\n @if (reorderableColumns()) {\n <th\n pReorderableColumn\n class=\"text-start text-sm font-normal text-[#323232]\"\n >\n <div class=\"flex items-center gap-2\">\n {{ col.label }}\n <!-- <mt-icon-->\n <!-- icon=\"general.menu-05\"-->\n <!-- class=\"text-xs text-gray-400\"-->\n <!-- ></mt-icon>-->\n <mt-button\n styleClass=\"cursor-move!\"\n severity=\"secondary\"\n variant=\"outlined\"\n size=\"small\"\n icon=\"general.menu-05\"\n ></mt-button>\n </div>\n </th>\n } @else {\n <th\n class=\"text-start text-sm font-normal text-[#323232]\"\n [style.width]=\"col.width ?? null\"\n [style.minWidth]=\"getColumnMinWidth(col)\"\n >\n @if (isColumnSortable(col)) {\n <button\n type=\"button\"\n class=\"inline-flex items-center gap-2 cursor-pointer\"\n (click)=\"toggleSort(col)\"\n >\n <span>{{ col.label }}</span>\n <mt-icon\n [icon]=\"getSortIcon(col)\"\n class=\"text-xs text-gray-400\"\n />\n </button>\n } @else {\n {{ col.label }}\n }\n </th>\n }\n }\n\n @if (rowActions().length > 0) {\n <th class=\"text-end! text-sm font-normal text-[#323232]\">\n {{ \"components.table.actions\" | transloco }}\n </th>\n }\n </tr>\n @if (updating()) {\n <tr>\n <th\n [attr.colspan]=\"\n columns.length +\n (reorderableRows() ? 1 : 0) +\n (selectableRows() ? 1 : 0) +\n (rowActions().length > 0 ? 1 : 0)\n \"\n class=\"!p-0\"\n >\n <p-progressBar\n mode=\"indeterminate\"\n [style]=\"{ height: '4px' }\"\n />\n </th>\n </tr>\n }\n </ng-template>\n <ng-template\n #body\n let-row\n let-columns=\"columns\"\n let-index=\"rowIndex\"\n class=\"divide-y divide-gray-200\"\n >\n @if (loading()) {\n <tr>\n @if (reorderableRows()) {\n <td><p-skeleton /></td>\n }\n @if (selectableRows()) {\n <td><p-skeleton /></td>\n }\n @for (col of columns; track col.key || col.label || $index) {\n <td><p-skeleton /></td>\n }\n @if (rowActions().length > 0) {\n <td><p-skeleton /></td>\n }\n </tr>\n } @else {\n <tr\n class=\"border-surface-300 transition-colors duration-150 dark:border-surface-500\"\n [class.mt-table-clickable-row]=\"clickableRows()\"\n [class.mt-table-status-entity-row]=\"\n getStatusEntityAccentColor(row)\n \"\n [style.--mt-table-status-accent]=\"\n getStatusEntityAccentColor(row)\n \"\n [class.cursor-pointer]=\"clickableRows()\"\n [pReorderableRow]=\"index\"\n (click)=\"onRowClick($event, row)\"\n >\n @if (reorderableRows()) {\n <td class=\"w-10 text-center\">\n <mt-button\n styleClass=\"cursor-move!\"\n pReorderableRowHandle\n severity=\"secondary\"\n variant=\"outlined\"\n size=\"small\"\n icon=\"general.menu-05\"\n ></mt-button>\n <!-- <mt-icon-->\n <!-- icon=\"general.menu-05\"-->\n <!-- class=\"cursor-move text-gray-500\"-->\n <!-- pReorderableRowHandle-->\n <!-- ></mt-icon>-->\n </td>\n }\n @if (selectableRows()) {\n <td class=\"w-12\">\n <mt-checkbox-field\n [ngModel]=\"isRowSelected(row)\"\n (ngModelChange)=\"toggleRow(row)\"\n ></mt-checkbox-field>\n </td>\n }\n\n @for (col of columns; track col.key || col.label || $index) {\n <td\n class=\"text-sm font-normal text-[#4b4b4b]\"\n [style.width]=\"col.width ?? null\"\n [style.minWidth]=\"getColumnMinWidth(col)\"\n >\n @switch (col.type) {\n @case (\"boolean\") {\n @if (col.readonly) {\n @if (getBooleanProperty(row, col.key)) {\n <span\n class=\"inline-flex items-center gap-1 rounded-md bg-green-100 dark:bg-green-900/30 p-2\"\n >\n <mt-icon\n icon=\"general.check\"\n class=\"text-green-600 dark:text-green-400 text-sm\"\n />\n <span\n class=\"text-green-700 dark:text-green-300 text-xs font-medium\"\n >\n {{ \"components.table.yes\" | transloco }}\n </span>\n </span>\n } @else {\n <span\n class=\"inline-flex items-center gap-1 rounded-md bg-red-100 dark:bg-red-900/30 p-2\"\n >\n <mt-icon\n icon=\"general.x-close\"\n class=\"text-red-600 dark:text-red-400 text-sm\"\n />\n <span\n class=\"text-red-600 dark:text-red-300 text-xs font-medium\"\n >\n {{ \"components.table.no\" | transloco }}\n </span>\n </span>\n }\n } @else {\n <mt-toggle-field\n [ngModel]=\"getBooleanProperty(row, col.key)\"\n (ngModelChange)=\"\n onCellChange(row, col.key, $event, 'boolean')\n \"\n ></mt-toggle-field>\n }\n }\n @case (\"date\") {\n {{ getProperty(row, col.key) | date: \"mediumDate\" }}\n }\n @case (\"user\") {\n @if (getEntityPreviewData(row, col); as entityData) {\n <mt-entity-preview\n [data]=\"entityData\"\n attachmentShape=\"compact\"\n ></mt-entity-preview>\n } @else {\n {{ getProperty(row, col.key) }}\n }\n }\n @case (\"status\") {\n @if (getEntityPreviewData(row, col); as entityData) {\n <mt-entity-preview\n [data]=\"entityData\"\n attachmentShape=\"compact\"\n ></mt-entity-preview>\n } @else {\n {{ getProperty(row, col.key) }}\n }\n }\n @case (\"entity\") {\n @if (getEntityColumnData(row, col); as entityData) {\n <mt-entity-preview\n [data]=\"entityData\"\n attachmentShape=\"compact\"\n ></mt-entity-preview>\n } @else {\n {{ getProperty(row, col.key) }}\n }\n }\n @case (\"custom\") {\n <ng-container\n *ngTemplateOutlet=\"\n col.customCellTpl;\n context: { $implicit: row }\n \"\n >\n </ng-container>\n }\n @default {\n {{ getProperty(row, col.key) }}\n }\n }\n </td>\n }\n\n @if (rowActions().length > 0) {\n <td class=\"text-right\">\n @if (actionShape() === \"popover\") {\n <div class=\"flex items-center justify-end\">\n <mt-button\n icon=\"general.dots-vertical\"\n severity=\"secondary\"\n variant=\"text\"\n size=\"large\"\n (click)=\"rowPopover.toggle($event)\"\n data-row-click-ignore=\"true\"\n ></mt-button>\n <p-popover #rowPopover appendTo=\"body\">\n <div class=\"flex flex-col min-w-40\">\n @for (\n action of getVisibleRowActions(row);\n track $index\n ) {\n <button\n class=\"flex items-center gap-2 px-2 cursor-pointer py-2 text-sm rounded transition-colors\"\n [class]=\"\n action.color === 'danger'\n ? 'text-red-600 hover:bg-red-50 dark:hover:bg-red-950'\n : 'text-gray-700 dark:text-gray-200 hover:bg-gray-100 dark:hover:bg-surface-700'\n \"\n (click)=\"\n rowAction($event, action, row);\n rowPopover.hide()\n \"\n >\n @if (action.icon) {\n <mt-icon\n [icon]=\"action.icon\"\n class=\"text-base\"\n />\n }\n <span>{{\n action.label || action.tooltip\n }}</span>\n </button>\n }\n </div>\n </p-popover>\n </div>\n } @else {\n <div class=\"flex items-center justify-end space-x-2\">\n @for (action of rowActions(); track $index) {\n @let hidden = action.hidden?.(row);\n @if (!hidden) {\n <mt-button\n [icon]=\"action.icon\"\n [severity]=\"action.color\"\n [variant]=\"action.variant\"\n [size]=\"action.size || 'small'\"\n (click)=\"rowAction($event, action, row)\"\n [tooltip]=\"action.tooltip\"\n [label]=\"action.label\"\n [loading]=\"resolveActionLoading(action, row)\"\n ></mt-button>\n }\n }\n </div>\n }\n </td>\n }\n </tr>\n }\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td\n [attr.colspan]=\"\n columns().length +\n (reorderableRows() ? 1 : 0) +\n (selectableRows() ? 1 : 0) +\n (rowActions().length > 0 ? 1 : 0)\n \"\n class=\"text-center\"\n >\n <div\n class=\"flex min-h-44 flex-col items-center justify-center gap-3 py-8 text-center\"\n >\n <svg\n width=\"152\"\n height=\"120\"\n viewBox=\"0 0 152 120\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"76\" cy=\"52\" r=\"52\" fill=\"#E9EAEB\" />\n <g filter=\"url(#filter0_ddd_2474_28277)\">\n <path\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\"\n fill=\"#FAFAFA\"\n />\n <ellipse\n cx=\"45.6\"\n cy=\"54.3998\"\n rx=\"25.6\"\n ry=\"25.6\"\n fill=\"url(#paint0_linear_2474_28277)\"\n />\n <circle\n cx=\"77.6016\"\n cy=\"48\"\n r=\"32\"\n fill=\"url(#paint1_linear_2474_28277)\"\n />\n <ellipse\n cx=\"109.599\"\n cy=\"57.6002\"\n rx=\"22.4\"\n ry=\"22.4\"\n fill=\"url(#paint2_linear_2474_28277)\"\n />\n </g>\n <circle cx=\"21\" cy=\"19\" r=\"5\" fill=\"#F5F5F5\" />\n <circle cx=\"18\" cy=\"109\" r=\"7\" fill=\"#F5F5F5\" />\n <circle cx=\"145\" cy=\"35\" r=\"7\" fill=\"#F5F5F5\" />\n <circle cx=\"134\" cy=\"8\" r=\"4\" fill=\"#F5F5F5\" />\n <foreignObject x=\"44\" y=\"54\" width=\"64\" height=\"64\">\n <div\n xmlns=\"http://www.w3.org/1999/xhtml\"\n style=\"\n backdrop-filter: blur(4px);\n clip-path: url(#bgblur_0_2474_28277_clip_path);\n height: 100%;\n width: 100%;\n \"\n ></div>\n </foreignObject>\n <g data-figma-bg-blur-radius=\"8\">\n <path\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\"\n fill=\"#344054\"\n fill-opacity=\"0.4\"\n />\n <path\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\"\n stroke=\"white\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </g>\n <defs>\n <filter\n id=\"filter0_ddd_2474_28277\"\n x=\"0\"\n y=\"16\"\n width=\"152\"\n height=\"104\"\n filterUnits=\"userSpaceOnUse\"\n color-interpolation-filters=\"sRGB\"\n >\n <feFlood\n flood-opacity=\"0\"\n result=\"BackgroundImageFix\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feMorphology\n radius=\"1.5\"\n operator=\"erode\"\n in=\"SourceAlpha\"\n result=\"effect1_dropShadow_2474_28277\"\n />\n <feOffset dy=\"3\" />\n <feGaussianBlur stdDeviation=\"1.5\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\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\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_2474_28277\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feMorphology\n radius=\"4\"\n operator=\"erode\"\n in=\"SourceAlpha\"\n result=\"effect2_dropShadow_2474_28277\"\n />\n <feOffset dy=\"8\" />\n <feGaussianBlur stdDeviation=\"4\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\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\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"effect1_dropShadow_2474_28277\"\n result=\"effect2_dropShadow_2474_28277\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feMorphology\n radius=\"4\"\n operator=\"erode\"\n in=\"SourceAlpha\"\n result=\"effect3_dropShadow_2474_28277\"\n />\n <feOffset dy=\"20\" />\n <feGaussianBlur stdDeviation=\"12\" />\n <feComposite in2=\"hardAlpha\" operator=\"out\" />\n <feColorMatrix\n type=\"matrix\"\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\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"effect2_dropShadow_2474_28277\"\n result=\"effect3_dropShadow_2474_28277\"\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"effect3_dropShadow_2474_28277\"\n result=\"shape\"\n />\n </filter>\n <clipPath\n id=\"bgblur_0_2474_28277_clip_path\"\n transform=\"translate(-44 -54)\"\n >\n <path\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\"\n />\n </clipPath>\n <linearGradient\n id=\"paint0_linear_2474_28277\"\n x1=\"25.9429\"\n y1=\"37.4855\"\n x2=\"71.2\"\n y2=\"79.9998\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stop-color=\"#D0D5DD\" />\n <stop\n offset=\"0.350715\"\n stop-color=\"white\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n <linearGradient\n id=\"paint1_linear_2474_28277\"\n x1=\"53.0301\"\n y1=\"26.8571\"\n x2=\"109.602\"\n y2=\"80\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stop-color=\"#D0D5DD\" />\n <stop\n offset=\"0.350715\"\n stop-color=\"white\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n <linearGradient\n id=\"paint2_linear_2474_28277\"\n x1=\"92.3992\"\n y1=\"42.8002\"\n x2=\"131.999\"\n y2=\"80.0002\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stop-color=\"#D0D5DD\" />\n <stop\n offset=\"0.350715\"\n stop-color=\"white\"\n stop-opacity=\"0\"\n />\n </linearGradient>\n </defs>\n </svg>\n <p class=\"m-0 text-base font-medium text-surface-500\">\n {{ \"components.table.no-data-found\" | transloco }}\n </p>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n }\n </div>\n\n <div\n class=\"flex flex-col gap-3 pb-3 px-4\"\n [class]=\"'items-' + paginatorPosition()\"\n >\n <mt-paginator\n [(rows)]=\"pageSize\"\n [(first)]=\"first\"\n [(page)]=\"currentPage\"\n [totalRecords]=\"totalRecords()\"\n [alwaysShow]=\"alwaysShowPaginator()\"\n [rowsPerPageOptions]=\"rowsPerPageOptions()\"\n (onPageChange)=\"onPaginatorPage($event)\"\n ></mt-paginator>\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i5","i6"],"mappings":"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"}
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>();\r\n tabsOptionValue = input<string>();\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 @if (col.readonly) {\r\n @if (getBooleanProperty(row, col.key)) {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-green-100 dark:bg-green-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.check\"\r\n class=\"text-green-600 dark:text-green-400 text-sm\"\r\n />\r\n <span\r\n class=\"text-green-700 dark:text-green-300 text-xs font-medium\"\r\n >\r\n {{ \"components.table.yes\" | transloco }}\r\n </span>\r\n </span>\r\n } @else {\r\n <span\r\n class=\"inline-flex items-center gap-1 rounded-md bg-red-100 dark:bg-red-900/30 p-2\"\r\n >\r\n <mt-icon\r\n icon=\"general.x-close\"\r\n class=\"text-red-600 dark:text-red-400 text-sm\"\r\n />\r\n <span\r\n class=\"text-red-600 dark:text-red-300 text-xs font-medium\"\r\n >\r\n {{ \"components.table.no\" | transloco }}\r\n </span>\r\n </span>\r\n }\r\n } @else {\r\n <mt-toggle-field\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 @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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"}