@dmlibs/dm-cmps 0.1.8 → 0.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dmlibs-dm-cmps.mjs","sources":["../../../projects/dm-cmps/src/lib/utils/dm-cmps-data-source.ts","../../../projects/dm-cmps/src/lib/dm-mat-select/utils.ts","../../../projects/dm-cmps/src/lib/dm-mat-select/dm-mat-select.ts","../../../projects/dm-cmps/src/lib/dm-mat-select/dm-mat-select.html","../../../projects/dm-cmps/src/lib/dm-color-picker/dm-color-picker.ts","../../../projects/dm-cmps/src/lib/dm-color-picker/dm-color-picker.html","../../../projects/dm-cmps/src/lib/dm-spinner/dm-spinner.service.ts","../../../projects/dm-cmps/src/lib/dm-spinner/dm-spinner.ts","../../../projects/dm-cmps/src/lib/dm-spinner/dm-spinner.html","../../../projects/dm-cmps/src/lib/dm-table/utils.ts","../../../projects/dm-cmps/src/lib/dm-table/dm-table-cell-host/dm-table-cell-host.ts","../../../projects/dm-cmps/src/lib/dm-table/dm-table-cell-host/dm-table-cell-host.html","../../../projects/dm-cmps/src/lib/services/dm-date.service.ts","../../../projects/dm-cmps/src/lib/dm-table/defaults.ts","../../../projects/dm-cmps/src/lib/dm-table/helpers.ts","../../../projects/dm-cmps/src/lib/dm-table/column-state.ts","../../../projects/dm-cmps/src/lib/directives/dm-important-style-directive.ts","../../../projects/dm-cmps/src/lib/dm-icon/dm-icon.ts","../../../projects/dm-cmps/src/lib/dm-icon/dm-icon.html","../../../projects/dm-cmps/src/lib/dm-table/dm-table.ts","../../../projects/dm-cmps/src/lib/dm-table/dm-table.html","../../../projects/dm-cmps/src/dmlibs-dm-cmps.ts"],"sourcesContent":["import { Signal, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { debounceTime, distinctUntilChanged, Subject, Subscription, switchMap } from 'rxjs';\n\nexport interface DmCmpsDataSourceSort {\n id?: string;\n direction: 'asc' | 'desc';\n field: string;\n sortFn?: (a: any, b: any) => number;\n}\n\nexport class DmCmpsDataSource<T> implements DmCmpsDataSourceConfig<T> {\n private data: T[];\n private filteredData: T[];\n private _resultData: T[];\n\n public result = signal<T[]>([]);\n public resultVersion = signal<number>(0);\n\n private paginationEnabled: boolean = false;\n private currentPageIndex: number = 0;\n private pageSize: number = 10;\n private autoPaginationAboveItemsCount: number = 100;\n private propertiesToSkipInSearchSet: Set<string> = new Set([\n '_id',\n 'createdAt',\n 'updatedAt',\n '__v',\n 'createdBy',\n 'updatedBy',\n 'creatorName',\n 'updaterName',\n ]);\n\n private searchTerm: string = '';\n\n private speratedSearch: boolean = false;\n private filterPredicate: (data: T, filter: string) => boolean = (item: T, filter: string) => {\n if (!item || !filter) {\n return true;\n }\n if (typeof item === 'string') {\n return item.toLowerCase().includes(filter.toLowerCase());\n }\n const match = (term: string) => {\n return Object.entries(item).some(\n ([key, value]) =>\n !this.propertiesToSkipInSearchSet.has(key) &&\n value != null &&\n value.toString().toLowerCase().includes(term.toLowerCase())\n );\n };\n if (this.speratedSearch) {\n const terms = filter\n .split(' ')\n .map((t) => t.trim())\n .filter((t) => !!t);\n return terms.every((term) => match(term));\n }\n return match(filter);\n };\n\n public isLoading = signal<boolean>(false);\n\n private objectToFilterBy: Partial<T> | null = null;\n\n private fieldsToSearchIn: string[] = [];\n\n private sortMap: DmCmpsDataSourceSort[] = [];\n private sortFn: ((a: T, b: T) => number) | null = null;\n\n private searchTerms$: Subject<string> = new Subject<string>();\n private searchDebounceTime = signal<number>(300);\n\n private readonly subscription = new Subscription();\n\n /**\n * builds a new DmCmpsDataSource\n * @param initialData The data to be used as datasource\n */\n constructor(initialData: T[] = []) {\n this.data = initialData;\n this.filteredData = [...initialData];\n this._resultData = [...initialData];\n if (\n this.autoPaginationAboveItemsCount > 0 &&\n initialData.length > this.autoPaginationAboveItemsCount\n ) {\n this.paginationEnabled = true;\n }\n this.updateResultSignal();\n\n this.subscription.add(\n toObservable(this.searchDebounceTime)\n .pipe(\n switchMap((debounceMs) =>\n this.searchTerms$.pipe(\n debounceTime(debounceMs),\n distinctUntilChanged((p, c) => p === c)\n )\n )\n )\n .subscribe((term) => {\n this.searchTerm = term;\n this.applySearch();\n })\n );\n }\n\n private async updateResultData() {\n this.applySorting();\n await this.applySearch();\n await this.updateResultSignal();\n }\n\n disconnect(): void {\n this.subscription.unsubscribe();\n }\n\n setAutoPaginationAboveItemsCount(count: number): void {\n this.autoPaginationAboveItemsCount = count;\n if (count > 0 && this._resultData.length > count) {\n this.paginationEnabled = true;\n } else {\n this.paginationEnabled = false;\n }\n this.updateResultSignal();\n }\n\n applyPagination(pageSize?: number): void {\n if (pageSize !== undefined && pageSize < 5) {\n throw new Error('Page size must be at least 5');\n }\n this.currentPageIndex = 0;\n this.paginationEnabled = true;\n if (pageSize) {\n this.pageSize = pageSize;\n }\n }\n\n setPageSize(pageSize: number): void {\n if (pageSize < 5) {\n throw new Error('Page size must be at least 5');\n }\n this.pageSize = pageSize;\n this.updateResultSignal();\n }\n\n getPageSize(): number {\n return this.pageSize;\n }\n\n disablePagination(): void {\n this.currentPageIndex = 0;\n this.paginationEnabled = false;\n this.setAutoPaginationAboveItemsCount(-1);\n this.updateResultSignal();\n }\n\n nextPage(): number {\n if (this.pageSize <= 0 || !this.paginationEnabled) {\n return 0;\n }\n const totalPages = Math.ceil(this._resultData.length / this.pageSize);\n if (this.currentPageIndex < totalPages - 1) {\n this.currentPageIndex++;\n }\n this.updateResultSignal();\n return this.currentPageIndex;\n }\n\n previousPage(): number {\n if (this.pageSize <= 0 || !this.paginationEnabled) {\n return 0;\n }\n if (this.currentPageIndex > 0) {\n this.currentPageIndex--;\n }\n this.updateResultSignal();\n return this.currentPageIndex;\n }\n\n firstPage(): number {\n if (this.pageSize <= 0 || !this.paginationEnabled) {\n return 0;\n }\n this.currentPageIndex = 0;\n this.updateResultSignal();\n return this.currentPageIndex;\n }\n\n lastPage(): number {\n if (this.pageSize <= 0 || !this.paginationEnabled) {\n return 0;\n }\n const totalPages = Math.ceil(this._resultData.length / this.pageSize);\n this.currentPageIndex = totalPages - 1;\n this.updateResultSignal();\n return this.currentPageIndex;\n }\n\n getCurrentPageIndex(): number {\n return this.currentPageIndex;\n }\n\n getTotalPagesCount(): number {\n if (this.pageSize <= 0) {\n return 1;\n }\n return Math.ceil(this._resultData.length / this.pageSize);\n }\n\n getFirstItemIndexInPage(): number {\n return this.currentPageIndex * this.pageSize;\n }\n\n getLastItemIndexInPage(): number {\n const lastIndex = (this.currentPageIndex + 1) * this.pageSize - 1;\n return lastIndex >= this._resultData.length ? this._resultData.length - 1 : lastIndex;\n }\n\n getTotalResultElementsCount(): number {\n return this._resultData.length;\n }\n\n isPaginationEnabled(): boolean {\n return (\n this.pageSize > 0 &&\n (this.paginationEnabled ||\n (this.autoPaginationAboveItemsCount > 0 &&\n this._resultData.length > this.autoPaginationAboveItemsCount))\n );\n }\n\n setSearchDebounceTime(milliseconds: number): void {\n this.searchDebounceTime.set(milliseconds);\n }\n\n setDatasource(newData: T[]) {\n this.data = [...newData];\n this.applyObjectFilter();\n }\n\n getDatasource(): T[] {\n return this.data;\n }\n\n getResultData(): T[] {\n return this._resultData;\n }\n\n private async updateResultSignal() {\n return new Promise<void>((resolve) => {\n const res = (() => {\n if (this.isPaginationEnabled()) {\n const startIndex = this.currentPageIndex * this.pageSize;\n return this._resultData.slice(startIndex, startIndex + this.pageSize);\n }\n return this._resultData;\n })();\n this.result.set(res);\n resolve();\n });\n }\n\n // get resultData(): T[] {\n // if (\n // this.pageSize > 0 &&\n // (this.paginationEnabled ||\n // (this.autoPaginationAboveItemsCount > 0 &&\n // this._resultData.length > this.autoPaginationAboveItemsCount))\n // ) {\n // const startIndex = this.currentPageIndex * this.pageSize;\n // return this.filteredData.slice(startIndex, startIndex + this.pageSize);\n // }\n\n // return this.filteredData;\n // }\n\n search(filterTerm: string): void {\n this.isLoading.set(true);\n this.searchTerms$.next(filterTerm);\n }\n\n private async applySearch(): Promise<void> {\n return new Promise<void>(async (resolve) => {\n if (!this.searchTerm) {\n this._resultData = [...this.filteredData];\n } else {\n this.currentPageIndex = 0;\n this._resultData = this.filteredData.filter((item) =>\n this.filterPredicate(item, this.searchTerm)\n );\n }\n await this.updateResultSignal();\n this.resultVersion.update((v) => v + 1);\n this.isLoading.set(false);\n resolve();\n });\n }\n\n setFilterPredicate(predicate: (data: T, filter: string) => boolean): void {\n this.filterPredicate = predicate;\n }\n\n setFieldsToSearchIn(fields: string[]) {\n if (!fields || fields.length === 0) {\n throw new Error('Fields to search in cannot be empty');\n }\n this.fieldsToSearchIn = fields;\n this.setFilterPredicate((item: T, filter: string) => {\n if (!item || !filter) {\n return true;\n }\n if (this.speratedSearch) {\n const terms = filter\n .split(' ')\n .map((t) => t.trim())\n .filter((t) => !!t);\n return terms.every((term) => {\n return this.fieldsToSearchIn.some((field) => {\n const value = (item as any)[field];\n if (value != null) {\n return value.toString().toLowerCase().includes(term.toLowerCase());\n }\n return false;\n });\n });\n }\n return this.fieldsToSearchIn.some((field) => {\n const value = (item as any)[field];\n if (value != null) {\n return value.toString().toLowerCase().includes(filter.toLowerCase());\n }\n return false;\n });\n });\n }\n\n setSortFunction(sortFn: ((a: T, b: T) => number) | null): void {\n this.sortFn = sortFn;\n }\n\n private applySorting() {\n if (this.sortMap.length === 0 && !this.sortFn) {\n return;\n }\n if (this.sortFn) {\n this.filteredData.sort(this.sortFn);\n return;\n }\n\n this.filteredData.sort((a, b) => {\n for (const sort of this.sortMap) {\n let comparison = 0;\n if (sort.sortFn) {\n comparison = sort.sortFn(a, b);\n } else {\n const aValue = (a as any)[sort.field];\n const bValue = (b as any)[sort.field];\n if (isNaN(aValue) || isNaN(bValue)) {\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n comparison = aValue.localeCompare(bValue);\n } else {\n comparison = 0;\n }\n } else if (aValue < bValue) {\n comparison = -1;\n } else if (aValue > bValue) {\n comparison = 1;\n } else {\n comparison = 0;\n }\n }\n\n if (comparison !== 0) {\n return sort.direction === 'asc' ? comparison : -comparison;\n }\n }\n return 0;\n });\n }\n\n sortByFields(sortMap: DmCmpsDataSourceSort[]): void {\n this.sortMap = sortMap;\n this.sortFn = null;\n this.updateResultData();\n }\n\n resetSorting(): void {\n this.sortMap = [];\n this.sortFn = null;\n this.applyObjectFilter();\n }\n\n setFilterByObjectFields(filterObj: Partial<T> | null): void {\n this.objectToFilterBy = filterObj;\n this.applyObjectFilter();\n }\n\n getObjectToFilterBy(): Partial<T> | null {\n return this.objectToFilterBy;\n }\n\n private applyObjectFilter(): void {\n if (!this.objectToFilterBy) {\n this.filteredData = [...this.data];\n } else {\n this.filteredData = this.data.filter((item) => {\n for (const [key, value] of Object.entries(this.objectToFilterBy!)) {\n if ((item as any)[key] !== value) {\n return false;\n }\n }\n return true;\n });\n }\n this.updateResultData();\n }\n\n applySperatedSearch(enabled: boolean): void {\n this.speratedSearch = enabled;\n }\n\n setPropertiesToSkipInSearch(...props: string[]): void {\n this.propertiesToSkipInSearchSet = new Set(props);\n }\n}\n\ninterface DmCmpsDataSourceConfig<T = any> {\n /**\n * Disconnects the data source and performs any necessary cleanup.\n */\n disconnect: () => void;\n\n /**\n * A Signal that emits the loading state of the data source.\n */\n isLoading: Signal<boolean>;\n\n /**\n * Sets auto pagination threshold.\n * When the number of items exceeds the given count, pagination will be enabled automatically.\n * Use -1 to disable auto pagination.\n *\n * @param count Number of items threshold\n * @default 100\n */\n setAutoPaginationAboveItemsCount: (count: number) => void;\n\n /**\n * ApplyPagination - Enables pagination with the given page size.\n *\n * @param pageSize Number of items per page, optional, default is 10, must be at least 5\n * @default 10\n */\n applyPagination: (pageSize?: number) => void;\n\n /**\n * Sets the page size for pagination.\n * @param pageSize Number of items per page, must be at least 5\n */\n setPageSize: (pageSize: number) => void;\n\n /**\n * Gets the page size.\n * @returns page size\n */\n getPageSize: () => number;\n\n /**\n * Disables pagination.\n */\n disablePagination: () => void;\n\n /**\n * Moves to the next page and returns the current page index.\n * @returns New current page index\n */\n nextPage: () => number;\n\n /**\n * Moves to the previous page and returns the current page index.\n * @returns New current page index\n */\n previousPage: () => number;\n\n /**\n * Moves to the first page and returns the current page index.\n * @returns New current page index\n */\n firstPage: () => number;\n\n /**\n * Moves to the last page and returns the current page index.\n * @returns New current page index\n */\n lastPage: () => number;\n\n /**\n * Gets the current page index.\n * @returns Current page index\n */\n getCurrentPageIndex: () => number;\n\n /**\n * Gets the total number of pages.\n * @returns Total pages count\n */\n getTotalPagesCount: () => number;\n\n /**\n * Gets the index of the first item in the current page.\n * @returns Index of the first item in the current page\n */\n getFirstItemIndexInPage: () => number;\n\n /**\n * Gets the index of the last item in the current page.\n * @returns Index of the last item in the current page\n */\n getLastItemIndexInPage: () => number;\n\n /**\n * Gets the total number of elements after filtering, without pagination applied.\n * @returns Total number of result elements\n */\n getTotalResultElementsCount: () => number;\n\n /**\n * Checks if pagination is enabled.\n * @returns true if pagination is enabled, false otherwise\n */\n isPaginationEnabled: () => boolean;\n\n /**\n * Sets the debounce time for search input.\n * @param milliseconds Debounce time in milliseconds\n * @default 300\n */\n setSearchDebounceTime: (milliseconds: number) => void;\n\n /**\n * Sets the data source.\n * @param newData New data array\n */\n setDatasource: (newData: T[]) => void;\n\n /**\n * Gets the current data source array.\n * @returns Current data array\n */\n getDatasource: () => T[];\n\n /**\n * Get the result data after filtering, sorting, without pagination applied.\n * @returns Result data array\n */\n getResultData: () => T[];\n\n /**\n * Performs a search with the given filter term.\n * @param filterTerm The term to filter the data\n */\n search: (filterTerm: string) => void;\n\n /**\n * Sets the filter predicate function.\n * @param predicate Function to filter data items\n *\n * @default - A default predicate that checks if the item includes the filter term in any of its non Object properties.\n */\n setFilterPredicate: (predicate: (data: T, filter: string) => boolean) => void;\n\n /**\n * Sets the fields to search in.\n * @param fields Array of field names to search in\n *\n * @default - All non Object properties of the data items.\n */\n setFieldsToSearchIn: (fields: string[]) => void;\n\n /**\n * Sets a custom sort function.\n * @param sortFn Custom sort function\n *\n * @default - No custom sort function.\n */\n setSortFunction: (sortFn: ((a: T, b: T) => number) | null) => void;\n\n /**\n * Sorts the data by the given fields and directions.\n * @param sortMap\n * @default - No sorting applied.\n */\n sortByFields: (sortMap: DmCmpsDataSourceSort[]) => void;\n\n /**\n * Resets any applied sorting.\n */\n resetSorting: () => void;\n\n /**\n * Sets filter by object fields.\n * @param filterObj Object with fields and values to filter by\n * @default null (no filtering)\n */\n setFilterByObjectFields: (filterObj: Partial<T> | null) => void;\n\n /**\n * Gets the object used for filtering by fields.\n * @returns Partial object used for filtering or null if no filtering is applied\n */\n getObjectToFilterBy: () => Partial<T> | null;\n\n /**\n * Enables or disables separated search.\n * When enabled, the search term is split by spaces and each term is searched separately.\n * @param enabled true to enable separated search, false to disable\n * @default false\n */\n applySperatedSearch: (enabled: boolean) => void;\n\n /**\n * Sets keys to skip in default search.\n * @param Props Array of properties names to skip\n * @returns\n */\n setPropertiesToSkipInSearch: (...props: string[]) => void;\n}\n","import {\n Input,\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n} from '@angular/core';\nimport { DmMatSelectOutput } from './dm-mat-select';\nimport { FormControl } from '@angular/forms';\nimport { MatSelectChange } from '@angular/material/select';\n\nexport const SEARCH_SECTION_BG_COLOR_VAR = '--dm-mat-select-search-section-bg-color';\nexport const SEARCH_SECTION_BG_COLOR_DEFAULT_VALUE = '#faf9fd';\n\n/**\n * Public API for <dm-mat-select>\n *\n * This interface describes all inputs, outputs, and configuration options.\n * It is used only for documentation and IntelliSense — not for runtime behavior.\n */\nexport interface DmMatSelectConfig<T = any> {\n /**\n * CSS classes applied to the mat-form-field element.\n * ```\n * type string\n * ```\n *\n */\n formFieldClass?: InputSignal<string>;\n\n /**\n * CSS classes applied to the wrapper div element.\n * ```\n * type string\n * ```\n *\n */\n wrapperClass?: InputSignal<string>;\n\n /**\n * Appearance style of the select component.\n * ```\n * type 'fill' | 'outline'\n * ```\n *\n * @default fill\n */\n appearance?: InputSignal<'fill' | 'outline'>;\n\n /**\n * Enables multiple selection mode.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n multiple?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Enables a \"Select All\" option in the dropdown.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n selectAllEnabled?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Text of the \"Select All\" checkbox.\n * ```\n * type string\n * ```\n *\n * @default 'בחר הכל'\n */\n selectAllLabel?: InputSignal<string>;\n\n /**\n * Label shown in the form field.\n * ```\n * type string\n * ```\n *\n * @default ''\n */\n label?: InputSignal<string>;\n\n /**\n * The list of items shown in the dropdown.\n * ```\n * type T[]\n * ```\n *\n * @default []\n */\n options: InputSignal<T[]>;\n\n /**\n * The property to use as the unique identifier of each item.\n * ```\n * type keyof T\n * ```\n *\n * @default '_id'\n */\n optionValueKey?: InputSignal<keyof T>;\n\n /**\n * The property to use as the display label.\n * ```\n * type keyof T\n * ```\n *\n * @default 'name'\n */\n optionLabelKey?: InputSignal<keyof T>;\n\n /**\n * Enables searching inside the dropdown.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n searchable?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Function to filter options based on search input.\n * ```\n * type ((option: T, filter: string) => boolean) | null\n * ```\n *\n * @default null\n */\n filterPredicate?: InputSignal<((option: T, filter: string) => boolean) | null>;\n\n /**\n * Marks field as required.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n required?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Disables the component.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n disabled?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Custom error message.\n * ```\n * type string | null\n * ```\n *\n * @default null\n */\n error?: InputSignal<string | null>;\n\n /**\n * Placeholder text for the search input.\n * ```\n * type string\n * ```\n *\n * @default 'חפש...'\n */\n searchPlaceholder?: InputSignal<string>;\n\n /**\n * Enables an empty option in the select dropdown.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n emptyOption?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Label for the empty option.\n * ```\n * type string\n * ```\n *\n * @default 'ללא'\n */\n emptyOptionLabel?: InputSignal<string>;\n\n /**\n * Value for the empty option.\n * ```\n * type null | string | number\n * ```\n *\n * @default null\n */\n emptyOptionValue?: InputSignal<T | null>;\n\n /**\n * Function to format option names for display.\n * ```\n * type (option: T) => string\n * ```\n *\n */\n optionNameFormat?: InputSignal<((option: T) => string) | null>;\n\n /**\n * Width of the select panel.\n * To set the panel width to match the trigger width, use 'auto'.\n * To set a custom width, provide a CSS width value (e.g., '300px', '50%', etc.).\n * To have the panel width adjust to its content, set to null or empty string.\n * ```\n * type string | null\n * ```\n *\n * @default 'auto'\n */\n panelWidth?: InputSignal<string | null>;\n\n /**\\\n * Custom CSS classes applied to the select panel.\n * Can be a string, array of strings, Set of strings, or an object with class names as keys and boolean values.\n * Accepts the same values as ngClass.\n * ```\n * type string | string[] | Set<string> | { [key: string]: any }\n * ```\n *\n * @default ''\n */\n panelClass?: InputSignal<string | string[] | Set<string> | { [key: string]: any }>;\n\n /**\\\n * Background color for the search section.\n * Uses CSS variable '--dm-mat-select-search-section-bg-color'.\n * ```\n * type string | null\n * ```\n *\n * @default '#faf9fd'\n */\n searchSectionBackgroundColor?: InputSignal<string | null>;\n\n /**\n * Sort selected items at top of the list.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n sortBySelectedOnTop?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * A signal that holds the selected value(s) of the select component.\n * ```\n * type ModelSignal<DmMatSelectOutput<T>>\n * ```\n *\n * @default null\n */\n value?: ModelSignal<DmMatSelectOutput<T>>;\n\n /**\n * FormControl to bind to the select component.\n * ```\n * type FormControl<DmMatSelectOutput<T>> | null\n * ```\n *\n * @default null\n */\n formControl?: InputSignal<FormControl<DmMatSelectOutput<T>> | null>;\n\n /**\n * Event emitted when the selection changes.\n * ```\n * type OutputEmitterRef<MatSelectChange<DmMatSelectOutput<T>>>\n * ```\n *\n *\n */\n selectionChange?: OutputEmitterRef<MatSelectChange<DmMatSelectOutput<T>>>;\n\n /**\n * Icon name to display in the select trigger.\n * Can be a Material icon name or a Bootstrap icon html (like <i class=\"bi bi-name\"></i>).\n * ```\n * type string | null\n * ```\n *\n * @default null\n */\n icon?: InputSignal<string | null>;\n\n /**\n * Label to show in disabled option when there is no data to display.\n * ```\n * type string\n * ```\n *\n * @default 'אין נתונים להצגה'\n */\n noDataLabel?: InputSignal<string>;\n\n /**\n * Cleans the search input after selecting an option.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n clearSearchAfterSelect?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Tooltip text for the clear search button.\n * ```\n * type string\n * ```\n * @default 'נקה חיפוש'\n */\n clearSearchButtonTooltip?: InputSignal<string>;\n\n /**\n * Automatically focuses the search input when the panel opens.\n * ```\n * type boolean\n * ```\n *\n * @default true\n */\n focusSearchInputOnPanelOpen?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Properties to skip in default search.\n * ```\n * type string[]\n * ```\n *\n * @default ['_id',\n 'createdAt',\n 'updatedAt',\n '__v',\n 'createdBy',\n 'updatedBy',\n 'creatorName',\n 'updaterName',]\n */\n propertiesToSkipInSearch?: InputSignal<string[]>;\n}\n","import {\n booleanAttribute,\n Component,\n computed,\n effect,\n input,\n model,\n OnDestroy,\n output,\n signal,\n} from '@angular/core';\nimport { MatFormFieldModule, MatSuffix } from '@angular/material/form-field';\nimport { MatSelectChange, MatSelectModule } from '@angular/material/select';\nimport { DmCmpsDataSource } from '../utils/dm-cmps-data-source';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatOptionSelectionChange } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\nimport {\n DmMatSelectConfig,\n SEARCH_SECTION_BG_COLOR_DEFAULT_VALUE,\n SEARCH_SECTION_BG_COLOR_VAR,\n} from './utils';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nexport type DmMatSelectOutput<T> = T | T[] | string | string[] | number | number[] | null;\ntype DmMatSelectOption<T> = T & { __dmMatSelectFormattedName: string };\n\n@Component({\n selector: 'dm-mat-select',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatButtonModule,\n MatSelectModule,\n MatInputModule,\n CommonModule,\n FormsModule,\n MatTooltip,\n MatIcon,\n ],\n templateUrl: './dm-mat-select.html',\n styleUrl: './dm-mat-select.scss',\n})\nexport class DmMatSelect<T = any> implements DmMatSelectConfig<T>, OnDestroy {\n formFieldClass = input<string>('');\n wrapperClass = input<string>('');\n appearance = input<'fill' | 'outline'>('fill');\n multiple = input(false, { transform: booleanAttribute });\n selectAllEnabled = input(false, { transform: booleanAttribute });\n selectAllLabel = input<string>('בחר הכל');\n label = input<string>('');\n options = input<T[]>([]);\n optionValueKey = input<keyof T>('_id' as keyof T);\n optionLabelKey = input<keyof T>('name' as keyof T);\n searchable = input(false, { transform: booleanAttribute });\n\n required = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n error = input<string | null>(null);\n\n searchPlaceholder = input<string>('חפש...');\n\n emptyOption = input(false, { transform: booleanAttribute });\n emptyOptionLabel = input<string>('ללא');\n emptyOptionValue = input<T | null>(null);\n\n optionNameFormat = input<((option: T) => string) | null>(null);\n private _optionNameFormat: ((option: T) => string) | null = null;\n\n protected datasource = signal<DmCmpsDataSource<DmMatSelectOption<T>>>(\n new DmCmpsDataSource<DmMatSelectOption<T>>()\n );\n\n value = model<DmMatSelectOutput<T>>(null);\n\n formControl = input<FormControl<DmMatSelectOutput<T>> | null>(null);\n panelWidth = input<string | null>('auto');\n panelClass = input<string | string[] | Set<string> | { [key: string]: any }>('');\n searchSectionBackgroundColor = input<string | null>(SEARCH_SECTION_BG_COLOR_DEFAULT_VALUE);\n\n sortBySelectedOnTop = input(false, { transform: booleanAttribute });\n\n private internalControl = new FormControl<DmMatSelectOutput<T>>(null);\n\n protected control = computed(() => this.formControl() ?? this.internalControl);\n\n selectionChange = output<MatSelectChange<DmMatSelectOutput<T>>>();\n\n icon = input<string | null>(null);\n\n protected isBootstrapIcon = computed(() => {\n return this.icon() ? this.icon()!.includes('bi-') : false;\n });\n\n noDataLabel = input<string>('אין נתונים להצגה');\n\n clearSearchAfterSelect = input(true, { transform: booleanAttribute });\n\n clearSearchButtonTooltip = input<string>('נקה חיפוש');\n\n focusSearchInputOnPanelOpen = input(true, { transform: booleanAttribute });\n\n filterPredicate = input<((option: T, filterText: string) => boolean) | null>(null);\n private _filterPredicate: ((option: T, filterText: string) => boolean) | null = null;\n\n propertiesToSkipInSearch = input<string[]>([\n '_id',\n 'createdAt',\n 'updatedAt',\n '__v',\n 'createdBy',\n 'updatedBy',\n 'creatorName',\n 'updaterName',\n ]);\n\n simpleArray = computed(() => {\n return typeof this.options()[0] === 'string' || typeof this.options()[0] === 'number';\n });\n\n private selectedOptionsIdsSet = signal<Set<any>>(new Set());\n\n protected filterText = model<string>('');\n\n protected checkIfAllSelected = computed(() => {\n const options = this.datasource().result();\n const selected = this.control().value;\n const allSelected =\n options.length > 0 &&\n Array.isArray(selected) &&\n selected.length >= options.length &&\n options.every((option) => {\n const optionValue = this.getOptionValue(option);\n return this.selectedOptionsIdsSet().has(optionValue);\n });\n\n return allSelected;\n });\n\n constructor() {\n this.runEffects();\n }\n\n ngOnDestroy(): void {\n this.datasource().disconnect();\n }\n\n setOptionsFormattedNames(options: DmMatSelectOption<T>[]) {\n if (this._optionNameFormat) {\n for (const option of options) {\n option.__dmMatSelectFormattedName = this._optionNameFormat(option);\n }\n }\n }\n\n private runEffects() {\n effect(() => {\n this._filterPredicate = this.filterPredicate();\n this._optionNameFormat = this.optionNameFormat();\n this.datasource().setPropertiesToSkipInSearch(...this.propertiesToSkipInSearch());\n });\n\n effect(() => {\n const opts = this.options() as DmMatSelectOption<T>[];\n this.setOptionsFormattedNames(opts);\n this.datasource().setAutoPaginationAboveItemsCount(-1);\n if (this._filterPredicate) {\n this.datasource().setFilterPredicate(this._filterPredicate);\n }\n if (this.sortBySelectedOnTop() && this.multiple()) {\n this.datasource().setSortFunction(\n ((a: T, b: T) => {\n const aSelected = this.selectedOptionsIdsSet().has(this.getOptionValue(a));\n const bSelected = this.selectedOptionsIdsSet().has(this.getOptionValue(b));\n if (aSelected && !bSelected) {\n return -1;\n } else if (!aSelected && bSelected) {\n return 1;\n } else {\n return 0;\n }\n }).bind(this)\n );\n }\n this.datasource().setDatasource(opts);\n });\n\n effect(() => {\n if (this.formControl()) {\n return;\n }\n this.internalControl.setValue(this.value(), { emitEvent: false });\n });\n\n effect((onCleanup) => {\n const ctrl = this.control();\n const setSelectedIdsSet = (selectedVal: DmMatSelectOutput<T>) => {\n const newSelectedIdsSet = new Set<any>();\n if (this.multiple()) {\n const arr = Array.isArray(selectedVal) ? selectedVal : [];\n for (const item of arr) {\n const id = this.getOptionValue(item as T);\n newSelectedIdsSet.add(id);\n }\n this.selectedOptionsIdsSet.set(newSelectedIdsSet);\n }\n };\n setSelectedIdsSet(ctrl.value);\n\n const sub = ctrl.valueChanges.subscribe((val) => {\n setSelectedIdsSet(val);\n this.value.set(val);\n });\n\n onCleanup(() => sub.unsubscribe());\n });\n\n effect(() => {\n document.documentElement.style.setProperty(\n SEARCH_SECTION_BG_COLOR_VAR,\n this.searchSectionBackgroundColor() ?? SEARCH_SECTION_BG_COLOR_DEFAULT_VALUE\n );\n });\n }\n\n protected applyFilter(event: KeyboardEvent) {\n const target = event.target as HTMLInputElement;\n this.filterText.set(target.value);\n this.datasource().search(this.filterText());\n }\n\n protected selectionChangeHandler(event: MatSelectChange<T | T[] | null>) {\n this.selectionChange.emit(event);\n }\n\n private getOptionValue(option: T): any {\n if (this.simpleArray()) return option;\n return typeof option === 'object' && option != null\n ? (option as any)[this.optionValueKey()]\n : option;\n }\n\n protected onSelectionChangeHandler(event: MatOptionSelectionChange, option: T | null) {\n if (!event.isUserInput) return;\n const selected = event.source.selected;\n const currentValue = this.control().value;\n if (this.multiple()) {\n if (!option) return;\n const arr = Array.isArray(currentValue) ? currentValue : [];\n let newValue: (string | number | T)[];\n if (selected) {\n newValue = [...arr, this.getOptionValue(option)];\n } else {\n newValue = arr.filter((v) => v !== this.getOptionValue(option));\n }\n this.control().setValue(newValue as DmMatSelectOutput<T>);\n } else {\n if (!option) {\n this.control().setValue(this.emptyOptionValue());\n return;\n }\n if (selected) {\n this.control().setValue(this.getOptionValue(option) as DmMatSelectOutput<T>);\n } else {\n this.control().setValue(null);\n }\n }\n if (this.clearSearchAfterSelect()) {\n this.resetSearch();\n }\n }\n\n protected selectAllChange(event: MatCheckboxChange) {\n if (event.checked) {\n const allValues = this.datasource()\n .result()\n .map((option) => this.getOptionValue(option));\n const newValues = Array.isArray(this.control().value)\n ? (this.control().value as (string | T)[])\n : [];\n for (const val of allValues) {\n if (!this.selectedOptionsIdsSet().has(val)) {\n newValues.push(val);\n }\n }\n this.control().setValue(newValues as DmMatSelectOutput<T>);\n } else {\n const selectedValues = (this.control().value as (string | T)[]).filter((val) => {\n const allOptionValues = this.datasource()\n .result()\n .map((option) => this.getOptionValue(option));\n return !allOptionValues.includes(val as any);\n });\n this.control().setValue(selectedValues as DmMatSelectOutput<T>);\n }\n }\n\n protected resetSearch() {\n this.filterText.set('');\n this.datasource().search('');\n }\n\n protected onPanelOpened() {\n if (this.focusSearchInputOnPanelOpen()) {\n const searchInput = document.getElementById('dm-mat-select-search-input') as HTMLInputElement;\n setTimeout(() => {\n if (searchInput) {\n searchInput.focus();\n }\n }, 0);\n }\n }\n}\n","<div class=\"dm-mat-select-wrapper\" [class]=\"wrapperClass()\">\n <mat-form-field [appearance]=\"appearance()\" [class]=\"formFieldClass()\" style=\"width: 100%\">\n <mat-label>{{ label() }}</mat-label>\n <mat-select\n [multiple]=\"multiple()\"\n [formControl]=\"control()\"\n (selectionChange)=\"selectionChangeHandler($event)\"\n [disabled]=\"disabled()\"\n [panelWidth]=\"panelWidth()\"\n [panelClass]=\"panelClass()\"\n (opened)=\"onPanelOpened()\"\n >\n <div\n class=\"search-section\"\n [ngStyle]=\"{\n 'background-color': 'none'\n }\"\n >\n @if (searchable()) {\n <mat-form-field>\n <input\n id=\"dm-mat-select-search-input\"\n matInput\n [placeholder]=\"searchPlaceholder()\"\n [(ngModel)]=\"filterText\"\n (keyup)=\"applyFilter($event)\"\n (keyDown.Space)=\"$event.stopPropagation()\"\n />\n @if (filterText()) {\n <button\n mat-icon-button\n matSuffix\n (click)=\"resetSearch()\"\n [matTooltip]=\"clearSearchButtonTooltip() || ''\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n } @if (selectAllEnabled() && multiple()) {\n <mat-checkbox [checked]=\"checkIfAllSelected()\" (change)=\"selectAllChange($event)\">{{\n selectAllLabel()\n }}</mat-checkbox>\n }\n </div>\n @if (emptyOption()) {\n <mat-option\n [value]=\"emptyOptionValue()\"\n (onSelectionChange)=\"onSelectionChangeHandler($event, emptyOptionValue())\"\n >{{ emptyOptionLabel() }}</mat-option\n >\n } @for (option of datasource().result(); track simpleArray() ? option :\n option[this.optionValueKey()]) {\n <mat-option\n [value]=\"simpleArray() ? option : option[optionValueKey()]\"\n (onSelectionChange)=\"onSelectionChangeHandler($event, option)\"\n >{{\n optionNameFormat()\n ? option.__dmMatSelectFormattedName\n : simpleArray()\n ? option\n : option[optionLabelKey()]\n }}</mat-option\n >\n } @if (datasource().result().length === 0) {\n <mat-option disabled>{{ noDataLabel() }}</mat-option>\n }\n </mat-select>\n\n @if (icon(); as icon) {\n <span matSuffix>\n @if (isBootstrapIcon()) {\n <span [innerHTML]=\"icon\"></span> } @else {\n <mat-icon matSuffix>{{ icon }}</mat-icon>\n }\n </span>\n }\n\n <span matSuffix>\n <ng-content select=\"[dm-mat-select-suffix]\"></ng-content>\n </span>\n\n <mat-error>{{ error() }}</mat-error>\n </mat-form-field>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSliderModule, MatSliderThumb } from '@angular/material/slider';\nimport { MatTooltipModule, TooltipPosition } from '@angular/material/tooltip';\n\nexport interface DmCmpsColor {\n color: string;\n tooltip?: string;\n}\n\n@Component({\n selector: 'dm-color-picker',\n standalone: true,\n imports: [MatMenuModule, MatTooltipModule, CommonModule, MatSliderModule],\n templateUrl: './dm-color-picker.html',\n styleUrl: './dm-color-picker.scss',\n})\nexport class DmColorPicker {\n colors = input<DmCmpsColor[]>([\n { color: '#FF0000' },\n { color: '#FFA500' },\n { color: '#FFFF00' },\n { color: '#008000' },\n { color: '#0000FF' },\n { color: '#4B0082' },\n { color: '#EE82EE' },\n { color: '#A9A9A9' },\n { color: '#FFFFFF' },\n { color: '#000000' },\n ]);\n\n formControl = input<FormControl | null>(null);\n private internalFormControl: FormControl = new FormControl('');\n\n protected control = computed(() => this.formControl() ?? this.internalFormControl);\n\n width = input<number>(30);\n height = input<number>(30);\n borderRadius = input<number | string>('50%');\n\n protected radius = computed(() => {\n return typeof this.borderRadius() === 'number'\n ? `${this.borderRadius()}px`\n : this.borderRadius();\n });\n\n selectedColor = signal<string>('#FFFFFF');\n\n tooltip = input<string>('');\n tooltipPosition = input<TooltipPosition>('above');\n customColor = input(false, { transform: booleanAttribute });\n\n opacitySlider = input(false, { transform: booleanAttribute });\n // @Input() opacitySliderColor: 'primary' | 'accent' | 'warn' = 'primary';\n opacitySliderLabel = input<string>('שקיפות');\n customColorTooltip = input<string>('צבע מותאם אישית');\n\n wrapperClass = input<string>('');\n wrapperStyle = input<string>('');\n onColorChange = output<string>();\n\n // @Input() ngModel: string = '';\n // @Output() ngModelChange = new EventEmitter<string>();\n\n value = model<string>('');\n\n constructor() {\n this.runEffects();\n }\n\n runEffects() {\n effect(() => {\n if (this.formControl()) {\n return;\n }\n this.internalFormControl.setValue(this.value(), { emitEvent: false });\n });\n\n effect((onCleanup) => {\n const ctrl = this.control();\n\n this.selectedColor.set(ctrl.value);\n const sub = ctrl.valueChanges.subscribe((val) => {\n this.selectedColor.set(val);\n this.value.set(val);\n });\n\n onCleanup(() => sub.unsubscribe());\n });\n }\n\n ngOnInit(): void {}\n\n onColorSelected(color: string) {\n // this.selectedColor.set(color);\n this.control().setValue(color);\n this.onColorChange.emit(color);\n }\n\n _onColorChange(event: any) {\n const color = event.target.value;\n this.onColorSelected(color);\n }\n\n formatLabel(value: number): string {\n return Math.round(value) + '%';\n }\n\n getOpacity() {\n const value = this.selectedColor().slice(7) || 'FF';\n return Math.round((parseInt(value, 16) / 255) * 100);\n }\n\n setOpacity(value: string) {\n this.selectedColor.set(this.selectedColor().slice(0, 7));\n this.selectedColor.set(this.selectedColor() + value);\n }\n\n onOpacityValueChange(event: Event) {\n const value = +(event.target as HTMLInputElement).value;\n if (value == null) return;\n\n let hex = Math.round((value / 100) * 255).toString(16);\n if (hex.length < 2) hex = '0' + hex;\n\n this.setOpacity(hex);\n this.updateSelectedColor();\n }\n\n opacityChangeHandler(value: string) {\n let hex = Math.round((parseInt(value) / 100) * 255).toString(16);\n if (hex.length < 2) {\n hex = '0' + hex;\n }\n this.setOpacity(hex);\n }\n\n onOpacityChange(opacity: Event) {\n const value = (opacity.target as HTMLInputElement).value;\n this.opacityChangeHandler(value);\n }\n\n updateSelectedColor() {\n this.onColorSelected(structuredClone(this.selectedColor()));\n }\n\n writeValue(value: any): void {}\n\n registerOnChange(fn: any): void {}\n\n registerOnTouched(fn: any): void {}\n}\n","<div class=\"dm-color-picker-wrapper\" [class]=\"wrapperClass()\" [style]=\"wrapperStyle()\">\n <div\n class=\"dm-color-picker\"\n [matMenuTriggerFor]=\"colorPicker\"\n [style.background-color]=\"selectedColor()\"\n [matTooltip]=\"tooltip()\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [style.width.px]=\"width()\"\n [style.height.px]=\"height()\"\n [style.border-radius]=\"radius()\"\n ></div>\n @if (opacitySlider()){\n <div class=\"dm-color-picker-slider-wrapper\">\n {{ opacitySliderLabel() }}\n <mat-slider min=\"0\" max=\"100\" step=\"1\" discrete [displayWith]=\"formatLabel\">\n <input\n matSliderThumb\n [value]=\"getOpacity()\"\n (input)=\"onOpacityChange($event)\"\n #slider\n (change)=\"updateSelectedColor()\"\n />\n </mat-slider>\n </div>\n }\n</div>\n\n<mat-menu #colorPicker=\"matMenu\">\n <div class=\"dm-color-picker-menu\">\n @for (color of colors(); track color.color){\n <div\n (click)=\"onColorSelected(color.color)\"\n class=\"dm-color-div\"\n [matTooltip]=\"color.tooltip || ''\"\n matTooltipPosition=\"above\"\n [style.background-color]=\"color.color\"\n ></div>\n } @if (customColor()){<input\n (click)=\"$event.stopPropagation()\"\n [matTooltip]=\"customColorTooltip()\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [value]=\"selectedColor()\"\n type=\"color\"\n class=\"pointer\"\n (change)=\"_onColorChange($event)\"\n />}\n </div>\n</mat-menu>\n","import { Injectable, signal } from '@angular/core';\n\nexport const DEFAULT_SPINNER_ID = 'dm-spinner';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DmSpinnerService {\n // visibility$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n visibility$ = signal<boolean>(false);\n spinnerToShow$ = signal<string>(DEFAULT_SPINNER_ID);\n spinnerTasks$ = signal<Set<string>>(new Set());\n\n // spinnerToShow$: BehaviorSubject<string> = new BehaviorSubject<string>(\n // 'dm-cmps-spinner'\n // );\n // spinnerTasks$: BehaviorSubject<Set<string>> = new BehaviorSubject<\n // Set<string>\n // >(new Set());\n\n spinnerText = signal('');\n constructor() {}\n\n showSpinner(spinnerId: string = DEFAULT_SPINNER_ID) {\n this.visibility$.set(true);\n this.spinnerToShow$.set(spinnerId);\n }\n\n startLoading(taskName: string, spinnerId: string = DEFAULT_SPINNER_ID) {\n this.spinnerToShow$.set(spinnerId);\n const tasks = new Set(this.spinnerTasks$());\n tasks.add(taskName);\n this.spinnerTasks$.set(tasks);\n }\n\n stopLoading(taskName: string) {\n let tasks = new Set(this.spinnerTasks$());\n tasks.delete(taskName);\n this.spinnerTasks$.set(tasks);\n if (tasks.size === 0) {\n this.spinnerToShow$.set(DEFAULT_SPINNER_ID);\n }\n }\n\n hideSpinner() {\n this.visibility$.set(false);\n this.spinnerToShow$.set(DEFAULT_SPINNER_ID);\n }\n\n setSpinnerText(text: string) {\n this.spinnerText.set(text);\n }\n}\n","import {\n Component,\n computed,\n effect,\n input,\n numberAttribute,\n Renderer2,\n signal,\n} from '@angular/core';\nimport { DEFAULT_SPINNER_ID, DmSpinnerService } from './dm-spinner.service';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'dm-spinner',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './dm-spinner.html',\n styleUrl: './dm-spinner.scss',\n})\nexport class DmSpinner {\n protected readonly styleVariables: {\n [key: string]: {\n field: string;\n defaultValue?: string;\n };\n } = {\n color: { field: '--dm-spinner-color' },\n size: { field: '--dm-spinner-size' },\n shapeSize: { field: '--dm-spinner-shape-size' },\n speed: { field: '--dm-spinner-speed' },\n borderThikness: { field: '--dm-spinner-border-thikness' },\n position: { field: '--dm-spinner-position' },\n backgroundColor: { field: '--dm-spinner-background-color' },\n textColor: { field: '--dm-spinner-text-color' },\n fontSize: { field: '--dm-spinner-font-size' },\n textPosition: { field: '--dm-spinner-text-position' },\n _backgroundBlur: { field: '--dm-spinner-background-blur' },\n textPositionYOffset: { field: '--dm-spinner-text-position-y-offset' },\n };\n\n color = input('#1a4bd6');\n type = input<'rounded' | 'flower' | 'gif'>('rounded');\n gifSrc = input('https://media.tenor.com/I6kN-6X7nhAAAAAi/loading-buffering.gif');\n size = input<number>(40);\n shapeSize = input<number>(25);\n speed = input<number>(2);\n borderThikness = input<number>(5);\n position = input<'absolute' | 'relative' | 'fixed'>('absolute');\n backgroundColor = input<string>('');\n text = input<string>('טוען...');\n textColor = input<string>('#000000');\n fontSize = input<number>(20);\n textPosition = input<'center' | 'bottom'>('center');\n colors = input<string[]>(['#1a4bd6', '#000000']);\n backgroundBlur = input(5, { transform: numberAttribute });\n textPositionYOffset = input(0, { transform: numberAttribute });\n\n private _backgroundBlur = computed(() => {\n return `${this.backgroundBlur() || 0}px`;\n });\n\n name = input<string>(DEFAULT_SPINNER_ID);\n\n protected spinnerText = signal<string>('');\n\n constructor(protected _spinnerService: DmSpinnerService, private renderer: Renderer2) {\n this.runEffects();\n }\n\n runEffects() {\n effect(() => {\n const isVisible = this._spinnerService.visibility$();\n if (isVisible) {\n this.renderer.addClass(document.body, 'loading-active');\n } else {\n this.renderer.removeClass(document.body, 'loading-active');\n }\n });\n\n effect(() => {\n const text = this._spinnerService.spinnerText() || this.text();\n this.spinnerText.set(text);\n });\n\n effect(() => {\n for (const [key, value] of Object.entries(this.styleVariables)) {\n const fieldValue = (this as any)[key]();\n if (fieldValue === undefined || fieldValue === null) {\n if (value.defaultValue !== undefined) {\n document.documentElement.style.setProperty(value.field, value.defaultValue);\n }\n continue;\n }\n document.documentElement.style.setProperty(\n value.field,\n fieldValue ?? value.defaultValue ?? ''\n );\n }\n });\n }\n\n ngOnInit() {}\n\n ngOnDestroy() {}\n}\n","@if ( (_spinnerService.visibility$() && (_spinnerService.spinnerToShow$() == name())) ||\n(_spinnerService.spinnerTasks$().size > 0 && name() == 'dm-spinner')) {\n\n<div class=\"dm-spinner-wrapper\">\n <div class=\"dm-spinner-inner-wrapper\">\n @switch (type()) { @case ('flower') {\n <div class=\"dm-spinner-flower\"></div>\n } @case ('rounded') {\n <div class=\"dm-spinner-rounded\"></div>\n } @case ('gif') {\n <img class=\"dm-spinner-gif\" [src]=\"gifSrc()\" [width]=\"size()\" [height]=\"'auto'\" />\n } }\n <div class=\"dm-spinner-text\" [style.font-size.px]=\"fontSize()\">\n {{ spinnerText() }}\n </div>\n </div>\n</div>\n}\n","import { InputSignal, InputSignalWithTransform, TemplateRef, Type } from '@angular/core';\nimport { DmCmpsDataSource } from '../utils/dm-cmps-data-source';\nimport { MatSlideToggle, MatSlideToggleChange } from '@angular/material/slide-toggle';\n\nexport type DmTableNgClass = string | string[] | Set<string> | { [key: string]: any };\n\nexport interface DmCellContext<T extends object> {\n $implicit: T;\n row: T;\n column: DmTableColumn<T>;\n}\nexport type DmTableColumnType =\n | 'date'\n | 'component'\n | 'tel'\n | 'mail'\n | 'link'\n | 'whatsapp'\n | 'customHtml'\n | 'actions'\n | 'slideToggle'\n | 'input';\n\nexport type DmTableInputColumnType = 'text' | 'number' | 'select' | 'checkbox';\nexport interface DmTableInputCellSelectOption {\n label: string;\n value: any;\n}\n\nexport const shouldCacheColumn = <T extends object>(column: DmTableRuntimeColumn<T>): boolean => {\n return !!column.valueGetter || !!(column.type == 'date');\n};\n\nexport interface DmTableColumnState {\n id: string;\n visible: boolean;\n order: number;\n}\n\ninterface DmTableColumnBase<T extends object> {\n id?: string;\n field: keyof T;\n valueGetter?: (row: T) => any;\n dateFormat?: string;\n component?: Type<any>;\n valueSetter?: (row: T, payload: any) => void;\n customHtml?: string;\n customCellTemplate?: TemplateRef<any>;\n actionsButtons?: DmTableRowActionButton<T>[];\n sortable?: boolean;\n sortFn?: (a: T, b: T) => number;\n visible?: boolean;\n cellStyle?: { [key: string]: any } | ((row: T) => { [key: string]: any });\n headerStyle?:\n | { [key: string]: any }\n | ((datasource: DmCmpsDataSource<T>) => { [key: string]: any });\n cellContentStyle?: { [key: string]: any } | ((row: T) => { [key: string]: any });\n headerContentStyle?:\n | { [key: string]: any }\n | ((datasource: DmCmpsDataSource<T>) => { [key: string]: any });\n totalCellStyle?:\n | { [key: string]: any }\n | ((datasource: DmCmpsDataSource<T>) => { [key: string]: any });\n onCellClick?: (row: T, event: Event) => void;\n onCellDoubleClick?: (row: T, event: Event) => void;\n onCellContentClick?: (row: T, event: Event) => void;\n onCellContentDoubleClick?: (row: T, event: Event) => void;\n cellContextMenu?: (row: T, event: Event) => void;\n cellContentContextMenu?: (row: T, event: Event) => void;\n onHeaderClick?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n onHeaderDoubleClick?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n onHeaderContentClick?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n onHeaderContentDoubleClick?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n headerContextMenu?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n headerContentContextMenu?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n\n totalRowValueType?: 'string' | 'html';\n totalRowValueGetter?: (datasource: DmCmpsDataSource<T>) => any;\n\n inputType?: DmTableInputColumnType;\n inputValidator?: (row: T, value: any) => boolean;\n onInputValidatorFailed?: (row: T, value: any) => void;\n selectOptions?: DmTableInputCellSelectOption[];\n inputStyle?: { [key: string]: any } | ((row: T) => { [key: string]: any });\n\n headerMenuItems?: DmTableColumnHeaderMenuItem<T>[];\n headerMenuTooltip?: string;\n\n slideToggleTooltip?: string | ((row: T) => string);\n onSlideToggleChange?: (row: T, change: MatSlideToggleChange) => void;\n}\n\ntype DmTableIndexColumn<T extends object> = {\n type: '$index' | 'actions';\n header: string;\n} & Omit<DmTableColumnBase<T>, 'field'> & { field?: keyof T };\n\nexport type DmTableDataColumn<T extends object> = {\n type?: DmTableColumnType;\n header: string;\n} & DmTableColumnBase<T>;\n\nexport type DmTableColumn<T extends object> = DmTableIndexColumn<T> | DmTableDataColumn<T>;\n\nexport type DmTableRuntimeColumn<T extends object> = Omit<DmTableColumn<T>, 'id'> & {\n id: string;\n __cache?: WeakMap<T, any>;\n};\n\nexport interface DmTableColumnHeaderMenuItem<T extends object> {\n label: string;\n icon?: string;\n onClick?: (datasource: DmCmpsDataSource<T>, event: Event, closeParentMenus: () => void) => void;\n color?: string;\n backgroundColor?: string;\n helpText?: string;\n showIf?: (datasource: DmCmpsDataSource<T>) => boolean;\n children?: DmTableColumnHeaderMenuItem<T>[];\n}\n\nexport type DmTableRowActionButton<T extends object> =\n | {\n label: string;\n buttonType?: 'filled' | 'outlined' | 'tonal' | 'elevated' | 'text';\n icon?: string;\n tooltip?: string;\n backgroundColor?: string;\n color?: string;\n onClick?: (row: T, event: Event, closeParentMenus: () => void) => void;\n children?: DmTableRowActionButton<T>[];\n showIf?: (row: T) => boolean;\n }\n | {\n buttonType?: 'icon';\n icon?: string;\n tooltip?: string;\n backgroundColor?: string;\n color?: string;\n onClick?: (row: T, event: Event, closeParentMenus: () => void) => void;\n children?: DmTableRowActionButton<T>[];\n showIf?: (row: T) => boolean;\n };\n\nexport type DmTableActionButton<T extends object> =\n | {\n label: string;\n buttonType?: 'filled' | 'outlined' | 'tonal' | 'elevated' | 'text';\n icon?: string;\n tooltip?: string;\n backgroundColor?: string;\n color?: string;\n onClick?: (\n columns: DmTableColumn<T>[],\n datasource: DmCmpsDataSource<T>,\n event: Event,\n closeParentMenus: () => void\n ) => void;\n children?: DmTableActionButton<T>[];\n showIf?: (columns: DmTableColumn<T>[], datasource: DmCmpsDataSource<T>) => boolean;\n }\n | {\n buttonType?: 'icon';\n icon?: string;\n tooltip?: string;\n backgroundColor?: string;\n color?: string;\n onClick?: (\n columns: DmTableColumn<T>[],\n datasource: DmCmpsDataSource<T>,\n event: Event,\n closeParentMenus: () => void\n ) => void;\n children?: DmTableActionButton<T>[];\n showIf?: (columns: DmTableColumn<T>[], datasource: DmCmpsDataSource<T>) => boolean;\n };\n\nexport interface DmTablePaginatorSettings {\n pageSize?: number;\n pageSizeOptions?: number[];\n showFirstAndLastPagesButtons?: boolean;\n\n firstPageButtonLabel?: string;\n lastPageButtonLabel?: string;\n nextPageButtonLabel?: string;\n previousPageButtonLabel?: string;\n numberOfItemsPerPageLabel?: string;\n}\n\nexport interface DmTableStyle {\n tableWrapper?: { [key: string]: any };\n table?: {\n root?: { [key: string]: any };\n thead?: {\n root?: { [key: string]: any };\n tr?: { [key: string]: any };\n th?: { [key: string]: any };\n };\n tbody?: {\n root?: { [key: string]: any };\n tr?: { [key: string]: any };\n td?: { [key: string]: any };\n even_row_style?: { tr?: { [key: string]: any }; td?: { [key: string]: any } };\n odd_row_style?: { tr?: { [key: string]: any }; td?: { [key: string]: any } };\n hovered_row_style?: { tr?: { [key: string]: any }; td?: { [key: string]: any } };\n input?: { [key: string]: any };\n };\n tfoot?: {\n root?: { [key: string]: any };\n tr?: { [key: string]: any };\n td?: { [key: string]: any };\n };\n };\n total_row_style?: { [key: string]: any };\n paginator?: {\n root?: { [key: string]: any };\n p?: { [key: string]: any };\n mat_form_field?: { [key: string]: any };\n mat_select?: { [key: string]: any };\n mat_option?: { [key: string]: any };\n button?: { [key: string]: any };\n };\n scrollbar?: {\n width?: string;\n color?: string;\n hoverColor?: string;\n backgroundColor?: string;\n borderRadius?: string;\n };\n}\n\nexport interface DmTableClasses {\n tableWrapper?: DmTableNgClass;\n table?: {\n root?: DmTableNgClass;\n thead?: {\n root?: DmTableNgClass;\n tr?: DmTableNgClass;\n th?: DmTableNgClass;\n };\n tbody?: {\n root?: DmTableNgClass;\n tr?: DmTableNgClass;\n td?: DmTableNgClass;\n };\n tfoot?: {\n root?: DmTableNgClass;\n tr?: DmTableNgClass;\n td?: DmTableNgClass;\n };\n };\n paginator?: {\n root?: DmTableNgClass;\n p?: DmTableNgClass;\n mat_form_field?: DmTableNgClass;\n mat_select?: DmTableNgClass;\n mat_option?: DmTableNgClass;\n button?: DmTableNgClass;\n };\n}\n\nexport const DM_TABLE_HEADER_BACKGROUND_COLOR_CSS_VAR = '--dm-table-header-background-color';\nexport const DM_TABLE_HEADER_COLOR_CSS_VAR = '--dm-table-header-color';\nexport const DM_TABLE_SCROLLBAR_COLOR_CSS_VAR = '--dm-table-scrollbar-color';\nexport const DM_TABLE_SCROLLBAR_HOVER_COLOR_CSS_VAR = '--dm-table-scrollbar-hover-color';\nexport const DM_TABLE_SCROLLBAR_BACKGROUND_COLOR_CSS_VAR = '--dm-table-scrollbar-background-color';\nexport const DM_TABLE_SCROLLBAR_WIDTH_CSS_VAR = '--dm-table-scrollbar-width';\nexport const DM_TABLE_SCROLLBAR_BORDER_RADIUS_CSS_VAR = '--dm-table-scrollbar-border-radius';\n\nexport interface DmTableInterface<T extends object> {\n /**\n * Table id - An unique identifier for the table, used to store the table state in the localStorage.\n * @default undefined\n */\n tableId: InputSignal<string | undefined>;\n\n /**\n * Table data source - An array of objects that will be displayed in the table.\n * @required\n */\n dataSource: InputSignal<T[]>;\n\n /**\n * Table columns - An array of objects that define the columns of the table.\n * @required\n */\n columns: InputSignal<DmTableColumn<T>[]>;\n\n /**\n * No data message - The message to display when the table is empty.\n * @default 'אין נתונים להצגה'\n */\n noDataMessage: InputSignal<string>;\n\n /**\n * Enable search - Whether to enable search functionality.\n * @default false\n */\n enableSearch: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Search placeholder - The placeholder text to display in the search input.\n * @default 'חיפוש...'\n */\n searchPlaceholder: InputSignal<string>;\n\n /**\n * Clear search tooltip - The tooltip text to display when hovering over the clear search button.\n * @default 'נקה חיפוש'\n */\n clearSearchTooltip: InputSignal<string>;\n\n /**\n * Search input appearance - The appearance of the search input.\n * @default 'fill'\n */\n searchInputAppearance: InputSignal<'fill' | 'outline'>;\n\n /**\n * Filter predicate - A function that defines how to filter the table data.\n * when undefined, the default filter predicate will be used.\n * @default null\n */\n filterPredicate: InputSignal<((row: T, filterText: string) => boolean) | null>;\n\n /**\n * Action buttons - An array of objects that define the action buttons of the table.\n * - will be displayed on the left side above the table.\n * @default []\n */\n actionButtons: InputSignal<DmTableActionButton<T>[]>;\n\n /**\n * Enable pagination - Whether to enable pagination functionality.\n * @default false\n */\n enablePagination: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Auto pagination above rows count - The number of rows above which pagination will be enabled automatically.\n * @default 100\n */\n autoPaginationAboveRowsCount: InputSignalWithTransform<number, unknown>;\n\n /**\n * Paginator settings - An object that defines the paginator settings of the table.\n * @default null\n */\n paginatorSettings: InputSignal<DmTablePaginatorSettings>;\n\n /**\n * Enable loading progressbar - whether to enable loading progressbar.\n * @default true\n */\n enableLoadingProgressbar: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Enable columns drag and drop - whether to enable columns drag and drop, to change columns order.\n * @default false\n */\n enableColumnsDragAndDrop: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Enable columns drag handle - if true, a drag handle will be displayed on the left side of the column header.\n * @default false\n */\n enableColumnsDragHandle: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Enable total row - whether to enable total row.\n * @default false\n */\n enableTotalRow: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Table style - An object that defines the style of the table.\n * ```\n * @default {\n tableWrapper: {\n 'max-height': '800px',\n\n width: 'calc(100% - 10px)',\n display: 'block',\n 'overflow-x': 'auto',\n padding: '0 5px',\n },\n table: {\n root: {\n width: '100%',\n 'border-collapse': 'collapse',\n 'border-spacing': 0,\n 'box-shadow': '0px 5px 5px -3px #003, 0 8px 10px 1px #00000024, 0 3px 14px 2px #0000001f',\n padding: 0,\n 'font-size': '1rem',\n 'border-radius': '8px',\n 'page-break-inside': 'auto',\n },\n thead: {\n root: {\n 'background-color': '#f5f5f5',\n },\n th: {\n padding: '20px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n },\n },\n tbody: {\n hovered_row_style: {\n tr: {\n 'background-color': '#f5f5f5',\n },\n },\n even_row_style: {\n tr: {\n 'background-color': '#ffffff',\n },\n },\n odd_row_style: {\n tr: {\n 'background-color': '#fafafa',\n },\n },\n tr: {\n 'border-bottom': '1px solid #e0e0e0',\n 'page-break-inside': 'avoid',\n },\n td: {\n padding: '7px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n 'text-overflow': 'ellipsis',\n overflow: 'hidden',\n 'white-space': 'nowrap',\n },\n input: {\n background: 'white',\n border: '1px solid',\n 'border-radius': '3px',\n },\n },\n tfoot: {\n root: {\n 'background-color': '#f5f5f5',\n },\n td: {\n padding: '20px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n },\n },\n },\n paginator: {\n root: {\n 'background-color': '#f5f5f5',\n },\n p: {\n 'margin-bottom': '0',\n },\n },\n total_row_style: {},\n scrollbar: {},\n};\n```\n */\n tableStyle: InputSignal<DmTableStyle>;\n\n /**\n * Table classes - An object that defines the classes of the table.\n * @default undefined\n */\n tableClasses: InputSignal<DmTableClasses | undefined>;\n\n /**\n * Row style function - A function that defines the style of the rows of the table.\n * @default null\n */\n rowStyleFn: InputSignal<((row: T) => { [key: string]: any }) | null>;\n\n /**\n * Edit columns visibility - whether to enable edit columns visibility.\n * @default false\n */\n editColumnsVisibility: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Edit columns visibility button - The button to display when edit columns visibility is enabled.\n * @default null\n */\n editColumnsVisibilityButton: InputSignal<DmTableActionButton<T>>;\n\n /**\n * Edit columns visibility select all label - The label to display when select all is enabled.\n * @default 'הצג את כל העמודות'\n */\n editColumnsVisibilitySelectAllLabel: InputSignal<string>;\n\n /**\n * Get modified rows - A function that returns the modified rows of the table.\n * @returns {T[]} The modified rows of the table.\n */\n getModifiedRows: () => T[];\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, Type } from '@angular/core';\nimport { DmCellContext } from '../utils';\n\n@Component({\n selector: 'dm-table-cell-host',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './dm-table-cell-host.html',\n styleUrl: './dm-table-cell-host.scss',\n})\nexport class DmTableCellHost<T extends object> {\n component = input.required<Type<any>>();\n context = input.required<DmCellContext<T>>();\n}\n","<ng-container\n *ngComponentOutlet=\"\n component();\n inputs: {\n row: context().row,\n column: context().column,\n }\n \"\n></ng-container>\n","import { Injectable } from '@angular/core';\n\nexport type DmCmpsDateTypes =\n | any\n | Date\n | string\n | { _seconds: number; _nanoseconds: number }\n | { seconds: number; nanoseconds: number }\n | number\n | null;\n\nexport type DmCmpsDateFormats = 'dd/MM/yyyy' | 'yyyy/MM/dd' | 'dd/MM/yyyy HH:mm';\n\nexport type DmCmpsLangs = 'en' | 'he' | 'ar';\n\nexport const daysOfWeek: Record<DmCmpsLangs, string[]> = {\n en: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n he: ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'],\n ar: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n};\ndeclare global {\n interface Date {\n getWeekOfYear(): number;\n getWeekOfMonth(): number;\n getDayOfYear(): number;\n }\n}\n\nDate.prototype.getWeekOfYear = function (): number {\n const d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));\n const dayNum = d.getUTCDay() || 7;\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n};\n\nDate.prototype.getWeekOfMonth = function (): number {\n const firstDay = new Date(this.getFullYear(), this.getMonth(), 1).getDay();\n const day = this.getDate();\n return Math.ceil((day + firstDay) / 7);\n};\n\nDate.prototype.getDayOfYear = function (): number {\n const start = new Date(this.getFullYear(), 0, 0);\n const diff = this.getTime() - start.getTime();\n const oneDay = 1000 * 60 * 60 * 24;\n return Math.floor(diff / oneDay);\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DmDateService {\n getDate(date: DmCmpsDateTypes): Date | null {\n if (!date) return null;\n if (date instanceof Date) return date;\n if (typeof date === 'string') {\n if (date == '') return null;\n return new Date(date) || null;\n }\n if ('seconds' in (date as any) && 'nanoseconds' in (date as any)) {\n return new Date((date as any).seconds * 1000);\n }\n if ('_seconds' in (date as any) && '_nanoseconds' in (date as any)) {\n return new Date((date as any)._seconds * 1000);\n }\n if (!isNaN(Number(date))) {\n return new Date(1900, 0, +date - 1);\n }\n return null;\n }\n\n /**\n *\n * @param date the date to transform\n * @param format the format of the date\n * @param lang the language of the date\n * @returns the date as a string\n *\n * @example\n * The format can be any string that contains the following:\n * - 'dd' - the day of the month\n * - 'MM' - the month\n * - 'yyyy' - the year\n * - 'yy' - the year (2 digits)\n * - 'HH' - the hour\n * - 'mm' - the minute\n * - 'ss' - the second\n * - 'SSS' - the millisecond\n * - 'DM_a' - the AM/PM\n * - 'DM_E' - the day of the week\n * - 'DM_Z' - the time zone\n * - 'DM_z' - the time zone offset\n * - 'DM_yw' - the week of the year\n * - 'DM_mw' - the week of the month\n * - 'DM_yd' - the day of the year\n */\n getDateString(\n date: DmCmpsDateTypes,\n format: DmCmpsDateFormats | string = 'dd/MM/yyyy',\n lang: DmCmpsLangs = 'he'\n ): string {\n if (!date) return '';\n const res = this.getDate(date) as Date;\n if (!res || !(res instanceof Date) || isNaN(res.getTime())) return '';\n // const day = res.getDate().toString().padStart(2, '0');\n // const month = (res.getMonth() + 1).toString().padStart(2, '0');\n // const year = res.getFullYear();\n // const hours = res.getHours().toString().padStart(2, '0');\n // const minutes = res.getMinutes().toString().padStart(2, '0');\n\n const replacements: Record<string, string> = {\n dd: res.getDate().toString().padStart(2, '0'),\n MM: (res.getMonth() + 1).toString().padStart(2, '0'),\n yyyy: res.getFullYear().toString(),\n yy: res.getFullYear().toString().slice(-2),\n HH: res.getHours().toString().padStart(2, '0'),\n mm: res.getMinutes().toString().padStart(2, '0'),\n SSS: res.getMilliseconds().toString().padStart(3, '0'),\n ss: res.getSeconds().toString().padStart(2, '0'),\n DD: daysOfWeek[lang][res.getDay()],\n DM_a: res.getHours() < 12 ? 'AM' : 'PM',\n DM_E: res.getDay().toString(),\n DM_Z: res.toTimeString().match(/\\(([^)]+)\\)/)?.[1] || '',\n DM_z: res.getTimezoneOffset().toString(),\n DM_yw: res.getWeekOfYear().toString(),\n DM_mw: res.getWeekOfMonth().toString(),\n DM_yd: res.getDayOfYear().toString(),\n };\n\n // Replace format placeholders with actual values\n return format.replace(\n /(dd|MM|yyyy|yy|HH|mm|SSS|ss|DD|DM_a|DM_E|DM_Z|DM_z|DM_yw|DM_mw|DM_yd)/g,\n (match) => replacements[match] || match\n );\n\n // if (format === 'dd/MM/yyyy') {\n // return `${day}/${month}/${year}`;\n // }\n // if (format === 'yyyy/MM/dd') {\n // return `${year}/${month}/${day}`;\n // }\n // return `${day}/${month}/${year} ${hours}:${minutes}`;\n }\n\n /**\n *\n * @param date the date to transform\n * @param format the format of the date\n * @param lang the language of the date\n * @returns the date as a string\n *\n * @example\n * The format can be any string that contains the following:\n * - 'dd' - the day of the month\n * - 'MM' - the month\n * - 'yyyy' - the year\n * - 'yy' - the year (2 digits)\n * - 'HH' - the hour\n * - 'mm' - the minute\n * - 'ss' - the second\n * - 'SSS' - the millisecond\n * - 'DM_a' - the AM/PM\n * - 'DM_E' - the day of the week\n * - 'DM_Z' - the time zone\n * - 'DM_z' - the time zone offset\n * - 'DM_yw' - the week of the year\n * - 'DM_mw' - the week of the month\n * - 'DM_yd' - the day of the year\n */\n static getDateString(\n date: DmCmpsDateTypes,\n format: DmCmpsDateFormats | string = 'dd/MM/yyyy',\n lang: DmCmpsLangs = 'he'\n ): string {\n if (!date) return '';\n const res = DmDateService.getDate(date) as Date;\n if (!res || !(res instanceof Date) || isNaN(res.getDate())) return '';\n\n const replacements: Record<string, string> = {\n dd: res.getDate().toString().padStart(2, '0'),\n MM: (res.getMonth() + 1).toString().padStart(2, '0'),\n yyyy: res.getFullYear().toString(),\n yy: res.getFullYear().toString().slice(-2),\n HH: res.getHours().toString().padStart(2, '0'),\n mm: res.getMinutes().toString().padStart(2, '0'),\n SSS: res.getMilliseconds().toString().padStart(3, '0'),\n ss: res.getSeconds().toString().padStart(2, '0'),\n DD: daysOfWeek[lang][res.getDay()],\n DM_a: res.getHours() < 12 ? 'AM' : 'PM',\n DM_E: res.getDay().toString(),\n DM_Z: res.toTimeString().match(/\\(([^)]+)\\)/)?.[1] || '',\n DM_z: res.getTimezoneOffset().toString(),\n DM_yw: res.getWeekOfYear().toString(),\n DM_mw: res.getWeekOfMonth().toString(),\n DM_yd: res.getDayOfYear().toString(),\n };\n\n // Replace format placeholders with actual values\n return format.replace(\n /(dd|MM|yyyy|yy|HH|mm|SSS|ss|DD|DM_a|DM_E|DM_Z|DM_z|DM_yw|DM_mw|DM_yd)/g,\n (match) => replacements[match] || match\n );\n\n // const day = res.getDate().toString().padStart(2, '0');\n // const month = (res.getMonth() + 1).toString().padStart(2, '0');\n // const year = res.getFullYear();\n // const hours = res.getHours().toString().padStart(2, '0');\n // const minutes = res.getMinutes().toString().padStart(2, '0');\n\n // if (format === 'dd/MM/yyyy') {\n // return `${day}/${month}/${year}`;\n // }\n // if (format === 'yyyy/MM/dd') {\n // return `${year}/${month}/${day}`;\n // }\n // return `${day}/${month}/${year} ${hours}:${minutes}`;\n }\n\n static getDate(date: DmCmpsDateTypes): Date | null {\n if (!date) return null;\n if (date instanceof Date) return date;\n if (typeof date === 'string') {\n if (date == '') return null;\n return new Date(date) || null;\n }\n if ('_seconds' in (date as any) && '_nanoseconds' in (date as any)) {\n return new Date((date as any)._seconds * 1000);\n }\n if ('seconds' in (date as any) && 'nanoseconds' in (date as any)) {\n return new Date((date as any).seconds * 1000);\n }\n if (!isNaN(Number(date))) {\n return new Date(1900, 0, +date - 1);\n }\n return null;\n }\n\n static getTimeString(date: DmCmpsDateTypes): string {\n if (!date) return '';\n const res = DmDateService.getDate(date) as Date;\n if (!res || !(res instanceof Date)) return '';\n return `${(res.getHours() < 10 ? '0' : '') + res.getHours()}:${\n (res.getMinutes() < 10 ? '0' : '') + res.getMinutes()\n }`;\n }\n\n static now(): Date {\n return new Date();\n }\n\n now(): Date {\n return new Date();\n }\n\n getAge(\n date: DmCmpsDateTypes,\n fixed: number | null = null,\n result: 'string' | 'number' = 'number'\n ): number | string {\n if (!date) return 0;\n const res = this.getDate(date) as Date;\n if (!res || !(res instanceof Date)) return 0;\n const today = new Date();\n let age = today.getFullYear() - res.getFullYear();\n let monthDiff = today.getMonth() - res.getMonth();\n\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < res.getDate())) {\n age--;\n monthDiff += 12;\n }\n const ageWithMonths = age + monthDiff / 12;\n\n if (result === 'string') {\n if (fixed || fixed === 0) {\n return ageWithMonths.toFixed(fixed);\n }\n return ageWithMonths;\n }\n if (fixed || fixed === 0) {\n return Number(ageWithMonths.toFixed(fixed));\n }\n return ageWithMonths;\n }\n\n static getAge(\n date: DmCmpsDateTypes,\n fixed: number | null = null,\n result: 'string' | 'number' = 'number'\n ): number | string {\n if (!date) return 0;\n const res = DmDateService.getDate(date) as Date;\n if (!res || !(res instanceof Date)) return 0;\n const today = new Date();\n let age = today.getFullYear() - res.getFullYear();\n let monthDiff = today.getMonth() - res.getMonth();\n\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < res.getDate())) {\n age--;\n monthDiff += 12;\n }\n const ageWithMonths = age + monthDiff / 12;\n\n if (result === 'string') {\n if (fixed || fixed === 0) {\n return ageWithMonths.toFixed(fixed);\n }\n return ageWithMonths;\n }\n if (fixed || fixed === 0) {\n return Number(ageWithMonths.toFixed(fixed));\n }\n return ageWithMonths;\n }\n}\n","import { DmTableActionButton, DmTablePaginatorSettings, DmTableStyle } from './utils';\n\nexport const DEFAULT_PAGINATOR_SETTINGS: DmTablePaginatorSettings = {\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n numberOfItemsPerPageLabel: 'מספר פריטים בדף',\n firstPageButtonLabel: 'דף ראשון',\n lastPageButtonLabel: 'דף אחרון',\n nextPageButtonLabel: 'הדף הבא',\n previousPageButtonLabel: 'הדף הקודם',\n showFirstAndLastPagesButtons: true,\n};\n\nexport const DEFAULT_TABLE_STYLE: DmTableStyle = {\n tableWrapper: {\n 'max-height': '800px',\n\n width: 'calc(100% - 10px)',\n display: 'block',\n 'overflow-x': 'auto',\n padding: '0 5px',\n },\n table: {\n root: {\n width: '100%',\n 'border-collapse': 'collapse',\n 'border-spacing': 0,\n 'box-shadow': '0px 5px 5px -3px #003, 0 8px 10px 1px #00000024, 0 3px 14px 2px #0000001f',\n padding: 0,\n 'font-size': '1rem',\n 'border-radius': '8px',\n 'page-break-inside': 'auto',\n },\n thead: {\n root: {\n 'background-color': '#f5f5f5',\n },\n th: {\n padding: '20px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n },\n },\n tbody: {\n hovered_row_style: {\n tr: {\n 'background-color': '#f5f5f5',\n },\n },\n even_row_style: {\n tr: {\n 'background-color': '#ffffff',\n },\n },\n odd_row_style: {\n tr: {\n 'background-color': '#fafafa',\n },\n },\n tr: {\n 'border-bottom': '1px solid #e0e0e0',\n 'page-break-inside': 'avoid',\n },\n td: {\n padding: '7px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n 'text-overflow': 'ellipsis',\n overflow: 'hidden',\n 'white-space': 'nowrap',\n },\n input: {\n background: 'white',\n border: '1px solid',\n 'border-radius': '3px',\n },\n },\n tfoot: {\n root: {\n 'background-color': '#f5f5f5',\n },\n td: {\n padding: '20px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n },\n },\n },\n paginator: {\n root: {\n 'background-color': '#f5f5f5',\n },\n p: {\n 'margin-bottom': '0',\n },\n },\n scrollbar: {\n width: '6px',\n },\n};\n\nexport const DEFAULT_PRINT_TABLE_BUTTON: DmTableActionButton<any> = {\n icon: 'print',\n buttonType: 'icon',\n tooltip: 'הדפס',\n color: '#5b81ffff',\n};\n\nexport const DM_TABLE_EDIT_COLUMNS_VISIBILITY_BUTTON: DmTableActionButton<any> = {\n icon: 'view_column',\n buttonType: 'icon',\n tooltip: 'ערוך תצוגה',\n color: '#6a6a6a',\n};\n","import { DmDateService } from '../services/dm-date.service';\nimport { DmTableDataColumn, DmTableRuntimeColumn } from './utils';\n\nexport const buildRow = <T extends object>(item: T, columns: DmTableRuntimeColumn<T>[]): T => {\n const result: T = { ...item } as T;\n\n const setValue = (field: keyof T, value: any) => {\n Object.defineProperty(result, field, {\n value: value,\n writable: false,\n enumerable: true,\n });\n };\n\n for (const col of columns) {\n if (col.type === '$index') continue;\n if (col.type == 'component') continue;\n if (!(col as any).field) continue;\n\n let value = result[(col as DmTableDataColumn<T>).field as keyof T];\n\n // handle valueGetter\n if (col.valueGetter) {\n value = col.valueGetter(result);\n } else {\n switch (col.type) {\n case 'date':\n if (col.dateFormat) {\n value = DmDateService.getDateString(value, col.dateFormat) as any;\n } else {\n value = DmDateService.getDateString(value) as any;\n }\n break;\n }\n }\n setValue((col as DmTableDataColumn<T>).field as keyof T, value);\n }\n return result;\n};\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function deepMerge<T>(defaults: T, custom?: Partial<T>): T {\n if (!isPlainObject(defaults)) {\n return (custom as T) ?? defaults;\n }\n\n const result: any = { ...defaults };\n\n if (!custom) {\n return result;\n }\n\n for (const key of Object.keys(custom)) {\n const customValue = (custom as any)[key];\n const defaultValue = (defaults as any)[key];\n\n if (isPlainObject(defaultValue) && isPlainObject(customValue)) {\n result[key] = deepMerge(defaultValue, customValue);\n } else if (customValue !== undefined) {\n // custom wins on leaf\n result[key] = customValue;\n }\n }\n\n return result;\n}\n","import { DmTableColumnState } from './utils';\n\nexport class DmTableColumnStateStorage {\n private prefix = 'dm-table:columns';\n\n load(tableId: string): DmTableColumnState[] | null {\n const raw = localStorage.getItem(`${this.prefix}:${tableId}`);\n return raw ? JSON.parse(raw) : null;\n }\n\n save(tableId: string, state: DmTableColumnState[]): void {\n localStorage.setItem(`${this.prefix}:${tableId}`, JSON.stringify(state));\n }\n\n clear(tableId: string): void {\n localStorage.removeItem(`${this.prefix}:${tableId}`);\n }\n}\n","import { Directive, ElementRef, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\n\n@Directive({\n selector: '[dmImportantStyle]',\n standalone: true,\n})\nexport class DmImportantStyleDirective implements OnChanges {\n @Input('dmImportantStyle') styles!: { [key: string]: string };\n\n constructor(private el: ElementRef<HTMLElement>) {}\n\n ngOnChanges(): void {\n if (!this.styles) return;\n // reset styles\n\n this.el.nativeElement.style.cssText = '';\n\n Object.entries(this.styles).forEach(([key, value]) => {\n this.el.nativeElement.style.setProperty(key, value, 'important');\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'dm-icon',\n imports: [MatIcon, CommonModule],\n standalone: true,\n templateUrl: './dm-icon.html',\n styleUrl: './dm-icon.scss',\n})\nexport class DmIcon {\n icon = input.required<string>();\n color = input<string>();\n size = input<string | number>();\n\n isBootstrapIcon = computed(() => this.icon().startsWith('<i'));\n sizeString = computed(() => {\n const size = this.size() || '24px';\n if (typeof size === 'number') {\n return `${size}px`;\n }\n return size;\n });\n\n constructor() {}\n}\n","<div\n [ngStyle]=\"{\n 'font-size': sizeString(),\n width: sizeString(),\n height: sizeString()\n }\"\n>\n @if(isBootstrapIcon()) {\n <span\n [innerHTML]=\"icon()\"\n [ngStyle]=\"{\n color: color(),\n 'font-size': sizeString(),\n width: sizeString(),\n height: sizeString()\n }\"\n ></span>\n } @else {\n <mat-icon\n [ngStyle]=\"{\n color: color(),\n 'font-size': sizeString(),\n width: sizeString(),\n height: sizeString()\n }\"\n >{{ icon() }}</mat-icon\n >\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n computed,\n effect,\n HostListener,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport { DmCmpsDataSource, DmCmpsDataSourceSort } from '../utils/dm-cmps-data-source';\nimport {\n DM_TABLE_HEADER_BACKGROUND_COLOR_CSS_VAR,\n DM_TABLE_HEADER_COLOR_CSS_VAR,\n DM_TABLE_SCROLLBAR_BACKGROUND_COLOR_CSS_VAR,\n DM_TABLE_SCROLLBAR_BORDER_RADIUS_CSS_VAR,\n DM_TABLE_SCROLLBAR_COLOR_CSS_VAR,\n DM_TABLE_SCROLLBAR_HOVER_COLOR_CSS_VAR,\n DM_TABLE_SCROLLBAR_WIDTH_CSS_VAR,\n DmCellContext,\n DmTableActionButton,\n DmTableClasses,\n DmTableColumn,\n DmTableColumnState,\n DmTableInputCellSelectOption,\n DmTableInterface,\n DmTableRuntimeColumn,\n DmTableStyle,\n shouldCacheColumn,\n} from './utils';\nimport { CommonModule } from '@angular/common';\nimport { DmTableCellHost } from './dm-table-cell-host/dm-table-cell-host';\nimport { DmDateService } from '../services/dm-date.service';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport {\n DEFAULT_PAGINATOR_SETTINGS,\n DEFAULT_PRINT_TABLE_BUTTON,\n DEFAULT_TABLE_STYLE,\n DM_TABLE_EDIT_COLUMNS_VISIBILITY_BUTTON,\n} from './defaults';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatOptionSelectionChange } from '@angular/material/core';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { deepMerge } from './helpers';\nimport { DmTableColumnStateStorage } from './column-state';\nimport {\n CdkDrag,\n CdkDragDrop,\n CdkDropList,\n moveItemInArray,\n CdkDragHandle,\n} from '@angular/cdk/drag-drop';\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\nimport { DmImportantStyleDirective } from '../directives/dm-important-style-directive';\nimport {\n MatSlideToggle,\n MatSlideToggleChange,\n MatSlideToggleModule,\n} from '@angular/material/slide-toggle';\nimport { DmIcon } from '../dm-icon/dm-icon';\n\n@Component({\n selector: 'dm-table',\n imports: [\n DmImportantStyleDirective,\n MatProgressSpinnerModule,\n MatSlideToggleModule,\n MatProgressBarModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatSelectModule,\n DmTableCellHost,\n MatButtonModule,\n MatInputModule,\n MatMenuModule,\n CdkDragHandle,\n CommonModule,\n FormsModule,\n CdkDropList,\n A11yModule,\n MatTooltip,\n MatIcon,\n DmIcon,\n CdkDrag,\n ],\n templateUrl: './dm-table.html',\n styleUrl: './dm-table.scss',\n})\nexport class DmTable<T extends object> implements DmTableInterface<T> {\n protected shiftKeyPressed = signal(false);\n @HostListener('window:keydown.shift', ['$event'])\n protected onShiftKeyDown(event: Event) {\n this.shiftKeyPressed.set(true);\n }\n @HostListener('window:keyup.shift', ['$event'])\n protected onShiftKeyUp(event: Event) {\n this.shiftKeyPressed.set(false);\n }\n\n protected DEFAULT_PAGINATOR_SETTINGS = DEFAULT_PAGINATOR_SETTINGS;\n protected DEFAULT_TABLE_STYLE = DEFAULT_TABLE_STYLE;\n\n tableId = input<string>();\n\n dataSource = input.required<T[]>();\n columns = input.required<DmTableColumn<T>[]>();\n\n noDataMessage = input<string>('אין נתונים להצגה');\n\n enableSearch = input(false, { transform: booleanAttribute });\n searchPlaceholder = input<string>('חיפוש...');\n clearSearchTooltip = input<string>('נקה חיפוש');\n searchInputAppearance = input<'fill' | 'outline'>('fill');\n filterPredicate = input<((row: T, filterText: string) => boolean) | null>(null);\n private _filterPredicate: ((row: T, filterText: string) => boolean) | null = null;\n\n actionButtons = input<Array<DmTableActionButton<T>>>([]);\n\n enablePrint = input(false, { transform: booleanAttribute });\n printButton = input<DmTableActionButton<T>>(DEFAULT_PRINT_TABLE_BUTTON as DmTableActionButton<T>);\n\n enablePagination = input(false, { transform: booleanAttribute });\n autoPaginationAboveRowsCount = input(100, { transform: numberAttribute });\n paginatorSettings = input<any>(DEFAULT_PAGINATOR_SETTINGS);\n\n enableLoadingProgressbar = input(true, { transform: booleanAttribute });\n enableColumnsDragAndDrop = input(false, { transform: booleanAttribute });\n enableColumnsDragHandle = input(true, { transform: booleanAttribute });\n\n enableTotalRow = input(false, { transform: booleanAttribute });\n\n tableStyle = input<DmTableStyle>(DEFAULT_TABLE_STYLE);\n tableClasses = input<DmTableClasses>();\n\n rowStyleFn = input<((row: T) => { [key: string]: any }) | null>(null);\n\n editColumnsVisibility = input(false, { transform: booleanAttribute });\n editColumnsVisibilityButton = input<DmTableActionButton<T>>(\n DM_TABLE_EDIT_COLUMNS_VISIBILITY_BUTTON as DmTableActionButton<T>\n );\n editColumnsVisibilitySelectAllLabel = input<string>('הצג את כל העמודות');\n\n protected columnsSortState = signal<DmCmpsDataSourceSort[]>([]);\n\n protected mergedTableStyle = computed(() => {\n const defaults = { ...DEFAULT_TABLE_STYLE };\n const custom = this.tableStyle() || {};\n const newStyle = deepMerge<DmTableStyle>(defaults, custom);\n this.saveScrollbarStyle(newStyle);\n return newStyle;\n });\n\n private saveScrollbarStyle(mergedStyle: DmTableStyle) {\n const scrollbarColor =\n mergedStyle?.scrollbar?.['color'] ||\n mergedStyle?.table?.thead?.root?.['background-color'] ||\n '#949496';\n const scrollbarBackgroundColor =\n mergedStyle?.scrollbar?.['backgroundColor'] ||\n mergedStyle?.table?.tbody?.tr?.['background-color'] ||\n mergedStyle?.table?.tbody?.odd_row_style?.tr?.['background-color'] ||\n '#e0e0e0';\n const scrollbarHoverColor =\n mergedStyle?.scrollbar?.['hoverColor'] ||\n mergedStyle?.table?.thead?.root?.['background-color'] ||\n '#5f5f5f';\n const scrollbarWidth = mergedStyle?.scrollbar?.['width'] || '7px';\n const scrollbarBorderRadius = mergedStyle?.scrollbar?.['borderRadius'] || '4px';\n document.documentElement.style.setProperty(DM_TABLE_SCROLLBAR_COLOR_CSS_VAR, scrollbarColor);\n document.documentElement.style.setProperty(\n DM_TABLE_SCROLLBAR_BACKGROUND_COLOR_CSS_VAR,\n scrollbarBackgroundColor\n );\n document.documentElement.style.setProperty(\n DM_TABLE_SCROLLBAR_HOVER_COLOR_CSS_VAR,\n scrollbarHoverColor\n );\n document.documentElement.style.setProperty(DM_TABLE_SCROLLBAR_WIDTH_CSS_VAR, scrollbarWidth);\n document.documentElement.style.setProperty(\n DM_TABLE_SCROLLBAR_BORDER_RADIUS_CSS_VAR,\n scrollbarBorderRadius\n );\n }\n\n protected hoveredRowIndex = signal<number | null>(null);\n\n protected datasource = signal<DmCmpsDataSource<T>>(new DmCmpsDataSource<T>([]));\n protected readonly runtimeColumns = computed(() => {\n const cols = this.columns() ?? [];\n const normalized = this.normalizeColumns(cols);\n return this.reconcileColumns(normalized);\n });\n\n protected hoveredColumnHeaderIndex = signal<number | null>(null);\n\n private columnStateStorage = new DmTableColumnStateStorage();\n protected columnState = signal<DmTableColumnState[] | null>(null);\n\n protected readonly visibleRuntimeColumns = computed(() => {\n const cols = this.runtimeColumns();\n const state = this.columnState();\n\n if (!state || !state.length) {\n return cols;\n }\n\n const stateMap = new Map(state.map((s) => [s.id, s]));\n\n return cols\n .map((col, index) => ({\n col,\n state: stateMap.get(col.id!) ?? {\n id: col.id,\n visible: true,\n order: index,\n },\n }))\n .filter((x) => x.state.visible !== false)\n .sort((a, b) => a.state.order - b.state.order)\n .map((x) => x.col);\n });\n\n protected readonly visibleColumns = computed(() => {\n return this.visibleRuntimeColumns().map((col) => col as DmTableColumn<T>);\n });\n\n private prevColumns = new Map<string, DmTableRuntimeColumn<T>>();\n\n rowIdentifierField = input<keyof T>('_id' as keyof T);\n\n private modifiedRowsIds = signal<Set<string | number>>(new Set<string | number>());\n\n protected searchTerm = signal<string>('');\n\n protected readonly totalRowValues = computed(() => {\n const ds = this.datasource();\n const cols = this.runtimeColumns();\n const dataVersion = ds.resultVersion(); //this is to make sure we recompute when data changes.. do not remove\n\n const map = new Map<string, any>();\n\n for (const col of cols) {\n if (!col.totalRowValueGetter) continue;\n\n try {\n map.set(col.id, col.totalRowValueGetter(ds));\n } catch (e) {\n console.error(`Total row error for column ${col.id}`, e);\n map.set(col.id, null);\n }\n }\n\n return map;\n });\n\n protected readonly totalRowStyles = computed(() => {\n const ds = this.datasource();\n const cols = this.runtimeColumns();\n const dataVersion = ds.resultVersion(); //this is to make sure we recompute when data changes.. do not remove\n\n const map = new Map<string, Record<string, any>>();\n\n for (const col of cols) {\n if (!col.totalCellStyle) continue;\n const totalCellStyle =\n (typeof col.totalCellStyle === 'function' ? col.totalCellStyle(ds) : col.totalCellStyle) ||\n {};\n try {\n map.set(col.id, totalCellStyle);\n } catch (e) {\n console.error(`Total row style error for column ${col.id}`, e);\n map.set(col.id, {});\n }\n }\n\n return map;\n });\n\n constructor() {\n this.runEffects();\n }\n\n private runEffects() {\n effect(() => {\n const tableStyle = this.mergedTableStyle();\n document.documentElement.style.setProperty(\n DM_TABLE_HEADER_BACKGROUND_COLOR_CSS_VAR,\n this.mergedTableStyle().table?.thead?.root?.['background-color'] ??\n DM_TABLE_HEADER_BACKGROUND_COLOR_CSS_VAR\n );\n\n document.documentElement.style.setProperty(\n DM_TABLE_HEADER_COLOR_CSS_VAR,\n this.mergedTableStyle().table?.thead?.root?.['color'] ?? DM_TABLE_HEADER_COLOR_CSS_VAR\n );\n });\n\n effect(() => {\n const tableId = this.tableId();\n const cols = this.runtimeColumns();\n let stored: DmTableColumnState[] | null = null;\n if (tableId) {\n stored = this.columnStateStorage.load(tableId);\n }\n\n // sanitize stored state to remove any columns that no longer exist\n if (stored) {\n const colIds = new Set(cols.map((c) => c.id));\n stored = stored.filter((s) => colIds.has(s.id));\n }\n\n this.columnState.set(this.initColumnState(cols, stored));\n });\n\n effect(() => {\n const id = this.tableId();\n const state = this.columnState();\n\n if (!id || !state) return;\n\n this.columnStateStorage.save(id, state);\n });\n\n effect(() => {\n this._filterPredicate = this.filterPredicate();\n });\n\n effect(() => {\n const dataSource = this.dataSource();\n if (this._filterPredicate) {\n this.datasource().setFilterPredicate(this._filterPredicate);\n }\n if (this.enablePagination() || dataSource.length >= this.autoPaginationAboveRowsCount()) {\n this.datasource().applyPagination(\n this.paginatorSettings()?.pageSize || DEFAULT_PAGINATOR_SETTINGS.pageSize\n );\n } else {\n this.datasource().disablePagination();\n }\n this.datasource().setDatasource(dataSource);\n this.prevColumns.forEach((col) => delete col.__cache);\n });\n\n effect(() => {\n const cols = this.runtimeColumns();\n\n this.setFilterPredicate();\n });\n\n effect(() => {\n const sortState = this.columnsSortState();\n if (!sortState || !sortState.length) {\n this.datasource().resetSorting();\n } else {\n this.datasource().sortByFields(sortState);\n }\n });\n }\n\n private initColumnState(\n columns: DmTableRuntimeColumn<T>[],\n stored: DmTableColumnState[] | null\n ): DmTableColumnState[] {\n // 1. If user has saved state → use it\n if (stored && stored.length) {\n return stored;\n }\n\n // 2. Otherwise derive defaults from columns\n return columns.map((col, index) => ({\n id: col.id!,\n visible: col.visible ?? true,\n // width: col.width,\n order: index,\n }));\n }\n\n private normalizeColumns(cols: DmTableColumn<T>[]): DmTableRuntimeColumn<T>[] {\n return cols.map((col, index) => ({\n ...col,\n id: col.id || `dm_table_col_${(col as any).field ?? col.type}__${index}`,\n }));\n }\n\n private isSameColumnDefinition(a: DmTableRuntimeColumn<T>, b: DmTableRuntimeColumn<T>): boolean {\n return (\n a.field === b.field &&\n a.type === b.type &&\n a.valueGetter === b.valueGetter &&\n a.valueSetter === b.valueSetter &&\n a.dateFormat === b.dateFormat &&\n a.component === b.component\n );\n }\n\n // private diffColumns(prev: Map<string, DmTableRuntimeColumn<T>>, next: DmTableRuntimeColumn<T>[]) {\n // const added: DmTableRuntimeColumn<T>[] = [];\n // const removed: string[] = [];\n // const changed: DmTableRuntimeColumn<T>[] = [];\n\n // const nextMap = new Map(next.map((col) => [col.id, col]));\n\n // for (const [id, prevCol] of prev) {\n // const nextCol = nextMap.get(id);\n // if (!nextCol) {\n // removed.push(id);\n // } else {\n // if (!this.isSameColumnDefinition(prevCol, nextCol)) {\n // changed.push(nextCol);\n // }\n // }\n // }\n\n // for (const [id, nextCol] of nextMap) {\n // if (!prev.has(id)) {\n // added.push(nextCol);\n // }\n // }\n\n // return { added, removed, changed };\n // }\n\n private reconcileColumns(next: DmTableRuntimeColumn<T>[]): DmTableRuntimeColumn<T>[] {\n const result: DmTableRuntimeColumn<T>[] = [];\n\n for (const col of next) {\n const prevCol = this.prevColumns.get(col.id!);\n\n if (prevCol && this.isSameColumnDefinition(prevCol, col)) {\n result.push(prevCol);\n } else {\n result.push(col);\n }\n }\n\n this.prevColumns = new Map(result.map((c) => [c.id!, c]));\n\n return result;\n }\n\n private setFilterPredicate() {\n if (this._filterPredicate) return;\n this.datasource().setFilterPredicate((row: T, filter: string) => {\n const filterLower = filter.toLowerCase();\n for (const col of this.runtimeColumns()) {\n const cellValue = this.resolveCellValue(row, col);\n if (cellValue != null && cellValue.toString().toLowerCase().includes(filterLower)) {\n return true;\n }\n }\n return false;\n });\n }\n\n protected createCellContext = (row: T, column: DmTableRuntimeColumn<T>): DmCellContext<T> => ({\n $implicit: row,\n row,\n column: column as DmTableColumn<T>,\n });\n\n protected resetRowCache(row: T) {\n this.runtimeColumns().forEach((col) => {\n col.__cache?.delete(row);\n });\n }\n\n protected resolveCellValue<T extends object>(row: T, column: DmTableRuntimeColumn<T>): any {\n if (column.type === '$index') {\n return null;\n }\n\n if (!shouldCacheColumn(column)) {\n return (row as any)[column.field];\n }\n\n if (!column.__cache) {\n column.__cache = new WeakMap<T, any>();\n }\n\n const cached = column.__cache.get(row);\n if (cached !== undefined) {\n return cached;\n }\n\n let value: any;\n if (column.valueGetter) {\n value = column.valueGetter(row);\n } else {\n if (column.type === 'date') {\n if (column.dateFormat) {\n value = DmDateService.getDateString((row as any)[column.field], column.dateFormat);\n } else {\n value = DmDateService.getDateString((row as any)[column.field]);\n }\n } else {\n value = (row as any)[column.field];\n }\n }\n column.__cache.set(row, value);\n return value;\n }\n\n protected applySearchFilter(event: Event) {\n const input = event.target as HTMLInputElement;\n const filterValue = input.value.trim().toLowerCase();\n this.datasource().search(filterValue);\n }\n\n protected resetSearch() {\n this.searchTerm.set('');\n this.datasource().search('');\n }\n\n printTable = () => {\n const resultData = this.datasource().getResultData();\n };\n\n protected onPageSizeChange(event: MatOptionSelectionChange, option: number) {\n if (event.isUserInput) {\n this.datasource().setPageSize(option);\n }\n }\n\n protected getFooterTdStyle(column: DmTableRuntimeColumn<T>) {\n const totalCellStyle = this.totalRowStyles().get(column.id) || {};\n\n const generalStyle =\n this.mergedTableStyle().table?.tfoot?.td || DEFAULT_TABLE_STYLE.table?.tfoot?.td || {};\n\n return {\n ...generalStyle,\n ...totalCellStyle,\n };\n }\n\n protected getHeaderThStyle(column: DmTableRuntimeColumn<T>) {\n const headerStyle =\n typeof column.headerStyle === 'function'\n ? column.headerStyle(this.datasource())\n : column.headerStyle || {};\n\n const generalStyle =\n this.mergedTableStyle().table?.thead?.th || DEFAULT_TABLE_STYLE.table?.thead?.th || {};\n\n return {\n ...generalStyle,\n ...headerStyle,\n };\n }\n\n protected getHeaderThContentStyle(column: DmTableRuntimeColumn<T>) {\n const headerContentStyle =\n typeof column.headerContentStyle === 'function'\n ? column.headerContentStyle(this.datasource())\n : column.headerContentStyle || {};\n\n return {\n ...headerContentStyle,\n };\n }\n\n protected getBodyTdStyle(\n i: number,\n column: DmTableRuntimeColumn<T>,\n row: T\n ): Record<string, any> {\n const baseStyle =\n i % 2 === 0\n ? this.mergedTableStyle().table?.tbody?.even_row_style?.td ?? {}\n : this.mergedTableStyle().table?.tbody?.odd_row_style?.td ?? {};\n\n const rowHoverStyle =\n this.hoveredRowIndex() === i\n ? this.mergedTableStyle().table?.tbody?.hovered_row_style?.tr ?? {}\n : {};\n\n const tdHoverStyle =\n this.hoveredRowIndex() === i\n ? this.mergedTableStyle().table?.tbody?.hovered_row_style?.td ?? {}\n : {};\n\n const generalCellStyle = this.mergedTableStyle().table?.tbody?.td ?? {};\n\n const columnCellStyle =\n typeof column.cellStyle === 'function' ? column.cellStyle(row) : column.cellStyle || {};\n\n return {\n ...generalCellStyle,\n ...baseStyle,\n ...columnCellStyle,\n ...rowHoverStyle,\n ...tdHoverStyle,\n };\n }\n\n protected getBodyTdContentStyle(\n i: number,\n column: DmTableRuntimeColumn<T>,\n row: T\n ): Record<string, any> {\n const columnCellContentStyle =\n typeof column.cellContentStyle === 'function'\n ? column.cellContentStyle(row)\n : column.cellContentStyle || {};\n\n return {\n ...columnCellContentStyle,\n };\n }\n\n protected getBodyRowStyle(i: number, row: T): Record<string, any> {\n const baseStyle =\n i % 2 === 0\n ? this.mergedTableStyle().table?.tbody?.even_row_style?.tr ?? {}\n : this.mergedTableStyle().table?.tbody?.odd_row_style?.tr ?? {};\n\n const hoverStyle =\n this.hoveredRowIndex() === i\n ? this.mergedTableStyle().table?.tbody?.hovered_row_style?.tr ?? {}\n : {};\n\n const generalRowStyle = this.mergedTableStyle().table?.tbody?.tr ?? {};\n\n const rowStyleFn = this.rowStyleFn();\n const rowStyleFromFn = rowStyleFn ? rowStyleFn(row) : {};\n\n return {\n ...generalRowStyle,\n ...baseStyle,\n ...rowStyleFromFn,\n ...hoverStyle,\n };\n }\n\n protected getInputStyle(column: DmTableRuntimeColumn<T>): Record<string, any> {\n const inputStyle = this.mergedTableStyle().table?.tbody?.input || {};\n\n const colInputStyle =\n typeof column.inputStyle === 'function'\n ? column.inputStyle(null as any)\n : column.inputStyle || {};\n\n return {\n ...inputStyle,\n ...colInputStyle,\n };\n }\n\n protected headerClickHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const onHeaderClick = column.onHeaderClick;\n if (onHeaderClick && typeof onHeaderClick === 'function') {\n onHeaderClick(this.datasource(), event);\n } else {\n this.columnHeaderSortClickHandler(column, event);\n }\n }\n\n protected headerDoubleClickHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const onHeaderDoubleClick = column.onHeaderDoubleClick;\n if (onHeaderDoubleClick && typeof onHeaderDoubleClick === 'function') {\n onHeaderDoubleClick(this.datasource(), event);\n }\n }\n\n protected headerContextMenuHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const headerContextMenu = column.headerContextMenu;\n if (headerContextMenu && typeof headerContextMenu === 'function') {\n headerContextMenu(this.datasource(), event);\n }\n }\n\n protected headerContentClickHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const onHeaderContentClick = column.onHeaderContentClick;\n if (onHeaderContentClick && typeof onHeaderContentClick === 'function') {\n onHeaderContentClick(this.datasource(), event);\n } else {\n if (column.onHeaderClick && typeof column.onHeaderClick === 'function') {\n return;\n }\n this.columnHeaderSortClickHandler(column, event);\n }\n }\n\n protected headerContentDoubleClickHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const onHeaderContentDoubleClick = column.onHeaderContentDoubleClick;\n if (onHeaderContentDoubleClick && typeof onHeaderContentDoubleClick === 'function') {\n onHeaderContentDoubleClick(this.datasource(), event);\n }\n }\n\n protected headerContentContextMenuHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const headerContentContextMenu = column.headerContentContextMenu;\n if (headerContentContextMenu && typeof headerContentContextMenu === 'function') {\n headerContentContextMenu(this.datasource(), event);\n }\n }\n\n protected cellClickHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const onCellClick = column.onCellClick;\n if (onCellClick && typeof onCellClick === 'function') {\n onCellClick(row, event);\n }\n }\n\n protected cellDoubleClickHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const onCellDoubleClick = column.onCellDoubleClick;\n if (onCellDoubleClick && typeof onCellDoubleClick === 'function') {\n onCellDoubleClick(row, event);\n }\n }\n\n protected cellContextMenuHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const cellContextMenu = column.cellContextMenu;\n if (cellContextMenu && typeof cellContextMenu === 'function') {\n cellContextMenu(row, event);\n }\n }\n\n protected cellContentClickHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const onCellContentClick = column.onCellContentClick;\n if (onCellContentClick && typeof onCellContentClick === 'function') {\n onCellContentClick(row, event);\n }\n }\n\n protected cellContentDoubleClickHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const onCellContentDoubleClick = column.onCellContentDoubleClick;\n if (onCellContentDoubleClick && typeof onCellContentDoubleClick === 'function') {\n onCellContentDoubleClick(row, event);\n }\n }\n\n protected cellContentContextMenuHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const cellContentContextMenu = column.cellContentContextMenu;\n if (cellContentContextMenu && typeof cellContentContextMenu === 'function') {\n cellContentContextMenu(row, event);\n }\n }\n\n protected getCloseParentMenusFn = (rootTrigger: MatMenuTrigger): (() => void) => {\n return () => {\n rootTrigger.closeMenu();\n };\n };\n\n protected onColumnDrop(event: CdkDragDrop<DmTableRuntimeColumn<T>[]>) {\n const visible = [...event.container.data]; // copy!\n moveItemInArray(visible, event.previousIndex, event.currentIndex);\n\n const state = [...(this.columnState() ?? [])];\n const stateMap = new Map(state.map((s) => [s.id, s]));\n\n // Rewrite order based on the NEW visible order\n visible.forEach((col, index) => {\n const s = stateMap.get(col.id!);\n if (s) {\n s.order = index;\n }\n });\n\n this.columnState.set(state);\n }\n\n protected isAllColumnsVisible(): boolean {\n const state = this.columnState();\n if (!state) return true;\n\n return state.every((s) => s.visible !== false);\n }\n\n protected toggleAllColumnsVisibility(event: MatCheckboxChange) {\n const state = [...(this.columnState() ?? [])];\n if (!state) return;\n\n state.forEach((s) => {\n s.visible = event.checked;\n });\n this.columnState.set(state);\n }\n\n protected isColumnVisible(column: DmTableRuntimeColumn<T>): boolean {\n const state = this.columnState();\n if (!state) return true;\n\n const colState = state.find((s) => s.id === column.id);\n if (!colState) return true;\n\n return colState.visible !== false;\n }\n\n protected toggleColumnVisibility(event: MatCheckboxChange, column: DmTableRuntimeColumn<T>) {\n const state = [...(this.columnState() ?? [])];\n if (!state) return;\n\n const colState = state.find((s) => s.id === column.id);\n if (!colState) {\n console.warn('Column state not found for column:', column);\n const cols = this.runtimeColumns();\n this.columnState.set(this.initColumnState(cols, null));\n return;\n }\n\n colState.visible = event.checked;\n this.columnState.set(state);\n }\n\n protected isColumnSorted(\n column: DmTableRuntimeColumn<T>\n ): (DmCmpsDataSourceSort & { index: number }) | null {\n const sortState = this.columnsSortState();\n let matchedIndex = -1;\n const sort = sortState.find((s, index) => {\n const match = s.id === column.id;\n if (match) {\n matchedIndex = index;\n }\n return match;\n });\n return sort ? { ...sort, index: matchedIndex } : null;\n }\n\n protected columnHeaderSortClickHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n if (!column.sortable) return;\n event.stopPropagation();\n event.preventDefault();\n let sortState = [...this.columnsSortState()];\n const existingSortIndex = sortState.findIndex((s) => s.id === column.id);\n\n if (existingSortIndex >= 0) {\n if (this.shiftKeyPressed()) {\n if (sortState[existingSortIndex].direction === 'asc') {\n const newSort: DmCmpsDataSourceSort = {\n ...sortState[existingSortIndex],\n direction: 'desc',\n };\n sortState[existingSortIndex] = newSort;\n } else {\n const newSort: DmCmpsDataSourceSort = {\n ...sortState[existingSortIndex],\n direction: 'asc',\n };\n sortState[existingSortIndex] = newSort;\n }\n } else {\n if (sortState[existingSortIndex].direction === 'asc') {\n const newSort: DmCmpsDataSourceSort = {\n ...sortState[existingSortIndex],\n direction: 'desc',\n };\n sortState[existingSortIndex] = newSort;\n } else {\n sortState.splice(existingSortIndex, 1);\n }\n }\n } else {\n const sort: DmCmpsDataSourceSort = {\n id: column.id,\n field: column.field as string,\n direction: 'asc',\n };\n if (column.sortFn) {\n sort.sortFn = column.sortFn;\n }\n if (this.shiftKeyPressed()) {\n sortState.push(sort);\n } else {\n sortState = [sort];\n }\n }\n this.columnsSortState.set(sortState);\n }\n\n private markRowAsModified(row: T) {\n const identifierField = this.rowIdentifierField();\n const rowId = (row as any)[identifierField];\n if (rowId == null || rowId === '' || rowId === undefined) return;\n this.modifiedRowsIds.update((set) => {\n const next = new Set(set);\n next.add(rowId);\n return next;\n });\n }\n\n public getModifiedRows(): T[] {\n const identifierField = this.rowIdentifierField();\n const modifiedIds = this.modifiedRowsIds();\n const allData = this.datasource().getDatasource();\n\n return allData.filter((row) => {\n const rowId = (row as any)[identifierField];\n return modifiedIds.has(rowId);\n });\n }\n\n protected inputCellSelectOptionChangeHandler(\n row: T,\n column: DmTableRuntimeColumn<T>,\n option: DmTableInputCellSelectOption,\n event: MatOptionSelectionChange\n ) {\n if (!event.isUserInput) return;\n const valueSetter = column.valueSetter;\n const validator = column.inputValidator;\n if (validator && typeof validator === 'function') {\n const isValid = validator(row, option.value);\n if (!isValid) {\n const onFaild = column.onInputValidatorFailed;\n if (onFaild && typeof onFaild === 'function') {\n onFaild(row, option.value);\n }\n console.warn('Input value is not valid:', option.value);\n return;\n }\n }\n if (valueSetter && typeof valueSetter === 'function') {\n valueSetter(row, option.value);\n } else {\n (row as any)[column.field] = option.value;\n }\n this.resetRowCache(row);\n this.markRowAsModified(row);\n }\n\n protected inputCellChangeHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const input = event.target as HTMLInputElement;\n const newValue = input.value;\n const valueSetter = column.valueSetter;\n const validator = column.inputValidator;\n if (validator && typeof validator === 'function') {\n const isValid = validator(row, newValue);\n if (!isValid) {\n const onFaild = column.onInputValidatorFailed;\n if (onFaild && typeof onFaild === 'function') {\n onFaild(row, newValue);\n }\n console.warn('Input value is not valid:', newValue);\n input.value = this.resolveCellValue(row, column) ?? '';\n return;\n }\n }\n if (valueSetter && typeof valueSetter === 'function') {\n valueSetter(row, newValue);\n } else {\n (row as any)[column.field] = newValue;\n }\n this.resetRowCache(row);\n this.markRowAsModified(row);\n }\n\n protected inputCellCheckboxChangeHandler(\n row: T,\n column: DmTableRuntimeColumn<T>,\n event: MatCheckboxChange\n ) {\n const newValue = event.checked;\n const valueSetter = column.valueSetter;\n const validator = column.inputValidator;\n if (validator && typeof validator === 'function') {\n const isValid = validator(row, newValue);\n if (!isValid) {\n const onFaild = column.onInputValidatorFailed;\n if (onFaild && typeof onFaild === 'function') {\n onFaild(row, newValue);\n }\n event.source.toggle();\n console.warn('Input value is not valid:', newValue);\n return;\n }\n }\n if (valueSetter && typeof valueSetter === 'function') {\n valueSetter(row, newValue);\n } else {\n (row as any)[column.field] = newValue;\n }\n this.resetRowCache(row);\n this.markRowAsModified(row);\n }\n\n protected getSlideToggleTooltip(row: T, column: DmTableRuntimeColumn<T>): string {\n const tooltip = column.slideToggleTooltip;\n if (tooltip && typeof tooltip === 'function') {\n return tooltip(row);\n }\n return tooltip || '';\n }\n\n protected onSlideToggleChange(\n row: T,\n column: DmTableRuntimeColumn<T>,\n change: MatSlideToggleChange\n ) {\n const newValue = change.checked;\n const valueSetter = column.valueSetter;\n const validator = column.inputValidator;\n if (validator && typeof validator === 'function') {\n const isValid = validator(row, newValue);\n if (!isValid) {\n const onFaild = column.onInputValidatorFailed;\n if (onFaild && typeof onFaild === 'function') {\n onFaild(row, newValue);\n }\n change.source.toggle();\n console.warn('Input value is not valid:', newValue);\n return;\n }\n }\n if (valueSetter && typeof valueSetter === 'function') {\n valueSetter(row, newValue);\n } else {\n (row as any)[column.field] = newValue;\n }\n if (column.onSlideToggleChange && typeof column.onSlideToggleChange === 'function') {\n column.onSlideToggleChange(row, change);\n }\n this.resetRowCache(row);\n this.markRowAsModified(row);\n }\n}\n","<div id=\"dm-table-component-wrapper\">\n <div class=\"dm-table-top-section\">\n @if (enableSearch()) {\n <mat-form-field [appearance]=\"searchInputAppearance()\" class=\"dm-table-search-form-field\">\n <input\n matInput\n [placeholder]=\"searchPlaceholder()\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keyup)=\"datasource().search($event.target.value)\"\n />\n @if (searchTerm()) {\n <button\n matSuffix\n mat-icon-button\n [matTooltip]=\"clearSearchTooltip()\"\n aria-label=\"Clear\"\n (click)=\"resetSearch()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n } @if (editColumnsVisibility() && editColumnsVisibilityButton()) {\n <ng-container\n *ngTemplateOutlet=\"\n editcolumnVisibilityMenuTrigger;\n context: { $implicit: editColumnsVisibilityButton() }\n \"\n ></ng-container>\n }\n <div class=\"spacer\"></div>\n @if (enablePrint()) {\n <ng-container\n *ngTemplateOutlet=\"\n dmTableActionButton;\n context: { $implicit: printButton(), defaultAction: printTable }\n \"\n ></ng-container>\n } @for (button of actionButtons(); track $index) { @if (!button.showIf ||\n button.showIf(visibleColumns(), datasource())) {\n <ng-container\n *ngTemplateOutlet=\"dmTableActionButton; context: { $implicit: button }\"\n ></ng-container>\n } }\n </div>\n <div\n [ngClass]=\"tableClasses()?.tableWrapper || {}\"\n [dmImportantStyle]=\"mergedTableStyle().tableWrapper || DEFAULT_TABLE_STYLE.tableWrapper || {}\"\n cdkScrollable\n >\n <table\n [ngStyle]=\"\n !tableClasses()?.table?.root\n ? mergedTableStyle().table?.root || DEFAULT_TABLE_STYLE.table?.root || {}\n : {}\n \"\n [ngClass]=\"tableClasses()?.table?.root || {}\"\n >\n <thead\n style=\"\n position: sticky !important;\n top: 0 !important;\n z-index: 10 !important;\n box-shadow: 0px 2px 2px 0px #0000006e;\n \"\n [ngStyle]=\"\n !tableClasses()?.table?.thead?.root\n ? mergedTableStyle().table?.thead?.root || DEFAULT_TABLE_STYLE.table?.thead?.root || {}\n : {}\n \"\n [ngClass]=\"tableClasses()?.table?.thead?.root || {}\"\n >\n @if (enableLoadingProgressbar()) {\n <tr style=\"height: 4px !important; max-height: 4px !important; line-height: 4px !important\">\n <th [attr.colspan]=\"visibleRuntimeColumns().length\" style=\"padding: 0 !important\">\n @if (datasource().isLoading()) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </th>\n </tr>\n }\n <tr\n [ngStyle]=\"\n !tableClasses()?.table?.thead?.tr\n ? mergedTableStyle().table?.thead?.tr || DEFAULT_TABLE_STYLE.table?.thead?.tr || {}\n : {}\n \"\n [ngClass]=\"tableClasses()?.table?.thead?.tr || {}\"\n cdkDropList\n [cdkDropListData]=\"visibleRuntimeColumns()\"\n [cdkDropListOrientation]=\"'horizontal'\"\n (cdkDropListDropped)=\"onColumnDrop($event)\"\n [cdkDropListAutoScrollStep]=\"20\"\n >\n @for (column of visibleRuntimeColumns(); let j = $index; track column.id) {\n <th\n cdkDrag\n [cdkDragDisabled]=\"!enableColumnsDragAndDrop()\"\n [ngStyle]=\"getHeaderThStyle(column)\"\n [ngClass]=\"tableClasses()?.table?.thead?.th || {}\"\n (mouseenter)=\"hoveredColumnHeaderIndex.set(j)\"\n (mouseleave)=\"hoveredColumnHeaderIndex.set(null)\"\n (click)=\"headerClickHandler(column, $event)\"\n (dblclick)=\"headerDoubleClickHandler(column, $event)\"\n (contextmenu)=\"headerContextMenuHandler(column, $event)\"\n >\n <div\n class=\"inner-header-cell\"\n [dmImportantStyle]=\"getHeaderThContentStyle(column)\"\n (click)=\"headerContentClickHandler(column, $event)\"\n (dblclick)=\"headerContentDoubleClickHandler(column, $event)\"\n (contextmenu)=\"headerContentContextMenuHandler(column, $event)\"\n >\n <span>\n {{ column.header }}\n </span>\n @if (column.sortable) {\n <span\n (click)=\"columnHeaderSortClickHandler(column, $event)\"\n style=\"display: flex; align-items: center\"\n >\n @if (isColumnSorted(column); as sort) {\n <mat-icon style=\"width: 20px; height: 20px; font-size: 20px\">{{\n sort.direction === 'asc' ? 'arrow_upward' : 'arrow_downward'\n }}</mat-icon>\n @if(columnsSortState().length > 1) { [{{ sort.index + 1 }}] } } @else if\n (hoveredColumnHeaderIndex() == j){\n <mat-icon style=\"opacity: 0.3; width: 20px; height: 20px; font-size: 20px\"\n >arrow_upward</mat-icon\n >\n }\n </span>\n } @if (enableColumnsDragHandle() && enableColumnsDragAndDrop()) {\n\n <div class=\"spacer\"></div>\n <span>\n <ng-container\n *ngTemplateOutlet=\"dmTableHeaderMenuTrigger; context: { $implicit: column }\"\n />\n </span>\n <mat-icon style=\"cursor: move; font-size: 20px\" cdkDragHandle\n >drag_indicator</mat-icon\n >\n }\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody\n [dmImportantStyle]=\"\n !tableClasses()?.table?.tbody?.root\n ? mergedTableStyle().table?.tbody?.root || DEFAULT_TABLE_STYLE.table?.tbody?.root || {}\n : {}\n \"\n [ngClass]=\"tableClasses()?.table?.tbody?.root || {}\"\n >\n @for (row of datasource().result(); let i = $index; track row[rowIdentifierField()]) {\n <tr\n [dmImportantStyle]=\"getBodyRowStyle(i, row)\"\n (mouseenter)=\"hoveredRowIndex.set(i)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\"\n >\n @for (column of visibleRuntimeColumns(); let j = $index; track j) {\n <td\n [dmImportantStyle]=\"getBodyTdStyle(i, column, row)\"\n (click)=\"cellClickHandler(row, column, $event)\"\n (contextmenu)=\"cellContextMenuHandler(row, column, $event)\"\n (dblclick)=\"cellDoubleClickHandler(row, column, $event)\"\n >\n <span\n [dmImportantStyle]=\"getBodyTdContentStyle(i, column, row)\"\n (click)=\"cellContentClickHandler(row, column, $event)\"\n (contextmenu)=\"cellContentContextMenuHandler(row, column, $event)\"\n (dblclick)=\"cellContentDoubleClickHandler(row, column, $event)\"\n >\n @switch (column.type) { @case ('$index') {\n {{ datasource().getFirstItemIndexInPage() + i + 1 }}\n } @case ('component') { @if (column.component) {\n <dm-table-cell-host\n [component]=\"column.component\"\n [context]=\"createCellContext(row, column)\"\n ></dm-table-cell-host>\n } } @case ('tel') {\n <a [href]=\"'tel:' + (column.field ? $any(row)[column.field] : '')\">{{\n resolveCellValue(row, column)\n }}</a>\n } @case ('mail') {\n <a [href]=\"'mailto:' + (column.field ? $any(row)[column.field] : '')\">{{\n resolveCellValue(row, column)\n }}</a>\n } @case ('link') {\n <a\n [href]=\"column.field ? $any(row)[column.field] : ''\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >{{ resolveCellValue(row, column) }}</a\n >\n } @case ('whatsapp') {\n <a\n [href]=\"'https://wa.me/' + (column.field ? $any(row)[column.field] : '')\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >{{ resolveCellValue(row, column) }}</a\n >\n } @case ('customHtml') { @if (column.customHtml) {\n <span [innerHTML]=\"column.customHtml\"></span>\n } @else if (column.customCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.customCellTemplate;\n context: createCellContext(row, column)\n \"\n >\n </ng-container>\n } } @case ('actions') {\n <span style=\"display: flex; align-items: center\">\n @for (button of column.actionsButtons || []; track $index) { @if(!button.showIf ||\n button.showIf(row)) {\n <ng-container\n *ngTemplateOutlet=\"\n dmTableRowActionButton;\n context: {\n $implicit: button,\n row\n }\n \"\n ></ng-container>\n } }\n </span>\n } @case('slideToggle') {\n <mat-slide-toggle\n [id]=\"'slideToggle_' + i + '_' + column.id\"\n [checked]=\"row[column.field!]\"\n [matTooltip]=\"getSlideToggleTooltip(row, column)\"\n (change)=\"onSlideToggleChange(row, column, $event)\"\n >\n <!-- {{ row[column.field!] }} -->\n {{ resolveCellValue(row, column) }}\n </mat-slide-toggle>\n } @case ('input') {\n <ng-container\n *ngTemplateOutlet=\"\n dmTableInputCell;\n context: {\n $implicit: row,\n column: column\n }\n \"\n />\n } @default {\n {{ resolveCellValue(row, column) }}\n } }\n </span>\n </td>\n }\n </tr>\n }\n </tbody>\n @if (enableTotalRow() && datasource().result().length > 0) {\n <tfoot\n style=\"\n position: sticky !important;\n bottom: 0 !important;\n z-index: 10 !important;\n box-shadow: 0px -2px 2px 0px #0000006e;\n \"\n [ngStyle]=\"\n !tableClasses()?.table?.tfoot?.root\n ? mergedTableStyle().table?.tfoot?.root || DEFAULT_TABLE_STYLE.table?.tfoot?.root || {}\n : {}\n \"\n [ngClass]=\"tableClasses()?.table?.tfoot?.root || {}\"\n >\n <tr>\n @for (column of visibleRuntimeColumns(); let j = $index; track column.id) {\n <td\n [ngStyle]=\"getFooterTdStyle(column)\"\n [ngClass]=\"tableClasses()?.table?.tfoot?.td || {}\"\n >\n @if (column.totalRowValueType == 'html') {\n <span [innerHTML]=\"totalRowValues().get(column.id) || ''\"></span>\n } @else {\n {{ totalRowValues().get(column.id) || '' }}\n }\n </td>\n }\n </tr>\n </tfoot>\n }\n </table>\n </div>\n @if (datasource().result().length === 0) {\n <div class=\"dm-table-no-data\">\n <span>{{ noDataMessage() }}</span>\n </div>\n } @else { @if (datasource().isPaginationEnabled()) {\n <ng-container [ngTemplateOutlet]=\"paginator\" />\n } }\n</div>\n\n<!-- MARK: Action Button template -->\n<ng-template #dmTableActionButton let-button let-defaultAction=\"defaultAction\">\n @if (button.buttonType === 'icon') {\n <button\n #rootTrigger=\"matMenuTrigger\"\n mat-icon-button\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n [matMenuTriggerFor]=\"button.children && button.children.length > 0 ? tableButtonRootMenu : null\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n rootTrigger: rootTrigger\n }\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(visibleColumns(), datasource())\n : defaultAction\n ? defaultAction($event)\n : null\n \"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n >\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n </button>\n } @else {\n <button\n #rootTrigger=\"matMenuTrigger\"\n [matButton]=\"button.buttonType || 'filled'\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n aria-label=\"{{ button.label }}\"\n [matTooltip]=\"button.tooltip || ''\"\n [matMenuTriggerFor]=\"button.children && button.children.length > 0 ? tableButtonRootMenu : null\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n rootTrigger: rootTrigger\n }\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(visibleColumns(), datasource())\n : defaultAction\n ? defaultAction($event)\n : null\n \"\n >\n <div class=\"dm-table-button-label-flex\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [ngStyle]=\"{ color: button.color ? button.color : undefined }\">\n {{ button.label }}\n </span>\n </div>\n </button>\n }\n <!-- @if (button.buttonType === 'icon') {\n <button\n mat-icon-button\n [color]=\"button.color\"\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(datasource())\n : defaultAction\n ? defaultAction()\n : null\n \"\n >\n <mat-icon>{{ button.icon }}</mat-icon>\n </button>\n } @else {\n <button\n [matButton]=\"button.buttonType || 'filled'\"\n [ngStyle]=\"{ 'background-color': button.color ? button.color : undefined }\"\n aria-label=\"{{ button.label }}\"\n [matTooltip]=\"button.tooltip || ''\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(datasource())\n : defaultAction\n ? defaultAction()\n : null\n \"\n >\n @if (button.icon) {\n <mat-icon\n class=\"button-icon\"\n [ngStyle]=\"{ color: button.textColor ? button.textColor : undefined }\"\n >{{ button.icon }}</mat-icon\n >\n }\n <span [ngStyle]=\"{ color: button.textColor ? button.textColor : undefined }\">\n {{ button.label }}\n </span>\n </button>\n } -->\n</ng-template>\n\n<!-- MARK: Action Button root menu -->\n<mat-menu #tableButtonRootMenu=\"matMenu\">\n <ng-template matMenuContent let-buttons=\"buttons\" let-rootTrigger=\"rootTrigger\">\n <ng-container\n *ngTemplateOutlet=\"\n tableButtonRecursiveMenu;\n context: { buttons: buttons, rootTrigger: rootTrigger }\n \"\n ></ng-container>\n </ng-template>\n</mat-menu>\n\n<!-- MARK: Action Button recursive menu -->\n<ng-template #tableButtonRecursiveMenu let-buttons=\"buttons\" let-rootTrigger=\"rootTrigger\">\n @for (button of buttons; track $index) { @if (!button.showIf || button.showIf(visibleColumns(),\n datasource())) { @if (button.children?.length) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subMenu\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n rootTrigger\n }\"\n (click)=\"$event.stopPropagation()\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n >\n <span style=\"display: flex; align-items: center; width: 100%; gap: 5px\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [style.color]=\"button.color ? button.color : undefined\">{{ button.label }}</span>\n <span class=\"spacer\"></span>\n <mat-icon [style.color]=\"button.color ? button.color : undefined\" class=\"submenu-arrow\"\n >chevron_left</mat-icon\n >\n </span>\n </button>\n\n <mat-menu #subMenu=\"matMenu\">\n <ng-container\n *ngTemplateOutlet=\"\n tableButtonRecursiveMenu;\n context: { buttons: button.children, rootTrigger: rootTrigger }\n \"\n ></ng-container>\n </mat-menu>\n } @else {\n <button\n mat-menu-item\n [matTooltip]=\"button.tooltip || ''\"\n (click)=\"button.onClick?.(visibleColumns(), datasource(), $event, getCloseParentMenusFn(rootTrigger))\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n >\n <div class=\"dm-table-button-label-flex\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [style.color]=\"button.color ? button.color : undefined\">{{ button.label }}</span>\n </div>\n </button>\n }} }\n</ng-template>\n\n<!-- MARK: Row button root menu -->\n<mat-menu #rowButtonRootMenu=\"matMenu\">\n <ng-template matMenuContent let-buttons=\"buttons\" let-row=\"row\" let-rootTrigger=\"rootTrigger\">\n <ng-container\n *ngTemplateOutlet=\"\n rowButtonRecursiveMenu;\n context: { buttons: buttons, row: row, rootTrigger: rootTrigger }\n \"\n ></ng-container>\n </ng-template>\n</mat-menu>\n\n<!-- MARK: Row button recursive menu -->\n<ng-template\n #rowButtonRecursiveMenu\n let-buttons=\"buttons\"\n let-row=\"row\"\n let-rootTrigger=\"rootTrigger\"\n>\n @for (button of buttons; track $index) { @if (button.children?.length) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subMenu\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n row,\n rootTrigger\n }\"\n (click)=\"$event.stopPropagation()\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n >\n <span style=\"display: flex; align-items: center; width: 100%; gap: 5px\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [style.color]=\"button.color ? button.color : undefined\">{{ button.label }}</span>\n <span class=\"spacer\"></span>\n <mat-icon [style.color]=\"button.color ? button.color : undefined\" class=\"submenu-arrow\"\n >chevron_left</mat-icon\n >\n </span>\n </button>\n\n <mat-menu #subMenu=\"matMenu\">\n <ng-container\n *ngTemplateOutlet=\"\n rowButtonRecursiveMenu;\n context: { buttons: button.children, row: row, rootTrigger: rootTrigger }\n \"\n ></ng-container>\n </mat-menu>\n\n } @else {\n <button\n mat-menu-item\n [matTooltip]=\"button.tooltip || ''\"\n (click)=\"button.onClick?.(row, $event, getCloseParentMenusFn(rootTrigger))\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n >\n <span class=\"dm-table-button-label-flex\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [style.color]=\"button.color ? button.color : undefined\">{{ button.label }}</span>\n </span>\n </button>\n } }\n</ng-template>\n\n<!-- MARK: Row Action Button template -->\n<ng-template #dmTableRowActionButton let-button let-row=\"row\" let-defaultAction=\"defaultAction\">\n @if (button.buttonType === 'icon') {\n <button\n #rootTrigger=\"matMenuTrigger\"\n mat-icon-button\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n [matMenuTriggerFor]=\"button.children && button.children.length > 0 ? rowButtonRootMenu : null\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n row,\n rootTrigger: rootTrigger\n }\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(row)\n : defaultAction\n ? defaultAction($event)\n : null\n \"\n >\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n </button>\n } @else {\n <button\n [matButton]=\"button.buttonType || 'filled'\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n aria-label=\"{{ button.label }}\"\n [matTooltip]=\"button.tooltip || ''\"\n [matMenuTriggerFor]=\"button.children && button.children.length > 0 ? rowButtonRootMenu : null\"\n #rootTrigger=\"matMenuTrigger\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n row,\n rootTrigger: rootTrigger\n }\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(row)\n : defaultAction\n ? defaultAction($event)\n : null\n \"\n >\n <span class=\"dm-table-button-label-flex\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [ngStyle]=\"{ color: button.color ? button.color : undefined }\">\n {{ button.label }}\n </span>\n </span>\n </button>\n }\n</ng-template>\n\n<!-- <mat-menu #buttonChildren=\"matMenu\">\n <ng-template matMenuContent let-buttons=\"buttons\" let-row=\"row\">\n @for (button of buttons || []; track $index) { @if (button.children && button.children.length >\n 0) {\n <ng-container *ngTemplateOutlet=\"subMenuTrigger; context: { button, row }\"></ng-container>\n } @else {\n <button\n mat-menu-item\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(row, $event)\n : null\n \"\n >\n @if (button.icon) {\n <mat-icon>{{ button.icon }}</mat-icon>\n }\n <span>{{ button.label }}</span>\n </button>\n } }\n </ng-template>\n</mat-menu>\n\n<ng-template #subMenuTrigger let-button=\"button\" let-row=\"row\">\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"buttonChildren\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n row\n }\"\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n >\n @if (button.icon) {\n <mat-icon>{{ button.icon }}</mat-icon>\n }\n <span>{{ button.label }}</span>\n </button>\n</ng-template> -->\n\n<!-- MARK: Paginator template -->\n<ng-template #paginator>\n <div\n class=\"dm-table-paginator-row\"\n [ngStyle]=\"mergedTableStyle().paginator?.root || {}\"\n [ngClass]=\"tableClasses()?.paginator?.root || {}\"\n >\n <p\n class=\"mb-0\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n >\n {{\n paginatorSettings()?.numberOfItemsPerPageLabel ||\n DEFAULT_PAGINATOR_SETTINGS.numberOfItemsPerPageLabel\n }}\n </p>\n\n <div>\n <mat-form-field\n style=\"width: 100px\"\n class=\"dm-paginator-form-field ms-2 me-2\"\n [appearance]=\"'fill'\"\n [ngStyle]=\"mergedTableStyle().paginator?.mat_form_field || {}\"\n [ngClass]=\"tableClasses()?.paginator?.mat_form_field || {}\"\n >\n <mat-select\n [value]=\"datasource().getPageSize()\"\n [ngStyle]=\"mergedTableStyle().paginator?.mat_select || {}\"\n [ngClass]=\"tableClasses()?.paginator?.mat_select || {}\"\n >\n @for (option of (paginatorSettings()?.pageSizeOptions ||\n DEFAULT_PAGINATOR_SETTINGS.pageSizeOptions); track option) {\n <mat-option\n [value]=\"option\"\n (onSelectionChange)=\"onPageSizeChange($event, option)\"\n [ngStyle]=\"mergedTableStyle().paginator?.mat_option || {}\"\n [ngClass]=\"tableClasses()?.paginator?.mat_option || {}\"\n >{{ option }}</mat-option\n >\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n @if (datasource().getPageSize() > 0) {\n <div class=\"dm-table-paginator-page-info\">\n <p\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n >\n {{ datasource().getFirstItemIndexInPage() + 1 }}\n </p>\n\n <p\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n >\n -\n </p>\n\n <p\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n >\n {{ datasource().getLastItemIndexInPage() + 1 }}\n </p>\n\n <p\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n >\n מתוך\n </p>\n\n <p\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n >\n {{ datasource().getTotalResultElementsCount() }}\n </p>\n </div>\n }\n\n <div>\n @if (paginatorSettings()?.showFirstAndLastPagesButtons ||\n DEFAULT_PAGINATOR_SETTINGS.showFirstAndLastPagesButtons) {\n <button\n [ngStyle]=\"mergedTableStyle().paginator?.button || {}\"\n [ngClass]=\"tableClasses()?.paginator?.button || {}\"\n mat-icon-button\n (click)=\"datasource().firstPage()\"\n [matTooltip]=\"\n paginatorSettings()?.firstPageButtonLabel ||\n DEFAULT_PAGINATOR_SETTINGS.firstPageButtonLabel\n \"\n [matTooltipPosition]=\"'above'\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n }\n <button\n [ngStyle]=\"mergedTableStyle().paginator?.button || {}\"\n [ngClass]=\"tableClasses()?.paginator?.button || {}\"\n mat-icon-button\n (click)=\"datasource().firstPage()\"\n [matTooltip]=\"\n paginatorSettings()?.previousPageButtonLabel ||\n DEFAULT_PAGINATOR_SETTINGS.previousPageButtonLabel\n \"\n [matTooltipPosition]=\"'above'\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n <button\n [ngStyle]=\"mergedTableStyle().paginator?.button || {}\"\n [ngClass]=\"tableClasses()?.paginator?.button || {}\"\n mat-icon-button\n (click)=\"datasource().nextPage()\"\n [matTooltip]=\"\n paginatorSettings()?.nextPageButtonLabel || DEFAULT_PAGINATOR_SETTINGS.nextPageButtonLabel\n \"\n [matTooltipPosition]=\"'above'\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n @if (paginatorSettings()?.showFirstAndLastPagesButtons ||\n DEFAULT_PAGINATOR_SETTINGS.showFirstAndLastPagesButtons) {\n <button\n [ngStyle]=\"mergedTableStyle().paginator?.button || {}\"\n [ngClass]=\"tableClasses()?.paginator?.button || {}\"\n mat-icon-button\n (click)=\"datasource().lastPage()\"\n [matTooltip]=\"\n paginatorSettings()?.lastPageButtonLabel || DEFAULT_PAGINATOR_SETTINGS.lastPageButtonLabel\n \"\n [matTooltipPosition]=\"'above'\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- MARK: Edit Columns Visibility Menu Trigger -->\n<ng-template #editcolumnVisibilityMenuTrigger let-button>\n @if (button.buttonType == 'icon') {\n <button\n mat-icon-button\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n [matMenuTriggerFor]=\"columnVisibilityMenu\"\n #rootTrigger=\"matMenuTrigger\"\n >\n <dm-icon\n [icon]=\"button.icon\"\n [color]=\"button.textColor ? button.textColor : undefined\"\n ></dm-icon>\n </button>\n } @else {\n <button\n [matButton]=\"button.buttonType || 'filled'\"\n [ngStyle]=\"{ 'background-color': button.color ? button.color : undefined }\"\n aria-label=\"{{ button.label }}\"\n [matTooltip]=\"button.tooltip || ''\"\n [matMenuTriggerFor]=\"columnVisibilityMenu\"\n #rootTrigger=\"matMenuTrigger\"\n >\n <span class=\"dm-table-button-label-flex\">\n @if (button.icon) {\n <dm-icon\n [icon]=\"button.icon\"\n [color]=\"button.textColor ? button.textColor : undefined\"\n ></dm-icon>\n }\n <span [style.color]=\"button.textColor ? button.textColor : undefined\">\n {{ button.label }}\n </span>\n </span>\n </button>\n }\n</ng-template>\n\n<!-- MARK: Edit Columns Visibility Menu -->\n<mat-menu #columnVisibilityMenu=\"matMenu\">\n <div mat-menu-item disableRipple (click)=\"$event.stopPropagation()\">\n <mat-checkbox\n [checked]=\"isAllColumnsVisible()\"\n (change)=\"toggleAllColumnsVisibility($event)\"\n (click)=\"$event.stopPropagation()\"\n >{{ editColumnsVisibilitySelectAllLabel() }}</mat-checkbox\n >\n </div>\n @for (column of runtimeColumns(); track column.id) {\n <div mat-menu-item disableRipple (click)=\"$event.stopPropagation()\">\n <mat-checkbox\n [checked]=\"isColumnVisible(column)\"\n (change)=\"toggleColumnVisibility($event, column)\"\n (click)=\"$event.stopPropagation()\"\n >{{ column.header }}</mat-checkbox\n >\n </div>\n }\n</mat-menu>\n\n<!-- MARK: Input Cell Template -->\n<ng-template #dmTableInputCell let-row let-column=\"column\">\n @switch (column.inputType) { @case ('select') {\n <mat-select\n [dmImportantStyle]=\"getInputStyle(column)\"\n panelWidth=\"null\"\n [value]=\"resolveCellValue(row, column)\"\n >\n @for (option of column.selectOptions || []; track option.value) {\n <mat-option\n [value]=\"option.value\"\n (onSelectionChange)=\"inputCellSelectOptionChangeHandler(row, column, option, $event)\"\n >{{ option.label }}</mat-option\n >\n }\n </mat-select>\n } @case ('checkbox') {\n <mat-checkbox\n [checked]=\"resolveCellValue(row, column)\"\n (change)=\"inputCellCheckboxChangeHandler(row, column, $event)\"\n ></mat-checkbox>\n } @default {\n <input\n [type]=\"column.inputType || 'text'\"\n [value]=\"resolveCellValue(row, column)\"\n (change)=\"inputCellChangeHandler(row, column, $event)\"\n [dmImportantStyle]=\"getInputStyle(column)\"\n />\n } }\n</ng-template>\n\n<!-- MARK: Header Menu Trigger Template -->\n<ng-template #dmTableHeaderMenuTrigger let-column>\n @if (column?.headerMenuItems?.length) {\n <!-- <button\n mat-icon-button\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Column Menu\"\n >\n </button> -->\n <mat-icon\n #rootTrigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"dmTableHeaderRootMenu\"\n [matMenuTriggerData]=\"{\n menuItems: column.headerMenuItems,\n rootTrigger: rootTrigger\n }\"\n [matTooltip]=\"column.headerMenuTooltip || ''\"\n style=\"font-size: 20px; cursor: pointer; margin-left: 4px; height: 20px\"\n [ngStyle]=\"{\n color: getHeaderThContentStyle(column)?.color || getHeaderThStyle(column)?.color || ''\n }\"\n >menu</mat-icon\n >\n }\n</ng-template>\n\n<!-- MARK: Header Root Menu -->\n<mat-menu #dmTableHeaderRootMenu=\"matMenu\">\n <ng-template matMenuContent let-menuItems=\"menuItems\" let-rootTrigger=\"rootTrigger\">\n <ng-container\n *ngTemplateOutlet=\"\n dmTableHeaderRecursiveMenu;\n context: { menuItems: menuItems, rootTrigger: rootTrigger }\n \"\n ></ng-container>\n </ng-template>\n</mat-menu>\n\n<!-- MARK: Header Recursive Menu -->\n<ng-template #dmTableHeaderRecursiveMenu let-menuItems=\"menuItems\" let-rootTrigger=\"rootTrigger\">\n @for (menuItem of menuItems; track $index) { @if (!menuItem.showIf || (menuItem.showIf &&\n menuItem.showIf(datasource()))) {@if (menuItem.children?.length) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"dmTableHeaderSubMenu\"\n [matMenuTriggerData]=\"{\n menuItems: menuItem.children,\n rootTrigger\n }\"\n (click)=\"$event.stopPropagation()\"\n [ngStyle]=\"{\n 'background-color': menuItem.backgroundColor ? menuItem.backgroundColor : undefined\n }\"\n >\n <span style=\"display: flex; align-items: center; width: 100%; gap: 5px\">\n @if (menuItem.icon) {\n <dm-icon\n [icon]=\"menuItem.icon\"\n [color]=\"menuItem.color ? menuItem.color : undefined\"\n ></dm-icon>\n }\n <span [style.color]=\"menuItem.color ? menuItem.color : undefined\">{{ menuItem.label }}</span>\n <span class=\"spacer\"></span>\n <mat-icon [style.color]=\"menuItem.color ? menuItem.color : undefined\" class=\"submenu-arrow\"\n >chevron_left</mat-icon\n >\n </span>\n </button>\n\n <mat-menu #dmTableHeaderSubMenu=\"matMenu\">\n <ng-container\n *ngTemplateOutlet=\"\n dmTableHeaderRecursiveMenu;\n context: { menuItems: menuItem.children, rootTrigger: rootTrigger }\n \"\n />\n </mat-menu>\n } @else {\n <button\n mat-menu-item\n [matTooltip]=\"menuItem.tooltip || ''\"\n (click)=\"menuItem.onClick?.(datasource(), $event, getCloseParentMenusFn(rootTrigger))\"\n [ngStyle]=\"{\n 'background-color': menuItem.backgroundColor ? menuItem.backgroundColor : undefined\n }\"\n >\n <span class=\"dm-table-button-label-flex\">\n @if (menuItem.icon) {\n <dm-icon\n [icon]=\"menuItem.icon\"\n [color]=\"menuItem.color ? menuItem.color : undefined\"\n ></dm-icon>\n }\n <span [style.color]=\"menuItem.color ? menuItem.color : undefined\">{{ menuItem.label }}</span>\n </span>\n </button>\n } }}\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1.DmSpinnerService","i1","i4","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dmlibs-dm-cmps.mjs","sources":["../../../projects/dm-cmps/src/lib/utils/dm-cmps-data-source.ts","../../../projects/dm-cmps/src/lib/dm-mat-select/utils.ts","../../../projects/dm-cmps/src/lib/dm-mat-select/dm-mat-select.ts","../../../projects/dm-cmps/src/lib/dm-mat-select/dm-mat-select.html","../../../projects/dm-cmps/src/lib/dm-color-picker/dm-color-picker.ts","../../../projects/dm-cmps/src/lib/dm-color-picker/dm-color-picker.html","../../../projects/dm-cmps/src/lib/dm-spinner/dm-spinner.service.ts","../../../projects/dm-cmps/src/lib/dm-spinner/dm-spinner.ts","../../../projects/dm-cmps/src/lib/dm-spinner/dm-spinner.html","../../../projects/dm-cmps/src/lib/dm-table/utils.ts","../../../projects/dm-cmps/src/lib/dm-table/dm-table-cell-host/dm-table-cell-host.ts","../../../projects/dm-cmps/src/lib/dm-table/dm-table-cell-host/dm-table-cell-host.html","../../../projects/dm-cmps/src/lib/services/dm-date.service.ts","../../../projects/dm-cmps/src/lib/dm-table/defaults.ts","../../../projects/dm-cmps/src/lib/dm-table/helpers.ts","../../../projects/dm-cmps/src/lib/dm-table/column-state.ts","../../../projects/dm-cmps/src/lib/directives/dm-important-style-directive.ts","../../../projects/dm-cmps/src/lib/dm-icon/dm-icon.ts","../../../projects/dm-cmps/src/lib/dm-icon/dm-icon.html","../../../projects/dm-cmps/src/lib/dm-table/dm-table.ts","../../../projects/dm-cmps/src/lib/dm-table/dm-table.html","../../../projects/dm-cmps/src/dmlibs-dm-cmps.ts"],"sourcesContent":["import { Signal, signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { debounceTime, distinctUntilChanged, Subject, Subscription, switchMap } from 'rxjs';\n\nexport interface DmCmpsDataSourceSort {\n id?: string;\n direction: 'asc' | 'desc';\n field: string;\n sortFn?: (a: any, b: any) => number;\n}\n\nexport class DmCmpsDataSource<T> implements DmCmpsDataSourceConfig<T> {\n private data: T[];\n private filteredData: T[];\n private _resultData: T[];\n\n public result = signal<T[]>([]);\n public resultVersion = signal<number>(0);\n\n private paginationEnabled: boolean = false;\n private currentPageIndex: number = 0;\n private pageSize: number = 10;\n private autoPaginationAboveItemsCount: number = 100;\n private propertiesToSkipInSearchSet: Set<string> = new Set([\n '_id',\n 'createdAt',\n 'updatedAt',\n '__v',\n 'createdBy',\n 'updatedBy',\n 'creatorName',\n 'updaterName',\n ]);\n\n private searchTerm: string = '';\n\n private speratedSearch: boolean = false;\n private filterPredicate: (data: T, filter: string) => boolean = (item: T, filter: string) => {\n if (!item || !filter) {\n return true;\n }\n if (typeof item === 'string') {\n return item.toLowerCase().includes(filter.toLowerCase());\n }\n const match = (term: string) => {\n return Object.entries(item).some(\n ([key, value]) =>\n !this.propertiesToSkipInSearchSet.has(key) &&\n value != null &&\n value.toString().toLowerCase().includes(term.toLowerCase())\n );\n };\n if (this.speratedSearch) {\n const terms = filter\n .split(' ')\n .map((t) => t.trim())\n .filter((t) => !!t);\n return terms.every((term) => match(term));\n }\n return match(filter);\n };\n\n public isLoading = signal<boolean>(false);\n\n private objectToFilterBy: Partial<T> | null = null;\n\n private fieldsToSearchIn: string[] = [];\n\n private sortMap: DmCmpsDataSourceSort[] = [];\n private sortFn: ((a: T, b: T) => number) | null = null;\n\n private searchTerms$: Subject<string> = new Subject<string>();\n private searchDebounceTime = signal<number>(300);\n\n private readonly subscription = new Subscription();\n\n /**\n * builds a new DmCmpsDataSource\n * @param initialData The data to be used as datasource\n */\n constructor(initialData: T[] = []) {\n this.data = initialData;\n this.filteredData = [...initialData];\n this._resultData = [...initialData];\n if (\n this.autoPaginationAboveItemsCount > 0 &&\n initialData.length > this.autoPaginationAboveItemsCount\n ) {\n this.paginationEnabled = true;\n }\n this.updateResultSignal();\n\n this.subscription.add(\n toObservable(this.searchDebounceTime)\n .pipe(\n switchMap((debounceMs) =>\n this.searchTerms$.pipe(\n debounceTime(debounceMs),\n distinctUntilChanged((p, c) => p === c)\n )\n )\n )\n .subscribe((term) => {\n this.searchTerm = term;\n this.applySearch();\n })\n );\n }\n\n private async updateResultData() {\n this.applySorting();\n await this.applySearch();\n await this.updateResultSignal();\n }\n\n disconnect(): void {\n this.subscription.unsubscribe();\n }\n\n setAutoPaginationAboveItemsCount(count: number): void {\n this.autoPaginationAboveItemsCount = count;\n if (count > 0 && this._resultData.length > count) {\n this.paginationEnabled = true;\n } else {\n this.paginationEnabled = false;\n }\n this.updateResultSignal();\n }\n\n applyPagination(pageSize?: number): void {\n if (pageSize !== undefined && pageSize < 5) {\n throw new Error('Page size must be at least 5');\n }\n this.currentPageIndex = 0;\n this.paginationEnabled = true;\n if (pageSize) {\n this.pageSize = pageSize;\n }\n }\n\n setPageSize(pageSize: number): void {\n if (pageSize < 5) {\n throw new Error('Page size must be at least 5');\n }\n this.pageSize = pageSize;\n this.updateResultSignal();\n }\n\n getPageSize(): number {\n return this.pageSize;\n }\n\n disablePagination(): void {\n this.currentPageIndex = 0;\n this.paginationEnabled = false;\n this.setAutoPaginationAboveItemsCount(-1);\n this.updateResultSignal();\n }\n\n nextPage(): number {\n if (this.pageSize <= 0 || !this.paginationEnabled) {\n return 0;\n }\n const totalPages = Math.ceil(this._resultData.length / this.pageSize);\n if (this.currentPageIndex < totalPages - 1) {\n this.currentPageIndex++;\n }\n this.updateResultSignal();\n return this.currentPageIndex;\n }\n\n previousPage(): number {\n if (this.pageSize <= 0 || !this.paginationEnabled) {\n return 0;\n }\n if (this.currentPageIndex > 0) {\n this.currentPageIndex--;\n }\n this.updateResultSignal();\n return this.currentPageIndex;\n }\n\n firstPage(): number {\n if (this.pageSize <= 0 || !this.paginationEnabled) {\n return 0;\n }\n this.currentPageIndex = 0;\n this.updateResultSignal();\n return this.currentPageIndex;\n }\n\n lastPage(): number {\n if (this.pageSize <= 0 || !this.paginationEnabled) {\n return 0;\n }\n const totalPages = Math.ceil(this._resultData.length / this.pageSize);\n this.currentPageIndex = totalPages - 1;\n this.updateResultSignal();\n return this.currentPageIndex;\n }\n\n getCurrentPageIndex(): number {\n return this.currentPageIndex;\n }\n\n getTotalPagesCount(): number {\n if (this.pageSize <= 0) {\n return 1;\n }\n return Math.ceil(this._resultData.length / this.pageSize);\n }\n\n getFirstItemIndexInPage(): number {\n return this.currentPageIndex * this.pageSize;\n }\n\n getLastItemIndexInPage(): number {\n const lastIndex = (this.currentPageIndex + 1) * this.pageSize - 1;\n return lastIndex >= this._resultData.length ? this._resultData.length - 1 : lastIndex;\n }\n\n getTotalResultElementsCount(): number {\n return this._resultData.length;\n }\n\n isPaginationEnabled(): boolean {\n return (\n this.pageSize > 0 &&\n (this.paginationEnabled ||\n (this.autoPaginationAboveItemsCount > 0 &&\n this._resultData.length > this.autoPaginationAboveItemsCount))\n );\n }\n\n setSearchDebounceTime(milliseconds: number): void {\n this.searchDebounceTime.set(milliseconds);\n }\n\n setDatasource(newData: T[]) {\n this.data = [...newData];\n this.applyObjectFilter();\n }\n\n getDatasource(): T[] {\n return this.data;\n }\n\n getResultData(): T[] {\n return this._resultData;\n }\n\n private async updateResultSignal() {\n return new Promise<void>((resolve) => {\n const res = (() => {\n if (this.isPaginationEnabled()) {\n const startIndex = this.currentPageIndex * this.pageSize;\n return this._resultData.slice(startIndex, startIndex + this.pageSize);\n }\n return this._resultData;\n })();\n this.result.set(res);\n resolve();\n });\n }\n\n // get resultData(): T[] {\n // if (\n // this.pageSize > 0 &&\n // (this.paginationEnabled ||\n // (this.autoPaginationAboveItemsCount > 0 &&\n // this._resultData.length > this.autoPaginationAboveItemsCount))\n // ) {\n // const startIndex = this.currentPageIndex * this.pageSize;\n // return this.filteredData.slice(startIndex, startIndex + this.pageSize);\n // }\n\n // return this.filteredData;\n // }\n\n search(filterTerm: string): void {\n this.isLoading.set(true);\n this.searchTerms$.next(filterTerm);\n }\n\n private async applySearch(): Promise<void> {\n return new Promise<void>(async (resolve) => {\n if (!this.searchTerm) {\n this._resultData = [...this.filteredData];\n } else {\n this.currentPageIndex = 0;\n this._resultData = this.filteredData.filter((item) =>\n this.filterPredicate(item, this.searchTerm)\n );\n }\n await this.updateResultSignal();\n this.resultVersion.update((v) => v + 1);\n this.isLoading.set(false);\n resolve();\n });\n }\n\n setFilterPredicate(predicate: (data: T, filter: string) => boolean): void {\n this.filterPredicate = predicate;\n }\n\n setFieldsToSearchIn(fields: string[]) {\n if (!fields || fields.length === 0) {\n throw new Error('Fields to search in cannot be empty');\n }\n this.fieldsToSearchIn = fields;\n this.setFilterPredicate((item: T, filter: string) => {\n if (!item || !filter) {\n return true;\n }\n if (this.speratedSearch) {\n const terms = filter\n .split(' ')\n .map((t) => t.trim())\n .filter((t) => !!t);\n return terms.every((term) => {\n return this.fieldsToSearchIn.some((field) => {\n const value = (item as any)[field];\n if (value != null) {\n return value.toString().toLowerCase().includes(term.toLowerCase());\n }\n return false;\n });\n });\n }\n return this.fieldsToSearchIn.some((field) => {\n const value = (item as any)[field];\n if (value != null) {\n return value.toString().toLowerCase().includes(filter.toLowerCase());\n }\n return false;\n });\n });\n }\n\n setSortFunction(sortFn: ((a: T, b: T) => number) | null): void {\n this.sortFn = sortFn;\n }\n\n private applySorting() {\n if (this.sortMap.length === 0 && !this.sortFn) {\n return;\n }\n if (this.sortFn) {\n this.filteredData.sort(this.sortFn);\n return;\n }\n\n this.filteredData.sort((a, b) => {\n for (const sort of this.sortMap) {\n let comparison = 0;\n if (sort.sortFn) {\n comparison = sort.sortFn(a, b);\n } else {\n const aValue = (a as any)[sort.field];\n const bValue = (b as any)[sort.field];\n if (isNaN(aValue) || isNaN(bValue)) {\n if (typeof aValue === 'string' && typeof bValue === 'string') {\n comparison = aValue.localeCompare(bValue);\n } else {\n comparison = 0;\n }\n } else if (aValue < bValue) {\n comparison = -1;\n } else if (aValue > bValue) {\n comparison = 1;\n } else {\n comparison = 0;\n }\n }\n\n if (comparison !== 0) {\n return sort.direction === 'asc' ? comparison : -comparison;\n }\n }\n return 0;\n });\n }\n\n sortByFields(sortMap: DmCmpsDataSourceSort[]): void {\n this.sortMap = sortMap;\n this.sortFn = null;\n this.updateResultData();\n }\n\n resetSorting(): void {\n this.sortMap = [];\n this.sortFn = null;\n this.applyObjectFilter();\n }\n\n setFilterByObjectFields(filterObj: Partial<T> | null): void {\n this.objectToFilterBy = filterObj;\n this.applyObjectFilter();\n }\n\n getObjectToFilterBy(): Partial<T> | null {\n return this.objectToFilterBy;\n }\n\n private applyObjectFilter(): void {\n if (!this.objectToFilterBy) {\n this.filteredData = [...this.data];\n } else {\n this.filteredData = this.data.filter((item) => {\n for (const [key, value] of Object.entries(this.objectToFilterBy!)) {\n if ((item as any)[key] !== value) {\n return false;\n }\n }\n return true;\n });\n }\n this.updateResultData();\n }\n\n applySperatedSearch(enabled: boolean): void {\n this.speratedSearch = enabled;\n }\n\n setPropertiesToSkipInSearch(...props: string[]): void {\n this.propertiesToSkipInSearchSet = new Set(props);\n }\n}\n\ninterface DmCmpsDataSourceConfig<T = any> {\n /**\n * Disconnects the data source and performs any necessary cleanup.\n */\n disconnect: () => void;\n\n /**\n * A Signal that emits the loading state of the data source.\n */\n isLoading: Signal<boolean>;\n\n /**\n * Sets auto pagination threshold.\n * When the number of items exceeds the given count, pagination will be enabled automatically.\n * Use -1 to disable auto pagination.\n *\n * @param count Number of items threshold\n * @default 100\n */\n setAutoPaginationAboveItemsCount: (count: number) => void;\n\n /**\n * ApplyPagination - Enables pagination with the given page size.\n *\n * @param pageSize Number of items per page, optional, default is 10, must be at least 5\n * @default 10\n */\n applyPagination: (pageSize?: number) => void;\n\n /**\n * Sets the page size for pagination.\n * @param pageSize Number of items per page, must be at least 5\n */\n setPageSize: (pageSize: number) => void;\n\n /**\n * Gets the page size.\n * @returns page size\n */\n getPageSize: () => number;\n\n /**\n * Disables pagination.\n */\n disablePagination: () => void;\n\n /**\n * Moves to the next page and returns the current page index.\n * @returns New current page index\n */\n nextPage: () => number;\n\n /**\n * Moves to the previous page and returns the current page index.\n * @returns New current page index\n */\n previousPage: () => number;\n\n /**\n * Moves to the first page and returns the current page index.\n * @returns New current page index\n */\n firstPage: () => number;\n\n /**\n * Moves to the last page and returns the current page index.\n * @returns New current page index\n */\n lastPage: () => number;\n\n /**\n * Gets the current page index.\n * @returns Current page index\n */\n getCurrentPageIndex: () => number;\n\n /**\n * Gets the total number of pages.\n * @returns Total pages count\n */\n getTotalPagesCount: () => number;\n\n /**\n * Gets the index of the first item in the current page.\n * @returns Index of the first item in the current page\n */\n getFirstItemIndexInPage: () => number;\n\n /**\n * Gets the index of the last item in the current page.\n * @returns Index of the last item in the current page\n */\n getLastItemIndexInPage: () => number;\n\n /**\n * Gets the total number of elements after filtering, without pagination applied.\n * @returns Total number of result elements\n */\n getTotalResultElementsCount: () => number;\n\n /**\n * Checks if pagination is enabled.\n * @returns true if pagination is enabled, false otherwise\n */\n isPaginationEnabled: () => boolean;\n\n /**\n * Sets the debounce time for search input.\n * @param milliseconds Debounce time in milliseconds\n * @default 300\n */\n setSearchDebounceTime: (milliseconds: number) => void;\n\n /**\n * Sets the data source.\n * @param newData New data array\n */\n setDatasource: (newData: T[]) => void;\n\n /**\n * Gets the current data source array.\n * @returns Current data array\n */\n getDatasource: () => T[];\n\n /**\n * Get the result data after filtering, sorting, without pagination applied.\n * @returns Result data array\n */\n getResultData: () => T[];\n\n /**\n * Performs a search with the given filter term.\n * @param filterTerm The term to filter the data\n */\n search: (filterTerm: string) => void;\n\n /**\n * Sets the filter predicate function.\n * @param predicate Function to filter data items\n *\n * @default - A default predicate that checks if the item includes the filter term in any of its non Object properties.\n */\n setFilterPredicate: (predicate: (data: T, filter: string) => boolean) => void;\n\n /**\n * Sets the fields to search in.\n * @param fields Array of field names to search in\n *\n * @default - All non Object properties of the data items.\n */\n setFieldsToSearchIn: (fields: string[]) => void;\n\n /**\n * Sets a custom sort function.\n * @param sortFn Custom sort function\n *\n * @default - No custom sort function.\n */\n setSortFunction: (sortFn: ((a: T, b: T) => number) | null) => void;\n\n /**\n * Sorts the data by the given fields and directions.\n * @param sortMap\n * @default - No sorting applied.\n */\n sortByFields: (sortMap: DmCmpsDataSourceSort[]) => void;\n\n /**\n * Resets any applied sorting.\n */\n resetSorting: () => void;\n\n /**\n * Sets filter by object fields.\n * @param filterObj Object with fields and values to filter by\n * @default null (no filtering)\n */\n setFilterByObjectFields: (filterObj: Partial<T> | null) => void;\n\n /**\n * Gets the object used for filtering by fields.\n * @returns Partial object used for filtering or null if no filtering is applied\n */\n getObjectToFilterBy: () => Partial<T> | null;\n\n /**\n * Enables or disables separated search.\n * When enabled, the search term is split by spaces and each term is searched separately.\n * @param enabled true to enable separated search, false to disable\n * @default false\n */\n applySperatedSearch: (enabled: boolean) => void;\n\n /**\n * Sets keys to skip in default search.\n * @param Props Array of properties names to skip\n * @returns\n */\n setPropertiesToSkipInSearch: (...props: string[]) => void;\n}\n","import {\n Input,\n InputSignal,\n InputSignalWithTransform,\n ModelSignal,\n OutputEmitterRef,\n} from '@angular/core';\nimport { DmMatSelectOutput } from './dm-mat-select';\nimport { FormControl } from '@angular/forms';\nimport { MatSelectChange } from '@angular/material/select';\n\nexport const SEARCH_SECTION_BG_COLOR_VAR = '--dm-mat-select-search-section-bg-color';\nexport const SEARCH_SECTION_BG_COLOR_DEFAULT_VALUE = '#faf9fd';\n\n/**\n * Public API for <dm-mat-select>\n *\n * This interface describes all inputs, outputs, and configuration options.\n * It is used only for documentation and IntelliSense — not for runtime behavior.\n */\nexport interface DmMatSelectConfig<T = any> {\n /**\n * CSS classes applied to the mat-form-field element.\n * ```\n * type string\n * ```\n *\n */\n formFieldClass?: InputSignal<string>;\n\n /**\n * CSS classes applied to the wrapper div element.\n * ```\n * type string\n * ```\n *\n */\n wrapperClass?: InputSignal<string>;\n\n /**\n * Appearance style of the select component.\n * ```\n * type 'fill' | 'outline'\n * ```\n *\n * @default fill\n */\n appearance?: InputSignal<'fill' | 'outline'>;\n\n /**\n * Enables multiple selection mode.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n multiple?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Enables a \"Select All\" option in the dropdown.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n selectAllEnabled?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Text of the \"Select All\" checkbox.\n * ```\n * type string\n * ```\n *\n * @default 'בחר הכל'\n */\n selectAllLabel?: InputSignal<string>;\n\n /**\n * Label shown in the form field.\n * ```\n * type string\n * ```\n *\n * @default ''\n */\n label?: InputSignal<string>;\n\n /**\n * The list of items shown in the dropdown.\n * ```\n * type T[]\n * ```\n *\n * @default []\n */\n options: InputSignal<T[]>;\n\n /**\n * The property to use as the unique identifier of each item.\n * ```\n * type keyof T\n * ```\n *\n * @default '_id'\n */\n optionValueKey?: InputSignal<keyof T>;\n\n /**\n * The property to use as the display label.\n * ```\n * type keyof T\n * ```\n *\n * @default 'name'\n */\n optionLabelKey?: InputSignal<keyof T>;\n\n /**\n * Enables searching inside the dropdown.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n searchable?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Function to filter options based on search input.\n * ```\n * type ((option: T, filter: string) => boolean) | null\n * ```\n *\n * @default null\n */\n filterPredicate?: InputSignal<((option: T, filter: string) => boolean) | null>;\n\n /**\n * Marks field as required.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n required?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Disables the component.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n disabled?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Custom error message.\n * ```\n * type string | null\n * ```\n *\n * @default null\n */\n error?: InputSignal<string | null>;\n\n /**\n * Placeholder text for the search input.\n * ```\n * type string\n * ```\n *\n * @default 'חפש...'\n */\n searchPlaceholder?: InputSignal<string>;\n\n /**\n * Enables an empty option in the select dropdown.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n emptyOption?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Label for the empty option.\n * ```\n * type string\n * ```\n *\n * @default 'ללא'\n */\n emptyOptionLabel?: InputSignal<string>;\n\n /**\n * Value for the empty option.\n * ```\n * type null | string | number\n * ```\n *\n * @default null\n */\n emptyOptionValue?: InputSignal<T | null>;\n\n /**\n * Function to format option names for display.\n * ```\n * type (option: T) => string\n * ```\n *\n */\n optionNameFormat?: InputSignal<((option: T) => string) | null>;\n\n /**\n * Width of the select panel.\n * To set the panel width to match the trigger width, use 'auto'.\n * To set a custom width, provide a CSS width value (e.g., '300px', '50%', etc.).\n * To have the panel width adjust to its content, set to null or empty string.\n * ```\n * type string | null\n * ```\n *\n * @default 'auto'\n */\n panelWidth?: InputSignal<string | null>;\n\n /**\\\n * Custom CSS classes applied to the select panel.\n * Can be a string, array of strings, Set of strings, or an object with class names as keys and boolean values.\n * Accepts the same values as ngClass.\n * ```\n * type string | string[] | Set<string> | { [key: string]: any }\n * ```\n *\n * @default ''\n */\n panelClass?: InputSignal<string | string[] | Set<string> | { [key: string]: any }>;\n\n /**\\\n * Background color for the search section.\n * Uses CSS variable '--dm-mat-select-search-section-bg-color'.\n * ```\n * type string | null\n * ```\n *\n * @default '#faf9fd'\n */\n searchSectionBackgroundColor?: InputSignal<string | null>;\n\n /**\n * Sort selected items at top of the list.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n sortBySelectedOnTop?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * A signal that holds the selected value(s) of the select component.\n * ```\n * type ModelSignal<DmMatSelectOutput<T>>\n * ```\n *\n * @default null\n */\n value?: ModelSignal<DmMatSelectOutput<T>>;\n\n /**\n * FormControl to bind to the select component.\n * ```\n * type FormControl<DmMatSelectOutput<T>> | null\n * ```\n *\n * @default null\n */\n formControl?: InputSignal<FormControl<DmMatSelectOutput<T>> | null>;\n\n /**\n * Event emitted when the selection changes.\n * ```\n * type OutputEmitterRef<MatSelectChange<DmMatSelectOutput<T>>>\n * ```\n *\n *\n */\n selectionChange?: OutputEmitterRef<MatSelectChange<DmMatSelectOutput<T>>>;\n\n /**\n * Icon name to display in the select trigger.\n * Can be a Material icon name or a Bootstrap icon html (like <i class=\"bi bi-name\"></i>).\n * ```\n * type string | null\n * ```\n *\n * @default null\n */\n icon?: InputSignal<string | null>;\n\n /**\n * Label to show in disabled option when there is no data to display.\n * ```\n * type string\n * ```\n *\n * @default 'אין נתונים להצגה'\n */\n noDataLabel?: InputSignal<string>;\n\n /**\n * Cleans the search input after selecting an option.\n * ```\n * type boolean\n * ```\n *\n * @default false\n */\n clearSearchAfterSelect?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Tooltip text for the clear search button.\n * ```\n * type string\n * ```\n * @default 'נקה חיפוש'\n */\n clearSearchButtonTooltip?: InputSignal<string>;\n\n /**\n * Automatically focuses the search input when the panel opens.\n * ```\n * type boolean\n * ```\n *\n * @default true\n */\n focusSearchInputOnPanelOpen?: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Properties to skip in default search.\n * ```\n * type string[]\n * ```\n *\n * @default ['_id',\n 'createdAt',\n 'updatedAt',\n '__v',\n 'createdBy',\n 'updatedBy',\n 'creatorName',\n 'updaterName',]\n */\n propertiesToSkipInSearch?: InputSignal<string[]>;\n}\n","import {\n booleanAttribute,\n Component,\n computed,\n effect,\n input,\n model,\n OnDestroy,\n output,\n signal,\n} from '@angular/core';\nimport { MatFormFieldModule, MatSuffix } from '@angular/material/form-field';\nimport { MatSelectChange, MatSelectModule } from '@angular/material/select';\nimport { DmCmpsDataSource } from '../utils/dm-cmps-data-source';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatOptionSelectionChange } from '@angular/material/core';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\nimport {\n DmMatSelectConfig,\n SEARCH_SECTION_BG_COLOR_DEFAULT_VALUE,\n SEARCH_SECTION_BG_COLOR_VAR,\n} from './utils';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\n\nexport type DmMatSelectOutput<T> = T | T[] | string | string[] | number | number[] | null;\ntype DmMatSelectOption<T> = T & { __dmMatSelectFormattedName: string };\n\n@Component({\n selector: 'dm-mat-select',\n standalone: true,\n imports: [\n ReactiveFormsModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatButtonModule,\n MatSelectModule,\n MatInputModule,\n CommonModule,\n FormsModule,\n MatTooltip,\n MatIcon,\n ],\n templateUrl: './dm-mat-select.html',\n styleUrl: './dm-mat-select.scss',\n})\nexport class DmMatSelect<T = any> implements DmMatSelectConfig<T>, OnDestroy {\n formFieldClass = input<string>('');\n wrapperClass = input<string>('');\n appearance = input<'fill' | 'outline'>('fill');\n multiple = input(false, { transform: booleanAttribute });\n selectAllEnabled = input(false, { transform: booleanAttribute });\n selectAllLabel = input<string>('בחר הכל');\n label = input<string>('');\n options = input<T[]>([]);\n optionValueKey = input<keyof T>('_id' as keyof T);\n optionLabelKey = input<keyof T>('name' as keyof T);\n searchable = input(false, { transform: booleanAttribute });\n\n required = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n error = input<string | null>(null);\n\n searchPlaceholder = input<string>('חפש...');\n\n emptyOption = input(false, { transform: booleanAttribute });\n emptyOptionLabel = input<string>('ללא');\n emptyOptionValue = input<T | null>(null);\n\n optionNameFormat = input<((option: T) => string) | null>(null);\n private _optionNameFormat: ((option: T) => string) | null = null;\n\n protected datasource = signal<DmCmpsDataSource<DmMatSelectOption<T>>>(\n new DmCmpsDataSource<DmMatSelectOption<T>>()\n );\n\n value = model<DmMatSelectOutput<T>>(null);\n\n formControl = input<FormControl<DmMatSelectOutput<T>> | null>(null);\n panelWidth = input<string | null>('auto');\n panelClass = input<string | string[] | Set<string> | { [key: string]: any }>('');\n searchSectionBackgroundColor = input<string | null>(SEARCH_SECTION_BG_COLOR_DEFAULT_VALUE);\n\n sortBySelectedOnTop = input(false, { transform: booleanAttribute });\n\n private internalControl = new FormControl<DmMatSelectOutput<T>>(null);\n\n protected control = computed(() => this.formControl() ?? this.internalControl);\n\n selectionChange = output<MatSelectChange<DmMatSelectOutput<T>>>();\n\n icon = input<string | null>(null);\n\n protected isBootstrapIcon = computed(() => {\n return this.icon() ? this.icon()!.includes('bi-') : false;\n });\n\n noDataLabel = input<string>('אין נתונים להצגה');\n\n clearSearchAfterSelect = input(true, { transform: booleanAttribute });\n\n clearSearchButtonTooltip = input<string>('נקה חיפוש');\n\n focusSearchInputOnPanelOpen = input(true, { transform: booleanAttribute });\n\n filterPredicate = input<((option: T, filterText: string) => boolean) | null>(null);\n private _filterPredicate: ((option: T, filterText: string) => boolean) | null = null;\n\n propertiesToSkipInSearch = input<string[]>([\n '_id',\n 'createdAt',\n 'updatedAt',\n '__v',\n 'createdBy',\n 'updatedBy',\n 'creatorName',\n 'updaterName',\n ]);\n\n simpleArray = computed(() => {\n return typeof this.options()[0] === 'string' || typeof this.options()[0] === 'number';\n });\n\n private selectedOptionsIdsSet = signal<Set<any>>(new Set());\n\n protected filterText = model<string>('');\n\n protected checkIfAllSelected = computed(() => {\n const options = this.datasource().result();\n const selected = this.control().value;\n const allSelected =\n options.length > 0 &&\n Array.isArray(selected) &&\n selected.length >= options.length &&\n options.every((option) => {\n const optionValue = this.getOptionValue(option);\n return this.selectedOptionsIdsSet().has(optionValue);\n });\n\n return allSelected;\n });\n\n constructor() {\n this.runEffects();\n }\n\n ngOnDestroy(): void {\n this.datasource().disconnect();\n }\n\n setOptionsFormattedNames(options: DmMatSelectOption<T>[]) {\n if (this._optionNameFormat) {\n for (const option of options) {\n option.__dmMatSelectFormattedName = this._optionNameFormat(option);\n }\n }\n }\n\n private runEffects() {\n effect(() => {\n this._filterPredicate = this.filterPredicate();\n this._optionNameFormat = this.optionNameFormat();\n this.datasource().setPropertiesToSkipInSearch(...this.propertiesToSkipInSearch());\n });\n\n effect(() => {\n const opts = this.options() as DmMatSelectOption<T>[];\n this.setOptionsFormattedNames(opts);\n this.datasource().setAutoPaginationAboveItemsCount(-1);\n if (this._filterPredicate) {\n this.datasource().setFilterPredicate(this._filterPredicate);\n }\n if (this.sortBySelectedOnTop() && this.multiple()) {\n this.datasource().setSortFunction(\n ((a: T, b: T) => {\n const aSelected = this.selectedOptionsIdsSet().has(this.getOptionValue(a));\n const bSelected = this.selectedOptionsIdsSet().has(this.getOptionValue(b));\n if (aSelected && !bSelected) {\n return -1;\n } else if (!aSelected && bSelected) {\n return 1;\n } else {\n return 0;\n }\n }).bind(this)\n );\n }\n this.datasource().setDatasource(opts);\n });\n\n effect(() => {\n if (this.formControl()) {\n return;\n }\n this.internalControl.setValue(this.value(), { emitEvent: false });\n });\n\n effect((onCleanup) => {\n const ctrl = this.control();\n const setSelectedIdsSet = (selectedVal: DmMatSelectOutput<T>) => {\n const newSelectedIdsSet = new Set<any>();\n if (this.multiple()) {\n const arr = Array.isArray(selectedVal) ? selectedVal : [];\n for (const item of arr) {\n const id = this.getOptionValue(item as T);\n newSelectedIdsSet.add(id);\n }\n this.selectedOptionsIdsSet.set(newSelectedIdsSet);\n }\n };\n setSelectedIdsSet(ctrl.value);\n\n const sub = ctrl.valueChanges.subscribe((val) => {\n setSelectedIdsSet(val);\n this.value.set(val);\n });\n\n onCleanup(() => sub.unsubscribe());\n });\n\n effect(() => {\n document.documentElement.style.setProperty(\n SEARCH_SECTION_BG_COLOR_VAR,\n this.searchSectionBackgroundColor() ?? SEARCH_SECTION_BG_COLOR_DEFAULT_VALUE\n );\n });\n }\n\n protected applyFilter(event: KeyboardEvent) {\n const target = event.target as HTMLInputElement;\n this.filterText.set(target.value);\n this.datasource().search(this.filterText());\n }\n\n protected selectionChangeHandler(event: MatSelectChange<T | T[] | null>) {\n this.selectionChange.emit(event);\n }\n\n private getOptionValue(option: T): any {\n if (this.simpleArray()) return option;\n return typeof option === 'object' && option != null\n ? (option as any)[this.optionValueKey()]\n : option;\n }\n\n protected onSelectionChangeHandler(event: MatOptionSelectionChange, option: T | null) {\n if (!event.isUserInput) return;\n const selected = event.source.selected;\n const currentValue = this.control().value;\n if (this.multiple()) {\n if (!option) return;\n const arr = Array.isArray(currentValue) ? currentValue : [];\n let newValue: (string | number | T)[];\n if (selected) {\n newValue = [...arr, this.getOptionValue(option)];\n } else {\n newValue = arr.filter((v) => v !== this.getOptionValue(option));\n }\n this.control().setValue(newValue as DmMatSelectOutput<T>);\n } else {\n if (!option) {\n this.control().setValue(this.emptyOptionValue());\n return;\n }\n if (selected) {\n this.control().setValue(this.getOptionValue(option) as DmMatSelectOutput<T>);\n } else {\n this.control().setValue(null);\n }\n }\n if (this.clearSearchAfterSelect()) {\n this.resetSearch();\n }\n }\n\n protected selectAllChange(event: MatCheckboxChange) {\n if (event.checked) {\n const allValues = this.datasource()\n .result()\n .map((option) => this.getOptionValue(option));\n const newValues = Array.isArray(this.control().value)\n ? (this.control().value as (string | T)[])\n : [];\n for (const val of allValues) {\n if (!this.selectedOptionsIdsSet().has(val)) {\n newValues.push(val);\n }\n }\n this.control().setValue(newValues as DmMatSelectOutput<T>);\n } else {\n const selectedValues = (this.control().value as (string | T)[]).filter((val) => {\n const allOptionValues = this.datasource()\n .result()\n .map((option) => this.getOptionValue(option));\n return !allOptionValues.includes(val as any);\n });\n this.control().setValue(selectedValues as DmMatSelectOutput<T>);\n }\n }\n\n protected resetSearch() {\n this.filterText.set('');\n this.datasource().search('');\n }\n\n protected onPanelOpened() {\n if (this.focusSearchInputOnPanelOpen()) {\n const searchInput = document.getElementById('dm-mat-select-search-input') as HTMLInputElement;\n setTimeout(() => {\n if (searchInput) {\n searchInput.focus();\n }\n }, 0);\n }\n }\n}\n","<div class=\"dm-mat-select-wrapper\" [class]=\"wrapperClass()\">\n <mat-form-field [appearance]=\"appearance()\" [class]=\"formFieldClass()\" style=\"width: 100%\">\n <mat-label>{{ label() }}</mat-label>\n <mat-select\n [multiple]=\"multiple()\"\n [formControl]=\"control()\"\n (selectionChange)=\"selectionChangeHandler($event)\"\n [disabled]=\"disabled()\"\n [panelWidth]=\"panelWidth()\"\n [panelClass]=\"panelClass()\"\n (opened)=\"onPanelOpened()\"\n >\n <div\n class=\"search-section\"\n [ngStyle]=\"{\n 'background-color': 'none'\n }\"\n >\n @if (searchable()) {\n <mat-form-field>\n <input\n id=\"dm-mat-select-search-input\"\n matInput\n [placeholder]=\"searchPlaceholder()\"\n [(ngModel)]=\"filterText\"\n (keyup)=\"applyFilter($event)\"\n (keyDown.Space)=\"$event.stopPropagation()\"\n />\n @if (filterText()) {\n <button\n mat-icon-button\n matSuffix\n (click)=\"resetSearch()\"\n [matTooltip]=\"clearSearchButtonTooltip() || ''\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n } @if (selectAllEnabled() && multiple()) {\n <mat-checkbox [checked]=\"checkIfAllSelected()\" (change)=\"selectAllChange($event)\">{{\n selectAllLabel()\n }}</mat-checkbox>\n }\n </div>\n @if (emptyOption()) {\n <mat-option\n [value]=\"emptyOptionValue()\"\n (onSelectionChange)=\"onSelectionChangeHandler($event, emptyOptionValue())\"\n >{{ emptyOptionLabel() }}</mat-option\n >\n } @for (option of datasource().result(); track simpleArray() ? option :\n option[this.optionValueKey()]) {\n <mat-option\n [value]=\"simpleArray() ? option : option[optionValueKey()]\"\n (onSelectionChange)=\"onSelectionChangeHandler($event, option)\"\n >{{\n optionNameFormat()\n ? option.__dmMatSelectFormattedName\n : simpleArray()\n ? option\n : option[optionLabelKey()]\n }}</mat-option\n >\n } @if (datasource().result().length === 0) {\n <mat-option disabled>{{ noDataLabel() }}</mat-option>\n }\n </mat-select>\n\n @if (icon(); as icon) {\n <span matSuffix>\n @if (isBootstrapIcon()) {\n <span [innerHTML]=\"icon\"></span> } @else {\n <mat-icon matSuffix>{{ icon }}</mat-icon>\n }\n </span>\n }\n\n <span matSuffix>\n <ng-content select=\"[dm-mat-select-suffix]\"></ng-content>\n </span>\n\n <mat-error>{{ error() }}</mat-error>\n </mat-form-field>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n booleanAttribute,\n Component,\n computed,\n effect,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatSliderModule, MatSliderThumb } from '@angular/material/slider';\nimport { MatTooltipModule, TooltipPosition } from '@angular/material/tooltip';\n\nexport interface DmCmpsColor {\n color: string;\n tooltip?: string;\n}\n\n@Component({\n selector: 'dm-color-picker',\n standalone: true,\n imports: [MatMenuModule, MatTooltipModule, CommonModule, MatSliderModule],\n templateUrl: './dm-color-picker.html',\n styleUrl: './dm-color-picker.scss',\n})\nexport class DmColorPicker {\n colors = input<DmCmpsColor[]>([\n { color: '#FF0000' },\n { color: '#FFA500' },\n { color: '#FFFF00' },\n { color: '#008000' },\n { color: '#0000FF' },\n { color: '#4B0082' },\n { color: '#EE82EE' },\n { color: '#A9A9A9' },\n { color: '#FFFFFF' },\n { color: '#000000' },\n ]);\n\n formControl = input<FormControl | null>(null);\n private internalFormControl: FormControl = new FormControl('');\n\n protected control = computed(() => this.formControl() ?? this.internalFormControl);\n\n width = input<number>(30);\n height = input<number>(30);\n borderRadius = input<number | string>('50%');\n\n protected radius = computed(() => {\n return typeof this.borderRadius() === 'number'\n ? `${this.borderRadius()}px`\n : this.borderRadius();\n });\n\n selectedColor = signal<string>('#FFFFFF');\n\n tooltip = input<string>('');\n tooltipPosition = input<TooltipPosition>('above');\n customColor = input(false, { transform: booleanAttribute });\n\n opacitySlider = input(false, { transform: booleanAttribute });\n // @Input() opacitySliderColor: 'primary' | 'accent' | 'warn' = 'primary';\n opacitySliderLabel = input<string>('שקיפות');\n customColorTooltip = input<string>('צבע מותאם אישית');\n\n wrapperClass = input<string>('');\n wrapperStyle = input<string>('');\n onColorChange = output<string>();\n\n // @Input() ngModel: string = '';\n // @Output() ngModelChange = new EventEmitter<string>();\n\n value = model<string>('');\n\n constructor() {\n this.runEffects();\n }\n\n runEffects() {\n effect(() => {\n if (this.formControl()) {\n return;\n }\n this.internalFormControl.setValue(this.value(), { emitEvent: false });\n });\n\n effect((onCleanup) => {\n const ctrl = this.control();\n\n this.selectedColor.set(ctrl.value);\n const sub = ctrl.valueChanges.subscribe((val) => {\n this.selectedColor.set(val);\n this.value.set(val);\n });\n\n onCleanup(() => sub.unsubscribe());\n });\n }\n\n ngOnInit(): void {}\n\n onColorSelected(color: string) {\n // this.selectedColor.set(color);\n this.control().setValue(color);\n this.onColorChange.emit(color);\n }\n\n _onColorChange(event: any) {\n const color = event.target.value;\n this.onColorSelected(color);\n }\n\n formatLabel(value: number): string {\n return Math.round(value) + '%';\n }\n\n getOpacity() {\n const value = this.selectedColor().slice(7) || 'FF';\n return Math.round((parseInt(value, 16) / 255) * 100);\n }\n\n setOpacity(value: string) {\n this.selectedColor.set(this.selectedColor().slice(0, 7));\n this.selectedColor.set(this.selectedColor() + value);\n }\n\n onOpacityValueChange(event: Event) {\n const value = +(event.target as HTMLInputElement).value;\n if (value == null) return;\n\n let hex = Math.round((value / 100) * 255).toString(16);\n if (hex.length < 2) hex = '0' + hex;\n\n this.setOpacity(hex);\n this.updateSelectedColor();\n }\n\n opacityChangeHandler(value: string) {\n let hex = Math.round((parseInt(value) / 100) * 255).toString(16);\n if (hex.length < 2) {\n hex = '0' + hex;\n }\n this.setOpacity(hex);\n }\n\n onOpacityChange(opacity: Event) {\n const value = (opacity.target as HTMLInputElement).value;\n this.opacityChangeHandler(value);\n }\n\n updateSelectedColor() {\n this.onColorSelected(structuredClone(this.selectedColor()));\n }\n\n writeValue(value: any): void {}\n\n registerOnChange(fn: any): void {}\n\n registerOnTouched(fn: any): void {}\n}\n","<div class=\"dm-color-picker-wrapper\" [class]=\"wrapperClass()\" [style]=\"wrapperStyle()\">\n <div\n class=\"dm-color-picker\"\n [matMenuTriggerFor]=\"colorPicker\"\n [style.background-color]=\"selectedColor()\"\n [matTooltip]=\"tooltip()\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [style.width.px]=\"width()\"\n [style.height.px]=\"height()\"\n [style.border-radius]=\"radius()\"\n ></div>\n @if (opacitySlider()){\n <div class=\"dm-color-picker-slider-wrapper\">\n {{ opacitySliderLabel() }}\n <mat-slider min=\"0\" max=\"100\" step=\"1\" discrete [displayWith]=\"formatLabel\">\n <input\n matSliderThumb\n [value]=\"getOpacity()\"\n (input)=\"onOpacityChange($event)\"\n #slider\n (change)=\"updateSelectedColor()\"\n />\n </mat-slider>\n </div>\n }\n</div>\n\n<mat-menu #colorPicker=\"matMenu\">\n <div class=\"dm-color-picker-menu\">\n @for (color of colors(); track color.color){\n <div\n (click)=\"onColorSelected(color.color)\"\n class=\"dm-color-div\"\n [matTooltip]=\"color.tooltip || ''\"\n matTooltipPosition=\"above\"\n [style.background-color]=\"color.color\"\n ></div>\n } @if (customColor()){<input\n (click)=\"$event.stopPropagation()\"\n [matTooltip]=\"customColorTooltip()\"\n [matTooltipPosition]=\"tooltipPosition()\"\n [value]=\"selectedColor()\"\n type=\"color\"\n class=\"pointer\"\n (change)=\"_onColorChange($event)\"\n />}\n </div>\n</mat-menu>\n","import { Injectable, signal } from '@angular/core';\n\nexport const DEFAULT_SPINNER_ID = 'dm-spinner';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DmSpinnerService {\n // visibility$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n visibility$ = signal<boolean>(false);\n spinnerToShow$ = signal<string>(DEFAULT_SPINNER_ID);\n spinnerTasks$ = signal<Set<string>>(new Set());\n\n // spinnerToShow$: BehaviorSubject<string> = new BehaviorSubject<string>(\n // 'dm-cmps-spinner'\n // );\n // spinnerTasks$: BehaviorSubject<Set<string>> = new BehaviorSubject<\n // Set<string>\n // >(new Set());\n\n spinnerText = signal('');\n constructor() {}\n\n showSpinner(spinnerId: string = DEFAULT_SPINNER_ID) {\n this.visibility$.set(true);\n this.spinnerToShow$.set(spinnerId);\n }\n\n startLoading(taskName: string, spinnerId: string = DEFAULT_SPINNER_ID) {\n this.spinnerToShow$.set(spinnerId);\n const tasks = new Set(this.spinnerTasks$());\n tasks.add(taskName);\n this.spinnerTasks$.set(tasks);\n }\n\n stopLoading(taskName: string) {\n let tasks = new Set(this.spinnerTasks$());\n tasks.delete(taskName);\n this.spinnerTasks$.set(tasks);\n if (tasks.size === 0) {\n this.spinnerToShow$.set(DEFAULT_SPINNER_ID);\n }\n }\n\n hideSpinner() {\n this.visibility$.set(false);\n this.spinnerToShow$.set(DEFAULT_SPINNER_ID);\n }\n\n setSpinnerText(text: string) {\n this.spinnerText.set(text);\n }\n}\n","import {\n Component,\n computed,\n effect,\n input,\n numberAttribute,\n Renderer2,\n signal,\n} from '@angular/core';\nimport { DEFAULT_SPINNER_ID, DmSpinnerService } from './dm-spinner.service';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n selector: 'dm-spinner',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './dm-spinner.html',\n styleUrl: './dm-spinner.scss',\n})\nexport class DmSpinner {\n protected readonly styleVariables: {\n [key: string]: {\n field: string;\n defaultValue?: string;\n };\n } = {\n color: { field: '--dm-spinner-color' },\n size: { field: '--dm-spinner-size' },\n shapeSize: { field: '--dm-spinner-shape-size' },\n speed: { field: '--dm-spinner-speed' },\n borderThikness: { field: '--dm-spinner-border-thikness' },\n position: { field: '--dm-spinner-position' },\n backgroundColor: { field: '--dm-spinner-background-color' },\n textColor: { field: '--dm-spinner-text-color' },\n fontSize: { field: '--dm-spinner-font-size' },\n textPosition: { field: '--dm-spinner-text-position' },\n _backgroundBlur: { field: '--dm-spinner-background-blur' },\n textPositionYOffset: { field: '--dm-spinner-text-position-y-offset' },\n };\n\n color = input('#1a4bd6');\n type = input<'rounded' | 'flower' | 'gif'>('rounded');\n gifSrc = input('https://media.tenor.com/I6kN-6X7nhAAAAAi/loading-buffering.gif');\n size = input<number>(40);\n shapeSize = input<number>(25);\n speed = input<number>(2);\n borderThikness = input<number>(5);\n position = input<'absolute' | 'relative' | 'fixed'>('absolute');\n backgroundColor = input<string>('');\n text = input<string>('טוען...');\n textColor = input<string>('#000000');\n fontSize = input<number>(20);\n textPosition = input<'center' | 'bottom'>('center');\n colors = input<string[]>(['#1a4bd6', '#000000']);\n backgroundBlur = input(5, { transform: numberAttribute });\n textPositionYOffset = input(0, { transform: numberAttribute });\n\n private _backgroundBlur = computed(() => {\n return `${this.backgroundBlur() || 0}px`;\n });\n\n name = input<string>(DEFAULT_SPINNER_ID);\n\n protected spinnerText = signal<string>('');\n\n constructor(protected _spinnerService: DmSpinnerService, private renderer: Renderer2) {\n this.runEffects();\n }\n\n runEffects() {\n effect(() => {\n const isVisible = this._spinnerService.visibility$();\n if (isVisible) {\n this.renderer.addClass(document.body, 'loading-active');\n } else {\n this.renderer.removeClass(document.body, 'loading-active');\n }\n });\n\n effect(() => {\n const text = this._spinnerService.spinnerText() || this.text();\n this.spinnerText.set(text);\n });\n\n effect(() => {\n for (const [key, value] of Object.entries(this.styleVariables)) {\n const fieldValue = (this as any)[key]();\n if (fieldValue === undefined || fieldValue === null) {\n if (value.defaultValue !== undefined) {\n document.documentElement.style.setProperty(value.field, value.defaultValue);\n }\n continue;\n }\n document.documentElement.style.setProperty(\n value.field,\n fieldValue ?? value.defaultValue ?? ''\n );\n }\n });\n }\n\n ngOnInit() {}\n\n ngOnDestroy() {}\n}\n","@if ( (_spinnerService.visibility$() && (_spinnerService.spinnerToShow$() == name())) ||\n(_spinnerService.spinnerTasks$().size > 0 && name() == 'dm-spinner')) {\n\n<div class=\"dm-spinner-wrapper\">\n <div class=\"dm-spinner-inner-wrapper\">\n @switch (type()) { @case ('flower') {\n <div class=\"dm-spinner-flower\"></div>\n } @case ('rounded') {\n <div class=\"dm-spinner-rounded\"></div>\n } @case ('gif') {\n <img class=\"dm-spinner-gif\" [src]=\"gifSrc()\" [width]=\"size()\" [height]=\"'auto'\" />\n } }\n <div class=\"dm-spinner-text\" [style.font-size.px]=\"fontSize()\">\n {{ spinnerText() }}\n </div>\n </div>\n</div>\n}\n","import { InputSignal, InputSignalWithTransform, TemplateRef, Type } from '@angular/core';\nimport { DmCmpsDataSource } from '../utils/dm-cmps-data-source';\nimport { MatSlideToggle, MatSlideToggleChange } from '@angular/material/slide-toggle';\n\nexport type DmTableNgClass = string | string[] | Set<string> | { [key: string]: any };\n\nexport interface DmCellContext<T extends object> {\n $implicit: T;\n row: T;\n column: DmTableColumn<T>;\n}\nexport type DmTableColumnType =\n | 'date'\n | 'component'\n | 'tel'\n | 'mail'\n | 'link'\n | 'whatsapp'\n | 'customHtml'\n | 'actions'\n | 'slideToggle'\n | 'input';\n\nexport type DmTableInputColumnType = 'text' | 'number' | 'select' | 'checkbox';\nexport interface DmTableInputCellSelectOption {\n label: string;\n value: any;\n}\n\nexport const shouldCacheColumn = <T extends object>(column: DmTableRuntimeColumn<T>): boolean => {\n return !!column.valueGetter || !!(column.type == 'date');\n};\n\nexport interface DmTableColumnState {\n id: string;\n visible: boolean;\n order: number;\n}\n\ninterface DmTableColumnBase<T extends object> {\n id?: string;\n field: keyof T;\n valueGetter?: (row: T) => any;\n dateFormat?: string;\n component?: Type<any>;\n valueSetter?: (row: T, payload: any) => void;\n customHtml?: string;\n customCellTemplate?: TemplateRef<any>;\n actionsButtons?: DmTableRowActionButton<T>[];\n sortable?: boolean;\n sortFn?: (a: T, b: T) => number;\n visible?: boolean;\n cellStyle?: { [key: string]: any } | ((row: T) => { [key: string]: any });\n headerStyle?:\n | { [key: string]: any }\n | ((datasource: DmCmpsDataSource<T>) => { [key: string]: any });\n cellContentStyle?: { [key: string]: any } | ((row: T) => { [key: string]: any });\n headerContentStyle?:\n | { [key: string]: any }\n | ((datasource: DmCmpsDataSource<T>) => { [key: string]: any });\n totalCellStyle?:\n | { [key: string]: any }\n | ((datasource: DmCmpsDataSource<T>) => { [key: string]: any });\n onCellClick?: (row: T, event: Event) => void;\n onCellDoubleClick?: (row: T, event: Event) => void;\n onCellContentClick?: (row: T, event: Event) => void;\n onCellContentDoubleClick?: (row: T, event: Event) => void;\n cellContextMenu?: (row: T, event: Event) => void;\n cellContentContextMenu?: (row: T, event: Event) => void;\n onHeaderClick?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n onHeaderDoubleClick?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n onHeaderContentClick?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n onHeaderContentDoubleClick?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n headerContextMenu?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n headerContentContextMenu?: (datasource: DmCmpsDataSource<T>, event: Event) => void;\n\n totalRowValueType?: 'string' | 'html';\n totalRowValueGetter?: (datasource: DmCmpsDataSource<T>) => any;\n\n inputType?: DmTableInputColumnType;\n inputValidator?: (row: T, value: any) => boolean;\n onInputValidatorFailed?: (row: T, value: any) => void;\n selectOptions?: DmTableInputCellSelectOption[];\n inputStyle?: { [key: string]: any } | ((row: T) => { [key: string]: any });\n\n headerMenuItems?: DmTableColumnHeaderMenuItem<T>[];\n headerMenuTooltip?: string;\n\n slideToggleTooltip?: string | ((row: T) => string);\n onSlideToggleChange?: (row: T, change: MatSlideToggleChange) => void;\n}\n\ntype DmTableIndexColumn<T extends object> = {\n type: '$index' | 'actions';\n header: string;\n} & Omit<DmTableColumnBase<T>, 'field'> & { field?: keyof T };\n\nexport type DmTableDataColumn<T extends object> = {\n type?: DmTableColumnType;\n header: string;\n} & DmTableColumnBase<T>;\n\nexport type DmTableColumn<T extends object> = DmTableIndexColumn<T> | DmTableDataColumn<T>;\n\nexport type DmTableRuntimeColumn<T extends object> = Omit<DmTableColumn<T>, 'id'> & {\n id: string;\n __cache?: WeakMap<T, any>;\n};\n\nexport interface DmTableColumnHeaderMenuItem<T extends object> {\n label: string;\n icon?: string;\n onClick?: (datasource: DmCmpsDataSource<T>, event: Event, closeParentMenus: () => void) => void;\n color?: string;\n backgroundColor?: string;\n helpText?: string;\n showIf?: (datasource: DmCmpsDataSource<T>) => boolean;\n children?: DmTableColumnHeaderMenuItem<T>[];\n}\n\nexport type DmTableRowActionButton<T extends object> =\n | {\n label: string;\n buttonType?: 'filled' | 'outlined' | 'tonal' | 'elevated' | 'text';\n icon?: string;\n tooltip?: string;\n backgroundColor?: string;\n color?: string;\n onClick?: (row: T, event: Event, closeParentMenus: () => void) => void;\n children?: DmTableRowActionButton<T>[];\n showIf?: (row: T) => boolean;\n }\n | {\n buttonType?: 'icon';\n icon?: string;\n tooltip?: string;\n backgroundColor?: string;\n color?: string;\n onClick?: (row: T, event: Event, closeParentMenus: () => void) => void;\n children?: DmTableRowActionButton<T>[];\n showIf?: (row: T) => boolean;\n };\n\nexport type DmTableActionButton<T extends object> =\n | {\n label: string;\n buttonType?: 'filled' | 'outlined' | 'tonal' | 'elevated' | 'text';\n icon?: string;\n tooltip?: string;\n backgroundColor?: string;\n color?: string;\n onClick?: (\n columns: DmTableColumn<T>[],\n datasource: DmCmpsDataSource<T>,\n event: Event,\n closeParentMenus: () => void\n ) => void;\n children?: DmTableActionButton<T>[];\n showIf?: (columns: DmTableColumn<T>[], datasource: DmCmpsDataSource<T>) => boolean;\n }\n | {\n buttonType?: 'icon';\n icon?: string;\n tooltip?: string;\n backgroundColor?: string;\n color?: string;\n onClick?: (\n columns: DmTableColumn<T>[],\n datasource: DmCmpsDataSource<T>,\n event: Event,\n closeParentMenus: () => void\n ) => void;\n children?: DmTableActionButton<T>[];\n showIf?: (columns: DmTableColumn<T>[], datasource: DmCmpsDataSource<T>) => boolean;\n };\n\nexport interface DmTablePaginatorSettings {\n pageSize?: number;\n pageSizeOptions?: number[];\n showFirstAndLastPagesButtons?: boolean;\n\n firstPageButtonLabel?: string;\n lastPageButtonLabel?: string;\n nextPageButtonLabel?: string;\n previousPageButtonLabel?: string;\n numberOfItemsPerPageLabel?: string;\n}\n\nexport interface DmTableStyle {\n tableWrapper?: { [key: string]: any };\n table?: {\n root?: { [key: string]: any };\n thead?: {\n root?: { [key: string]: any };\n tr?: { [key: string]: any };\n th?: { [key: string]: any };\n };\n tbody?: {\n root?: { [key: string]: any };\n tr?: { [key: string]: any };\n td?: { [key: string]: any };\n even_row_style?: { tr?: { [key: string]: any }; td?: { [key: string]: any } };\n odd_row_style?: { tr?: { [key: string]: any }; td?: { [key: string]: any } };\n hovered_row_style?: { tr?: { [key: string]: any }; td?: { [key: string]: any } };\n input?: { [key: string]: any };\n };\n tfoot?: {\n root?: { [key: string]: any };\n tr?: { [key: string]: any };\n td?: { [key: string]: any };\n };\n };\n total_row_style?: { [key: string]: any };\n paginator?: {\n root?: { [key: string]: any };\n p?: { [key: string]: any };\n mat_form_field?: { [key: string]: any };\n mat_select?: { [key: string]: any };\n mat_option?: { [key: string]: any };\n button?: { [key: string]: any };\n };\n scrollbar?: {\n width?: string;\n color?: string;\n hoverColor?: string;\n backgroundColor?: string;\n borderRadius?: string;\n };\n}\n\nexport interface DmTableClasses {\n tableWrapper?: DmTableNgClass;\n table?: {\n root?: DmTableNgClass;\n thead?: {\n root?: DmTableNgClass;\n tr?: DmTableNgClass;\n th?: DmTableNgClass;\n };\n tbody?: {\n root?: DmTableNgClass;\n tr?: DmTableNgClass;\n td?: DmTableNgClass;\n };\n tfoot?: {\n root?: DmTableNgClass;\n tr?: DmTableNgClass;\n td?: DmTableNgClass;\n };\n };\n paginator?: {\n root?: DmTableNgClass;\n p?: DmTableNgClass;\n mat_form_field?: DmTableNgClass;\n mat_select?: DmTableNgClass;\n mat_option?: DmTableNgClass;\n button?: DmTableNgClass;\n };\n}\n\nexport const DM_TABLE_HEADER_BACKGROUND_COLOR_CSS_VAR = '--dm-table-header-background-color';\nexport const DM_TABLE_HEADER_COLOR_CSS_VAR = '--dm-table-header-color';\nexport const DM_TABLE_SCROLLBAR_COLOR_CSS_VAR = '--dm-table-scrollbar-color';\nexport const DM_TABLE_SCROLLBAR_HOVER_COLOR_CSS_VAR = '--dm-table-scrollbar-hover-color';\nexport const DM_TABLE_SCROLLBAR_BACKGROUND_COLOR_CSS_VAR = '--dm-table-scrollbar-background-color';\nexport const DM_TABLE_SCROLLBAR_WIDTH_CSS_VAR = '--dm-table-scrollbar-width';\nexport const DM_TABLE_SCROLLBAR_BORDER_RADIUS_CSS_VAR = '--dm-table-scrollbar-border-radius';\n\nexport interface DmTableInterface<T extends object> {\n /**\n * Table id - An unique identifier for the table, used to store the table state in the localStorage.\n * @default undefined\n */\n tableId: InputSignal<string | undefined>;\n\n /**\n * Table data source - An array of objects that will be displayed in the table.\n * @required\n */\n dataSource: InputSignal<T[]>;\n\n /**\n * Table columns - An array of objects that define the columns of the table.\n * @required\n */\n columns: InputSignal<DmTableColumn<T>[]>;\n\n /**\n * No data message - The message to display when the table is empty.\n * @default 'אין נתונים להצגה'\n */\n noDataMessage: InputSignal<string>;\n\n /**\n * Enable search - Whether to enable search functionality.\n * @default false\n */\n enableSearch: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Search placeholder - The placeholder text to display in the search input.\n * @default 'חיפוש...'\n */\n searchPlaceholder: InputSignal<string>;\n\n /**\n * Clear search tooltip - The tooltip text to display when hovering over the clear search button.\n * @default 'נקה חיפוש'\n */\n clearSearchTooltip: InputSignal<string>;\n\n /**\n * Search input appearance - The appearance of the search input.\n * @default 'fill'\n */\n searchInputAppearance: InputSignal<'fill' | 'outline'>;\n\n /**\n * Filter predicate - A function that defines how to filter the table data.\n * when undefined, the default filter predicate will be used.\n * @default null\n */\n filterPredicate: InputSignal<((row: T, filterText: string) => boolean) | null>;\n\n /**\n * Action buttons - An array of objects that define the action buttons of the table.\n * - will be displayed on the left side above the table.\n * @default []\n */\n actionButtons: InputSignal<DmTableActionButton<T>[]>;\n\n /**\n * Enable pagination - Whether to enable pagination functionality.\n * @default false\n */\n enablePagination: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Auto pagination above rows count - The number of rows above which pagination will be enabled automatically.\n * @default 100\n */\n autoPaginationAboveRowsCount: InputSignalWithTransform<number, unknown>;\n\n /**\n * Paginator settings - An object that defines the paginator settings of the table.\n * @default null\n */\n paginatorSettings: InputSignal<DmTablePaginatorSettings>;\n\n /**\n * Enable loading progressbar - whether to enable loading progressbar.\n * @default true\n */\n enableLoadingProgressbar: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Enable columns drag and drop - whether to enable columns drag and drop, to change columns order.\n * @default false\n */\n enableColumnsDragAndDrop: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Enable columns drag handle - if true, a drag handle will be displayed on the left side of the column header.\n * @default false\n */\n enableColumnsDragHandle: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Enable total row - whether to enable total row.\n * @default false\n */\n enableTotalRow: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Table style - An object that defines the style of the table.\n * ```\n * @default {\n tableWrapper: {\n 'max-height': '800px',\n\n width: 'calc(100% - 10px)',\n display: 'block',\n 'overflow-x': 'auto',\n padding: '0 5px',\n },\n table: {\n root: {\n width: '100%',\n 'border-collapse': 'collapse',\n 'border-spacing': 0,\n 'box-shadow': '0px 5px 5px -3px #003, 0 8px 10px 1px #00000024, 0 3px 14px 2px #0000001f',\n padding: 0,\n 'font-size': '1rem',\n 'border-radius': '8px',\n 'page-break-inside': 'auto',\n },\n thead: {\n root: {\n 'background-color': '#f5f5f5',\n },\n th: {\n padding: '20px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n },\n },\n tbody: {\n hovered_row_style: {\n tr: {\n 'background-color': '#f5f5f5',\n },\n },\n even_row_style: {\n tr: {\n 'background-color': '#ffffff',\n },\n },\n odd_row_style: {\n tr: {\n 'background-color': '#fafafa',\n },\n },\n tr: {\n 'border-bottom': '1px solid #e0e0e0',\n 'page-break-inside': 'avoid',\n },\n td: {\n padding: '7px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n 'text-overflow': 'ellipsis',\n overflow: 'hidden',\n 'white-space': 'nowrap',\n },\n input: {\n background: 'white',\n border: '1px solid',\n 'border-radius': '3px',\n },\n },\n tfoot: {\n root: {\n 'background-color': '#f5f5f5',\n },\n td: {\n padding: '20px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n },\n },\n },\n paginator: {\n root: {\n 'background-color': '#f5f5f5',\n },\n p: {\n 'margin-bottom': '0',\n },\n },\n total_row_style: {},\n scrollbar: {},\n};\n```\n */\n tableStyle: InputSignal<DmTableStyle>;\n\n /**\n * Table classes - An object that defines the classes of the table.\n * @default undefined\n */\n tableClasses: InputSignal<DmTableClasses | undefined>;\n\n /**\n * Row style function - A function that defines the style of the rows of the table.\n * @default null\n */\n rowStyleFn: InputSignal<((row: T) => { [key: string]: any }) | null>;\n\n /**\n * Edit columns visibility - whether to enable edit columns visibility.\n * @default false\n */\n editColumnsVisibility: InputSignalWithTransform<boolean, unknown>;\n\n /**\n * Edit columns visibility button - The button to display when edit columns visibility is enabled.\n * @default null\n */\n editColumnsVisibilityButton: InputSignal<DmTableActionButton<T>>;\n\n /**\n * Edit columns visibility select all label - The label to display when select all is enabled.\n * @default 'הצג את כל העמודות'\n */\n editColumnsVisibilitySelectAllLabel: InputSignal<string>;\n\n /**\n * Get modified rows - A function that returns the modified rows of the table.\n * @returns {T[]} The modified rows of the table.\n */\n getModifiedRows: () => T[];\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, input, Type } from '@angular/core';\nimport { DmCellContext } from '../utils';\n\n@Component({\n selector: 'dm-table-cell-host',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './dm-table-cell-host.html',\n styleUrl: './dm-table-cell-host.scss',\n})\nexport class DmTableCellHost<T extends object> {\n component = input.required<Type<any>>();\n context = input.required<DmCellContext<T>>();\n}\n","<ng-container\n *ngComponentOutlet=\"\n component();\n inputs: {\n row: context().row,\n column: context().column,\n }\n \"\n></ng-container>\n","import { Injectable } from '@angular/core';\n\nexport type DmCmpsDateTypes =\n | any\n | Date\n | string\n | { _seconds: number; _nanoseconds: number }\n | { seconds: number; nanoseconds: number }\n | number\n | null;\n\nexport type DmCmpsDateFormats = 'dd/MM/yyyy' | 'yyyy/MM/dd' | 'dd/MM/yyyy HH:mm';\n\nexport type DmCmpsLangs = 'en' | 'he' | 'ar';\n\nexport const daysOfWeek: Record<DmCmpsLangs, string[]> = {\n en: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n he: ['ראשון', 'שני', 'שלישי', 'רביעי', 'חמישי', 'שישי', 'שבת'],\n ar: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n};\ndeclare global {\n interface Date {\n getWeekOfYear(): number;\n getWeekOfMonth(): number;\n getDayOfYear(): number;\n }\n}\n\nDate.prototype.getWeekOfYear = function (): number {\n const d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));\n const dayNum = d.getUTCDay() || 7;\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n return Math.ceil(((d.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\n};\n\nDate.prototype.getWeekOfMonth = function (): number {\n const firstDay = new Date(this.getFullYear(), this.getMonth(), 1).getDay();\n const day = this.getDate();\n return Math.ceil((day + firstDay) / 7);\n};\n\nDate.prototype.getDayOfYear = function (): number {\n const start = new Date(this.getFullYear(), 0, 0);\n const diff = this.getTime() - start.getTime();\n const oneDay = 1000 * 60 * 60 * 24;\n return Math.floor(diff / oneDay);\n};\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DmDateService {\n getDate(date: DmCmpsDateTypes): Date | null {\n if (!date) return null;\n if (date instanceof Date) return date;\n if (typeof date === 'string') {\n if (date == '') return null;\n return new Date(date) || null;\n }\n if ('seconds' in (date as any) && 'nanoseconds' in (date as any)) {\n return new Date((date as any).seconds * 1000);\n }\n if ('_seconds' in (date as any) && '_nanoseconds' in (date as any)) {\n return new Date((date as any)._seconds * 1000);\n }\n if (!isNaN(Number(date))) {\n return new Date(1900, 0, +date - 1);\n }\n return null;\n }\n\n /**\n *\n * @param date the date to transform\n * @param format the format of the date\n * @param lang the language of the date\n * @returns the date as a string\n *\n * @example\n * The format can be any string that contains the following:\n * - 'dd' - the day of the month\n * - 'MM' - the month\n * - 'yyyy' - the year\n * - 'yy' - the year (2 digits)\n * - 'HH' - the hour\n * - 'mm' - the minute\n * - 'ss' - the second\n * - 'SSS' - the millisecond\n * - 'DM_a' - the AM/PM\n * - 'DM_E' - the day of the week\n * - 'DM_Z' - the time zone\n * - 'DM_z' - the time zone offset\n * - 'DM_yw' - the week of the year\n * - 'DM_mw' - the week of the month\n * - 'DM_yd' - the day of the year\n */\n getDateString(\n date: DmCmpsDateTypes,\n format: DmCmpsDateFormats | string = 'dd/MM/yyyy',\n lang: DmCmpsLangs = 'he'\n ): string {\n if (!date) return '';\n const res = this.getDate(date) as Date;\n if (!res || !(res instanceof Date) || isNaN(res.getTime())) return '';\n // const day = res.getDate().toString().padStart(2, '0');\n // const month = (res.getMonth() + 1).toString().padStart(2, '0');\n // const year = res.getFullYear();\n // const hours = res.getHours().toString().padStart(2, '0');\n // const minutes = res.getMinutes().toString().padStart(2, '0');\n\n const replacements: Record<string, string> = {\n dd: res.getDate().toString().padStart(2, '0'),\n MM: (res.getMonth() + 1).toString().padStart(2, '0'),\n yyyy: res.getFullYear().toString(),\n yy: res.getFullYear().toString().slice(-2),\n HH: res.getHours().toString().padStart(2, '0'),\n mm: res.getMinutes().toString().padStart(2, '0'),\n SSS: res.getMilliseconds().toString().padStart(3, '0'),\n ss: res.getSeconds().toString().padStart(2, '0'),\n DD: daysOfWeek[lang][res.getDay()],\n DM_a: res.getHours() < 12 ? 'AM' : 'PM',\n DM_E: res.getDay().toString(),\n DM_Z: res.toTimeString().match(/\\(([^)]+)\\)/)?.[1] || '',\n DM_z: res.getTimezoneOffset().toString(),\n DM_yw: res.getWeekOfYear().toString(),\n DM_mw: res.getWeekOfMonth().toString(),\n DM_yd: res.getDayOfYear().toString(),\n };\n\n // Replace format placeholders with actual values\n return format.replace(\n /(dd|MM|yyyy|yy|HH|mm|SSS|ss|DD|DM_a|DM_E|DM_Z|DM_z|DM_yw|DM_mw|DM_yd)/g,\n (match) => replacements[match] || match\n );\n\n // if (format === 'dd/MM/yyyy') {\n // return `${day}/${month}/${year}`;\n // }\n // if (format === 'yyyy/MM/dd') {\n // return `${year}/${month}/${day}`;\n // }\n // return `${day}/${month}/${year} ${hours}:${minutes}`;\n }\n\n /**\n *\n * @param date the date to transform\n * @param format the format of the date\n * @param lang the language of the date\n * @returns the date as a string\n *\n * @example\n * The format can be any string that contains the following:\n * - 'dd' - the day of the month\n * - 'MM' - the month\n * - 'yyyy' - the year\n * - 'yy' - the year (2 digits)\n * - 'HH' - the hour\n * - 'mm' - the minute\n * - 'ss' - the second\n * - 'SSS' - the millisecond\n * - 'DM_a' - the AM/PM\n * - 'DM_E' - the day of the week\n * - 'DM_Z' - the time zone\n * - 'DM_z' - the time zone offset\n * - 'DM_yw' - the week of the year\n * - 'DM_mw' - the week of the month\n * - 'DM_yd' - the day of the year\n */\n static getDateString(\n date: DmCmpsDateTypes,\n format: DmCmpsDateFormats | string = 'dd/MM/yyyy',\n lang: DmCmpsLangs = 'he'\n ): string {\n if (!date) return '';\n const res = DmDateService.getDate(date) as Date;\n if (!res || !(res instanceof Date) || isNaN(res.getDate())) return '';\n\n const replacements: Record<string, string> = {\n dd: res.getDate().toString().padStart(2, '0'),\n MM: (res.getMonth() + 1).toString().padStart(2, '0'),\n yyyy: res.getFullYear().toString(),\n yy: res.getFullYear().toString().slice(-2),\n HH: res.getHours().toString().padStart(2, '0'),\n mm: res.getMinutes().toString().padStart(2, '0'),\n SSS: res.getMilliseconds().toString().padStart(3, '0'),\n ss: res.getSeconds().toString().padStart(2, '0'),\n DD: daysOfWeek[lang][res.getDay()],\n DM_a: res.getHours() < 12 ? 'AM' : 'PM',\n DM_E: res.getDay().toString(),\n DM_Z: res.toTimeString().match(/\\(([^)]+)\\)/)?.[1] || '',\n DM_z: res.getTimezoneOffset().toString(),\n DM_yw: res.getWeekOfYear().toString(),\n DM_mw: res.getWeekOfMonth().toString(),\n DM_yd: res.getDayOfYear().toString(),\n };\n\n // Replace format placeholders with actual values\n return format.replace(\n /(dd|MM|yyyy|yy|HH|mm|SSS|ss|DD|DM_a|DM_E|DM_Z|DM_z|DM_yw|DM_mw|DM_yd)/g,\n (match) => replacements[match] || match\n );\n\n // const day = res.getDate().toString().padStart(2, '0');\n // const month = (res.getMonth() + 1).toString().padStart(2, '0');\n // const year = res.getFullYear();\n // const hours = res.getHours().toString().padStart(2, '0');\n // const minutes = res.getMinutes().toString().padStart(2, '0');\n\n // if (format === 'dd/MM/yyyy') {\n // return `${day}/${month}/${year}`;\n // }\n // if (format === 'yyyy/MM/dd') {\n // return `${year}/${month}/${day}`;\n // }\n // return `${day}/${month}/${year} ${hours}:${minutes}`;\n }\n\n static getDate(date: DmCmpsDateTypes): Date | null {\n if (!date) return null;\n if (date instanceof Date) return date;\n if (typeof date === 'string') {\n if (date == '') return null;\n return new Date(date) || null;\n }\n if ('_seconds' in (date as any) && '_nanoseconds' in (date as any)) {\n return new Date((date as any)._seconds * 1000);\n }\n if ('seconds' in (date as any) && 'nanoseconds' in (date as any)) {\n return new Date((date as any).seconds * 1000);\n }\n if (!isNaN(Number(date))) {\n return new Date(1900, 0, +date - 1);\n }\n return null;\n }\n\n static getTimeString(date: DmCmpsDateTypes): string {\n if (!date) return '';\n const res = DmDateService.getDate(date) as Date;\n if (!res || !(res instanceof Date)) return '';\n return `${(res.getHours() < 10 ? '0' : '') + res.getHours()}:${\n (res.getMinutes() < 10 ? '0' : '') + res.getMinutes()\n }`;\n }\n\n static now(): Date {\n return new Date();\n }\n\n now(): Date {\n return new Date();\n }\n\n getAge(\n date: DmCmpsDateTypes,\n fixed: number | null = null,\n result: 'string' | 'number' = 'number'\n ): number | string {\n if (!date) return 0;\n const res = this.getDate(date) as Date;\n if (!res || !(res instanceof Date)) return 0;\n const today = new Date();\n let age = today.getFullYear() - res.getFullYear();\n let monthDiff = today.getMonth() - res.getMonth();\n\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < res.getDate())) {\n age--;\n monthDiff += 12;\n }\n const ageWithMonths = age + monthDiff / 12;\n\n if (result === 'string') {\n if (fixed || fixed === 0) {\n return ageWithMonths.toFixed(fixed);\n }\n return ageWithMonths;\n }\n if (fixed || fixed === 0) {\n return Number(ageWithMonths.toFixed(fixed));\n }\n return ageWithMonths;\n }\n\n static getAge(\n date: DmCmpsDateTypes,\n fixed: number | null = null,\n result: 'string' | 'number' = 'number'\n ): number | string {\n if (!date) return 0;\n const res = DmDateService.getDate(date) as Date;\n if (!res || !(res instanceof Date)) return 0;\n const today = new Date();\n let age = today.getFullYear() - res.getFullYear();\n let monthDiff = today.getMonth() - res.getMonth();\n\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < res.getDate())) {\n age--;\n monthDiff += 12;\n }\n const ageWithMonths = age + monthDiff / 12;\n\n if (result === 'string') {\n if (fixed || fixed === 0) {\n return ageWithMonths.toFixed(fixed);\n }\n return ageWithMonths;\n }\n if (fixed || fixed === 0) {\n return Number(ageWithMonths.toFixed(fixed));\n }\n return ageWithMonths;\n }\n}\n","import { DmTableActionButton, DmTablePaginatorSettings, DmTableStyle } from './utils';\n\nexport const DEFAULT_PAGINATOR_SETTINGS: DmTablePaginatorSettings = {\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n numberOfItemsPerPageLabel: 'מספר פריטים בדף',\n firstPageButtonLabel: 'דף ראשון',\n lastPageButtonLabel: 'דף אחרון',\n nextPageButtonLabel: 'הדף הבא',\n previousPageButtonLabel: 'הדף הקודם',\n showFirstAndLastPagesButtons: true,\n};\n\nexport const DEFAULT_TABLE_STYLE: DmTableStyle = {\n tableWrapper: {\n 'max-height': '800px',\n\n width: 'calc(100% - 10px)',\n display: 'block',\n 'overflow-x': 'auto',\n padding: '0 5px',\n },\n table: {\n root: {\n width: '100%',\n 'border-collapse': 'collapse',\n 'border-spacing': 0,\n 'box-shadow': '0px 5px 5px -3px #003, 0 8px 10px 1px #00000024, 0 3px 14px 2px #0000001f',\n padding: 0,\n 'font-size': '1rem',\n 'border-radius': '8px',\n 'page-break-inside': 'auto',\n },\n thead: {\n root: {\n 'background-color': '#f5f5f5',\n },\n th: {\n padding: '20px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n },\n },\n tbody: {\n hovered_row_style: {\n tr: {\n 'background-color': '#f5f5f5',\n },\n },\n even_row_style: {\n tr: {\n 'background-color': '#ffffff',\n },\n },\n odd_row_style: {\n tr: {\n 'background-color': '#fafafa',\n },\n },\n tr: {\n 'border-bottom': '1px solid #e0e0e0',\n 'page-break-inside': 'avoid',\n },\n td: {\n padding: '7px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n 'text-overflow': 'ellipsis',\n overflow: 'hidden',\n 'white-space': 'nowrap',\n },\n input: {\n background: 'white',\n border: '1px solid',\n 'border-radius': '3px',\n },\n },\n tfoot: {\n root: {\n 'background-color': '#f5f5f5',\n },\n td: {\n padding: '20px 15px',\n 'text-align': 'start',\n 'max-width': 'none',\n },\n },\n },\n paginator: {\n root: {\n 'background-color': '#f5f5f5',\n },\n p: {\n 'margin-bottom': '0',\n },\n },\n scrollbar: {\n width: '6px',\n },\n};\n\nexport const DEFAULT_PRINT_TABLE_BUTTON: DmTableActionButton<any> = {\n icon: 'print',\n buttonType: 'icon',\n tooltip: 'הדפס',\n color: '#5b81ffff',\n};\n\nexport const DM_TABLE_EDIT_COLUMNS_VISIBILITY_BUTTON: DmTableActionButton<any> = {\n icon: 'view_column',\n buttonType: 'icon',\n tooltip: 'ערוך תצוגה',\n color: '#6a6a6a',\n};\n","import { DmDateService } from '../services/dm-date.service';\nimport { DmTableDataColumn, DmTableRuntimeColumn } from './utils';\n\nexport const buildRow = <T extends object>(item: T, columns: DmTableRuntimeColumn<T>[]): T => {\n const result: T = { ...item } as T;\n\n const setValue = (field: keyof T, value: any) => {\n Object.defineProperty(result, field, {\n value: value,\n writable: false,\n enumerable: true,\n });\n };\n\n for (const col of columns) {\n if (col.type === '$index') continue;\n if (col.type == 'component') continue;\n if (!(col as any).field) continue;\n\n let value = result[(col as DmTableDataColumn<T>).field as keyof T];\n\n // handle valueGetter\n if (col.valueGetter) {\n value = col.valueGetter(result);\n } else {\n switch (col.type) {\n case 'date':\n if (col.dateFormat) {\n value = DmDateService.getDateString(value, col.dateFormat) as any;\n } else {\n value = DmDateService.getDateString(value) as any;\n }\n break;\n }\n }\n setValue((col as DmTableDataColumn<T>).field as keyof T, value);\n }\n return result;\n};\n\nfunction isPlainObject(value: any): value is Record<string, any> {\n return value !== null && typeof value === 'object' && !Array.isArray(value);\n}\n\nexport function deepMerge<T>(defaults: T, custom?: Partial<T>): T {\n if (!isPlainObject(defaults)) {\n return (custom as T) ?? defaults;\n }\n\n const result: any = { ...defaults };\n\n if (!custom) {\n return result;\n }\n\n for (const key of Object.keys(custom)) {\n const customValue = (custom as any)[key];\n const defaultValue = (defaults as any)[key];\n\n if (isPlainObject(defaultValue) && isPlainObject(customValue)) {\n result[key] = deepMerge(defaultValue, customValue);\n } else if (customValue !== undefined) {\n // custom wins on leaf\n result[key] = customValue;\n }\n }\n\n return result;\n}\n","import { DmTableColumnState } from './utils';\n\nexport class DmTableColumnStateStorage {\n private prefix = 'dm-table:columns';\n\n load(tableId: string): DmTableColumnState[] | null {\n const raw = localStorage.getItem(`${this.prefix}:${tableId}`);\n return raw ? JSON.parse(raw) : null;\n }\n\n save(tableId: string, state: DmTableColumnState[]): void {\n localStorage.setItem(`${this.prefix}:${tableId}`, JSON.stringify(state));\n }\n\n clear(tableId: string): void {\n localStorage.removeItem(`${this.prefix}:${tableId}`);\n }\n}\n","import { Directive, ElementRef, Input, OnChanges, Renderer2, SimpleChanges } from '@angular/core';\n\n@Directive({\n selector: '[dmImportantStyle]',\n standalone: true,\n})\nexport class DmImportantStyleDirective implements OnChanges {\n @Input('dmImportantStyle') styles!: { [key: string]: string };\n\n constructor(private el: ElementRef<HTMLElement>) {}\n\n ngOnChanges(): void {\n if (!this.styles) return;\n // reset styles\n\n this.el.nativeElement.style.cssText = '';\n\n Object.entries(this.styles).forEach(([key, value]) => {\n this.el.nativeElement.style.setProperty(key, value, 'important');\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, computed, input } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'dm-icon',\n imports: [MatIcon, CommonModule],\n standalone: true,\n templateUrl: './dm-icon.html',\n styleUrl: './dm-icon.scss',\n})\nexport class DmIcon {\n icon = input.required<string>();\n color = input<string>();\n size = input<string | number>();\n\n isBootstrapIcon = computed(() => this.icon().startsWith('<i'));\n sizeString = computed(() => {\n const size = this.size() || '24px';\n if (typeof size === 'number') {\n return `${size}px`;\n }\n return size;\n });\n\n constructor() {}\n}\n","<div\n [ngStyle]=\"{\n 'font-size': sizeString(),\n width: sizeString(),\n height: sizeString()\n }\"\n>\n @if(isBootstrapIcon()) {\n <span\n [innerHTML]=\"icon()\"\n [ngStyle]=\"{\n color: color(),\n 'font-size': sizeString(),\n width: sizeString(),\n height: sizeString()\n }\"\n ></span>\n } @else {\n <mat-icon\n [ngStyle]=\"{\n color: color(),\n 'font-size': sizeString(),\n width: sizeString(),\n height: sizeString()\n }\"\n >{{ icon() }}</mat-icon\n >\n }\n</div>\n","import {\n booleanAttribute,\n Component,\n computed,\n effect,\n HostListener,\n input,\n numberAttribute,\n signal,\n} from '@angular/core';\nimport { DmCmpsDataSource, DmCmpsDataSourceSort } from '../utils/dm-cmps-data-source';\nimport {\n DM_TABLE_HEADER_BACKGROUND_COLOR_CSS_VAR,\n DM_TABLE_HEADER_COLOR_CSS_VAR,\n DM_TABLE_SCROLLBAR_BACKGROUND_COLOR_CSS_VAR,\n DM_TABLE_SCROLLBAR_BORDER_RADIUS_CSS_VAR,\n DM_TABLE_SCROLLBAR_COLOR_CSS_VAR,\n DM_TABLE_SCROLLBAR_HOVER_COLOR_CSS_VAR,\n DM_TABLE_SCROLLBAR_WIDTH_CSS_VAR,\n DmCellContext,\n DmTableActionButton,\n DmTableClasses,\n DmTableColumn,\n DmTableColumnState,\n DmTableInputCellSelectOption,\n DmTableInterface,\n DmTableRuntimeColumn,\n DmTableStyle,\n shouldCacheColumn,\n} from './utils';\nimport { CommonModule } from '@angular/common';\nimport { DmTableCellHost } from './dm-table-cell-host/dm-table-cell-host';\nimport { DmDateService } from '../services/dm-date.service';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltip } from '@angular/material/tooltip';\nimport {\n DEFAULT_PAGINATOR_SETTINGS,\n DEFAULT_PRINT_TABLE_BUTTON,\n DEFAULT_TABLE_STYLE,\n DM_TABLE_EDIT_COLUMNS_VISIBILITY_BUTTON,\n} from './defaults';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatOptionSelectionChange } from '@angular/material/core';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { deepMerge } from './helpers';\nimport { DmTableColumnStateStorage } from './column-state';\nimport {\n CdkDrag,\n CdkDragDrop,\n CdkDropList,\n moveItemInArray,\n CdkDragHandle,\n} from '@angular/cdk/drag-drop';\nimport { MatCheckboxChange, MatCheckboxModule } from '@angular/material/checkbox';\nimport { DmImportantStyleDirective } from '../directives/dm-important-style-directive';\nimport { MatSlideToggleChange, MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { DmIcon } from '../dm-icon/dm-icon';\n\n@Component({\n selector: 'dm-table',\n imports: [\n DmImportantStyleDirective,\n MatProgressSpinnerModule,\n MatSlideToggleModule,\n MatProgressBarModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatCheckboxModule,\n MatSelectModule,\n DmTableCellHost,\n MatButtonModule,\n MatInputModule,\n MatMenuModule,\n CdkDragHandle,\n CommonModule,\n FormsModule,\n CdkDropList,\n A11yModule,\n MatTooltip,\n MatIcon,\n DmIcon,\n CdkDrag,\n ],\n templateUrl: './dm-table.html',\n styleUrl: './dm-table.scss',\n})\nexport class DmTable<T extends object> implements DmTableInterface<T> {\n protected shiftKeyPressed = signal(false);\n @HostListener('window:keydown.shift', ['$event'])\n protected onShiftKeyDown(event: Event) {\n this.shiftKeyPressed.set(true);\n }\n @HostListener('window:keyup.shift', ['$event'])\n protected onShiftKeyUp(event: Event) {\n this.shiftKeyPressed.set(false);\n }\n\n protected DEFAULT_PAGINATOR_SETTINGS = DEFAULT_PAGINATOR_SETTINGS;\n protected DEFAULT_TABLE_STYLE = DEFAULT_TABLE_STYLE;\n\n tableId = input<string>();\n\n dataSource = input.required<T[]>();\n columns = input.required<DmTableColumn<T>[]>();\n\n noDataMessage = input<string>('אין נתונים להצגה');\n\n enableSearch = input(false, { transform: booleanAttribute });\n searchPlaceholder = input<string>('חיפוש...');\n clearSearchTooltip = input<string>('נקה חיפוש');\n searchInputAppearance = input<'fill' | 'outline'>('fill');\n filterPredicate = input<((row: T, filterText: string) => boolean) | null>(null);\n private _filterPredicate: ((row: T, filterText: string) => boolean) | null = null;\n\n actionButtons = input<Array<DmTableActionButton<T>>>([]);\n\n enablePrint = input(false, { transform: booleanAttribute });\n printButton = input<DmTableActionButton<T>>(DEFAULT_PRINT_TABLE_BUTTON as DmTableActionButton<T>);\n\n enablePagination = input(false, { transform: booleanAttribute });\n autoPaginationAboveRowsCount = input(100, { transform: numberAttribute });\n paginatorSettings = input<any>(DEFAULT_PAGINATOR_SETTINGS);\n\n enableLoadingProgressbar = input(true, { transform: booleanAttribute });\n enableColumnsDragAndDrop = input(false, { transform: booleanAttribute });\n enableColumnsDragHandle = input(true, { transform: booleanAttribute });\n\n enableTotalRow = input(false, { transform: booleanAttribute });\n\n tableStyle = input<DmTableStyle>(DEFAULT_TABLE_STYLE);\n tableClasses = input<DmTableClasses>();\n\n rowStyleFn = input<((row: T) => { [key: string]: any }) | null>(null);\n\n editColumnsVisibility = input(false, { transform: booleanAttribute });\n editColumnsVisibilityButton = input<DmTableActionButton<T>>(\n DM_TABLE_EDIT_COLUMNS_VISIBILITY_BUTTON as DmTableActionButton<T>\n );\n editColumnsVisibilitySelectAllLabel = input<string>('הצג את כל העמודות');\n\n protected columnsSortState = signal<DmCmpsDataSourceSort[]>([]);\n\n protected mergedTableStyle = computed(() => {\n const defaults = { ...DEFAULT_TABLE_STYLE };\n const custom = this.tableStyle() || {};\n const newStyle = deepMerge<DmTableStyle>(defaults, custom);\n this.saveScrollbarStyle(newStyle);\n return newStyle;\n });\n\n private saveScrollbarStyle(mergedStyle: DmTableStyle) {\n const scrollbarColor =\n mergedStyle?.scrollbar?.['color'] ||\n mergedStyle?.table?.thead?.root?.['background-color'] ||\n '#949496';\n const scrollbarBackgroundColor =\n mergedStyle?.scrollbar?.['backgroundColor'] ||\n mergedStyle?.table?.tbody?.tr?.['background-color'] ||\n mergedStyle?.table?.tbody?.odd_row_style?.tr?.['background-color'] ||\n '#e0e0e0';\n const scrollbarHoverColor =\n mergedStyle?.scrollbar?.['hoverColor'] ||\n mergedStyle?.table?.thead?.root?.['background-color'] ||\n '#5f5f5f';\n const scrollbarWidth = mergedStyle?.scrollbar?.['width'] || '7px';\n const scrollbarBorderRadius = mergedStyle?.scrollbar?.['borderRadius'] || '4px';\n document.documentElement.style.setProperty(DM_TABLE_SCROLLBAR_COLOR_CSS_VAR, scrollbarColor);\n document.documentElement.style.setProperty(\n DM_TABLE_SCROLLBAR_BACKGROUND_COLOR_CSS_VAR,\n scrollbarBackgroundColor\n );\n document.documentElement.style.setProperty(\n DM_TABLE_SCROLLBAR_HOVER_COLOR_CSS_VAR,\n scrollbarHoverColor\n );\n document.documentElement.style.setProperty(DM_TABLE_SCROLLBAR_WIDTH_CSS_VAR, scrollbarWidth);\n document.documentElement.style.setProperty(\n DM_TABLE_SCROLLBAR_BORDER_RADIUS_CSS_VAR,\n scrollbarBorderRadius\n );\n }\n\n protected hoveredRowIndex = signal<number | null>(null);\n\n protected datasource = signal<DmCmpsDataSource<T>>(new DmCmpsDataSource<T>([]));\n protected readonly runtimeColumns = computed(() => {\n const cols = this.columns() ?? [];\n const normalized = this.normalizeColumns(cols);\n return this.reconcileColumns(normalized);\n });\n\n protected hoveredColumnHeaderIndex = signal<number | null>(null);\n\n private columnStateStorage = new DmTableColumnStateStorage();\n protected columnState = signal<DmTableColumnState[] | null>(null);\n\n protected readonly visibleRuntimeColumns = computed(() => {\n const cols = this.runtimeColumns();\n const state = this.columnState();\n\n if (!state || !state.length) {\n return cols;\n }\n\n const stateMap = new Map(state.map((s) => [s.id, s]));\n\n return cols\n .map((col, index) => ({\n col,\n state: stateMap.get(col.id!) ?? {\n id: col.id,\n visible: true,\n order: index,\n },\n }))\n .filter((x) => x.state.visible !== false)\n .sort((a, b) => a.state.order - b.state.order)\n .map((x) => x.col);\n });\n\n protected readonly visibleColumns = computed(() => {\n return this.visibleRuntimeColumns().map((col) => col as DmTableColumn<T>);\n });\n\n private prevColumns = new Map<string, DmTableRuntimeColumn<T>>();\n\n rowIdentifierField = input<keyof T>('_id' as keyof T);\n\n private modifiedRowsIds = signal<Set<string | number>>(new Set<string | number>());\n\n protected searchTerm = signal<string>('');\n\n protected readonly totalRowValues = computed(() => {\n const ds = this.datasource();\n const cols = this.runtimeColumns();\n const dataVersion = ds.resultVersion(); //this is to make sure we recompute when data changes.. do not remove\n\n const map = new Map<string, any>();\n\n for (const col of cols) {\n if (!col.totalRowValueGetter) continue;\n\n try {\n map.set(col.id, col.totalRowValueGetter(ds));\n } catch (e) {\n console.error(`Total row error for column ${col.id}`, e);\n map.set(col.id, null);\n }\n }\n\n return map;\n });\n\n protected readonly totalRowStyles = computed(() => {\n const ds = this.datasource();\n const cols = this.runtimeColumns();\n const dataVersion = ds.resultVersion(); //this is to make sure we recompute when data changes.. do not remove\n\n const map = new Map<string, Record<string, any>>();\n\n for (const col of cols) {\n if (!col.totalCellStyle) continue;\n const totalCellStyle =\n (typeof col.totalCellStyle === 'function' ? col.totalCellStyle(ds) : col.totalCellStyle) ||\n {};\n try {\n map.set(col.id, totalCellStyle);\n } catch (e) {\n console.error(`Total row style error for column ${col.id}`, e);\n map.set(col.id, {});\n }\n }\n\n return map;\n });\n\n constructor() {\n this.runEffects();\n }\n\n private runEffects() {\n effect(() => {\n const tableStyle = this.mergedTableStyle();\n document.documentElement.style.setProperty(\n DM_TABLE_HEADER_BACKGROUND_COLOR_CSS_VAR,\n this.mergedTableStyle().table?.thead?.root?.['background-color'] ??\n DM_TABLE_HEADER_BACKGROUND_COLOR_CSS_VAR\n );\n\n document.documentElement.style.setProperty(\n DM_TABLE_HEADER_COLOR_CSS_VAR,\n this.mergedTableStyle().table?.thead?.root?.['color'] ?? DM_TABLE_HEADER_COLOR_CSS_VAR\n );\n });\n\n effect(() => {\n const tableId = this.tableId();\n const cols = this.runtimeColumns();\n let stored: DmTableColumnState[] | null = null;\n if (tableId) {\n stored = this.columnStateStorage.load(tableId);\n }\n\n // sanitize stored state to remove any columns that no longer exist\n if (stored) {\n const colIds = new Set(cols.map((c) => c.id));\n stored = stored.filter((s) => colIds.has(s.id));\n }\n\n this.columnState.set(this.initColumnState(cols, stored));\n });\n\n effect(() => {\n const id = this.tableId();\n const state = this.columnState();\n\n if (!id || !state) return;\n\n this.columnStateStorage.save(id, state);\n });\n\n effect(() => {\n this._filterPredicate = this.filterPredicate();\n });\n\n effect(() => {\n const dataSource = this.dataSource();\n if (this._filterPredicate) {\n this.datasource().setFilterPredicate(this._filterPredicate);\n }\n if (this.enablePagination() || dataSource.length >= this.autoPaginationAboveRowsCount()) {\n this.datasource().applyPagination(\n this.paginatorSettings()?.pageSize || DEFAULT_PAGINATOR_SETTINGS.pageSize\n );\n } else {\n this.datasource().disablePagination();\n }\n this.datasource().setDatasource(dataSource);\n this.prevColumns.forEach((col) => delete col.__cache);\n });\n\n effect(() => {\n const cols = this.runtimeColumns();\n\n this.setFilterPredicate();\n });\n\n effect(() => {\n const sortState = this.columnsSortState();\n if (!sortState || !sortState.length) {\n this.datasource().resetSorting();\n } else {\n this.datasource().sortByFields(sortState);\n }\n });\n }\n\n private initColumnState(\n columns: DmTableRuntimeColumn<T>[],\n stored: DmTableColumnState[] | null\n ): DmTableColumnState[] {\n // 1. If user has saved state → use it\n if (stored && stored.length) {\n return stored;\n }\n\n // 2. Otherwise derive defaults from columns\n return columns.map((col, index) => ({\n id: col.id!,\n visible: col.visible ?? true,\n // width: col.width,\n order: index,\n }));\n }\n\n private normalizeColumns(cols: DmTableColumn<T>[]): DmTableRuntimeColumn<T>[] {\n return cols.map((col, index) => ({\n ...col,\n id: col.id || `dm_table_col_${(col as any).field ?? col.type}__${index}`,\n }));\n }\n\n private isSameColumnDefinition(a: DmTableRuntimeColumn<T>, b: DmTableRuntimeColumn<T>): boolean {\n return (\n a.field === b.field &&\n a.type === b.type &&\n a.valueGetter === b.valueGetter &&\n a.valueSetter === b.valueSetter &&\n a.dateFormat === b.dateFormat &&\n a.component === b.component\n );\n }\n\n // private diffColumns(prev: Map<string, DmTableRuntimeColumn<T>>, next: DmTableRuntimeColumn<T>[]) {\n // const added: DmTableRuntimeColumn<T>[] = [];\n // const removed: string[] = [];\n // const changed: DmTableRuntimeColumn<T>[] = [];\n\n // const nextMap = new Map(next.map((col) => [col.id, col]));\n\n // for (const [id, prevCol] of prev) {\n // const nextCol = nextMap.get(id);\n // if (!nextCol) {\n // removed.push(id);\n // } else {\n // if (!this.isSameColumnDefinition(prevCol, nextCol)) {\n // changed.push(nextCol);\n // }\n // }\n // }\n\n // for (const [id, nextCol] of nextMap) {\n // if (!prev.has(id)) {\n // added.push(nextCol);\n // }\n // }\n\n // return { added, removed, changed };\n // }\n\n private reconcileColumns(next: DmTableRuntimeColumn<T>[]): DmTableRuntimeColumn<T>[] {\n const result: DmTableRuntimeColumn<T>[] = [];\n\n for (const col of next) {\n const prevCol = this.prevColumns.get(col.id!);\n\n if (prevCol && this.isSameColumnDefinition(prevCol, col)) {\n result.push(prevCol);\n } else {\n result.push(col);\n }\n }\n\n this.prevColumns = new Map(result.map((c) => [c.id!, c]));\n\n return result;\n }\n\n private setFilterPredicate() {\n if (this._filterPredicate) return;\n this.datasource().setFilterPredicate((row: T, filter: string) => {\n const filterLower = filter.toLowerCase();\n for (const col of this.runtimeColumns()) {\n const cellValue = this.resolveCellValue(row, col);\n if (cellValue != null && cellValue.toString().toLowerCase().includes(filterLower)) {\n return true;\n }\n }\n return false;\n });\n }\n\n protected createCellContext = (row: T, column: DmTableRuntimeColumn<T>): DmCellContext<T> => ({\n $implicit: row,\n row,\n column: column as DmTableColumn<T>,\n });\n\n protected resetRowCache(row: T) {\n this.runtimeColumns().forEach((col) => {\n col.__cache?.delete(row);\n });\n }\n\n protected resolveCellValue<T extends object>(row: T, column: DmTableRuntimeColumn<T>): any {\n if (column.type === '$index') {\n return null;\n }\n\n if (!shouldCacheColumn(column)) {\n return (row as any)[column.field];\n }\n\n if (!column.__cache) {\n column.__cache = new WeakMap<T, any>();\n }\n\n const cached = column.__cache.get(row);\n if (cached !== undefined) {\n return cached;\n }\n\n let value: any;\n if (column.valueGetter) {\n value = column.valueGetter(row);\n } else {\n if (column.type === 'date') {\n if (column.dateFormat) {\n value = DmDateService.getDateString((row as any)[column.field], column.dateFormat);\n } else {\n value = DmDateService.getDateString((row as any)[column.field]);\n }\n } else {\n value = (row as any)[column.field];\n }\n }\n column.__cache.set(row, value);\n return value;\n }\n\n protected applySearchFilter(event: Event) {\n const input = event.target as HTMLInputElement;\n const filterValue = input.value.trim().toLowerCase();\n this.datasource().search(filterValue);\n }\n\n protected resetSearch() {\n this.searchTerm.set('');\n this.datasource().search('');\n }\n\n printTable = () => {\n const resultData = this.datasource().getResultData();\n };\n\n protected onPageSizeChange(event: MatOptionSelectionChange, option: number) {\n if (event.isUserInput) {\n this.datasource().setPageSize(option);\n }\n }\n\n protected getFooterTdStyle(column: DmTableRuntimeColumn<T>) {\n const totalCellStyle = this.totalRowStyles().get(column.id) || {};\n\n const generalStyle =\n this.mergedTableStyle().table?.tfoot?.td || DEFAULT_TABLE_STYLE.table?.tfoot?.td || {};\n\n return {\n ...generalStyle,\n ...totalCellStyle,\n };\n }\n\n protected getHeaderThStyle(column: DmTableRuntimeColumn<T>) {\n const headerStyle =\n typeof column.headerStyle === 'function'\n ? column.headerStyle(this.datasource())\n : column.headerStyle || {};\n\n const generalStyle =\n this.mergedTableStyle().table?.thead?.th || DEFAULT_TABLE_STYLE.table?.thead?.th || {};\n\n return {\n ...generalStyle,\n ...headerStyle,\n };\n }\n\n protected getHeaderThContentStyle(column: DmTableRuntimeColumn<T>) {\n const headerContentStyle =\n typeof column.headerContentStyle === 'function'\n ? column.headerContentStyle(this.datasource())\n : column.headerContentStyle || {};\n\n return {\n ...headerContentStyle,\n };\n }\n\n protected getBodyTdStyle(\n i: number,\n column: DmTableRuntimeColumn<T>,\n row: T\n ): Record<string, any> {\n const baseStyle =\n i % 2 === 0\n ? this.mergedTableStyle().table?.tbody?.even_row_style?.td ?? {}\n : this.mergedTableStyle().table?.tbody?.odd_row_style?.td ?? {};\n\n const rowHoverStyle =\n this.hoveredRowIndex() === i\n ? this.mergedTableStyle().table?.tbody?.hovered_row_style?.tr ?? {}\n : {};\n\n const tdHoverStyle =\n this.hoveredRowIndex() === i\n ? this.mergedTableStyle().table?.tbody?.hovered_row_style?.td ?? {}\n : {};\n\n const generalCellStyle = this.mergedTableStyle().table?.tbody?.td ?? {};\n\n const columnCellStyle =\n typeof column.cellStyle === 'function' ? column.cellStyle(row) : column.cellStyle || {};\n\n return {\n ...generalCellStyle,\n ...baseStyle,\n ...columnCellStyle,\n ...rowHoverStyle,\n ...tdHoverStyle,\n };\n }\n\n protected getBodyTdContentStyle(\n i: number,\n column: DmTableRuntimeColumn<T>,\n row: T\n ): Record<string, any> {\n const columnCellContentStyle =\n typeof column.cellContentStyle === 'function'\n ? column.cellContentStyle(row)\n : column.cellContentStyle || {};\n\n return {\n ...columnCellContentStyle,\n };\n }\n\n protected getBodyRowStyle(i: number, row: T): Record<string, any> {\n const baseStyle =\n i % 2 === 0\n ? this.mergedTableStyle().table?.tbody?.even_row_style?.tr ?? {}\n : this.mergedTableStyle().table?.tbody?.odd_row_style?.tr ?? {};\n\n const hoverStyle =\n this.hoveredRowIndex() === i\n ? this.mergedTableStyle().table?.tbody?.hovered_row_style?.tr ?? {}\n : {};\n\n const generalRowStyle = this.mergedTableStyle().table?.tbody?.tr ?? {};\n\n const rowStyleFn = this.rowStyleFn();\n const rowStyleFromFn = rowStyleFn ? rowStyleFn(row) : {};\n\n return {\n ...generalRowStyle,\n ...baseStyle,\n ...rowStyleFromFn,\n ...hoverStyle,\n };\n }\n\n protected getInputStyle(column: DmTableRuntimeColumn<T>): Record<string, any> {\n const inputStyle = this.mergedTableStyle().table?.tbody?.input || {};\n\n const colInputStyle =\n typeof column.inputStyle === 'function'\n ? column.inputStyle(null as any)\n : column.inputStyle || {};\n\n return {\n ...inputStyle,\n ...colInputStyle,\n };\n }\n\n protected headerClickHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const onHeaderClick = column.onHeaderClick;\n if (onHeaderClick && typeof onHeaderClick === 'function') {\n onHeaderClick(this.datasource(), event);\n } else {\n this.columnHeaderSortClickHandler(column, event);\n }\n }\n\n protected headerDoubleClickHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const onHeaderDoubleClick = column.onHeaderDoubleClick;\n if (onHeaderDoubleClick && typeof onHeaderDoubleClick === 'function') {\n onHeaderDoubleClick(this.datasource(), event);\n }\n }\n\n protected headerContextMenuHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const headerContextMenu = column.headerContextMenu;\n if (headerContextMenu && typeof headerContextMenu === 'function') {\n headerContextMenu(this.datasource(), event);\n }\n }\n\n protected headerContentClickHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const onHeaderContentClick = column.onHeaderContentClick;\n if (onHeaderContentClick && typeof onHeaderContentClick === 'function') {\n onHeaderContentClick(this.datasource(), event);\n } else {\n if (column.onHeaderClick && typeof column.onHeaderClick === 'function') {\n return;\n }\n this.columnHeaderSortClickHandler(column, event);\n }\n }\n\n protected headerContentDoubleClickHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const onHeaderContentDoubleClick = column.onHeaderContentDoubleClick;\n if (onHeaderContentDoubleClick && typeof onHeaderContentDoubleClick === 'function') {\n onHeaderContentDoubleClick(this.datasource(), event);\n }\n }\n\n protected headerContentContextMenuHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n const headerContentContextMenu = column.headerContentContextMenu;\n if (headerContentContextMenu && typeof headerContentContextMenu === 'function') {\n headerContentContextMenu(this.datasource(), event);\n }\n }\n\n protected cellClickHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const onCellClick = column.onCellClick;\n if (onCellClick && typeof onCellClick === 'function') {\n onCellClick(row, event);\n }\n }\n\n protected cellDoubleClickHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const onCellDoubleClick = column.onCellDoubleClick;\n if (onCellDoubleClick && typeof onCellDoubleClick === 'function') {\n onCellDoubleClick(row, event);\n }\n }\n\n protected cellContextMenuHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const cellContextMenu = column.cellContextMenu;\n if (cellContextMenu && typeof cellContextMenu === 'function') {\n cellContextMenu(row, event);\n }\n }\n\n protected cellContentClickHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const onCellContentClick = column.onCellContentClick;\n if (onCellContentClick && typeof onCellContentClick === 'function') {\n onCellContentClick(row, event);\n }\n }\n\n protected cellContentDoubleClickHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const onCellContentDoubleClick = column.onCellContentDoubleClick;\n if (onCellContentDoubleClick && typeof onCellContentDoubleClick === 'function') {\n onCellContentDoubleClick(row, event);\n }\n }\n\n protected cellContentContextMenuHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const cellContentContextMenu = column.cellContentContextMenu;\n if (cellContentContextMenu && typeof cellContentContextMenu === 'function') {\n cellContentContextMenu(row, event);\n }\n }\n\n protected getCloseParentMenusFn = (rootTrigger: MatMenuTrigger): (() => void) => {\n return () => {\n rootTrigger.closeMenu();\n };\n };\n\n protected onColumnDrop(event: CdkDragDrop<DmTableRuntimeColumn<T>[]>) {\n const visible = [...event.container.data]; // copy!\n moveItemInArray(visible, event.previousIndex, event.currentIndex);\n\n const state = [...(this.columnState() ?? [])];\n const stateMap = new Map(state.map((s) => [s.id, s]));\n\n // Rewrite order based on the NEW visible order\n visible.forEach((col, index) => {\n const s = stateMap.get(col.id!);\n if (s) {\n s.order = index;\n }\n });\n\n this.columnState.set(state);\n }\n\n protected isAllColumnsVisible(): boolean {\n const state = this.columnState();\n if (!state) return true;\n\n return state.every((s) => s.visible !== false);\n }\n\n protected toggleAllColumnsVisibility(event: MatCheckboxChange) {\n const state = [...(this.columnState() ?? [])];\n if (!state) return;\n\n state.forEach((s) => {\n s.visible = event.checked;\n });\n this.columnState.set(state);\n }\n\n protected isColumnVisible(column: DmTableRuntimeColumn<T>): boolean {\n const state = this.columnState();\n if (!state) return true;\n\n const colState = state.find((s) => s.id === column.id);\n if (!colState) return true;\n\n return colState.visible !== false;\n }\n\n protected toggleColumnVisibility(event: MatCheckboxChange, column: DmTableRuntimeColumn<T>) {\n const state = [...(this.columnState() ?? [])];\n if (!state) return;\n\n const colState = state.find((s) => s.id === column.id);\n if (!colState) {\n console.warn('Column state not found for column:', column);\n const cols = this.runtimeColumns();\n this.columnState.set(this.initColumnState(cols, null));\n return;\n }\n\n colState.visible = event.checked;\n this.columnState.set(state);\n }\n\n protected isColumnSorted(\n column: DmTableRuntimeColumn<T>\n ): (DmCmpsDataSourceSort & { index: number }) | null {\n const sortState = this.columnsSortState();\n let matchedIndex = -1;\n const sort = sortState.find((s, index) => {\n const match = s.id === column.id;\n if (match) {\n matchedIndex = index;\n }\n return match;\n });\n return sort ? { ...sort, index: matchedIndex } : null;\n }\n\n protected columnHeaderSortClickHandler(column: DmTableRuntimeColumn<T>, event: Event) {\n if (!column.sortable) return;\n event.stopPropagation();\n event.preventDefault();\n let sortState = [...this.columnsSortState()];\n const existingSortIndex = sortState.findIndex((s) => s.id === column.id);\n\n if (existingSortIndex >= 0) {\n if (this.shiftKeyPressed()) {\n if (sortState[existingSortIndex].direction === 'asc') {\n const newSort: DmCmpsDataSourceSort = {\n ...sortState[existingSortIndex],\n direction: 'desc',\n };\n sortState[existingSortIndex] = newSort;\n } else {\n const newSort: DmCmpsDataSourceSort = {\n ...sortState[existingSortIndex],\n direction: 'asc',\n };\n sortState[existingSortIndex] = newSort;\n }\n } else {\n if (sortState[existingSortIndex].direction === 'asc') {\n const newSort: DmCmpsDataSourceSort = {\n ...sortState[existingSortIndex],\n direction: 'desc',\n };\n sortState[existingSortIndex] = newSort;\n } else {\n sortState.splice(existingSortIndex, 1);\n }\n }\n } else {\n const sort: DmCmpsDataSourceSort = {\n id: column.id,\n field: column.field as string,\n direction: 'asc',\n };\n if (column.sortFn) {\n sort.sortFn = column.sortFn;\n }\n if (this.shiftKeyPressed()) {\n sortState.push(sort);\n } else {\n sortState = [sort];\n }\n }\n this.columnsSortState.set(sortState);\n }\n\n private markRowAsModified(row: T) {\n const identifierField = this.rowIdentifierField();\n const rowId = (row as any)[identifierField];\n if (rowId == null || rowId === '' || rowId === undefined) return;\n this.modifiedRowsIds.update((set) => {\n const next = new Set(set);\n next.add(rowId);\n return next;\n });\n }\n\n public getModifiedRows(): T[] {\n const identifierField = this.rowIdentifierField();\n const modifiedIds = this.modifiedRowsIds();\n const allData = this.datasource().getDatasource();\n\n return allData.filter((row) => {\n const rowId = (row as any)[identifierField];\n return modifiedIds.has(rowId);\n });\n }\n\n protected inputCellSelectOptionChangeHandler(\n row: T,\n column: DmTableRuntimeColumn<T>,\n option: DmTableInputCellSelectOption,\n event: MatOptionSelectionChange\n ) {\n if (!event.isUserInput) return;\n const valueSetter = column.valueSetter;\n const validator = column.inputValidator;\n if (validator && typeof validator === 'function') {\n const isValid = validator(row, option.value);\n if (!isValid) {\n const onFaild = column.onInputValidatorFailed;\n if (onFaild && typeof onFaild === 'function') {\n onFaild(row, option.value);\n }\n console.warn('Input value is not valid:', option.value);\n return;\n }\n }\n if (valueSetter && typeof valueSetter === 'function') {\n valueSetter(row, option.value);\n } else {\n (row as any)[column.field] = option.value;\n }\n this.resetRowCache(row);\n this.markRowAsModified(row);\n }\n\n protected inputCellChangeHandler(row: T, column: DmTableRuntimeColumn<T>, event: Event) {\n const input = event.target as HTMLInputElement;\n const newValue = input.value;\n const valueSetter = column.valueSetter;\n const validator = column.inputValidator;\n if (validator && typeof validator === 'function') {\n const isValid = validator(row, newValue);\n if (!isValid) {\n const onFaild = column.onInputValidatorFailed;\n if (onFaild && typeof onFaild === 'function') {\n onFaild(row, newValue);\n }\n console.warn('Input value is not valid:', newValue);\n input.value = this.resolveCellValue(row, column) ?? '';\n return;\n }\n }\n if (valueSetter && typeof valueSetter === 'function') {\n valueSetter(row, newValue);\n } else {\n (row as any)[column.field] = newValue;\n }\n this.resetRowCache(row);\n this.markRowAsModified(row);\n }\n\n protected inputCellCheckboxChangeHandler(\n row: T,\n column: DmTableRuntimeColumn<T>,\n event: MatCheckboxChange\n ) {\n const newValue = event.checked;\n const valueSetter = column.valueSetter;\n const validator = column.inputValidator;\n if (validator && typeof validator === 'function') {\n const isValid = validator(row, newValue);\n if (!isValid) {\n const onFaild = column.onInputValidatorFailed;\n if (onFaild && typeof onFaild === 'function') {\n onFaild(row, newValue);\n }\n event.source.toggle();\n console.warn('Input value is not valid:', newValue);\n return;\n }\n }\n if (valueSetter && typeof valueSetter === 'function') {\n valueSetter(row, newValue);\n } else {\n (row as any)[column.field] = newValue;\n }\n this.resetRowCache(row);\n this.markRowAsModified(row);\n }\n\n protected getSlideToggleTooltip(row: T, column: DmTableRuntimeColumn<T>): string {\n const tooltip = column.slideToggleTooltip;\n if (tooltip && typeof tooltip === 'function') {\n return tooltip(row);\n }\n return tooltip || '';\n }\n\n protected onSlideToggleChange(\n row: T,\n column: DmTableRuntimeColumn<T>,\n change: MatSlideToggleChange\n ) {\n const newValue = change.checked;\n const valueSetter = column.valueSetter;\n const validator = column.inputValidator;\n if (validator && typeof validator === 'function') {\n const isValid = validator(row, newValue);\n if (!isValid) {\n const onFaild = column.onInputValidatorFailed;\n if (onFaild && typeof onFaild === 'function') {\n onFaild(row, newValue);\n }\n change.source.toggle();\n console.warn('Input value is not valid:', newValue);\n return;\n }\n }\n if (valueSetter && typeof valueSetter === 'function') {\n valueSetter(row, newValue);\n } else {\n (row as any)[column.field] = newValue;\n }\n if (column.onSlideToggleChange && typeof column.onSlideToggleChange === 'function') {\n column.onSlideToggleChange(row, change);\n }\n this.resetRowCache(row);\n this.markRowAsModified(row);\n }\n}\n","<div id=\"dm-table-component-wrapper\">\n <div class=\"dm-table-top-section\">\n @if (enableSearch()) {\n <mat-form-field [appearance]=\"searchInputAppearance()\" class=\"dm-table-search-form-field\">\n <input\n matInput\n [placeholder]=\"searchPlaceholder()\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keyup)=\"datasource().search($event.target.value)\"\n />\n @if (searchTerm()) {\n <button\n matSuffix\n mat-icon-button\n [matTooltip]=\"clearSearchTooltip()\"\n aria-label=\"Clear\"\n (click)=\"resetSearch()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n } @if (editColumnsVisibility() && editColumnsVisibilityButton()) {\n <ng-container\n *ngTemplateOutlet=\"\n editcolumnVisibilityMenuTrigger;\n context: { $implicit: editColumnsVisibilityButton() }\n \"\n ></ng-container>\n }\n <div class=\"spacer\"></div>\n @if (enablePrint()) {\n <ng-container\n *ngTemplateOutlet=\"\n dmTableActionButton;\n context: { $implicit: printButton(), defaultAction: printTable }\n \"\n ></ng-container>\n } @for (button of actionButtons(); track $index) { @if (!button.showIf ||\n button.showIf(visibleColumns(), datasource())) {\n <ng-container\n *ngTemplateOutlet=\"dmTableActionButton; context: { $implicit: button }\"\n ></ng-container>\n } }\n </div>\n <div\n [ngClass]=\"tableClasses()?.tableWrapper || {}\"\n [ngStyle]=\"mergedTableStyle().tableWrapper || DEFAULT_TABLE_STYLE.tableWrapper || {}\"\n cdkScrollable\n >\n <table\n [ngStyle]=\"\n !tableClasses()?.table?.root\n ? mergedTableStyle().table?.root || DEFAULT_TABLE_STYLE.table?.root || {}\n : {}\n \"\n [ngClass]=\"tableClasses()?.table?.root || {}\"\n >\n <thead\n style=\"\n position: sticky !important;\n top: 0 !important;\n z-index: 10 !important;\n box-shadow: 0px 2px 2px 0px #0000006e;\n \"\n [ngStyle]=\"\n !tableClasses()?.table?.thead?.root\n ? mergedTableStyle().table?.thead?.root || DEFAULT_TABLE_STYLE.table?.thead?.root || {}\n : {}\n \"\n [ngClass]=\"tableClasses()?.table?.thead?.root || {}\"\n >\n @if (enableLoadingProgressbar()) {\n <tr style=\"height: 4px !important; max-height: 4px !important; line-height: 4px !important\">\n <th [attr.colspan]=\"visibleRuntimeColumns().length\" style=\"padding: 0 !important\">\n @if (datasource().isLoading()) {\n <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar>\n }\n </th>\n </tr>\n }\n <tr\n [ngStyle]=\"\n !tableClasses()?.table?.thead?.tr\n ? mergedTableStyle().table?.thead?.tr || DEFAULT_TABLE_STYLE.table?.thead?.tr || {}\n : {}\n \"\n [ngClass]=\"tableClasses()?.table?.thead?.tr || {}\"\n cdkDropList\n [cdkDropListData]=\"visibleRuntimeColumns()\"\n [cdkDropListOrientation]=\"'horizontal'\"\n (cdkDropListDropped)=\"onColumnDrop($event)\"\n [cdkDropListAutoScrollStep]=\"20\"\n >\n @for (column of visibleRuntimeColumns(); let j = $index; track column.id) {\n <th\n cdkDrag\n [cdkDragDisabled]=\"!enableColumnsDragAndDrop()\"\n [ngStyle]=\"getHeaderThStyle(column)\"\n [ngClass]=\"tableClasses()?.table?.thead?.th || {}\"\n (mouseenter)=\"hoveredColumnHeaderIndex.set(j)\"\n (mouseleave)=\"hoveredColumnHeaderIndex.set(null)\"\n (click)=\"headerClickHandler(column, $event)\"\n (dblclick)=\"headerDoubleClickHandler(column, $event)\"\n (contextmenu)=\"headerContextMenuHandler(column, $event)\"\n >\n <div\n class=\"inner-header-cell\"\n [dmImportantStyle]=\"getHeaderThContentStyle(column)\"\n (click)=\"headerContentClickHandler(column, $event)\"\n (dblclick)=\"headerContentDoubleClickHandler(column, $event)\"\n (contextmenu)=\"headerContentContextMenuHandler(column, $event)\"\n >\n <span>\n {{ column.header }}\n </span>\n @if (column.sortable) {\n <span\n (click)=\"columnHeaderSortClickHandler(column, $event)\"\n style=\"display: flex; align-items: center\"\n >\n @if (isColumnSorted(column); as sort) {\n <mat-icon style=\"width: 20px; height: 20px; font-size: 20px\">{{\n sort.direction === 'asc' ? 'arrow_upward' : 'arrow_downward'\n }}</mat-icon>\n @if(columnsSortState().length > 1) { [{{ sort.index + 1 }}] } } @else if\n (hoveredColumnHeaderIndex() == j){\n <mat-icon style=\"opacity: 0.3; width: 20px; height: 20px; font-size: 20px\"\n >arrow_upward</mat-icon\n >\n }\n </span>\n } @if (enableColumnsDragHandle() && enableColumnsDragAndDrop()) {\n\n <div class=\"spacer\"></div>\n <span>\n <ng-container\n *ngTemplateOutlet=\"dmTableHeaderMenuTrigger; context: { $implicit: column }\"\n />\n </span>\n <mat-icon style=\"cursor: move; font-size: 20px\" cdkDragHandle\n >drag_indicator</mat-icon\n >\n }\n </div>\n </th>\n }\n </tr>\n </thead>\n <tbody\n [dmImportantStyle]=\"\n !tableClasses()?.table?.tbody?.root\n ? mergedTableStyle().table?.tbody?.root || DEFAULT_TABLE_STYLE.table?.tbody?.root || {}\n : {}\n \"\n [ngClass]=\"tableClasses()?.table?.tbody?.root || {}\"\n >\n @for (row of datasource().result(); let i = $index; track row[rowIdentifierField()]) {\n <tr\n [dmImportantStyle]=\"getBodyRowStyle(i, row)\"\n (mouseenter)=\"hoveredRowIndex.set(i)\"\n (mouseleave)=\"hoveredRowIndex.set(null)\"\n >\n @for (column of visibleRuntimeColumns(); let j = $index; track j) {\n <td\n [dmImportantStyle]=\"getBodyTdStyle(i, column, row)\"\n (click)=\"cellClickHandler(row, column, $event)\"\n (contextmenu)=\"cellContextMenuHandler(row, column, $event)\"\n (dblclick)=\"cellDoubleClickHandler(row, column, $event)\"\n >\n <span\n [dmImportantStyle]=\"getBodyTdContentStyle(i, column, row)\"\n (click)=\"cellContentClickHandler(row, column, $event)\"\n (contextmenu)=\"cellContentContextMenuHandler(row, column, $event)\"\n (dblclick)=\"cellContentDoubleClickHandler(row, column, $event)\"\n >\n @switch (column.type) { @case ('$index') {\n {{ datasource().getFirstItemIndexInPage() + i + 1 }}\n } @case ('component') { @if (column.component) {\n <dm-table-cell-host\n [component]=\"column.component\"\n [context]=\"createCellContext(row, column)\"\n ></dm-table-cell-host>\n } } @case ('tel') {\n <a [href]=\"'tel:' + (column.field ? $any(row)[column.field] : '')\">{{\n resolveCellValue(row, column)\n }}</a>\n } @case ('mail') {\n <a [href]=\"'mailto:' + (column.field ? $any(row)[column.field] : '')\">{{\n resolveCellValue(row, column)\n }}</a>\n } @case ('link') {\n <a\n [href]=\"column.field ? $any(row)[column.field] : ''\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >{{ resolveCellValue(row, column) }}</a\n >\n } @case ('whatsapp') {\n <a\n [href]=\"'https://wa.me/' + (column.field ? $any(row)[column.field] : '')\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >{{ resolveCellValue(row, column) }}</a\n >\n } @case ('customHtml') { @if (column.customHtml) {\n <span [innerHTML]=\"column.customHtml\"></span>\n } @else if (column.customCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.customCellTemplate;\n context: createCellContext(row, column)\n \"\n >\n </ng-container>\n } } @case ('actions') {\n <span style=\"display: flex; align-items: center\">\n @for (button of column.actionsButtons || []; track $index) { @if(!button.showIf ||\n button.showIf(row)) {\n <ng-container\n *ngTemplateOutlet=\"\n dmTableRowActionButton;\n context: {\n $implicit: button,\n row\n }\n \"\n ></ng-container>\n } }\n </span>\n } @case('slideToggle') {\n <mat-slide-toggle\n [id]=\"'slideToggle_' + i + '_' + column.id\"\n [checked]=\"row[column.field!]\"\n [matTooltip]=\"getSlideToggleTooltip(row, column)\"\n (change)=\"onSlideToggleChange(row, column, $event)\"\n >\n <!-- {{ row[column.field!] }} -->\n {{ resolveCellValue(row, column) }}\n </mat-slide-toggle>\n } @case ('input') {\n <ng-container\n *ngTemplateOutlet=\"\n dmTableInputCell;\n context: {\n $implicit: row,\n column: column\n }\n \"\n />\n } @default {\n {{ resolveCellValue(row, column) }}\n } }\n </span>\n </td>\n }\n </tr>\n }\n </tbody>\n @if (enableTotalRow() && datasource().result().length > 0) {\n <tfoot\n style=\"\n position: sticky !important;\n bottom: 0 !important;\n z-index: 10 !important;\n box-shadow: 0px -2px 2px 0px #0000006e;\n \"\n [ngStyle]=\"\n !tableClasses()?.table?.tfoot?.root\n ? mergedTableStyle().table?.tfoot?.root || DEFAULT_TABLE_STYLE.table?.tfoot?.root || {}\n : {}\n \"\n [ngClass]=\"tableClasses()?.table?.tfoot?.root || {}\"\n >\n <tr>\n @for (column of visibleRuntimeColumns(); let j = $index; track column.id) {\n <td\n [ngStyle]=\"getFooterTdStyle(column)\"\n [ngClass]=\"tableClasses()?.table?.tfoot?.td || {}\"\n >\n @if (column.totalRowValueType == 'html') {\n <span [innerHTML]=\"totalRowValues().get(column.id) || ''\"></span>\n } @else {\n {{ totalRowValues().get(column.id) || '' }}\n }\n </td>\n }\n </tr>\n </tfoot>\n }\n </table>\n </div>\n @if (datasource().result().length === 0) {\n <div class=\"dm-table-no-data\">\n <span>{{ noDataMessage() }}</span>\n </div>\n } @else { @if (datasource().isPaginationEnabled()) {\n <ng-container [ngTemplateOutlet]=\"paginator\" />\n } }\n</div>\n\n<!-- MARK: Action Button template -->\n<ng-template #dmTableActionButton let-button let-defaultAction=\"defaultAction\">\n @if (button.buttonType === 'icon') {\n <button\n #rootTrigger=\"matMenuTrigger\"\n mat-icon-button\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n [matMenuTriggerFor]=\"button.children && button.children.length > 0 ? tableButtonRootMenu : null\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n rootTrigger: rootTrigger\n }\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(visibleColumns(), datasource())\n : defaultAction\n ? defaultAction($event)\n : null\n \"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n >\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n </button>\n } @else {\n <button\n #rootTrigger=\"matMenuTrigger\"\n [matButton]=\"button.buttonType || 'filled'\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n aria-label=\"{{ button.label }}\"\n [matTooltip]=\"button.tooltip || ''\"\n [matMenuTriggerFor]=\"button.children && button.children.length > 0 ? tableButtonRootMenu : null\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n rootTrigger: rootTrigger\n }\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(visibleColumns(), datasource())\n : defaultAction\n ? defaultAction($event)\n : null\n \"\n >\n <div class=\"dm-table-button-label-flex\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [ngStyle]=\"{ color: button.color ? button.color : undefined }\">\n {{ button.label }}\n </span>\n </div>\n </button>\n }\n <!-- @if (button.buttonType === 'icon') {\n <button\n mat-icon-button\n [color]=\"button.color\"\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(datasource())\n : defaultAction\n ? defaultAction()\n : null\n \"\n >\n <mat-icon>{{ button.icon }}</mat-icon>\n </button>\n } @else {\n <button\n [matButton]=\"button.buttonType || 'filled'\"\n [ngStyle]=\"{ 'background-color': button.color ? button.color : undefined }\"\n aria-label=\"{{ button.label }}\"\n [matTooltip]=\"button.tooltip || ''\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(datasource())\n : defaultAction\n ? defaultAction()\n : null\n \"\n >\n @if (button.icon) {\n <mat-icon\n class=\"button-icon\"\n [ngStyle]=\"{ color: button.textColor ? button.textColor : undefined }\"\n >{{ button.icon }}</mat-icon\n >\n }\n <span [ngStyle]=\"{ color: button.textColor ? button.textColor : undefined }\">\n {{ button.label }}\n </span>\n </button>\n } -->\n</ng-template>\n\n<!-- MARK: Action Button root menu -->\n<mat-menu #tableButtonRootMenu=\"matMenu\">\n <ng-template matMenuContent let-buttons=\"buttons\" let-rootTrigger=\"rootTrigger\">\n <ng-container\n *ngTemplateOutlet=\"\n tableButtonRecursiveMenu;\n context: { buttons: buttons, rootTrigger: rootTrigger }\n \"\n ></ng-container>\n </ng-template>\n</mat-menu>\n\n<!-- MARK: Action Button recursive menu -->\n<ng-template #tableButtonRecursiveMenu let-buttons=\"buttons\" let-rootTrigger=\"rootTrigger\">\n @for (button of buttons; track $index) { @if (!button.showIf || button.showIf(visibleColumns(),\n datasource())) { @if (button.children?.length) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subMenu\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n rootTrigger\n }\"\n (click)=\"$event.stopPropagation()\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n >\n <span style=\"display: flex; align-items: center; width: 100%; gap: 5px\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [style.color]=\"button.color ? button.color : undefined\">{{ button.label }}</span>\n <span class=\"spacer\"></span>\n <mat-icon [style.color]=\"button.color ? button.color : undefined\" class=\"submenu-arrow\"\n >chevron_left</mat-icon\n >\n </span>\n </button>\n\n <mat-menu #subMenu=\"matMenu\">\n <ng-container\n *ngTemplateOutlet=\"\n tableButtonRecursiveMenu;\n context: { buttons: button.children, rootTrigger: rootTrigger }\n \"\n ></ng-container>\n </mat-menu>\n } @else {\n <button\n mat-menu-item\n [matTooltip]=\"button.tooltip || ''\"\n (click)=\"button.onClick?.(visibleColumns(), datasource(), $event, getCloseParentMenusFn(rootTrigger))\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n >\n <div class=\"dm-table-button-label-flex\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [style.color]=\"button.color ? button.color : undefined\">{{ button.label }}</span>\n </div>\n </button>\n }} }\n</ng-template>\n\n<!-- MARK: Row button root menu -->\n<mat-menu #rowButtonRootMenu=\"matMenu\">\n <ng-template matMenuContent let-buttons=\"buttons\" let-row=\"row\" let-rootTrigger=\"rootTrigger\">\n <ng-container\n *ngTemplateOutlet=\"\n rowButtonRecursiveMenu;\n context: { buttons: buttons, row: row, rootTrigger: rootTrigger }\n \"\n ></ng-container>\n </ng-template>\n</mat-menu>\n\n<!-- MARK: Row button recursive menu -->\n<ng-template\n #rowButtonRecursiveMenu\n let-buttons=\"buttons\"\n let-row=\"row\"\n let-rootTrigger=\"rootTrigger\"\n>\n @for (button of buttons; track $index) { @if (button.children?.length) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subMenu\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n row,\n rootTrigger\n }\"\n (click)=\"$event.stopPropagation()\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n >\n <span style=\"display: flex; align-items: center; width: 100%; gap: 5px\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [style.color]=\"button.color ? button.color : undefined\">{{ button.label }}</span>\n <span class=\"spacer\"></span>\n <mat-icon [style.color]=\"button.color ? button.color : undefined\" class=\"submenu-arrow\"\n >chevron_left</mat-icon\n >\n </span>\n </button>\n\n <mat-menu #subMenu=\"matMenu\">\n <ng-container\n *ngTemplateOutlet=\"\n rowButtonRecursiveMenu;\n context: { buttons: button.children, row: row, rootTrigger: rootTrigger }\n \"\n ></ng-container>\n </mat-menu>\n\n } @else {\n <button\n mat-menu-item\n [matTooltip]=\"button.tooltip || ''\"\n (click)=\"button.onClick?.(row, $event, getCloseParentMenusFn(rootTrigger))\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n >\n <span class=\"dm-table-button-label-flex\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [style.color]=\"button.color ? button.color : undefined\">{{ button.label }}</span>\n </span>\n </button>\n } }\n</ng-template>\n\n<!-- MARK: Row Action Button template -->\n<ng-template #dmTableRowActionButton let-button let-row=\"row\" let-defaultAction=\"defaultAction\">\n @if (button.buttonType === 'icon') {\n <button\n #rootTrigger=\"matMenuTrigger\"\n mat-icon-button\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n [matMenuTriggerFor]=\"button.children && button.children.length > 0 ? rowButtonRootMenu : null\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n row,\n rootTrigger: rootTrigger\n }\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(row)\n : defaultAction\n ? defaultAction($event)\n : null\n \"\n >\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n </button>\n } @else {\n <button\n [matButton]=\"button.buttonType || 'filled'\"\n [ngStyle]=\"{ 'background-color': button.backgroundColor ? button.backgroundColor : undefined }\"\n aria-label=\"{{ button.label }}\"\n [matTooltip]=\"button.tooltip || ''\"\n [matMenuTriggerFor]=\"button.children && button.children.length > 0 ? rowButtonRootMenu : null\"\n #rootTrigger=\"matMenuTrigger\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n row,\n rootTrigger: rootTrigger\n }\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(row)\n : defaultAction\n ? defaultAction($event)\n : null\n \"\n >\n <span class=\"dm-table-button-label-flex\">\n @if (button.icon) {\n <dm-icon [icon]=\"button.icon\" [color]=\"button.color ? button.color : undefined\"></dm-icon>\n }\n <span [ngStyle]=\"{ color: button.color ? button.color : undefined }\">\n {{ button.label }}\n </span>\n </span>\n </button>\n }\n</ng-template>\n\n<!-- <mat-menu #buttonChildren=\"matMenu\">\n <ng-template matMenuContent let-buttons=\"buttons\" let-row=\"row\">\n @for (button of buttons || []; track $index) { @if (button.children && button.children.length >\n 0) {\n <ng-container *ngTemplateOutlet=\"subMenuTrigger; context: { button, row }\"></ng-container>\n } @else {\n <button\n mat-menu-item\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n (click)=\"\n button.children && button.children.length > 0\n ? null\n : button.onClick\n ? button.onClick(row, $event)\n : null\n \"\n >\n @if (button.icon) {\n <mat-icon>{{ button.icon }}</mat-icon>\n }\n <span>{{ button.label }}</span>\n </button>\n } }\n </ng-template>\n</mat-menu>\n\n<ng-template #subMenuTrigger let-button=\"button\" let-row=\"row\">\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"buttonChildren\"\n [matMenuTriggerData]=\"{\n buttons: button.children,\n row\n }\"\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n >\n @if (button.icon) {\n <mat-icon>{{ button.icon }}</mat-icon>\n }\n <span>{{ button.label }}</span>\n </button>\n</ng-template> -->\n\n<!-- MARK: Paginator template -->\n<ng-template #paginator>\n <div\n class=\"dm-table-paginator-row\"\n [ngStyle]=\"mergedTableStyle().paginator?.root || {}\"\n [ngClass]=\"tableClasses()?.paginator?.root || {}\"\n >\n <p\n class=\"mb-0\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n >\n {{\n paginatorSettings()?.numberOfItemsPerPageLabel ||\n DEFAULT_PAGINATOR_SETTINGS.numberOfItemsPerPageLabel\n }}\n </p>\n\n <div>\n <mat-form-field\n style=\"width: 100px\"\n class=\"dm-paginator-form-field ms-2 me-2\"\n [appearance]=\"'fill'\"\n [ngStyle]=\"mergedTableStyle().paginator?.mat_form_field || {}\"\n [ngClass]=\"tableClasses()?.paginator?.mat_form_field || {}\"\n >\n <mat-select\n [value]=\"datasource().getPageSize()\"\n [ngStyle]=\"mergedTableStyle().paginator?.mat_select || {}\"\n [ngClass]=\"tableClasses()?.paginator?.mat_select || {}\"\n >\n @for (option of (paginatorSettings()?.pageSizeOptions ||\n DEFAULT_PAGINATOR_SETTINGS.pageSizeOptions); track option) {\n <mat-option\n [value]=\"option\"\n (onSelectionChange)=\"onPageSizeChange($event, option)\"\n [ngStyle]=\"mergedTableStyle().paginator?.mat_option || {}\"\n [ngClass]=\"tableClasses()?.paginator?.mat_option || {}\"\n >{{ option }}</mat-option\n >\n }\n </mat-select>\n </mat-form-field>\n </div>\n\n @if (datasource().getPageSize() > 0) {\n <div class=\"dm-table-paginator-page-info\">\n <p\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n >\n {{ datasource().getFirstItemIndexInPage() + 1 }}\n </p>\n\n <p\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n >\n -\n </p>\n\n <p\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n >\n {{ datasource().getLastItemIndexInPage() + 1 }}\n </p>\n\n <p\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n >\n מתוך\n </p>\n\n <p\n [ngClass]=\"tableClasses()?.paginator?.p || {}\"\n [ngStyle]=\"mergedTableStyle().paginator?.p || {}\"\n >\n {{ datasource().getTotalResultElementsCount() }}\n </p>\n </div>\n }\n\n <div>\n @if (paginatorSettings()?.showFirstAndLastPagesButtons ||\n DEFAULT_PAGINATOR_SETTINGS.showFirstAndLastPagesButtons) {\n <button\n [ngStyle]=\"mergedTableStyle().paginator?.button || {}\"\n [ngClass]=\"tableClasses()?.paginator?.button || {}\"\n mat-icon-button\n (click)=\"datasource().firstPage()\"\n [matTooltip]=\"\n paginatorSettings()?.firstPageButtonLabel ||\n DEFAULT_PAGINATOR_SETTINGS.firstPageButtonLabel\n \"\n [matTooltipPosition]=\"'above'\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n }\n <button\n [ngStyle]=\"mergedTableStyle().paginator?.button || {}\"\n [ngClass]=\"tableClasses()?.paginator?.button || {}\"\n mat-icon-button\n (click)=\"datasource().firstPage()\"\n [matTooltip]=\"\n paginatorSettings()?.previousPageButtonLabel ||\n DEFAULT_PAGINATOR_SETTINGS.previousPageButtonLabel\n \"\n [matTooltipPosition]=\"'above'\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n <button\n [ngStyle]=\"mergedTableStyle().paginator?.button || {}\"\n [ngClass]=\"tableClasses()?.paginator?.button || {}\"\n mat-icon-button\n (click)=\"datasource().nextPage()\"\n [matTooltip]=\"\n paginatorSettings()?.nextPageButtonLabel || DEFAULT_PAGINATOR_SETTINGS.nextPageButtonLabel\n \"\n [matTooltipPosition]=\"'above'\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n @if (paginatorSettings()?.showFirstAndLastPagesButtons ||\n DEFAULT_PAGINATOR_SETTINGS.showFirstAndLastPagesButtons) {\n <button\n [ngStyle]=\"mergedTableStyle().paginator?.button || {}\"\n [ngClass]=\"tableClasses()?.paginator?.button || {}\"\n mat-icon-button\n (click)=\"datasource().lastPage()\"\n [matTooltip]=\"\n paginatorSettings()?.lastPageButtonLabel || DEFAULT_PAGINATOR_SETTINGS.lastPageButtonLabel\n \"\n [matTooltipPosition]=\"'above'\"\n >\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n }\n </div>\n </div>\n</ng-template>\n\n<!-- MARK: Edit Columns Visibility Menu Trigger -->\n<ng-template #editcolumnVisibilityMenuTrigger let-button>\n @if (button.buttonType == 'icon') {\n <button\n mat-icon-button\n [matTooltip]=\"button.tooltip || ''\"\n aria-label=\"{{ button.tooltip }}\"\n [matMenuTriggerFor]=\"columnVisibilityMenu\"\n #rootTrigger=\"matMenuTrigger\"\n >\n <dm-icon\n [icon]=\"button.icon\"\n [color]=\"button.textColor ? button.textColor : undefined\"\n ></dm-icon>\n </button>\n } @else {\n <button\n [matButton]=\"button.buttonType || 'filled'\"\n [ngStyle]=\"{ 'background-color': button.color ? button.color : undefined }\"\n aria-label=\"{{ button.label }}\"\n [matTooltip]=\"button.tooltip || ''\"\n [matMenuTriggerFor]=\"columnVisibilityMenu\"\n #rootTrigger=\"matMenuTrigger\"\n >\n <span class=\"dm-table-button-label-flex\">\n @if (button.icon) {\n <dm-icon\n [icon]=\"button.icon\"\n [color]=\"button.textColor ? button.textColor : undefined\"\n ></dm-icon>\n }\n <span [style.color]=\"button.textColor ? button.textColor : undefined\">\n {{ button.label }}\n </span>\n </span>\n </button>\n }\n</ng-template>\n\n<!-- MARK: Edit Columns Visibility Menu -->\n<mat-menu #columnVisibilityMenu=\"matMenu\">\n <div mat-menu-item disableRipple (click)=\"$event.stopPropagation()\">\n <mat-checkbox\n [checked]=\"isAllColumnsVisible()\"\n (change)=\"toggleAllColumnsVisibility($event)\"\n (click)=\"$event.stopPropagation()\"\n >{{ editColumnsVisibilitySelectAllLabel() }}</mat-checkbox\n >\n </div>\n @for (column of runtimeColumns(); track column.id) {\n <div mat-menu-item disableRipple (click)=\"$event.stopPropagation()\">\n <mat-checkbox\n [checked]=\"isColumnVisible(column)\"\n (change)=\"toggleColumnVisibility($event, column)\"\n (click)=\"$event.stopPropagation()\"\n >{{ column.header }}</mat-checkbox\n >\n </div>\n }\n</mat-menu>\n\n<!-- MARK: Input Cell Template -->\n<ng-template #dmTableInputCell let-row let-column=\"column\">\n @switch (column.inputType) { @case ('select') {\n <mat-select\n [dmImportantStyle]=\"getInputStyle(column)\"\n panelWidth=\"null\"\n [value]=\"resolveCellValue(row, column)\"\n >\n @for (option of column.selectOptions || []; track option.value) {\n <mat-option\n [value]=\"option.value\"\n (onSelectionChange)=\"inputCellSelectOptionChangeHandler(row, column, option, $event)\"\n >{{ option.label }}</mat-option\n >\n }\n </mat-select>\n } @case ('checkbox') {\n <mat-checkbox\n [checked]=\"resolveCellValue(row, column)\"\n (change)=\"inputCellCheckboxChangeHandler(row, column, $event)\"\n ></mat-checkbox>\n } @default {\n <input\n [type]=\"column.inputType || 'text'\"\n [value]=\"resolveCellValue(row, column)\"\n (change)=\"inputCellChangeHandler(row, column, $event)\"\n [dmImportantStyle]=\"getInputStyle(column)\"\n />\n } }\n</ng-template>\n\n<!-- MARK: Header Menu Trigger Template -->\n<ng-template #dmTableHeaderMenuTrigger let-column>\n @if (column?.headerMenuItems?.length) {\n <!-- <button\n mat-icon-button\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Column Menu\"\n >\n </button> -->\n <mat-icon\n #rootTrigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"dmTableHeaderRootMenu\"\n [matMenuTriggerData]=\"{\n menuItems: column.headerMenuItems,\n rootTrigger: rootTrigger\n }\"\n [matTooltip]=\"column.headerMenuTooltip || ''\"\n style=\"font-size: 20px; cursor: pointer; margin-left: 4px; height: 20px\"\n [ngStyle]=\"{\n color: getHeaderThContentStyle(column)?.color || getHeaderThStyle(column)?.color || ''\n }\"\n >menu</mat-icon\n >\n }\n</ng-template>\n\n<!-- MARK: Header Root Menu -->\n<mat-menu #dmTableHeaderRootMenu=\"matMenu\">\n <ng-template matMenuContent let-menuItems=\"menuItems\" let-rootTrigger=\"rootTrigger\">\n <ng-container\n *ngTemplateOutlet=\"\n dmTableHeaderRecursiveMenu;\n context: { menuItems: menuItems, rootTrigger: rootTrigger }\n \"\n ></ng-container>\n </ng-template>\n</mat-menu>\n\n<!-- MARK: Header Recursive Menu -->\n<ng-template #dmTableHeaderRecursiveMenu let-menuItems=\"menuItems\" let-rootTrigger=\"rootTrigger\">\n @for (menuItem of menuItems; track $index) { @if (!menuItem.showIf || (menuItem.showIf &&\n menuItem.showIf(datasource()))) {@if (menuItem.children?.length) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"dmTableHeaderSubMenu\"\n [matMenuTriggerData]=\"{\n menuItems: menuItem.children,\n rootTrigger\n }\"\n (click)=\"$event.stopPropagation()\"\n [ngStyle]=\"{\n 'background-color': menuItem.backgroundColor ? menuItem.backgroundColor : undefined\n }\"\n >\n <span style=\"display: flex; align-items: center; width: 100%; gap: 5px\">\n @if (menuItem.icon) {\n <dm-icon\n [icon]=\"menuItem.icon\"\n [color]=\"menuItem.color ? menuItem.color : undefined\"\n ></dm-icon>\n }\n <span [style.color]=\"menuItem.color ? menuItem.color : undefined\">{{ menuItem.label }}</span>\n <span class=\"spacer\"></span>\n <mat-icon [style.color]=\"menuItem.color ? menuItem.color : undefined\" class=\"submenu-arrow\"\n >chevron_left</mat-icon\n >\n </span>\n </button>\n\n <mat-menu #dmTableHeaderSubMenu=\"matMenu\">\n <ng-container\n *ngTemplateOutlet=\"\n dmTableHeaderRecursiveMenu;\n context: { menuItems: menuItem.children, rootTrigger: rootTrigger }\n \"\n />\n </mat-menu>\n } @else {\n <button\n mat-menu-item\n [matTooltip]=\"menuItem.tooltip || ''\"\n (click)=\"menuItem.onClick?.(datasource(), $event, getCloseParentMenusFn(rootTrigger))\"\n [ngStyle]=\"{\n 'background-color': menuItem.backgroundColor ? menuItem.backgroundColor : undefined\n }\"\n >\n <span class=\"dm-table-button-label-flex\">\n @if (menuItem.icon) {\n <dm-icon\n [icon]=\"menuItem.icon\"\n [color]=\"menuItem.color ? menuItem.color : undefined\"\n ></dm-icon>\n }\n <span [style.color]=\"menuItem.color ? menuItem.color : undefined\">{{ menuItem.label }}</span>\n </span>\n </button>\n } }}\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1.DmSpinnerService","i1","i4","i5"],"mappings":"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"}
|