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