@webilix/ngx-table-m3 0.0.21 → 0.0.24

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":"webilix-ngx-table-m3.mjs","sources":["../../../ngx-table-m3/src/lib/filters/filter.interface.ts","../../../ngx-table-m3/src/lib/filters/date/filter-date.component.ts","../../../ngx-table-m3/src/lib/filters/date/filter-date.component.html","../../../ngx-table-m3/src/lib/filters/date/filter-date.interface.ts","../../../ngx-table-m3/src/lib/filters/multi-select/filter-multi-select.component.ts","../../../ngx-table-m3/src/lib/filters/multi-select/filter-multi-select.component.html","../../../ngx-table-m3/src/lib/filters/multi-select/filter-multi-select.interface.ts","../../../ngx-table-m3/src/lib/filters/number/filter-number.component.ts","../../../ngx-table-m3/src/lib/filters/number/filter-number.component.html","../../../ngx-table-m3/src/lib/filters/number/filter-number.interface.ts","../../../ngx-table-m3/src/lib/filters/search/filter-search.component.ts","../../../ngx-table-m3/src/lib/filters/search/filter-search.component.html","../../../ngx-table-m3/src/lib/filters/search/filter-search.interface.ts","../../../ngx-table-m3/src/lib/filters/select/filter-select.component.ts","../../../ngx-table-m3/src/lib/filters/select/filter-select.component.html","../../../ngx-table-m3/src/lib/filters/select/filter-select.interface.ts","../../../ngx-table-m3/src/lib/filters/filter.info.ts","../../../ngx-table-m3/src/lib/filters/filter.component.ts","../../../ngx-table-m3/src/lib/filters/filter.component.html","../../../ngx-table-m3/src/lib/filters/filter.service.ts","../../../ngx-table-m3/src/lib/views/action/view-action.component.ts","../../../ngx-table-m3/src/lib/views/action/view-action.component.html","../../../ngx-table-m3/src/lib/columns/column.interface.ts","../../../ngx-table-m3/src/lib/columns/date/column-date.component.ts","../../../ngx-table-m3/src/lib/columns/date/column-date.component.html","../../../ngx-table-m3/src/lib/columns/date/column-date.interface.ts","../../../ngx-table-m3/src/lib/columns/duration/column-duration.component.ts","../../../ngx-table-m3/src/lib/columns/duration/column-duration.component.html","../../../ngx-table-m3/src/lib/columns/duration/column-duration.interface.ts","../../../ngx-table-m3/src/lib/columns/file-size/column-file-size.component.ts","../../../ngx-table-m3/src/lib/columns/file-size/column-file-size.component.html","../../../ngx-table-m3/src/lib/columns/file-size/column-file-size.interface.ts","../../../ngx-table-m3/src/lib/columns/mobile/column-mobile.component.ts","../../../ngx-table-m3/src/lib/columns/mobile/column-mobile.component.html","../../../ngx-table-m3/src/lib/columns/mobile/column-mobile.interface.ts","../../../ngx-table-m3/src/lib/columns/number/column-number.component.ts","../../../ngx-table-m3/src/lib/columns/number/column-number.component.html","../../../ngx-table-m3/src/lib/columns/number/column-number.interface.ts","../../../ngx-table-m3/src/lib/columns/period/column-period.component.ts","../../../ngx-table-m3/src/lib/columns/period/column-period.component.html","../../../ngx-table-m3/src/lib/columns/period/column-period.interface.ts","../../../ngx-table-m3/src/lib/columns/text/column-text.component.ts","../../../ngx-table-m3/src/lib/columns/text/column-text.component.html","../../../ngx-table-m3/src/lib/columns/text/column-text.interface.ts","../../../ngx-table-m3/src/lib/columns/weight/column-weight.component.ts","../../../ngx-table-m3/src/lib/columns/weight/column-weight.component.html","../../../ngx-table-m3/src/lib/columns/weight/column-weight.interface.ts","../../../ngx-table-m3/src/lib/columns/column.info.ts","../../../ngx-table-m3/src/lib/views/value/view-value.component.ts","../../../ngx-table-m3/src/lib/views/value/view-value.component.html","../../../ngx-table-m3/src/lib/views/view.service.ts","../../../ngx-table-m3/src/lib/views/card/toolbar/view-card-toolbar.component.ts","../../../ngx-table-m3/src/lib/views/card/toolbar/view-card-toolbar.component.html","../../../ngx-table-m3/src/lib/views/card/view-card.component.ts","../../../ngx-table-m3/src/lib/views/card/view-card.component.html","../../../ngx-table-m3/src/lib/views/pagination/view-pagination.component.ts","../../../ngx-table-m3/src/lib/views/pagination/view-pagination.component.html","../../../ngx-table-m3/src/lib/views/table/view-table.component.ts","../../../ngx-table-m3/src/lib/views/table/view-table.component.html","../../../ngx-table-m3/src/lib/ngx-table.config.ts","../../../ngx-table-m3/src/lib/ngx-table.component.ts","../../../ngx-table-m3/src/lib/ngx-table.component.html","../../../ngx-table-m3/src/public-api.ts","../../../ngx-table-m3/src/webilix-ngx-table-m3.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { IViewConfig } from '../views';\n\nimport { IFilterDate, IFilterMultiSelect, IFilterNumber, IFilterSearch, IFilterSelect } from '.';\n\nexport type Filter = IFilterDate | IFilterMultiSelect | IFilterNumber | IFilterSearch | IFilterSelect;\n\nexport interface IFilter {\n readonly filter: Filter;\n readonly title: string;\n readonly value?: any;\n}\n\nexport abstract class FilterMethods<F /** FILTER **/, V /** VALUE **/> {\n abstract toParam(value: V): string;\n\n abstract value(value: string, filter: F): V | undefined;\n abstract query(value: V): string;\n abstract active(value: V, filter: F): { value: string; english: boolean };\n}\n\nexport const FILTER_DATA: InjectionToken<{ filter: any; viewConfig: IViewConfig }> = new InjectionToken(\n 'NGX-TABLE-FILTER-DATA',\n);\nexport const FILTER_VALUE: InjectionToken<any> = new InjectionToken('NGX-TABLE-FILTER-VALUE');\nexport const FILTER_CHANGE: InjectionToken<(value?: any) => void> = new InjectionToken('NGX-TABLE-FILTER-CHANGE');\n","import { Component, inject } from '@angular/core';\n\nimport { NgxCalendarDateComponent } from '@webilix/ngx-calendar-m3';\n\nimport { IViewConfig } from '../../views';\n\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE } from '../filter.interface';\n\nimport { IFilterDate } from './filter-date.interface';\n\n@Component({\n host: { selector: 'filter-date' },\n imports: [NgxCalendarDateComponent],\n templateUrl: './filter-date.component.html',\n styleUrl: './filter-date.component.scss',\n})\nexport class FilterDateComponent {\n public data: { filter: IFilterDate; viewConfig: IViewConfig } = inject(FILTER_DATA);\n public value?: Date = inject(FILTER_VALUE);\n public onChange: (value?: Date) => void = inject(FILTER_CHANGE);\n}\n","<ngx-calendar-date\n [value]=\"this.value\"\n [minDate]=\"this.data.filter.minDate\"\n [maxDate]=\"this.data.filter.maxDate\"\n (onChange)=\"onChange($event.date)\"\n></ngx-calendar-date>\n","import { Helper } from '@webilix/helper-library';\nimport { JalaliDateTime } from '@webilix/jalali-date-time';\n\nimport { FilterMethods } from '../filter.interface';\n\nexport interface IFilterDate {\n readonly type: 'DATE';\n readonly minDate?: Date;\n readonly maxDate?: Date;\n\n readonly toParam?: (value: Date) => string;\n}\n\nexport class FilterDateMethods<T> extends FilterMethods<IFilterDate, Date> {\n override toParam(value: Date): string {\n return value.toJSON();\n }\n\n override value(value: string, filter: IFilterDate): Date | undefined {\n if (!value || !Helper.IS.STRING.date(value)) return undefined;\n\n const jalali = JalaliDateTime();\n const gregorian = jalali.gregorian(value).date;\n const date: Date = jalali.periodDay(1, new Date(`${gregorian}T00:00:00.000Z`)).from;\n\n if (filter.minDate && date.getTime() < filter.minDate.getTime()) return undefined;\n if (filter.maxDate && date.getTime() > filter.maxDate.getTime()) return undefined;\n\n return date;\n }\n\n override query(value: Date): string {\n const jalali = JalaliDateTime();\n return jalali.toString(value, { format: 'Y-M-D' });\n }\n\n override active(value: Date, filter: IFilterDate): { value: string; english: boolean } {\n const jalali = JalaliDateTime();\n return { value: jalali.toFullText(value, { format: 'Y/M/D' }), english: false };\n }\n}\n","import { Component, HostBinding, inject, OnInit } from '@angular/core';\n\nimport { MatCheckbox } from '@angular/material/checkbox';\n\nimport { IViewConfig } from '../../views';\n\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE } from '../filter.interface';\n\nimport { IFilterMultiSelect } from './filter-multi-select.interface';\n\n@Component({\n host: { selector: 'filter-multi-select' },\n imports: [MatCheckbox],\n templateUrl: './filter-multi-select.component.html',\n styleUrl: './filter-multi-select.component.scss',\n})\nexport class FilterMultiSelectComponent implements OnInit {\n @HostBinding('className') private className: string = 'ngx-table-m3-filter';\n\n public data: { filter: IFilterMultiSelect; viewConfig: IViewConfig } = inject(FILTER_DATA);\n public value?: string[] = inject(FILTER_VALUE);\n public onChange: (value?: string[]) => void = inject(FILTER_CHANGE);\n\n private searchQuery: string = '';\n public options: {\n readonly id: string;\n readonly title: string;\n }[] = [];\n\n ngOnInit(): void {\n this.setOptions('');\n }\n\n setOptions(query: string) {\n this.searchQuery = query.trim() || '';\n this.options = this.data.filter.options.filter(\n (o) => (this.value || []).includes(o.id) || !this.searchQuery || o.title.includes(this.searchQuery),\n );\n\n const maxItem: number = this.data.filter.maxItem || 0;\n if (maxItem > 20) this.options = this.options.slice(0, maxItem);\n }\n\n updateValue(id: string, checked: boolean): void {\n this.value = this.value || [];\n\n if (!checked) this.value = this.value.filter((v) => v !== id);\n else if (!this.value.includes(id)) this.value.push(id);\n\n this.onChange(this.value.length === 0 ? undefined : this.value);\n }\n}\n","@if (data.filter.options.length > 20) {\n<div class=\"filter-item-search\">\n <input\n type=\"text\"\n [placeholder]=\"'جستجو'\"\n [class.ngx-table-m3-en]=\"data.filter.english\"\n (input)=\"setOptions(searchInput.value.trim())\"\n #searchInput\n />\n</div>\n}\n\n<div class=\"filter-items\">\n @for (item of options; track $index) {\n <mat-checkbox [checked]=\"(value || []).includes(item.id)\" (change)=\"updateValue(item.id, $event.checked)\">\n <div class=\"title\" [class.ngx-table-m3-en]=\"data.filter.english\">{{ item.title }}</div>\n </mat-checkbox>\n }\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { FilterMethods } from '../filter.interface';\n\nexport interface IFilterMultiSelect {\n readonly type: 'MULTI-SELECT';\n readonly options: {\n readonly id: string;\n readonly title: string;\n }[];\n readonly english?: boolean;\n readonly maxItem?: number;\n\n readonly toParam?: (value: string[]) => string;\n}\n\nexport class FilterMultiSelectMethods<T> extends FilterMethods<IFilterMultiSelect, string[]> {\n override toParam(value: string[]): string {\n return value.join('||');\n }\n\n override value(value: string, filter: IFilterMultiSelect): string[] | undefined {\n if (!value || !Helper.IS.string(value)) return undefined;\n\n const ids: string[] = filter.options.map((options) => options.id);\n const values: string[] = value\n .split('||')\n .filter((item: string) => ids.includes(item))\n .filter((item: string, index: number, arr: string[]) => arr.indexOf(item) === index);\n return values.length === 0 ? undefined : values;\n }\n\n override query(value: string[]): string {\n return this.toParam(value);\n }\n\n override active(value: string[], filter: IFilterMultiSelect): { value: string; english: boolean } {\n const titles: string[] = value\n .map((value) => filter.options.find((o) => o.id === value)?.title || '')\n .filter((title) => title !== '');\n const selected: string = titles.length > 2 ? `${value.length} گزینه` : titles.join(filter.english ? ', ' : '، ');\n\n return { value: selected, english: !!filter.english };\n }\n}\n","import { AfterViewInit, Component, ElementRef, HostBinding, inject, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgxMaskDirective, provideNgxMask } from 'ngx-mask';\n\nimport { Helper } from '@webilix/helper-library';\n\nimport { IViewConfig } from '../../views';\n\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE } from '../filter.interface';\n\nimport { IFilterNumber, IFilterNumberValue } from './filter-number.interface';\n\ntype Mode = IFilterNumberValue['mode'];\n\n@Component({\n host: { selector: 'filter-number' },\n imports: [FormsModule, NgxMaskDirective],\n providers: [provideNgxMask()],\n templateUrl: './filter-number.component.html',\n styleUrl: './filter-number.component.scss',\n})\nexport class FilterNumberComponent implements AfterViewInit {\n @HostBinding('className') private className: string = 'ngx-table-m3-filter';\n @ViewChild('fromInput') private fromInput?: ElementRef;\n @ViewChild('numberInput') private numberInput?: ElementRef;\n\n public data: { filter: IFilterNumber; viewConfig: IViewConfig } = inject(FILTER_DATA);\n public value?: IFilterNumberValue = inject(FILTER_VALUE);\n public onChange: (value?: IFilterNumberValue) => void = inject(FILTER_CHANGE);\n\n public modes: { type: Mode; title: string }[] = [\n { type: 'EQUAL', title: 'برابر با' },\n { type: 'LESS', title: 'کمتر از' },\n { type: 'GREATER', title: 'بیشتر از' },\n { type: 'BETWEEN', title: 'در محدوده' },\n ];\n\n public mode?: Mode = this.data.filter.mode || this.value?.mode;\n public query?: string = this.value?.query;\n\n public fromQuery?: string = this.mode === 'BETWEEN' && this.query ? this.query.split(':')[0] : undefined;\n public toQuery?: string = this.mode === 'BETWEEN' && this.query ? this.query.split(':')[1] : undefined;\n public numberQuery?: string =\n this.mode === 'EQUAL' || this.mode === 'LESS' || this.mode === 'GREATER' ? this.query : undefined;\n\n public inputTransformFn = (value: any): string => Helper.STRING.changeNumbers(value.toString(), 'EN');\n\n ngAfterViewInit(): void {\n if (!this.mode) return;\n\n const elementRef: ElementRef | undefined = this.mode === 'BETWEEN' ? this.fromInput : this.numberInput;\n const element: HTMLInputElement | undefined = elementRef?.nativeElement;\n element?.focus();\n }\n\n setMode(mode: Mode) {\n this.mode = mode;\n this.updateQuery();\n\n setTimeout(() => {\n const elementRef: ElementRef | undefined = this.mode === 'BETWEEN' ? this.fromInput : this.numberInput;\n const element: HTMLInputElement | undefined = elementRef?.nativeElement;\n element?.focus();\n }, 100);\n }\n\n isNumeric(value: string): boolean {\n if (value.substring(0, 1) === '-') value = value.substring(1);\n return Helper.IS.STRING.numeric(value);\n }\n\n setQuery(fromQuery: string, toQuery: string): void {\n if (!this.mode) return;\n\n fromQuery = (fromQuery && Helper.IS.string(fromQuery) ? fromQuery.trim() : '').replace(/,/gi, '');\n const from: number | undefined =\n fromQuery && this.isNumeric(fromQuery) && !isNaN(+fromQuery) ? +fromQuery : undefined;\n\n if (this.mode !== 'BETWEEN') {\n this.query = from !== undefined ? from.toString() : undefined;\n this.updateQuery();\n return;\n }\n\n toQuery = (toQuery && Helper.IS.string(toQuery) ? toQuery.trim() : '').replace(/,/gi, '');\n const to: number | undefined = toQuery && this.isNumeric(toQuery) && !isNaN(+toQuery) ? +toQuery : undefined;\n\n this.query = from !== undefined && to !== undefined && from < to ? `${from}:${to}` : undefined;\n this.updateQuery();\n }\n\n updateQuery(): void {\n this.onChange(this.query && this.mode ? { query: this.query, mode: this.mode } : undefined);\n }\n}\n","<div class=\"filter-number\">\n @if (!this.data.filter.mode) {\n <div class=\"modes\">\n @for (item of modes; track $index) {\n <div class=\"mode\" [class.selected]=\"item.type === mode\" (click)=\"setMode(item.type)\">\n {{ item.title }}\n </div>\n }\n </div>\n }\n\n <!-- INPUTS -->\n <div class=\"inputs\" [style.display]=\"mode ? 'flex' : 'none'\">\n <!-- BETWEEN -->\n <input\n type=\"text\"\n [inputMode]=\"'numeric'\"\n [ngModel]=\"fromQuery\"\n [placeholder]=\"'حداقل'\"\n class=\"ngx-table-m3-en\"\n [mask]=\"'separator.0'\"\n thousandSeparator=\",\"\n decimalMarker=\".\"\n [allowNegativeNumbers]=\"true\"\n [maxLength]=\"15\"\n [inputTransformFn]=\"inputTransformFn\"\n [style.display]=\"mode === 'BETWEEN' ? 'initial' : 'none'\"\n (input)=\"setQuery(fromInput.value, toInput.value)\"\n #fromInput\n />\n <input\n type=\"text\"\n [inputMode]=\"'numeric'\"\n [ngModel]=\"toQuery\"\n [placeholder]=\"'حداکتر'\"\n class=\"ngx-table-m3-en\"\n [mask]=\"'separator.0'\"\n thousandSeparator=\",\"\n decimalMarker=\".\"\n [allowNegativeNumbers]=\"true\"\n [maxLength]=\"15\"\n [inputTransformFn]=\"inputTransformFn\"\n [style.display]=\"mode === 'BETWEEN' ? 'initial' : 'none'\"\n (input)=\"setQuery(fromInput.value, toInput.value)\"\n #toInput\n />\n <!-- OTHERS -->\n <input\n type=\"text\"\n [inputMode]=\"'numeric'\"\n [ngModel]=\"numberQuery\"\n [placeholder]=\"'مقدار'\"\n class=\"ngx-table-m3-en\"\n [mask]=\"'separator.0'\"\n thousandSeparator=\",\"\n decimalMarker=\".\"\n [allowNegativeNumbers]=\"true\"\n [maxLength]=\"15\"\n [inputTransformFn]=\"inputTransformFn\"\n [style.display]=\"mode !== 'BETWEEN' ? 'initial' : 'none'\"\n (input)=\"setQuery(numberInput.value, '')\"\n #numberInput\n />\n </div>\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { FilterMethods } from '../filter.interface';\n\ntype Mode = 'EQUAL' | 'GREATER' | 'LESS' | 'BETWEEN';\nconst modeList: Mode[] = ['EQUAL', 'GREATER', 'LESS', 'BETWEEN'];\n\nexport interface IFilterNumberValue {\n readonly query: string;\n readonly mode: Mode;\n}\n\nexport interface IFilterNumber {\n readonly type: 'NUMBER';\n readonly mode?: Mode;\n\n readonly toParam?: (value: IFilterNumberValue) => string;\n}\n\nexport class FilterNumberMethods<T> extends FilterMethods<IFilterNumber, IFilterNumberValue> {\n override toParam(value: IFilterNumberValue): string {\n return `${value.query}:${value.mode}`;\n }\n\n override value(value: string, filter: IFilterNumber): IFilterNumberValue | undefined {\n if (!value || !Helper.IS.string(value)) return undefined;\n\n const index: number = value.lastIndexOf(':');\n if (index === -1) return undefined;\n\n const query: string = value.substring(0, index);\n if (!query || !Helper.IS.string(query)) return undefined;\n\n const mode: Mode = value.substring(index + 1) as Mode;\n if (!modeList.includes(mode)) return undefined;\n if (filter.mode && filter.mode !== mode) return undefined;\n\n const isNumeric = (value: string): boolean => {\n if (value.substring(0, 1) === '-') value = value.substring(1);\n return Helper.IS.STRING.numeric(value);\n };\n switch (mode) {\n case 'EQUAL':\n case 'GREATER':\n case 'LESS':\n if (!isNumeric(query) || isNaN(+query)) return undefined;\n break;\n\n case 'BETWEEN':\n const [from, to] = query.split(':', 2);\n if (!from || !isNumeric(from) || isNaN(+from) || !to || !isNumeric(to) || isNaN(+to)) return undefined;\n if (+from >= +to) return undefined;\n break;\n }\n\n return { query, mode };\n }\n\n override query(value: IFilterNumberValue): string {\n return this.toParam(value);\n }\n\n override active(value: IFilterNumberValue, filter: IFilterNumber): { value: string; english: boolean } {\n let title: string = '';\n switch (value.mode) {\n case 'EQUAL':\n title = Helper.NUMBER.format(+value.query);\n break;\n case 'LESS':\n title = `کمتر از ${Helper.NUMBER.format(+value.query)}`;\n break;\n case 'GREATER':\n title = `بیشتر از ${Helper.NUMBER.format(+value.query)}`;\n break;\n case 'BETWEEN':\n const [from, to] = value.query.split(':');\n title = `${Helper.NUMBER.format(+from)} تا ${Helper.NUMBER.format(+to)}`;\n }\n return { value: title, english: false };\n }\n}\n","import { AfterViewInit, Component, ElementRef, HostBinding, inject, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatRadioButton, MatRadioGroup } from '@angular/material/radio';\n\nimport { Helper } from '@webilix/helper-library';\n\nimport { IViewConfig } from '../../views';\n\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE } from '../filter.interface';\n\nimport { IFilterSearch, IFilterSearchValue } from './filter-search.interface';\n\ntype Mode = IFilterSearchValue['mode'];\n\n@Component({\n host: { selector: 'filter-search' },\n imports: [FormsModule, MatRadioButton, MatRadioGroup],\n templateUrl: './filter-search.component.html',\n styleUrl: './filter-search.component.scss',\n})\nexport class FilterSearchComponent implements AfterViewInit {\n @HostBinding('className') private className: string = 'ngx-table-m3-filter';\n @ViewChild('searchInput') private searchInput?: ElementRef;\n\n public data: { filter: IFilterSearch; viewConfig: IViewConfig } = inject(FILTER_DATA);\n public value?: IFilterSearchValue = inject(FILTER_VALUE);\n public onChange: (value?: IFilterSearchValue) => void = inject(FILTER_CHANGE);\n\n public query?: string = this.value?.query;\n public mode: Mode = this.data.filter.mode || this.value?.mode || 'PHRASE';\n\n ngAfterViewInit(): void {\n if (!this.searchInput) return;\n\n const element: HTMLInputElement = this.searchInput.nativeElement;\n element?.focus();\n }\n\n updateQuery(query: string): void {\n query = query && Helper.IS.string(query) ? query.trim() : '';\n this.query = query.length === 0 ? undefined : query;\n\n this.onChange(this.query ? { query: this.query, mode: this.mode || 'PHRASE' } : undefined);\n }\n\n updateMode(mode: Mode): void {\n this.mode = mode;\n\n this.onChange(this.query ? { query: this.query, mode: this.mode || 'PHRASE' } : undefined);\n }\n}\n","<div class=\"filter-search\">\n <input\n type=\"text\"\n [ngModel]=\"query || ''\"\n [placeholder]=\"'جستجو'\"\n [class.ngx-table-m3-en]=\"data.filter.english\"\n (input)=\"updateQuery(searchInput.value)\"\n #searchInput\n />\n</div>\n\n@if (!data.filter.mode) {\n<div class=\"filter-items\">\n <mat-radio-group (change)=\"updateMode($event.value)\">\n <mat-radio-button [value]=\"'PHRASE'\" [checked]=\"mode === 'PHRASE'\">\n <div class=\"title\">عبارت کامل</div>\n </mat-radio-button>\n <mat-radio-button [value]=\"'ALL'\" [checked]=\"mode === 'ALL'\">\n <div class=\"title\">همه کلمات</div>\n </mat-radio-button>\n <mat-radio-button [value]=\"'EACH'\" [checked]=\"mode === 'EACH'\">\n <div class=\"title\">هر کدام از کلمات</div>\n </mat-radio-button>\n </mat-radio-group>\n</div>\n}\n","import { Helper } from '@webilix/helper-library';\n\nimport { FilterMethods } from '../filter.interface';\n\ntype Mode = 'PHRASE' | 'ALL' | 'EACH';\nconst modeList: Mode[] = ['PHRASE', 'ALL', 'EACH'];\n\nexport interface IFilterSearchValue {\n readonly query: string;\n readonly mode: Mode;\n}\n\nexport interface IFilterSearch {\n readonly type: 'SEARCH';\n readonly mode?: Mode;\n readonly english?: boolean;\n\n readonly toParam?: (value: IFilterSearchValue) => string;\n}\n\nexport class FilterSearchMethods<T> extends FilterMethods<IFilterSearch, IFilterSearchValue> {\n override toParam(value: IFilterSearchValue): string {\n return `${value.query}:${value.mode}`;\n }\n\n override value(value: string, filter: IFilterSearch): IFilterSearchValue | undefined {\n if (!value || !Helper.IS.string(value)) return undefined;\n\n const index: number = value.lastIndexOf(':');\n if (index === -1) return undefined;\n\n const query: string = value.substring(0, index);\n if (!query || !Helper.IS.string(query)) return undefined;\n\n const mode: Mode = value.substring(index + 1) as Mode;\n if (!modeList.includes(mode)) return undefined;\n if (filter.mode && filter.mode !== mode) return undefined;\n\n return { query, mode };\n }\n\n override query(value: IFilterSearchValue): string {\n return this.toParam(value);\n }\n\n override active(value: IFilterSearchValue, filter: IFilterSearch): { value: string; english: boolean } {\n return { value: value.query, english: !!filter.english };\n }\n}\n","import { Component, HostBinding, inject, OnInit } from '@angular/core';\n\nimport { MatRadioButton, MatRadioGroup } from '@angular/material/radio';\n\nimport { IViewConfig } from '../../views';\n\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE } from '../filter.interface';\n\nimport { IFilterSelect } from './filter-select.interface';\n\n@Component({\n host: { selector: 'filter-select' },\n imports: [MatRadioButton, MatRadioGroup],\n templateUrl: './filter-select.component.html',\n styleUrl: './filter-select.component.scss',\n})\nexport class FilterSelectComponent implements OnInit {\n @HostBinding('className') private className: string = 'ngx-table-m3-filter';\n\n public data: { filter: IFilterSelect; viewConfig: IViewConfig } = inject(FILTER_DATA);\n public value?: string = inject(FILTER_VALUE);\n public onChange: (value?: string) => void = inject(FILTER_CHANGE);\n\n private searchQuery: string = '';\n public options: {\n readonly id: string;\n readonly title: string;\n }[] = [];\n\n ngOnInit(): void {\n this.setOptions('');\n }\n\n setOptions(query: string) {\n this.searchQuery = query.trim() || '';\n this.options = this.data.filter.options.filter(\n (o) => this.value === o.id || !this.searchQuery || o.title.includes(this.searchQuery),\n );\n\n const maxItem: number = this.data.filter.maxItem || 0;\n if (maxItem > 20) this.options = this.options.slice(0, maxItem);\n }\n\n updateValue(id: string): void {\n this.value = id;\n this.onChange(this.value);\n }\n}\n","@if (data.filter.options.length > 20) {\n<div class=\"filter-item-search\">\n <input\n type=\"text\"\n [placeholder]=\"'جستجو'\"\n [class.ngx-table-m3-en]=\"data.filter.english\"\n (input)=\"setOptions(searchInput.value.trim())\"\n #searchInput\n />\n</div>\n}\n\n<div class=\"filter-items\">\n <mat-radio-group (change)=\"updateValue($event.value)\">\n @for (item of options; track $index) {\n <mat-radio-button [value]=\"item.id\" [checked]=\"item.id === value\">\n <div class=\"title\" [class.ngx-table-m3-en]=\"data.filter.english\">{{ item.title }}</div>\n </mat-radio-button>\n }\n </mat-radio-group>\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { FilterMethods } from '../filter.interface';\n\nexport interface IFilterSelect {\n readonly type: 'SELECT';\n readonly options: {\n readonly id: string;\n readonly title: string;\n }[];\n readonly english?: boolean;\n readonly maxItem?: number;\n\n readonly toParam?: (value: string) => string;\n}\n\nexport class FilterSelectMethods<T> extends FilterMethods<IFilterSelect, string> {\n override toParam(value: string): string {\n return value;\n }\n\n override value(value: string, filter: IFilterSelect): string | undefined {\n if (!value || !Helper.IS.string(value)) return undefined;\n\n const ids: string[] = filter.options.map((options) => options.id);\n return ids.includes(value) ? value : undefined;\n }\n\n override query(value: string): string {\n return this.toParam(value);\n }\n\n override active(value: string, filter: IFilterSelect): { value: string; english: boolean } {\n return { value: filter.options.find((o) => o.id === value)?.title || '', english: !!filter.english };\n }\n}\n","import { ComponentType } from '@angular/cdk/portal';\n\nimport {\n Filter,\n FilterDateComponent,\n FilterDateMethods,\n FilterMethods,\n FilterMultiSelectComponent,\n FilterMultiSelectMethods,\n FilterNumberComponent,\n FilterNumberMethods,\n FilterSearchComponent,\n FilterSearchMethods,\n FilterSelectComponent,\n FilterSelectMethods,\n} from '.';\n\nexport const FilterInfo: {\n [key in Filter['type']]: {\n readonly methods: FilterMethods<any, any>;\n readonly component: ComponentType<any>;\n };\n} = {\n DATE: { methods: new FilterDateMethods(), component: FilterDateComponent },\n 'MULTI-SELECT': { methods: new FilterMultiSelectMethods(), component: FilterMultiSelectComponent },\n NUMBER: { methods: new FilterNumberMethods(), component: FilterNumberComponent },\n SEARCH: { methods: new FilterSearchMethods(), component: FilterSearchComponent },\n SELECT: { methods: new FilterSelectMethods(), component: FilterSelectComponent },\n};\n","import { Component, HostBinding, inject, Injector, OnInit } from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\n\nimport { MatButton } from '@angular/material/button';\n\nimport { NGX_HELPER_CONTAINER_CLOSE, NGX_HELPER_CONTAINER_DATA } from '@webilix/ngx-helper-m3';\n\nimport { IViewConfig } from '../views';\n\nimport { FilterInfo } from './filter.info';\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE, IFilter } from './filter.interface';\n\n@Component({\n selector: 'filter',\n host: { '(window:keydown)': 'onKeydown($event)' },\n imports: [MatButton, NgComponentOutlet],\n templateUrl: './filter.component.html',\n styleUrl: './filter.component.scss',\n})\nexport class FilterComponent implements OnInit {\n @HostBinding('className') private className: string = 'ngx-table-m3-filter';\n\n public data: { filter: IFilter; viewConfig: IViewConfig } = inject(NGX_HELPER_CONTAINER_DATA);\n public closeContainer: (response?: any) => void = inject(NGX_HELPER_CONTAINER_CLOSE);\n\n public filterInfo = FilterInfo;\n\n public value?: any = undefined;\n public injector!: Injector;\n\n ngOnInit(): void {\n this.value = this.data.filter.value;\n\n this.injector = Injector.create({\n providers: [\n { provide: FILTER_DATA, useValue: { filter: this.data.filter.filter, viewConfig: this.data.viewConfig } },\n { provide: FILTER_VALUE, useValue: this.value },\n { provide: FILTER_CHANGE, useFactory: () => (value?: any) => (this.value = value) },\n ],\n });\n }\n\n onKeydown(event: any): void {\n if (!(event instanceof KeyboardEvent)) return;\n if (event.code === 'Enter' && this.value) this.closeContainer({ value: this.value });\n }\n}\n","<div class=\"filter-content\">\n <ng-container *ngComponentOutlet=\"filterInfo[data.filter.filter.type].component; injector: injector\"></ng-container>\n</div>\n\n<div class=\"filter-footer\">\n <button mat-stroked-button type=\"button\" [disabled]=\"!value\" (click)=\"closeContainer({ value: undefined })\">\n لغو فیلتر\n </button>\n <button mat-flat-button type=\"button\" class=\"confirm\" [disabled]=\"!value\" (click)=\"closeContainer({value})\">\n تایید\n </button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Helper } from '@webilix/helper-library';\nimport { NgxHelperContainerService } from '@webilix/ngx-helper-m3';\n\nimport { IViewConfig } from '../views';\nimport { INgxTable } from '../ngx-table.interface';\n\nimport { FilterComponent } from './filter.component';\nimport { FilterInfo } from './filter.info';\nimport { IFilter } from './filter.interface';\n\nexport type Filters = { [key: string]: IFilter };\n\n@Injectable()\nexport class FilterService {\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly ngxHelperContainerService: NgxHelperContainerService,\n ) {}\n\n getFilters<T>(ngxTable: INgxTable<T>): Filters {\n const filters: Filters = {};\n\n // CHECK COLUMNS\n ngxTable.columns.forEach((column) => {\n if (!column.tools || !('filter' in column.tools) || !column.tools.filter) return;\n\n const title: string = column.title || '';\n const key: string = column.tools.id;\n filters[key] = { title, filter: column.tools.filter };\n });\n\n if (Object.keys(filters).length === 0) return {};\n\n // CHECK QUERY PARAMS\n const queryParams: { [key: string]: any } = { ...this.activatedRoute.snapshot.queryParams };\n Object.keys(filters).forEach((id: string) => {\n const param: string = queryParams[`ngx-table-filter-${id}`];\n if (!param || !Helper.IS.string(param)) return;\n\n const column = ngxTable.columns.find((column) => column.tools?.id === id);\n if (!column || !column.tools || !('filter' in column.tools) || !column.tools.filter) return;\n\n const value = FilterInfo[column.tools.filter.type].methods.value(param, column.tools.filter);\n filters[id] = { ...filters[id], value };\n });\n\n return filters;\n }\n\n updateFilter(filter: IFilter, viewConfig: IViewConfig): Promise<IFilter | undefined> {\n return new Promise<IFilter | undefined>((resolve) => {\n this.ngxHelperContainerService\n .init(FilterComponent, filter.title, { data: { filter, viewConfig }, padding: '0' })\n .bottomSheet<{ value: any }>(\n (response) => resolve({ ...filter, value: response.value }),\n () => resolve(undefined),\n );\n });\n }\n}\n","import { Component, HostBinding, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { NgxTableAction } from '../../ngx-table.interface';\n\nimport { IViewConfig } from '../view.interface';\n\ninterface Action<T> {\n readonly title: string;\n readonly icon: string;\n readonly action: (data: T) => string[] | void;\n readonly color?: string;\n readonly isDisabled: boolean;\n}\n\n@Component({\n selector: 'view-action',\n imports: [MatButton, MatDivider, MatIconButton, MatIcon, MatMenuModule],\n templateUrl: './view-action.component.html',\n styleUrl: './view-action.component.scss',\n})\nexport class ViewActionComponent<T> implements OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-action';\n\n @Input({ required: true }) actions!: NgxTableAction<T>[];\n @Input({ required: true }) item!: T;\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Input({ required: true }) isMobile!: boolean;\n\n public inRow: Action<T>[] = [];\n public inMenu: ('DIVIDER' | Action<T>)[] = [];\n\n constructor(private readonly router: Router) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.inRow = [];\n this.inMenu = [];\n\n this.actions.forEach((action: NgxTableAction<T>) => {\n if (action === 'DIVIDER') {\n if (this.inMenu.length === 0) return;\n if (this.inMenu[this.inMenu.length - 1] === 'DIVIDER') return;\n\n this.inMenu.push('DIVIDER');\n return;\n }\n\n if (action.hideOn && action.hideOn(this.item)) return;\n\n let item: Action<T> | undefined = undefined;\n const isDisabled: boolean = !!action.disableOn && action.disableOn(this.item);\n\n switch (action.type) {\n case 'ACTION':\n item = {\n title: action.title,\n icon: action.icon,\n action: action.action,\n color: action.color,\n isDisabled,\n };\n break;\n\n case 'UPDATE':\n item = { title: 'ویرایش', icon: 'edit', action: action.action, isDisabled };\n break;\n\n case 'DELETE':\n item = {\n title: 'حذف',\n icon: 'delete',\n color: 'var(--error)',\n action: action.action,\n isDisabled,\n };\n break;\n\n case 'STATUS':\n const isDeactive: boolean = action.isDeactive(this.item);\n item = {\n title: isDeactive ? 'فعال کردن' : 'غیرفعال کردن',\n icon: isDeactive ? 'check_box' : 'disabled_by_default',\n color: isDeactive ? undefined : 'var(--error)',\n action: (data: T) => action.action(data, isDeactive),\n isDisabled,\n };\n break;\n\n case 'LOG':\n item = {\n title: 'گزارش تغییرات',\n icon: 'published_with_changes',\n action: action.action,\n isDisabled,\n };\n break;\n }\n\n if (!item) return;\n action.standalone ? this.inRow.push(item) : this.inMenu.push(item);\n });\n\n while (this.inMenu[this.inMenu.length - 1] === 'DIVIDER') this.inMenu.splice(this.inMenu.length - 1, 1);\n\n if (this.inMenu.length === 1 && this.inMenu[0] !== 'DIVIDER') {\n this.inRow.push(this.inMenu[0]);\n this.inMenu = [];\n }\n }\n\n onClick(action: (data: T) => string[] | void): void {\n const result = action(this.item);\n if (result) this.router.navigate(result);\n }\n}\n","<!-- ROW -->\n@for (item of inRow; track $index) {\n<!-- DESKTOP -->\n@if (!isMobile) {\n<button\n mat-button\n type=\"button\"\n class=\"desktop-view\"\n [style.color]=\"item.isDisabled ? '' : item.color\"\n [disabled]=\"item.isDisabled\"\n (click)=\"onClick(item.action)\"\n>\n {{ item.title }}\n</button>\n}\n<!-- MOBILE -->\n@else {\n<button mat-icon-button type=\"button\" [disabled]=\"item.isDisabled\" (click)=\"onClick(item.action)\">\n <mat-icon [style.color]=\"item.isDisabled ? '' : item.color\" [class.disabled]=\"item.isDisabled\">{{ item.icon }}</mat-icon>\n</button>\n} }\n\n<!-- MENU -->\n@if (this.inMenu.length > 0) {\n<!-- DESKTOP -->\n@if (!isMobile) {\n<button mat-button type=\"button\" class=\"desktop-view\" [matMenuTriggerFor]=\"actionMenu\">\n {{ viewConfig.actionMenuTitle }}\n</button>\n}\n<!-- MOBILE -->\n@else {\n<button mat-icon-button type=\"button\" [matMenuTriggerFor]=\"actionMenu\">\n <mat-icon>more_vert</mat-icon>\n</button>\n}\n\n<mat-menu #actionMenu=\"matMenu\" [xPosition]=\"'before'\" class=\"ngx-table-action-menu\">\n @for (item of inMenu; track $index) {\n <!-- DIVIDER -->\n @if (item === 'DIVIDER') {\n <mat-divider></mat-divider>\n }\n\n <!-- MENU ITEM -->\n @else {\n <button\n mat-menu-item\n type=\"button\"\n [class.disabled]=\"item.isDisabled\"\n [style.color]=\"item.isDisabled ? '' : item.color\"\n (click)=\"onClick(item.action)\"\n [disabled]=\"item.isDisabled\"\n >\n <span class=\"title\">{{ item.title }}</span>\n <mat-icon [style.color]=\"item.isDisabled ? '' : item.color\">{{ item.icon }}</mat-icon>\n </button>\n } }\n</mat-menu>\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { Filter } from '../filters';\n\ninterface IColumnOrder {\n readonly type?: 'ORDER' | 'ASC' | 'DESC';\n readonly initial?: 'ASC' | 'DESC';\n readonly isDefault?: boolean;\n}\n\nexport interface IColumn<T> {\n readonly title: string;\n readonly value: keyof T | ((data: T) => any);\n readonly subValue?: keyof T | ((data: T) => string | { value: string; english: true } | undefined);\n readonly english?: ((data: T) => boolean) | boolean;\n readonly color?: string | ((data: T) => string | null | undefined);\n readonly textAlign?: 'RIGHT' | 'CENTER' | 'LEFT';\n readonly mode?: 'TITLE' | 'SUBTITLE';\n\n readonly onClick?: (data: T) => string[] | (() => void);\n readonly onCopy?: (data: T) => string;\n\n readonly tools?:\n | { readonly id: string; readonly order: IColumnOrder }\n | { readonly id: string; readonly filter: Filter }\n | { readonly id: string; readonly order: IColumnOrder; readonly filter: Filter };\n}\n\nexport abstract class ColumnMethods<C /** COLUMN **/, V /** VALUE **/> {\n abstract column(column: C): C;\n abstract value(value: any, column?: C): V | undefined;\n}\n\nexport interface IColumnConfig {\n readonly isEN: boolean;\n readonly isDeactive: boolean;\n}\n\nexport const COLUMN_TYPE: InjectionToken<any> = new InjectionToken('NGX-TABLE-COLUMN-TYPE');\nexport const COLUMN_CONFIG: InjectionToken<IColumnConfig> = new InjectionToken('NGX-TABLE-COLUMN-CONFIG');\nexport const COLUMN_VALUE: InjectionToken<any> = new InjectionToken('NGX-TABLE-COLUMN-VALUE');\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperDatePipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnDate } from './column-date.interface';\n\n@Component({\n host: { selector: 'column-date' },\n imports: [NgxHelperDatePipe],\n templateUrl: './column-date.component.html',\n styleUrl: './column-date.component.scss',\n})\nexport class ColumnDateComponent<T> {\n public column: IColumnDate<T> = inject(COLUMN_TYPE);\n public value: Date = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div [style.display]=\"'inline-block'\" [class.ngx-table-m3-deactive]=\"config.isDeactive\">\n {{ value | ngxHelperDate : { format: column.format } }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnDate<T> extends Omit<IColumn<T>, 'title' | 'english'> {\n readonly type: 'DATE';\n readonly title?: string;\n readonly format?: string | 'FULL' | 'SHORT' | 'DATE' | 'TIME' | 'WEEK' | 'MONTH' | 'YEAR';\n}\n\nexport class ColumnDateMethods<T> extends ColumnMethods<IColumnDate<T>, Date> {\n override column(column: IColumnDate<T>): IColumnDate<T> {\n return { ...column, title: column.title || 'تاریخ' };\n }\n\n override value(value: any, column?: IColumnDate<T> | undefined): Date | undefined {\n return Helper.IS.date(value) ? value : undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperDurationPipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnDuration } from './column-duration.interface';\n\n@Component({\n host: { selector: 'column-duration' },\n imports: [NgxHelperDurationPipe],\n templateUrl: './column-duration.component.html',\n styleUrl: './column-duration.component.scss',\n})\nexport class ColumnDurationComponent<T> {\n public column: IColumnDuration<T> = inject(COLUMN_TYPE);\n public value: number = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value | ngxHelperDuration : { english: config.isEN, format: column.format } }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnDuration<T> extends IColumn<T> {\n readonly type: 'DURATION';\n readonly format?: 'FULL' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND';\n}\n\nexport class ColumnDurationMethods<T> extends ColumnMethods<IColumnDuration<T>, number> {\n override column(column: IColumnDuration<T>): IColumnDuration<T> {\n return { ...column };\n }\n\n override value(value: any, column?: IColumnDuration<T> | undefined): number | undefined {\n if (Helper.IS.number(value)) return Math.abs(value);\n else if (Helper.IS.date(value)) return Math.floor(Math.abs(new Date().getTime() - value.getTime()) / 1000);\n else if (Helper.IS.object(value)) {\n const from: Date | undefined = Helper.IS.date(value?.from) ? value.from : undefined;\n const to: Date | undefined = Helper.IS.date(value?.to) ? value.to : undefined;\n\n if (!from && !to) return undefined;\n return Math.floor(Math.abs((from || new Date()).getTime() - (to || new Date()).getTime()) / 1000);\n }\n\n return undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperFileSizePipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnFileSize } from './column-file-size.interface';\n\n@Component({\n host: { selector: 'column-file-size' },\n imports: [NgxHelperFileSizePipe],\n templateUrl: './column-file-size.component.html',\n styleUrl: './column-file-size.component.scss',\n})\nexport class ColumnFileSizeComponent<T> {\n public column: IColumnFileSize<T> = inject(COLUMN_TYPE);\n public value: number = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value | ngxHelperFileSize : { english: config.isEN } }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnFileSize<T> extends Omit<IColumn<T>, 'title'> {\n readonly type: 'FILE-SIZE';\n readonly title?: string;\n readonly format?: 'FULL' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND';\n}\n\nexport class ColumnFileSizeMethods<T> extends ColumnMethods<IColumnFileSize<T>, number> {\n override column(column: IColumnFileSize<T>): IColumnFileSize<T> {\n return { ...column, title: column.title || 'حجم فایل' };\n }\n\n override value(value: any, column?: IColumnFileSize<T> | undefined): number | undefined {\n return Helper.IS.number(value) && value >= 0 ? value : undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperMobilePipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnMobile } from './column-mobile.interface';\n\n@Component({\n host: { selector: 'column-mobile' },\n imports: [NgxHelperMobilePipe],\n templateUrl: './column-mobile.component.html',\n styleUrl: './column-mobile.component.scss',\n})\nexport class ColumnMobileComponent<T> {\n public column: IColumnMobile<T> = inject(COLUMN_TYPE);\n public value: string = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [style.direction]=\"'ltr'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value | ngxHelperMobile }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnMobile<T> extends Omit<IColumn<T>, 'title'> {\n readonly type: 'MOBILE';\n readonly title?: string;\n}\n\nexport class ColumnMobileMethods<T> extends ColumnMethods<IColumnMobile<T>, string> {\n override column(column: IColumnMobile<T>): IColumnMobile<T> {\n return { ...column, title: column.title || 'موبایل' };\n }\n\n override value(value: any, column?: IColumnMobile<T> | undefined): string | undefined {\n return Helper.IS.STRING.mobile(value) ? value : undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperNumberPipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnNumber } from './column-number.interface';\n\n@Component({\n host: { selector: 'column-number' },\n imports: [NgxHelperNumberPipe],\n templateUrl: './column-number.component.html',\n styleUrl: './column-number.component.scss',\n})\nexport class ColumnNumberComponent<T> {\n public column: IColumnNumber<T> = inject(COLUMN_TYPE);\n public value: number = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [style.direction]=\"'ltr'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value | ngxHelperNumber : { english: config.isEN, fractionDigits: column.fractionDigits } }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnNumber<T> extends IColumn<T> {\n readonly type: 'NUMBER';\n readonly fractionDigits?: number;\n}\n\nexport class ColumnNumberMethods<T> extends ColumnMethods<IColumnNumber<T>, number> {\n override column(column: IColumnNumber<T>): IColumnNumber<T> {\n return { ...column };\n }\n\n override value(value: any, column?: IColumnNumber<T> | undefined): number | undefined {\n return Helper.IS.number(value) ? value : undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperPeriodPipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnPeriod } from './column-period.interface';\n\n@Component({\n host: { selector: 'column-period' },\n imports: [NgxHelperPeriodPipe],\n templateUrl: './column-period.component.html',\n styleUrl: './column-period.component.scss',\n})\nexport class ColumnPeriodComponent<T> {\n public column: IColumnPeriod<T> = inject(COLUMN_TYPE);\n public value: { from: Date; to: Date } = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div [style.display]=\"'inline-block'\" [class.ngx-table-m3-deactive]=\"config.isDeactive\">\n {{ value | ngxHelperPeriod }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnPeriod<T> extends Omit<IColumn<T>, 'english'> {\n readonly type: 'PERIOD';\n}\n\nexport class ColumnPeriodMethods<T> extends ColumnMethods<IColumnPeriod<T>, { from?: Date; to?: Date }> {\n override column(column: IColumnPeriod<T>): IColumnPeriod<T> {\n return { ...column };\n }\n\n override value(value: any, column?: IColumnPeriod<T> | undefined): { from?: Date; to?: Date } | undefined {\n if (Helper.IS.date(value)) return { from: value };\n else if (Helper.IS.object(value)) {\n const from: Date | undefined = Helper.IS.date(value?.from) ? value.from : undefined;\n const to: Date | undefined = Helper.IS.date(value?.to) ? value.to : undefined;\n\n return from || to ? { from, to } : undefined;\n }\n\n return undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnText } from './column-text.interface';\n\n@Component({\n host: { selector: 'column-text' },\n imports: [],\n templateUrl: './column-text.component.html',\n styleUrl: './column-text.component.scss',\n})\nexport class ColumnTextComponent<T> {\n public column: IColumnText<T> = inject(COLUMN_TYPE);\n public value: string = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnText<T> extends IColumn<T> {\n readonly type: 'TEXT';\n}\n\nexport class ColumnTextMethods<T> extends ColumnMethods<IColumnText<T>, string> {\n override column(column: IColumnText<T>): IColumnText<T> {\n return { ...column };\n }\n\n override value(value: any, column?: IColumnText<T> | undefined): string | undefined {\n return Helper.IS.string(value) && value !== '' ? value : undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperWeightPipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnWeight } from './column-weight.interface';\n\n@Component({\n host: { selector: 'column-weight' },\n imports: [NgxHelperWeightPipe],\n templateUrl: './column-weight.component.html',\n styleUrl: './column-weight.component.scss',\n})\nexport class ColumnWeightComponent<T> {\n public column: IColumnWeight<T> = inject(COLUMN_TYPE);\n public value: number = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [style.direction]=\"config.isEN ? 'ltr' : 'rtl'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value | ngxHelperWeight : { short:column.short, english: config.isEN, } }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnWeight<T> extends Omit<IColumn<T>, 'title'> {\n readonly type: 'WEIGHT';\n readonly title?: string;\n readonly short?: boolean;\n}\n\nexport class ColumnWeightMethods<T> extends ColumnMethods<IColumnWeight<T>, number> {\n override column(column: IColumnWeight<T>): IColumnWeight<T> {\n return { ...column, title: column.title || 'وزن' };\n }\n\n override value(value: any, column?: IColumnWeight<T> | undefined): number | undefined {\n return Helper.IS.number(value) ? value : undefined;\n }\n}\n","import { ComponentType } from '@angular/cdk/portal';\n\nimport { NgxTableColumn } from '../ngx-table.interface';\n\nimport {\n ColumnDateComponent,\n ColumnDateMethods,\n ColumnDurationComponent,\n ColumnDurationMethods,\n ColumnFileSizeComponent,\n ColumnFileSizeMethods,\n ColumnMethods,\n ColumnMobileComponent,\n ColumnMobileMethods,\n ColumnNumberComponent,\n ColumnNumberMethods,\n ColumnPeriodComponent,\n ColumnPeriodMethods,\n ColumnTextComponent,\n ColumnTextMethods,\n ColumnWeightComponent,\n ColumnWeightMethods,\n} from '.';\n\nexport const ColumnInfo: {\n [key in NgxTableColumn<any>['type']]: {\n readonly methods: ColumnMethods<any, any>;\n readonly component: ComponentType<any>;\n };\n} = {\n DATE: { methods: new ColumnDateMethods(), component: ColumnDateComponent },\n DURATION: { methods: new ColumnDurationMethods(), component: ColumnDurationComponent },\n 'FILE-SIZE': { methods: new ColumnFileSizeMethods(), component: ColumnFileSizeComponent },\n MOBILE: { methods: new ColumnMobileMethods(), component: ColumnMobileComponent },\n NUMBER: { methods: new ColumnNumberMethods(), component: ColumnNumberComponent },\n PERIOD: { methods: new ColumnPeriodMethods(), component: ColumnPeriodComponent },\n TEXT: { methods: new ColumnTextMethods(), component: ColumnTextComponent },\n WEIGHT: { methods: new ColumnWeightMethods(), component: ColumnWeightComponent },\n};\n","import { Component, HostBinding, Injector, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { ClipboardModule } from '@angular/cdk/clipboard';\nimport { Router } from '@angular/router';\n\nimport { MatIcon } from '@angular/material/icon';\n\nimport { Helper } from '@webilix/helper-library';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, ColumnInfo, IColumnConfig } from '../../columns';\nimport { NgxTableColumn } from '../../ngx-table.interface';\n\nimport { IViewConfig } from '../view.interface';\n\n@Component({\n selector: 'view-value',\n imports: [NgComponentOutlet, ClipboardModule, MatIcon],\n templateUrl: './view-value.component.html',\n styleUrl: './view-value.component.scss',\n})\nexport class ViewValueComponent<T> implements OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-value';\n @HostBinding('style.text-align') private textAlign: string = 'left';\n\n @Input({ required: true }) column!: NgxTableColumn<T>;\n @Input({ required: true }) item!: T;\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Input({ required: false }) isDeactive?: boolean;\n @Input({ required: false }) isCard?: boolean;\n @Input({ required: false }) isCardTitle?: boolean;\n @Input({ required: false }) isCardSubTitle?: boolean;\n\n public columnInfo = ColumnInfo;\n public injector!: Injector;\n\n public value!: any;\n public subValue?: { value: string; isEN: boolean };\n public color?: string;\n public hasClick!: boolean;\n public copyText?: string;\n\n public isCopied: boolean = false;\n private copyTimeout: any;\n\n constructor(private readonly router: Router) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.textAlign = this.isCard ? 'right' : (this.column.textAlign || 'RIGHT').toLocaleLowerCase();\n\n this.value = this.getValue();\n this.subValue = this.getSubValue();\n this.color = this.column.color\n ? typeof this.column.color === 'function'\n ? this.column.color(this.item) || undefined\n : this.column.color\n : undefined;\n this.hasClick = !!this.column.onClick;\n this.copyText = !this.hasClick && this.column.onCopy ? this.column.onCopy(this.item) : undefined;\n\n const columnConfig: IColumnConfig = {\n isEN:\n 'english' in this.column && this.column.english\n ? typeof this.column.english === 'function'\n ? this.column.english(this.item)\n : this.column.english\n : false,\n isDeactive: !!this.isDeactive,\n };\n this.injector = Injector.create({\n providers: [\n { provide: COLUMN_TYPE, useValue: this.column },\n { provide: COLUMN_VALUE, useValue: this.value },\n { provide: COLUMN_CONFIG, useValue: columnConfig },\n ],\n });\n }\n\n getValue(): any {\n const value: any =\n typeof this.column.value === 'function' ? this.column.value(this.item) : this.item[this.column.value];\n if (Helper.IS.empty(value)) return undefined;\n\n return ColumnInfo[this.column.type].methods.value(value, this.column);\n }\n\n getSubValue(): { value: string; isEN: boolean } | undefined {\n if (!this.column.subValue) return undefined;\n\n if (typeof this.column.subValue === 'function') {\n const subValue = this.column.subValue(this.item);\n if (subValue === undefined || Helper.IS.empty(subValue)) return undefined;\n\n return {\n value: typeof subValue === 'string' ? subValue : subValue.value,\n isEN: typeof subValue === 'string' ? false : !!subValue.english,\n };\n } else {\n const subValue: any = this.item[this.column.subValue];\n if (Helper.IS.empty(subValue)) return undefined;\n\n return { value: subValue, isEN: false };\n }\n }\n\n onClick(): void {\n if (!this.column.onClick) return;\n\n const onClick = this.column.onClick(this.item);\n if (typeof onClick === 'function') onClick();\n else this.router.navigate(onClick);\n }\n\n onCopy(): void {\n if (!this.copyText) return;\n if (this.copyTimeout) clearTimeout(this.copyTimeout);\n\n this.isCopied = true;\n this.copyTimeout = setTimeout(() => {\n this.isCopied = false;\n this.copyTimeout = undefined;\n }, 2000);\n }\n}\n","<!-- EMPTY VALUE -->\n@if (value === undefined) { }\n\n<!-- SHOW VALUE -->\n@else {\n<div class=\"value-container\" [style.color]=\"color\" [class.card-title]=\"isCardTitle\" [class.card-sub-title]=\"isCardSubTitle\">\n <div\n class=\"value\"\n [style.cursor]=\"hasClick || copyText ? 'pointer' : 'default'\"\n (click)=\"hasClick ? onClick() : copyText ? onCopy() : null\"\n [cdkCopyToClipboard]=\"copyText || ''\"\n >\n <ng-container *ngComponentOutlet=\"columnInfo[column.type].component; injector: injector\"></ng-container>\n <!-- CLICK -->\n @if (hasClick) { <mat-icon>open_in_new</mat-icon> }\n <!-- COPY -->\n @if (copyText) { <mat-icon>{{ isCopied ? 'done_all' : 'copy' }}</mat-icon> }\n </div>\n\n <!-- SUB VALUE -->\n @if (subValue) {\n <div class=\"sub-value\" [class.ngx-table-m3-en]=\"subValue.isEN\">{{ subValue.value }}</div>\n }\n</div>\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { INgxTable } from '../ngx-table.interface';\n\ntype OrderType = 'ASC' | 'DESC';\ninterface IOrder {\n readonly title: string;\n readonly type: 'ORDER' | OrderType;\n readonly initial: OrderType;\n readonly current?: OrderType;\n}\nexport type Orders = { [key: string]: IOrder };\n\n@Injectable()\nexport class ViewService {\n constructor(private readonly activatedRoute: ActivatedRoute) {}\n\n getTitleIndex<T>(ngxTable: INgxTable<T>): number {\n const index: number = ngxTable.columns.findIndex((l) => l.mode === 'TITLE');\n return index === -1 ? 0 : index;\n }\n\n getSubTitleIndex<T>(ngxTable: INgxTable<T>): number | undefined {\n const index: number = ngxTable.columns.findIndex((l) => l.mode === 'SUBTITLE');\n return index === -1 ? undefined : index;\n }\n\n getIcons<T>(ngxTable: INgxTable<T>, data: T[]): { icon: string; color?: string }[] {\n const iconFn = ngxTable.rows?.icon;\n if (!iconFn) return [];\n\n return data.map((item) => {\n const icon = iconFn(item);\n return typeof icon === 'string' ? { icon } : { icon: icon.icon, color: icon.color || undefined };\n });\n }\n\n getColors<T>(ngxTable: INgxTable<T>, data: T[]): string[] {\n const colorFn = ngxTable.rows?.color;\n if (!colorFn) return [];\n\n return data.map((item) => colorFn(item) || '');\n }\n\n getDescriptions<T>(ngxTable: INgxTable<T>, data: T[]): (string | undefined)[] {\n const descriptionFn = ngxTable.rows?.description;\n if (!descriptionFn) return [];\n\n return data.map((item) => descriptionFn(item) || undefined);\n }\n\n getDeactives<T>(ngxTable: INgxTable<T>, data: T[]): number[] {\n const deactives: number[] = [];\n data.forEach((item: T, index: number) => {\n if (ngxTable.rows?.isDeactive?.(item)) deactives.push(index);\n });\n\n return deactives;\n }\n\n getOrders<T>(ngxTable: INgxTable<T>): Orders {\n let defaultFound: boolean = false;\n const orders: Orders = {};\n\n // CHECK COLUMNS\n ngxTable.columns.forEach((column) => {\n if (!column.tools || !('order' in column.tools) || !column.tools.order) return;\n\n const title: string = column.title || '';\n const key: string = column.tools.id;\n const type: 'ORDER' | OrderType = column.tools.order.type || 'ORDER';\n const initial: OrderType = type !== 'ORDER' ? type : column.tools.order.initial || 'ASC';\n const isDefault: boolean = !defaultFound && !!column.tools.order.isDefault;\n\n orders[key] = { title, type, initial, current: isDefault ? initial : undefined };\n if (isDefault) defaultFound = true;\n });\n\n if (Object.keys(orders).length === 0) return {};\n\n // CHECK QUERY PARAMS\n const queryParams: { [key: string]: any } = { ...this.activatedRoute.snapshot.queryParams };\n if (!!ngxTable.route && queryParams['ngx-table-order']) {\n const param: string = queryParams['ngx-table-order'];\n const index: number = param.lastIndexOf(':');\n\n if (index !== -1) {\n const id: string = param.substring(0, index);\n const type: 'ASC' | 'DESC' = param.substring(index + 1) as 'ASC' | 'DESC';\n\n if (\n orders[id] &&\n (type === 'ASC' || type === 'DESC') &&\n (orders[id].type === 'ORDER' || orders[id].type === type)\n ) {\n Object.keys(orders).forEach((key: string) => {\n orders[key] = { ...orders[key], current: key === id ? type : undefined };\n });\n }\n }\n }\n\n return orders;\n }\n}\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { Filters } from '../../../filters/filter.service';\n\nimport { IViewConfig, IViewOrder } from '../../view.interface';\nimport { Orders } from '../../view.service';\n\n@Component({\n selector: 'view-card-toolbar',\n imports: [MatDivider, MatIcon, MatMenuModule],\n templateUrl: './view-card-toolbar.component.html',\n styleUrl: './view-card-toolbar.component.scss',\n})\nexport class ViewCardToolbarComponent implements OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-card-view-toolbar';\n\n @Input({ required: true }) orders!: Orders;\n @Input({ required: true }) filters!: Filters;\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Output() orderChanged: EventEmitter<IViewOrder> = new EventEmitter<IViewOrder>();\n @Output() updateFilter: EventEmitter<string> = new EventEmitter<string>();\n @Output() clearFilter: EventEmitter<void> = new EventEmitter<void>();\n\n public orderKeys: string[] = [];\n public filterKeys: string[] = [];\n public showClear: boolean = false;\n\n private swipeStart?: number;\n private swipeLeft: number = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n this.orderKeys = Object.keys(this.orders);\n\n const activeKeys: string[] = [];\n const deactiveKeys: string[] = [];\n Object.keys(this.filters).forEach((key: string) => {\n if (this.filters[key].value !== undefined) activeKeys.push(key);\n else deactiveKeys.push(key);\n });\n this.filterKeys = [...activeKeys, ...deactiveKeys];\n this.showClear = activeKeys.length > 2;\n }\n\n updateOrder(id: string, type: 'ASC' | 'DESC'): void {\n this.orderChanged.next({ id, type });\n }\n\n swipe(\n event: MouseEvent | TouchEvent,\n action: 'START' | 'MOVE' | 'END',\n container: HTMLElement,\n items: HTMLElement,\n ): void {\n if (container.offsetWidth > items.offsetWidth) return;\n const clientX: number = event instanceof MouseEvent ? event.clientX : event.changedTouches[0].clientX;\n\n switch (action) {\n case 'START':\n this.swipeStart = clientX - this.swipeLeft;\n break;\n case 'END':\n this.swipeStart = undefined;\n\n break;\n case 'MOVE':\n if (!this.swipeStart) return;\n\n let left: number = clientX - this.swipeStart;\n\n if (left <= 0) left = 0;\n else if (left > items.offsetWidth - container.offsetWidth) left = items.offsetWidth - container.offsetWidth;\n\n this.swipeLeft = left;\n items.style.left = `${left}px`;\n break;\n }\n }\n}\n","<div\n class=\"toolbar-container\"\n [style.position]=\"viewConfig.stickyView?.top ? 'sticky' : 'static'\"\n [style.top]=\"viewConfig.stickyView?.top?.mobileView || undefined\"\n (mousedown)=\"swipe($event, 'START', toolbarContainer, toolbarItems)\"\n (mousemove)=\"swipe($event, 'MOVE', toolbarContainer, toolbarItems)\"\n (mouseup)=\"swipe($event, 'END', toolbarContainer, toolbarItems)\"\n (touchstart)=\"swipe($event, 'START', toolbarContainer, toolbarItems)\"\n (touchmove)=\"swipe($event, 'MOVE', toolbarContainer, toolbarItems)\"\n (touchend)=\"swipe($event, 'END', toolbarContainer, toolbarItems)\"\n #toolbarContainer\n>\n <div class=\"toolbar-items\" #toolbarItems>\n <!-- ORDER -->\n @if (orderKeys.length > 0) {\n <div class=\"item\" [matMenuTriggerFor]=\"orderMenu\">\n <mat-icon>swap_vert</mat-icon>\n <span>ترتیب نمایش</span>\n </div>\n <mat-menu #orderMenu=\"matMenu\" [xPosition]=\"'after'\" class=\"ngx-table-order-menu\">\n @for (item of orderKeys; track $index) {\n <!-- DIVIDER -->\n @if ($index !== 0) {<mat-divider></mat-divider>}\n\n <!-- TYPES -->\n @switch (orders[item].type) {\n <!-- ORDR -->\n @case ('ORDER') {\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"orders[item].current === 'ASC'\"\n (click)=\"updateOrder(item, 'ASC')\"\n >\n <mat-icon>north</mat-icon>\n <span>{{ orders[item].title }}</span>\n </button>\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"orders[item].current === 'DESC'\"\n (click)=\"updateOrder(item, 'DESC')\"\n >\n <mat-icon>south</mat-icon>\n <span>{{ orders[item].title }}</span>\n </button>\n }\n <!-- ASC, DESC -->\n @default {\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"orders[item].current\"\n (click)=\"updateOrder(item, orders[item].type)\"\n >\n <mat-icon>{{ orders[item].type === 'ASC' ? 'north' : 'south' }}</mat-icon>\n <span>{{ orders[item].title }}</span>\n </button>\n } } }\n </mat-menu>\n }\n\n <!-- CLEAR -->\n @if (showClear) {\n <div class=\"item clear\" (click)=\"clearFilter.next()\">\n <span>لغو فیلترها</span>\n <mat-icon>filter_alt_off</mat-icon>\n </div>\n\n }\n\n <!-- FILTER -->\n @for (item of filterKeys; track $index) {\n <div class=\"item\" [class.active]=\"filters[item].value\" (click)=\"updateFilter.next(item)\">\n <mat-icon>filter_alt</mat-icon>\n <span>{{ filters[item].title }}</span>\n </div>\n }\n </div>\n</div>\n\n<div\n class=\"toolbar-seperator\"\n [style.position]=\"viewConfig.stickyView?.top ? 'sticky' : 'static'\"\n [style.top]=\"\n 'calc(' + (viewConfig.stickyView?.top?.mobileView || undefined) + ' + var(--ngx-table-m3-toolbar-height) + 2px)'\n \"\n></div>\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nimport { MatIcon } from '@angular/material/icon';\n\nimport { NgxHelperMultiLinePipe } from '@webilix/ngx-helper-m3';\n\nimport { IFilter } from '../../filters';\nimport { INgxTable } from '../../ngx-table.interface';\nimport { Filters, FilterService } from '../../filters/filter.service';\n\nimport { ViewActionComponent } from '../action/view-action.component';\nimport { ViewValueComponent } from '../value/view-value.component';\nimport { Orders, ViewService } from '../view.service';\nimport { IViewConfig, IViewFilter, IViewOrder } from '..';\n\nimport { ViewCardToolbarComponent } from './toolbar/view-card-toolbar.component';\n\n@Component({\n selector: 'view-card',\n imports: [MatIcon, NgxHelperMultiLinePipe, ViewActionComponent, ViewValueComponent, ViewCardToolbarComponent],\n providers: [FilterService, ViewService],\n templateUrl: './view-card.component.html',\n styleUrl: './view-card.component.scss',\n})\nexport class ViewCardComponent<T> implements OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-card-view';\n\n @Input({ required: true }) ngxTable!: INgxTable<T>;\n @Input({ required: true }) data!: T[];\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Output() orderChanged: EventEmitter<IViewOrder> = new EventEmitter<IViewOrder>();\n @Output() filterChanged: EventEmitter<IViewFilter> = new EventEmitter<IViewFilter>();\n @Output() filterCleared: EventEmitter<void> = new EventEmitter<void>();\n\n public hasIcon: boolean = false;\n public hasAction: boolean = false;\n\n public titleIndex!: number;\n public subTitleIndex?: number;\n\n public icons: { icon: string; color?: string }[] = [];\n public colors: string[] = [];\n public descriptions: (string | undefined)[] = [];\n public deactives: number[] = [];\n\n public orders!: Orders;\n public filters!: Filters;\n public hasToolbar: boolean = false;\n public top: string = '';\n\n public hasContent!: boolean;\n\n constructor(private readonly filterService: FilterService, private readonly viewService: ViewService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.hasIcon = !!this.ngxTable.rows?.icon;\n this.hasAction = (this.ngxTable.actions || []).length > 0;\n\n this.titleIndex = this.viewService.getTitleIndex(this.ngxTable);\n this.subTitleIndex = this.viewService.getSubTitleIndex(this.ngxTable);\n\n this.icons = this.viewService.getIcons(this.ngxTable, this.data);\n this.colors = this.viewService.getColors(this.ngxTable, this.data);\n this.descriptions = this.viewService.getDescriptions(this.ngxTable, this.data);\n this.deactives = this.viewService.getDeactives(this.ngxTable, this.data);\n\n this.orders = this.viewService.getOrders(this.ngxTable);\n this.filters = this.filterService.getFilters(this.ngxTable);\n this.hasToolbar = Object.keys(this.orders).length > 0 || Object.keys(this.filters).length > 0;\n\n const top = this.viewConfig.stickyView?.top?.mobileView;\n this.top = top ? (this.hasToolbar ? `calc(${top} + var(--ngx-table-m3-toolbar-height) + 1rem + 2px)` : top) : '';\n\n this.hasContent = this.ngxTable.columns.some(\n (_, index: number) => index != this.titleIndex && index !== this.subTitleIndex,\n );\n }\n\n updateFilter(id: string): void {\n const filter = this.filters[id];\n if (!filter) return;\n\n this.filterService.updateFilter(filter, this.viewConfig).then((filter?: IFilter) => {\n if (!filter) return;\n\n this.filters[id] = filter;\n this.filterChanged.next({ id, value: filter.value });\n });\n }\n}\n","<!-- TOOLBAR -->\n@if (hasToolbar) {\n<view-card-toolbar\n [orders]=\"orders\"\n [filters]=\"filters\"\n [viewConfig]=\"viewConfig\"\n (orderChanged)=\"orderChanged.next($event)\"\n (updateFilter)=\"updateFilter($event)\"\n (clearFilter)=\"filterCleared.next()\"\n></view-card-toolbar>\n}\n\n<!-- DATA -->\n<div class=\"card-container\">\n @for (item of data; track $index; let dataIndex = $index) {\n <div class=\"card\">\n <div class=\"card-header\" [style.position]=\"viewConfig.stickyView?.top ? 'sticky' : 'static'\" [style.top]=\"top\">\n <!-- ICON -->\n @if (hasIcon) {\n <mat-icon class=\"icon\" [style.color]=\"icons[$index].color\" [style.font-size]=\"viewConfig.iconSize\">\n {{ icons[$index].icon }}\n </mat-icon>\n }\n\n <!-- TITLE -->\n <div class=\"title\" [style.color]=\"colors[dataIndex]\">\n <view-value\n [column]=\"ngxTable.columns[this.titleIndex]\"\n [item]=\"item\"\n [viewConfig]=\"viewConfig\"\n [isDeactive]=\"deactives.includes(dataIndex)\"\n [isCard]=\"true\"\n [isCardTitle]=\"true\"\n ></view-value>\n <!-- SUB TITLE -->\n @if (subTitleIndex !== undefined) {\n <view-value\n [column]=\"ngxTable.columns[this.subTitleIndex]\"\n [item]=\"item\"\n [viewConfig]=\"viewConfig\"\n [isCard]=\"true\"\n [isCardSubTitle]=\"true\"\n ></view-value>\n }\n </div>\n\n <!-- ACTION -->\n @if (hasAction) {\n <view-action\n [actions]=\"ngxTable.actions || []\"\n [item]=\"item\"\n [viewConfig]=\"viewConfig\"\n [isMobile]=\"true\"\n ></view-action>\n }\n </div>\n\n <!-- CONTENT -->\n @if (hasContent) {\n <div class=\"card-content\" [style.color]=\"colors[dataIndex]\">\n @for (column of ngxTable.columns; track $index; let columnIndex = $index) {\n <!-- CHECK TITLE AND SUBTITLE -->\n @if (columnIndex !== titleIndex && columnIndex !== subTitleIndex) {\n <div class=\"item\">\n <div class=\"title\">{{ column.title }}{{ !!column.title ? ' :' : '' }}</div>\n <div class=\"value\">\n <view-value [column]=\"column\" [item]=\"item\" [viewConfig]=\"viewConfig\" [isCard]=\"true\"></view-value>\n </div>\n </div>\n } }\n\n <!-- DESCRIPTION -->\n @if (descriptions[dataIndex]) {\n <div class=\"description\" [innerHTML]=\"descriptions[dataIndex] || '' | ngxHelperMultiLine\"></div>\n }\n </div>\n }\n </div>\n }\n</div>\n","import { DecimalPipe } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { INgxTablePagination } from '../../ngx-table.interface';\n\nimport { IViewConfig } from '..';\n\n@Component({\n selector: 'view-pagination',\n host: { '(window:scroll)': 'onScroll($event)' },\n imports: [DecimalPipe, MatIconButton, MatIcon, MatMenuModule],\n templateUrl: './view-pagination.component.html',\n styleUrl: './view-pagination.component.scss',\n})\nexport class ViewPaginationComponent implements OnInit, OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-pagination';\n @HostBinding('style.position') private stylePosition!: string;\n @HostBinding('style.bottom') private styleBottom!: string;\n\n @Input({ required: true }) type!: string;\n @Input({ required: true }) pagination!: INgxTablePagination;\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Input({ required: true }) isMobile!: boolean;\n @Input({ required: true }) stickyBottom?: { desktopView: string; mobileView: string };\n @Output() pageChanged: EventEmitter<number> = new EventEmitter<number>();\n\n public pages: number[] = [];\n public hasShadow: boolean = false;\n\n constructor(private readonly elementRef: ElementRef) {}\n\n ngOnInit(): void {\n setTimeout(this.onScroll.bind(this), 0);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const isDefaultPage = (page: number): boolean => page === 1 || page === this.pagination.page.total;\n\n const period: number = Math.floor(this.pagination.page.total / 8) || 1;\n const trunc: number = period < 100 ? 10 : period < 1000 ? 100 : 1000;\n\n this.pages = Array(this.pagination.page.total)\n .fill('0')\n .map((_, index: number) => index + 1)\n .filter((page: number) => page !== this.pagination.page.current)\n .filter((page: number) => isDefaultPage(page) || (page - 1) % period === 0)\n .map((page: number) => (isDefaultPage(page) || period < 10 ? page : page - (page % trunc)));\n\n this.stylePosition = this.stickyBottom ? 'sticky' : 'static';\n this.styleBottom = this.stickyBottom\n ? this.isMobile\n ? this.stickyBottom.mobileView\n : this.stickyBottom.desktopView\n : '';\n }\n\n onScroll(): void {\n if (!this.elementRef) return;\n\n const element: HTMLElement = this.elementRef.nativeElement;\n const elementPosition: number = element.offsetTop + element.offsetHeight + 8;\n\n const parentHeight = element.parentElement?.offsetHeight;\n this.hasShadow = !!parentHeight && elementPosition < parentHeight;\n }\n}\n","<div\n class=\"pagination-content\"\n [class.desktop-view]=\"!isMobile\"\n [class.mobile-view]=\"isMobile\"\n [class.has-shadow]=\"hasShadow\"\n>\n <div class=\"counts\">\n <div class=\"title\">صفحه {{ pagination.page.current | number }} از {{ pagination.page.total | number }}</div>\n <div class=\"total\">{{ pagination.item.total | number }} {{ type }}</div>\n </div>\n\n <button\n mat-icon-button\n type=\"button\"\n [disabled]=\"pagination.page.current === pagination.page.total\"\n (click)=\"pageChanged.next(pagination.page.total)\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n [disabled]=\"pagination.page.current === pagination.page.total\"\n (click)=\"pageChanged.next(pagination.page.current + 1)\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button mat-icon-button [matMenuTriggerFor]=\"pageMenu\"><mat-icon>tag</mat-icon></button>\n <mat-menu #pageMenu=\"matMenu\" class=\"ngx-table-m3-pagination\">\n @for (page of pages; track $index) {\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"page === pagination.page.current\"\n class=\"ngx-table-m3-pagination-item\"\n (click)=\"pageChanged.next(page)\"\n >\n {{ page | number }}\n </button>\n }\n </mat-menu>\n\n <button\n mat-icon-button\n type=\"button\"\n [disabled]=\"pagination.page.current === 1\"\n (click)=\"pageChanged.next(pagination.page.current - 1)\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-icon-button type=\"button\" [disabled]=\"pagination.page.current === 1\" (click)=\"pageChanged.next(1)\">\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n</div>\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\nimport { MatIcon } from '@angular/material/icon';\n\nimport { NgxHelperMultiLinePipe } from '@webilix/ngx-helper-m3';\n\nimport { IFilter } from '../../filters';\nimport { INgxTable } from '../../ngx-table.interface';\nimport { FilterInfo } from '../../filters/filter.info';\nimport { Filters, FilterService } from '../../filters/filter.service';\n\nimport { ViewActionComponent } from '../action/view-action.component';\nimport { ViewValueComponent } from '../value/view-value.component';\nimport { Orders, ViewService } from '../view.service';\nimport { IViewConfig, IViewFilter, IViewOrder } from '..';\n\n@Component({\n selector: 'view-table',\n imports: [MatIcon, NgxHelperMultiLinePipe, ViewActionComponent, ViewValueComponent],\n providers: [FilterService, ViewService],\n templateUrl: './view-table.component.html',\n styleUrl: './view-table.component.scss',\n animations: [\n trigger('toolbar', [\n transition(':enter', [style({ opacity: 0, height: 0 }), animate('150ms', style({ opacity: 1, height: '*' }))]),\n ]),\n ],\n})\nexport class ViewTableComponent<T> implements OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-table-view';\n\n @Input({ required: true }) ngxTable!: INgxTable<T>;\n @Input({ required: true }) data!: T[];\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Output() orderChanged: EventEmitter<IViewOrder> = new EventEmitter<IViewOrder>();\n @Output() filterChanged: EventEmitter<IViewFilter> = new EventEmitter<IViewFilter>();\n @Output() filterCleared: EventEmitter<void> = new EventEmitter<void>();\n\n public hasIcon: boolean = false;\n public hasAction: boolean = false;\n\n public titleIndex!: number;\n public subTitleIndex?: number;\n\n public icons: { icon: string; color?: string }[] = [];\n public colors: string[] = [];\n public descriptions: (string | undefined)[] = [];\n public deactives: number[] = [];\n\n public orders!: Orders;\n public filters!: Filters;\n public activeFilters: { id: string; title: string; value: string; english: boolean }[] = [];\n\n constructor(private readonly viewService: ViewService, private readonly filterService: FilterService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.hasIcon = !!this.ngxTable.rows?.icon;\n this.hasAction = (this.ngxTable.actions || []).length > 0;\n\n this.titleIndex = this.viewService.getTitleIndex(this.ngxTable);\n this.subTitleIndex = this.viewService.getSubTitleIndex(this.ngxTable);\n\n this.icons = this.viewService.getIcons(this.ngxTable, this.data);\n this.colors = this.viewService.getColors(this.ngxTable, this.data);\n this.descriptions = this.viewService.getDescriptions(this.ngxTable, this.data);\n this.deactives = this.viewService.getDeactives(this.ngxTable, this.data);\n\n this.orders = this.viewService.getOrders(this.ngxTable);\n this.filters = this.filterService.getFilters(this.ngxTable);\n this.activeFilters = Object.keys(this.filters)\n .filter((id: string) => this.filters[id].value !== undefined)\n .map((id: string) => ({\n id,\n title: this.filters[id].title,\n ...FilterInfo[this.filters[id].filter.type].methods.active(this.filters[id].value, this.filters[id].filter),\n }));\n }\n\n updateOrder(id: string): void {\n const order = this.orders[id];\n if (!order || order.type === order.current) return;\n\n const type: 'ASC' | 'DESC' = order.current ? (order.current === 'ASC' ? 'DESC' : 'ASC') : order.initial;\n this.orderChanged.next({ id, type });\n }\n\n updateFilter(id: string): void {\n const filter = this.filters[id];\n if (!filter) return;\n\n this.filterService.updateFilter(filter, this.viewConfig).then((filter?: IFilter) => {\n if (!filter) return;\n\n this.filters[id] = filter;\n this.filterChanged.next({ id, value: filter.value });\n });\n }\n\n clearFilter(id: string): void {\n const filter = this.filters[id];\n if (!filter) return;\n\n this.filters[id] = { ...this.filters[id], value: undefined };\n this.filterChanged.next({ id, value: undefined });\n }\n}\n","<table [cellPadding]=\"0\" [cellSpacing]=\"0\" [width]=\"'100%'\" [border]=\"0\">\n <!-- HEADER -->\n\n <thead\n [style.position]=\"viewConfig.stickyView?.top ? 'sticky' : 'static'\"\n [style.top]=\"viewConfig.stickyView?.top?.desktopView || undefined\"\n >\n <!-- ACTIVE FILTERS -->\n @if (activeFilters.length > 0) {\n <tr>\n <!-- ICON -->\n @if (hasIcon) {\n <th class=\"active-filters\"></th>\n }\n\n <!-- TOOLBAR -->\n <th class=\"active-filters\" [colSpan]=\"ngxTable.columns.length + (this.hasAction ? 1 : 0)\">\n <div class=\"toolbar\" [@toolbar]>\n @for (item of activeFilters; track $index) {\n <div class=\"item\">\n <div class=\"title\" (click)=\"updateFilter(item.id)\">{{ item.title }}:</div>\n <div class=\"value\" (click)=\"updateFilter(item.id)\" [class.ngx-table-m3-en]=\"item.english\">\n {{ item.value }}\n </div>\n <div class=\"icon\" (click)=\"clearFilter(item.id)\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n }\n\n <!-- CLEAR ALL -->\n @if (activeFilters.length > 2) {\n <div class=\"item clear\" (click)=\"filterCleared.next()\">\n <div class=\"title\">لغو فیلترها</div>\n <div class=\"icon\"><mat-icon>filter_alt_off</mat-icon></div>\n </div>\n }\n </div>\n </th>\n </tr>\n }\n\n <tr>\n <!-- ICON -->\n @if (hasIcon) {\n <th></th>\n }\n\n <!-- COLUMNS -->\n @for (column of ngxTable.columns; track $index) {\n <th [style.text-align]=\"(column.textAlign || 'RIGHT').toLowerCase()\">\n <div\n class=\"column\"\n [class.flex-end]=\"column.textAlign === 'LEFT'\"\n [class.flex-center]=\"column.textAlign === 'CENTER'\"\n >\n <div class=\"title\">{{ column.title }}</div>\n\n <!-- ORDER -->\n @if (column.tools && orders[column.tools.id]) {\n <mat-icon\n (click)=\"updateOrder(column.tools.id)\"\n [style.cursor]=\"\n orders[column.tools.id].type === 'ORDER' || !orders[column.tools.id].current\n ? 'pointer'\n : 'default'\n \"\n >\n {{\n orders[column.tools.id].current === 'ASC'\n ? 'north'\n : orders[column.tools.id].current === 'DESC'\n ? 'south'\n : 'swap_vert'\n }}\n </mat-icon>\n }\n\n <!-- FILTER -->\n @if (column.tools && filters[column.tools.id]) {\n <mat-icon [style.cursor]=\"'pointer'\" (click)=\"updateFilter(column.tools.id)\">filter_alt</mat-icon>\n }\n </div>\n </th>\n }\n\n <!-- ACTION -->\n @if (hasAction) {\n <th></th>\n }\n </tr>\n </thead>\n\n <!-- BODY -->\n <tbody>\n @for (item of data; track $index; let dataIndex = $index) {\n <tr\n [style.color]=\"colors[dataIndex]\"\n [class.odd-row]=\"viewConfig.alternateRows && dataIndex % 2 === 1\"\n [class.even-row]=\"viewConfig.alternateRows && dataIndex % 2 === 0\"\n >\n <!-- ICON -->\n @if (hasIcon) {\n <td class=\"icon\">\n <mat-icon [style.color]=\"icons[$index].color\" [style.font-size]=\"viewConfig.iconSize\">\n {{ icons[$index].icon }}\n </mat-icon>\n </td>\n }\n\n <!-- DATA -->\n @for (column of ngxTable.columns; track $index; let columnIndex = $index) {\n <td>\n <view-value\n [column]=\"column\"\n [item]=\"item\"\n [viewConfig]=\"viewConfig\"\n [isDeactive]=\"columnIndex === titleIndex && deactives.includes(dataIndex)\"\n ></view-value>\n </td>\n }\n\n <!-- ACTION -->\n @if (hasAction) {\n <td class=\"action\">\n <view-action\n [actions]=\"ngxTable.actions || []\"\n [item]=\"item\"\n [viewConfig]=\"viewConfig\"\n [isMobile]=\"false\"\n ></view-action>\n </td>\n }\n </tr>\n\n <!-- DESCRIPTION -->\n @if (descriptions[dataIndex]) {\n <tr\n [style.color]=\"colors[dataIndex]\"\n [class.odd-row]=\"viewConfig.alternateRows && dataIndex % 2 === 1\"\n [class.even-row]=\"viewConfig.alternateRows && dataIndex % 2 === 0\"\n >\n @if (hasIcon) {\n <td class=\"description\"></td>\n }\n <td\n class=\"description\"\n [colSpan]=\"ngxTable.columns.length + (hasAction ? 1 : 0)\"\n [innerHTML]=\"descriptions[dataIndex] || '' | ngxHelperMultiLine\"\n ></td>\n </tr>\n } }\n </tbody>\n</table>\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Provider } from '@angular/core';\n\nexport interface INgxTableConfig {\n readonly mobileWidth: number;\n readonly alternateRows: boolean;\n readonly iconSize: number;\n readonly actionMenuTitle?: string;\n readonly stickyView: {\n readonly top?: string | { readonly desktopView: string; readonly mobileView: string };\n readonly bottom?: string | { readonly desktopView: string; readonly mobileView: string };\n };\n}\n\nexport const NGX_TABLE_CONFIG = new InjectionToken<Partial<INgxTableConfig>>('NGX-TABLE-CONFIG');\n\nexport const provideNgxTableConfig = (config: Partial<INgxTableConfig>): EnvironmentProviders => {\n const providers: Provider[] = [{ provide: NGX_TABLE_CONFIG, useValue: config }];\n\n return makeEnvironmentProviders(providers);\n};\n","import { Component, EventEmitter, Inject, Input, OnChanges, OnInit, Optional, Output, SimpleChanges } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { Helper } from '@webilix/helper-library';\nimport { NgxHelperLoaderComponent } from '@webilix/ngx-helper-m3';\n\nimport {\n IViewConfig,\n IViewFilter,\n IViewOrder,\n ViewCardComponent,\n ViewPaginationComponent,\n ViewTableComponent,\n} from './views';\n\nimport { ColumnInfo } from './columns';\nimport { FilterInfo } from './filters/filter.info';\nimport { FilterService } from './filters/filter.service';\nimport { ViewService } from './views/view.service';\nimport { INgxTableConfig, NGX_TABLE_CONFIG } from './ngx-table.config';\nimport { INgxTable, INgxTableFilter, INgxTablePagination } from './ngx-table.interface';\n\n@Component({\n selector: 'ngx-table',\n host: { '(window:resize)': 'onResize($event)' },\n imports: [NgxHelperLoaderComponent, ViewCardComponent, ViewPaginationComponent, ViewTableComponent],\n providers: [FilterService, ViewService],\n templateUrl: './ngx-table.component.html',\n styleUrl: './ngx-table.component.scss',\n})\nexport class NgxTableComponent<T> implements OnInit, OnChanges {\n @Input({ required: true }) loading!: boolean;\n @Input({ required: true }) ngxTable!: INgxTable<T>;\n @Input({ required: true }) data!: T[];\n @Input({ required: false }) pagination?: INgxTablePagination | null;\n @Output() filterChanged: EventEmitter<INgxTableFilter> = new EventEmitter<INgxTableFilter>();\n\n public isMobile: boolean = false;\n public viewConfig!: IViewConfig;\n\n private filter!: INgxTableFilter;\n public hasFilter: boolean = false;\n\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly router: Router,\n private readonly filterService: FilterService,\n private readonly viewService: ViewService,\n @Optional() @Inject(NGX_TABLE_CONFIG) private readonly config?: Partial<INgxTableConfig>,\n ) {}\n\n ngOnInit(): void {\n const queryParams: { [key: string]: any } = { ...this.activatedRoute.snapshot.queryParams };\n const page: number = !!this.ngxTable.route\n ? Helper.IS.number(+queryParams['ngx-table-page'])\n ? +queryParams['ngx-table-page']\n : 1\n : 1;\n\n const orders = this.viewService.getOrders(this.ngxTable);\n let order: { id: string; type: 'ASC' | 'DESC'; param: string } | undefined = undefined;\n Object.keys(orders).forEach((id: string) => {\n if (!orders[id].current) return;\n\n const type = orders[id].current;\n order = { id, type: type, param: `${id}:${type}` };\n });\n\n const filters = this.filterService.getFilters(this.ngxTable);\n const filter: { [id: string]: { value: any; param: string } } = {};\n Object.keys(filters).forEach((id: string) => {\n if (filters[id].value === undefined) return;\n\n const column = this.ngxTable.columns.find((column) => column.tools?.id === id);\n if (!column || !column.tools || !('filter' in column.tools) || !column.tools.filter) return;\n\n const param: string =\n column.tools.filter.toParam?.(filters[id].value) ||\n FilterInfo[column.tools.filter.type].methods.toParam(filters[id].value);\n\n filter[id] = { value: filters[id].value, param };\n });\n\n this.filter = { page, order, filter };\n this.filterChanged.next(this.filter);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.ngxTable = {\n ...this.ngxTable,\n columns: this.ngxTable.columns.map((column) => ColumnInfo[column.type].methods.column(column)),\n };\n\n const getStickyView = (\n config: string | { desktopView: string; mobileView: string },\n ): { desktopView: string; mobileView: string } => {\n return {\n desktopView: typeof config === 'string' ? config : config.desktopView,\n mobileView: typeof config === 'string' ? config : config.mobileView,\n };\n };\n\n this.viewConfig = {\n alternateRows: !!this.config?.alternateRows,\n iconSize: `${this.config?.iconSize || 24}px`,\n actionMenuTitle: this.config?.actionMenuTitle || 'امکانات',\n stickyView: this.config?.stickyView\n ? {\n top: this.config.stickyView.top ? getStickyView(this.config.stickyView.top) : undefined,\n bottom: this.config.stickyView.bottom ? getStickyView(this.config.stickyView.bottom) : undefined,\n }\n : undefined,\n };\n\n this.hasFilter = this.filter && Object.keys(this.filter).length !== 0;\n this.onResize();\n }\n\n onResize(): void {\n const mobileWidth: number = this.config?.mobileWidth || 600;\n this.isMobile = this.ngxTable.mobileView || window.innerWidth <= mobileWidth;\n }\n\n setQueryParams(): void {\n if (!this.ngxTable.route) return;\n\n const queryParams: { [key: string]: any } = { ...this.activatedRoute.snapshot.queryParams };\n const keys: string[] = Object.keys(queryParams);\n keys.forEach((id: string) => id.substring(0, 17) === 'ngx-table-filter-' && delete queryParams[id]);\n\n queryParams['ngx-table-page'] = this.filter.page !== 1 ? this.filter.page.toString() : undefined;\n queryParams['ngx-table-order'] = this.filter.order ? this.filter.order.param : undefined;\n Object.keys(this.filter.filter).forEach((id: string) => {\n const column = this.ngxTable.columns.find((column) => column.tools?.id === id);\n if (!column || !column.tools || !('filter' in column.tools) || !column.tools.filter) return;\n\n const param: string = FilterInfo[column.tools.filter.type].methods.query(this.filter.filter[id].value);\n queryParams[`ngx-table-filter-${id}`] = param;\n });\n this.router.navigate(this.ngxTable.route, { queryParams });\n }\n\n pageChanged(page: number): void {\n this.filter = { ...this.filter, page };\n\n this.setQueryParams();\n this.filterChanged.next(this.filter);\n }\n\n orderChanged(order: IViewOrder): void {\n const param: string = `${order.id}:${order.type}`;\n this.filter = { ...this.filter, order: { ...order, param } };\n\n this.setQueryParams();\n this.filterChanged.next(this.filter);\n }\n\n filterItemChanged(filter: IViewFilter): void {\n const column = this.ngxTable.columns.find((column) => column.tools?.id === filter.id);\n if (!column || !column.tools || !('filter' in column.tools) || !column.tools.filter) return;\n\n if (filter.value === undefined) delete this.filter.filter[filter.id];\n else {\n const param: string =\n column.tools.filter.toParam?.(filter.value) ||\n FilterInfo[column.tools.filter.type].methods.toParam(filter.value);\n this.filter.filter[filter.id] = { value: filter.value, param };\n }\n\n this.setQueryParams();\n this.filterChanged.next(this.filter);\n }\n\n filterCleared(): void {\n this.filter = { ...this.filter, filter: {} };\n\n this.setQueryParams();\n this.filterChanged.next(this.filter);\n }\n}\n","@if (loading) {\n<div class=\"ngx-table-m3-loader\">\n <ngx-helper-loader [mode]=\"'SPINNER'\"></ngx-helper-loader>\n</div>\n}\n\n<!-- EMPTY -->\n@if (!loading && ngxTable.columns.length <= 0 ) {\n<div class=\"ngx-table-m3-empty\">ستون‌های جدول به صورت صحیح مشخص نشده است.</div>\n}\n\n<!-- EMPTY -->\n@if (!loading && ngxTable.columns.length > 0 && data.length === 0 && !hasFilter) {\n<div class=\"ngx-table-m3-empty\">{{ ngxTable.type }} ثبت نشده است.</div>\n}\n\n<!-- DATA -->\n@if (!loading && ngxTable.columns.length > 0 && (data.length > 0 || hasFilter)) {\n<content class=\"ngx-table-m3\">\n <!-- DESKTOP -->\n @if (!isMobile) {\n <view-table\n [ngxTable]=\"ngxTable\"\n [data]=\"data\"\n [viewConfig]=\"viewConfig\"\n (orderChanged)=\"orderChanged($event)\"\n (filterChanged)=\"filterItemChanged($event)\"\n (filterCleared)=\"filterCleared()\"\n ></view-table>\n }\n\n <!-- MOBILE -->\n @if (isMobile) {\n <view-card\n [ngxTable]=\"ngxTable\"\n [data]=\"data\"\n [viewConfig]=\"viewConfig\"\n (orderChanged)=\"orderChanged($event)\"\n (filterChanged)=\"filterItemChanged($event)\"\n (filterCleared)=\"filterCleared()\"\n ></view-card>\n }\n\n <!-- PAGINATION -->\n @if (pagination && pagination.page.total> 1) {\n <view-pagination\n [type]=\"ngxTable.type\"\n [pagination]=\"pagination\"\n [viewConfig]=\"viewConfig\"\n [isMobile]=\"isMobile\"\n [stickyBottom]=\"viewConfig.stickyView?.bottom\"\n (pageChanged)=\"pageChanged($event)\"\n ></view-pagination>\n }\n\n <!-- EMPTY -->\n @if ( data.length === 0) {\n <div class=\"ngx-table-m3-empty\">{{ ngxTable.type }} ثبت نشده است.</div>\n }\n</content>\n}\n","/*\n * Public API Surface of ngx-table-m3\n */\n\nexport * from './lib/ngx-table.component';\nexport * from './lib/ngx-table.config';\nexport * from './lib/ngx-table.interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["modeList","i1","i2","i1.FilterService","i2.ViewService","i1.ViewService","i2.FilterService"],"mappings":"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"}
1
+ {"version":3,"file":"webilix-ngx-table-m3.mjs","sources":["../../../ngx-table-m3/src/lib/filters/filter.interface.ts","../../../ngx-table-m3/src/lib/filters/date/filter-date.component.ts","../../../ngx-table-m3/src/lib/filters/date/filter-date.component.html","../../../ngx-table-m3/src/lib/filters/date/filter-date.interface.ts","../../../ngx-table-m3/src/lib/filters/multi-select/filter-multi-select.component.ts","../../../ngx-table-m3/src/lib/filters/multi-select/filter-multi-select.component.html","../../../ngx-table-m3/src/lib/filters/multi-select/filter-multi-select.interface.ts","../../../ngx-table-m3/src/lib/filters/number/filter-number.component.ts","../../../ngx-table-m3/src/lib/filters/number/filter-number.component.html","../../../ngx-table-m3/src/lib/filters/number/filter-number.interface.ts","../../../ngx-table-m3/src/lib/filters/search/filter-search.component.ts","../../../ngx-table-m3/src/lib/filters/search/filter-search.component.html","../../../ngx-table-m3/src/lib/filters/search/filter-search.interface.ts","../../../ngx-table-m3/src/lib/filters/select/filter-select.component.ts","../../../ngx-table-m3/src/lib/filters/select/filter-select.component.html","../../../ngx-table-m3/src/lib/filters/select/filter-select.interface.ts","../../../ngx-table-m3/src/lib/filters/filter.info.ts","../../../ngx-table-m3/src/lib/filters/filter.component.ts","../../../ngx-table-m3/src/lib/filters/filter.component.html","../../../ngx-table-m3/src/lib/filters/filter.service.ts","../../../ngx-table-m3/src/lib/views/action/view-action.component.ts","../../../ngx-table-m3/src/lib/views/action/view-action.component.html","../../../ngx-table-m3/src/lib/columns/column.interface.ts","../../../ngx-table-m3/src/lib/columns/date/column-date.component.ts","../../../ngx-table-m3/src/lib/columns/date/column-date.component.html","../../../ngx-table-m3/src/lib/columns/date/column-date.interface.ts","../../../ngx-table-m3/src/lib/columns/duration/column-duration.component.ts","../../../ngx-table-m3/src/lib/columns/duration/column-duration.component.html","../../../ngx-table-m3/src/lib/columns/duration/column-duration.interface.ts","../../../ngx-table-m3/src/lib/columns/file-size/column-file-size.component.ts","../../../ngx-table-m3/src/lib/columns/file-size/column-file-size.component.html","../../../ngx-table-m3/src/lib/columns/file-size/column-file-size.interface.ts","../../../ngx-table-m3/src/lib/columns/mobile/column-mobile.component.ts","../../../ngx-table-m3/src/lib/columns/mobile/column-mobile.component.html","../../../ngx-table-m3/src/lib/columns/mobile/column-mobile.interface.ts","../../../ngx-table-m3/src/lib/columns/number/column-number.component.ts","../../../ngx-table-m3/src/lib/columns/number/column-number.component.html","../../../ngx-table-m3/src/lib/columns/number/column-number.interface.ts","../../../ngx-table-m3/src/lib/columns/period/column-period.component.ts","../../../ngx-table-m3/src/lib/columns/period/column-period.component.html","../../../ngx-table-m3/src/lib/columns/period/column-period.interface.ts","../../../ngx-table-m3/src/lib/columns/text/column-text.component.ts","../../../ngx-table-m3/src/lib/columns/text/column-text.component.html","../../../ngx-table-m3/src/lib/columns/text/column-text.interface.ts","../../../ngx-table-m3/src/lib/columns/weight/column-weight.component.ts","../../../ngx-table-m3/src/lib/columns/weight/column-weight.component.html","../../../ngx-table-m3/src/lib/columns/weight/column-weight.interface.ts","../../../ngx-table-m3/src/lib/columns/column.info.ts","../../../ngx-table-m3/src/lib/views/value/view-value.component.ts","../../../ngx-table-m3/src/lib/views/value/view-value.component.html","../../../ngx-table-m3/src/lib/views/view.service.ts","../../../ngx-table-m3/src/lib/views/card/toolbar/view-card-toolbar.component.ts","../../../ngx-table-m3/src/lib/views/card/toolbar/view-card-toolbar.component.html","../../../ngx-table-m3/src/lib/views/card/view-card.component.ts","../../../ngx-table-m3/src/lib/views/card/view-card.component.html","../../../ngx-table-m3/src/lib/views/pagination/view-pagination.component.ts","../../../ngx-table-m3/src/lib/views/pagination/view-pagination.component.html","../../../ngx-table-m3/src/lib/views/table/view-table.component.ts","../../../ngx-table-m3/src/lib/views/table/view-table.component.html","../../../ngx-table-m3/src/lib/ngx-table.config.ts","../../../ngx-table-m3/src/lib/ngx-table.component.ts","../../../ngx-table-m3/src/lib/ngx-table.component.html","../../../ngx-table-m3/src/public-api.ts","../../../ngx-table-m3/src/webilix-ngx-table-m3.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nimport { IViewConfig } from '../views';\n\nimport { IFilterDate, IFilterMultiSelect, IFilterNumber, IFilterSearch, IFilterSelect } from '.';\n\nexport type Filter = IFilterDate | IFilterMultiSelect | IFilterNumber | IFilterSearch | IFilterSelect;\n\nexport interface IFilter {\n readonly filter: Filter;\n readonly title: string;\n readonly value?: any;\n}\n\nexport abstract class FilterMethods<F /** FILTER **/, V /** VALUE **/> {\n abstract toParam(value: V): string;\n\n abstract value(value: string, filter: F): V | undefined;\n abstract query(value: V): string;\n abstract active(value: V, filter: F): { value: string; english: boolean };\n}\n\nexport const FILTER_DATA: InjectionToken<{ filter: any; viewConfig: IViewConfig }> = new InjectionToken(\n 'NGX-TABLE-FILTER-DATA',\n);\nexport const FILTER_VALUE: InjectionToken<any> = new InjectionToken('NGX-TABLE-FILTER-VALUE');\nexport const FILTER_CHANGE: InjectionToken<(value?: any) => void> = new InjectionToken('NGX-TABLE-FILTER-CHANGE');\n","import { Component, inject } from '@angular/core';\n\nimport { NgxCalendarDateComponent } from '@webilix/ngx-calendar-m3';\n\nimport { IViewConfig } from '../../views';\n\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE } from '../filter.interface';\n\nimport { IFilterDate } from './filter-date.interface';\n\n@Component({\n host: { selector: 'filter-date' },\n imports: [NgxCalendarDateComponent],\n templateUrl: './filter-date.component.html',\n styleUrl: './filter-date.component.scss',\n})\nexport class FilterDateComponent {\n public data: { filter: IFilterDate; viewConfig: IViewConfig } = inject(FILTER_DATA);\n public value?: Date = inject(FILTER_VALUE);\n public onChange: (value?: Date) => void = inject(FILTER_CHANGE);\n}\n","<ngx-calendar-date\n [value]=\"this.value\"\n [minDate]=\"this.data.filter.minDate\"\n [maxDate]=\"this.data.filter.maxDate\"\n (onChange)=\"onChange($event.date)\"\n></ngx-calendar-date>\n","import { Helper } from '@webilix/helper-library';\nimport { JalaliDateTime } from '@webilix/jalali-date-time';\n\nimport { FilterMethods } from '../filter.interface';\n\nexport interface IFilterDate {\n readonly type: 'DATE';\n readonly minDate?: Date;\n readonly maxDate?: Date;\n\n readonly toParam?: (value: Date) => string;\n}\n\nexport class FilterDateMethods<T> extends FilterMethods<IFilterDate, Date> {\n override toParam(value: Date): string {\n return value.toJSON();\n }\n\n override value(value: string, filter: IFilterDate): Date | undefined {\n if (!value || !Helper.IS.STRING.date(value)) return undefined;\n\n const jalali = JalaliDateTime();\n const gregorian = jalali.gregorian(value).date;\n const date: Date = jalali.periodDay(1, new Date(`${gregorian}T00:00:00.000Z`)).from;\n\n if (filter.minDate && date.getTime() < filter.minDate.getTime()) return undefined;\n if (filter.maxDate && date.getTime() > filter.maxDate.getTime()) return undefined;\n\n return date;\n }\n\n override query(value: Date): string {\n const jalali = JalaliDateTime();\n return jalali.toString(value, { format: 'Y-M-D' });\n }\n\n override active(value: Date, filter: IFilterDate): { value: string; english: boolean } {\n const jalali = JalaliDateTime();\n return { value: jalali.toFullText(value, { format: 'Y/M/D' }), english: false };\n }\n}\n","import { Component, HostBinding, inject, OnInit } from '@angular/core';\n\nimport { MatCheckbox } from '@angular/material/checkbox';\n\nimport { IViewConfig } from '../../views';\n\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE } from '../filter.interface';\n\nimport { IFilterMultiSelect } from './filter-multi-select.interface';\n\n@Component({\n host: { selector: 'filter-multi-select' },\n imports: [MatCheckbox],\n templateUrl: './filter-multi-select.component.html',\n styleUrl: './filter-multi-select.component.scss',\n})\nexport class FilterMultiSelectComponent implements OnInit {\n @HostBinding('className') private className: string = 'ngx-table-m3-filter';\n\n public data: { filter: IFilterMultiSelect; viewConfig: IViewConfig } = inject(FILTER_DATA);\n public value?: string[] = inject(FILTER_VALUE);\n public onChange: (value?: string[]) => void = inject(FILTER_CHANGE);\n\n private searchQuery: string = '';\n public options: {\n readonly id: string;\n readonly title: string;\n }[] = [];\n\n ngOnInit(): void {\n this.setOptions('');\n }\n\n setOptions(query: string) {\n this.searchQuery = query.trim() || '';\n this.options = this.data.filter.options.filter(\n (o) => (this.value || []).includes(o.id) || !this.searchQuery || o.title.includes(this.searchQuery),\n );\n\n const maxItem: number = this.data.filter.maxItem || 0;\n if (maxItem > 20) this.options = this.options.slice(0, maxItem);\n }\n\n updateValue(id: string, checked: boolean): void {\n this.value = this.value || [];\n\n if (!checked) this.value = this.value.filter((v) => v !== id);\n else if (!this.value.includes(id)) this.value.push(id);\n\n this.onChange(this.value.length === 0 ? undefined : this.value);\n }\n}\n","@if (data.filter.options.length > 20) {\n<div class=\"filter-item-search\">\n <input\n type=\"text\"\n [placeholder]=\"'جستجو'\"\n [class.ngx-table-m3-en]=\"data.filter.english\"\n (input)=\"setOptions(searchInput.value.trim())\"\n #searchInput\n />\n</div>\n}\n\n<div class=\"filter-items\">\n @for (item of options; track $index) {\n <mat-checkbox [checked]=\"(value || []).includes(item.id)\" (change)=\"updateValue(item.id, $event.checked)\">\n <div class=\"title\" [class.ngx-table-m3-en]=\"data.filter.english\">{{ item.title }}</div>\n </mat-checkbox>\n }\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { FilterMethods } from '../filter.interface';\n\nexport interface IFilterMultiSelect {\n readonly type: 'MULTI-SELECT';\n readonly options: {\n readonly id: string;\n readonly title: string;\n }[];\n readonly english?: boolean;\n readonly maxItem?: number;\n\n readonly toParam?: (value: string[]) => string;\n}\n\nexport class FilterMultiSelectMethods<T> extends FilterMethods<IFilterMultiSelect, string[]> {\n override toParam(value: string[]): string {\n return value.join('||');\n }\n\n override value(value: string, filter: IFilterMultiSelect): string[] | undefined {\n if (!value || !Helper.IS.string(value)) return undefined;\n\n const ids: string[] = filter.options.map((options) => options.id);\n const values: string[] = value\n .split('||')\n .filter((item: string) => ids.includes(item))\n .filter((item: string, index: number, arr: string[]) => arr.indexOf(item) === index);\n return values.length === 0 ? undefined : values;\n }\n\n override query(value: string[]): string {\n return this.toParam(value);\n }\n\n override active(value: string[], filter: IFilterMultiSelect): { value: string; english: boolean } {\n const titles: string[] = value\n .map((value) => filter.options.find((o) => o.id === value)?.title || '')\n .filter((title) => title !== '');\n const selected: string = titles.length > 2 ? `${value.length} گزینه` : titles.join(filter.english ? ', ' : '، ');\n\n return { value: selected, english: !!filter.english };\n }\n}\n","import { AfterViewInit, Component, ElementRef, HostBinding, inject, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgxMaskDirective, provideNgxMask } from 'ngx-mask';\n\nimport { Helper } from '@webilix/helper-library';\n\nimport { IViewConfig } from '../../views';\n\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE } from '../filter.interface';\n\nimport { IFilterNumber, IFilterNumberValue } from './filter-number.interface';\n\ntype Mode = IFilterNumberValue['mode'];\n\n@Component({\n host: { selector: 'filter-number' },\n imports: [FormsModule, NgxMaskDirective],\n providers: [provideNgxMask()],\n templateUrl: './filter-number.component.html',\n styleUrl: './filter-number.component.scss',\n})\nexport class FilterNumberComponent implements AfterViewInit {\n @HostBinding('className') private className: string = 'ngx-table-m3-filter';\n @ViewChild('fromInput') private fromInput?: ElementRef;\n @ViewChild('numberInput') private numberInput?: ElementRef;\n\n public data: { filter: IFilterNumber; viewConfig: IViewConfig } = inject(FILTER_DATA);\n public value?: IFilterNumberValue = inject(FILTER_VALUE);\n public onChange: (value?: IFilterNumberValue) => void = inject(FILTER_CHANGE);\n\n public modes: { type: Mode; title: string }[] = [\n { type: 'EQUAL', title: 'برابر با' },\n { type: 'LESS', title: 'کمتر از' },\n { type: 'GREATER', title: 'بیشتر از' },\n { type: 'BETWEEN', title: 'در محدوده' },\n ];\n\n public mode?: Mode = this.data.filter.mode || this.value?.mode;\n public query?: string = this.value?.query;\n\n public fromQuery?: string = this.mode === 'BETWEEN' && this.query ? this.query.split(':')[0] : undefined;\n public toQuery?: string = this.mode === 'BETWEEN' && this.query ? this.query.split(':')[1] : undefined;\n public numberQuery?: string =\n this.mode === 'EQUAL' || this.mode === 'LESS' || this.mode === 'GREATER' ? this.query : undefined;\n\n public inputTransformFn = (value: any): string => Helper.STRING.changeNumbers(value.toString(), 'EN');\n\n ngAfterViewInit(): void {\n if (!this.mode) return;\n\n const elementRef: ElementRef | undefined = this.mode === 'BETWEEN' ? this.fromInput : this.numberInput;\n const element: HTMLInputElement | undefined = elementRef?.nativeElement;\n element?.focus();\n }\n\n setMode(mode: Mode) {\n this.mode = mode;\n this.updateQuery();\n\n setTimeout(() => {\n const elementRef: ElementRef | undefined = this.mode === 'BETWEEN' ? this.fromInput : this.numberInput;\n const element: HTMLInputElement | undefined = elementRef?.nativeElement;\n element?.focus();\n }, 100);\n }\n\n isNumeric(value: string): boolean {\n if (value.substring(0, 1) === '-') value = value.substring(1);\n return Helper.IS.STRING.numeric(value);\n }\n\n setQuery(fromQuery: string, toQuery: string): void {\n if (!this.mode) return;\n\n fromQuery = (fromQuery && Helper.IS.string(fromQuery) ? fromQuery.trim() : '').replace(/,/gi, '');\n const from: number | undefined =\n fromQuery && this.isNumeric(fromQuery) && !isNaN(+fromQuery) ? +fromQuery : undefined;\n\n if (this.mode !== 'BETWEEN') {\n this.query = from !== undefined ? from.toString() : undefined;\n this.updateQuery();\n return;\n }\n\n toQuery = (toQuery && Helper.IS.string(toQuery) ? toQuery.trim() : '').replace(/,/gi, '');\n const to: number | undefined = toQuery && this.isNumeric(toQuery) && !isNaN(+toQuery) ? +toQuery : undefined;\n\n this.query = from !== undefined && to !== undefined && from < to ? `${from}:${to}` : undefined;\n this.updateQuery();\n }\n\n updateQuery(): void {\n this.onChange(this.query && this.mode ? { query: this.query, mode: this.mode } : undefined);\n }\n}\n","<div class=\"filter-number\">\n @if (!this.data.filter.mode) {\n <div class=\"modes\">\n @for (item of modes; track $index) {\n <div class=\"mode\" [class.selected]=\"item.type === mode\" (click)=\"setMode(item.type)\">\n {{ item.title }}\n </div>\n }\n </div>\n }\n\n <!-- INPUTS -->\n <div class=\"inputs\" [style.display]=\"mode ? 'flex' : 'none'\">\n <!-- BETWEEN -->\n <input\n type=\"text\"\n [inputMode]=\"'numeric'\"\n [ngModel]=\"fromQuery\"\n [placeholder]=\"'حداقل'\"\n class=\"ngx-table-m3-en\"\n [mask]=\"'separator.0'\"\n thousandSeparator=\",\"\n decimalMarker=\".\"\n [allowNegativeNumbers]=\"true\"\n [maxLength]=\"15\"\n [inputTransformFn]=\"inputTransformFn\"\n [style.display]=\"mode === 'BETWEEN' ? 'initial' : 'none'\"\n (input)=\"setQuery(fromInput.value, toInput.value)\"\n #fromInput\n />\n <input\n type=\"text\"\n [inputMode]=\"'numeric'\"\n [ngModel]=\"toQuery\"\n [placeholder]=\"'حداکتر'\"\n class=\"ngx-table-m3-en\"\n [mask]=\"'separator.0'\"\n thousandSeparator=\",\"\n decimalMarker=\".\"\n [allowNegativeNumbers]=\"true\"\n [maxLength]=\"15\"\n [inputTransformFn]=\"inputTransformFn\"\n [style.display]=\"mode === 'BETWEEN' ? 'initial' : 'none'\"\n (input)=\"setQuery(fromInput.value, toInput.value)\"\n #toInput\n />\n <!-- OTHERS -->\n <input\n type=\"text\"\n [inputMode]=\"'numeric'\"\n [ngModel]=\"numberQuery\"\n [placeholder]=\"'مقدار'\"\n class=\"ngx-table-m3-en\"\n [mask]=\"'separator.0'\"\n thousandSeparator=\",\"\n decimalMarker=\".\"\n [allowNegativeNumbers]=\"true\"\n [maxLength]=\"15\"\n [inputTransformFn]=\"inputTransformFn\"\n [style.display]=\"mode !== 'BETWEEN' ? 'initial' : 'none'\"\n (input)=\"setQuery(numberInput.value, '')\"\n #numberInput\n />\n </div>\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { FilterMethods } from '../filter.interface';\n\ntype Mode = 'EQUAL' | 'GREATER' | 'LESS' | 'BETWEEN';\nconst modeList: Mode[] = ['EQUAL', 'GREATER', 'LESS', 'BETWEEN'];\n\nexport interface IFilterNumberValue {\n readonly query: string;\n readonly mode: Mode;\n}\n\nexport interface IFilterNumber {\n readonly type: 'NUMBER';\n readonly mode?: Mode;\n\n readonly toParam?: (value: IFilterNumberValue) => string;\n}\n\nexport class FilterNumberMethods<T> extends FilterMethods<IFilterNumber, IFilterNumberValue> {\n override toParam(value: IFilterNumberValue): string {\n return `${value.query}:${value.mode}`;\n }\n\n override value(value: string, filter: IFilterNumber): IFilterNumberValue | undefined {\n if (!value || !Helper.IS.string(value)) return undefined;\n\n const index: number = value.lastIndexOf(':');\n if (index === -1) return undefined;\n\n const query: string = value.substring(0, index);\n if (!query || !Helper.IS.string(query)) return undefined;\n\n const mode: Mode = value.substring(index + 1) as Mode;\n if (!modeList.includes(mode)) return undefined;\n if (filter.mode && filter.mode !== mode) return undefined;\n\n const isNumeric = (value: string): boolean => {\n if (value.substring(0, 1) === '-') value = value.substring(1);\n return Helper.IS.STRING.numeric(value);\n };\n switch (mode) {\n case 'EQUAL':\n case 'GREATER':\n case 'LESS':\n if (!isNumeric(query) || isNaN(+query)) return undefined;\n break;\n\n case 'BETWEEN':\n const [from, to] = query.split(':', 2);\n if (!from || !isNumeric(from) || isNaN(+from) || !to || !isNumeric(to) || isNaN(+to)) return undefined;\n if (+from >= +to) return undefined;\n break;\n }\n\n return { query, mode };\n }\n\n override query(value: IFilterNumberValue): string {\n return this.toParam(value);\n }\n\n override active(value: IFilterNumberValue, filter: IFilterNumber): { value: string; english: boolean } {\n let title: string = '';\n switch (value.mode) {\n case 'EQUAL':\n title = Helper.NUMBER.format(+value.query);\n break;\n case 'LESS':\n title = `کمتر از ${Helper.NUMBER.format(+value.query)}`;\n break;\n case 'GREATER':\n title = `بیشتر از ${Helper.NUMBER.format(+value.query)}`;\n break;\n case 'BETWEEN':\n const [from, to] = value.query.split(':');\n title = `${Helper.NUMBER.format(+from)} تا ${Helper.NUMBER.format(+to)}`;\n }\n return { value: title, english: false };\n }\n}\n","import { AfterViewInit, Component, ElementRef, HostBinding, inject, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { MatRadioButton, MatRadioGroup } from '@angular/material/radio';\n\nimport { Helper } from '@webilix/helper-library';\n\nimport { IViewConfig } from '../../views';\n\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE } from '../filter.interface';\n\nimport { IFilterSearch, IFilterSearchValue } from './filter-search.interface';\n\ntype Mode = IFilterSearchValue['mode'];\n\n@Component({\n host: { selector: 'filter-search' },\n imports: [FormsModule, MatRadioButton, MatRadioGroup],\n templateUrl: './filter-search.component.html',\n styleUrl: './filter-search.component.scss',\n})\nexport class FilterSearchComponent implements AfterViewInit {\n @HostBinding('className') private className: string = 'ngx-table-m3-filter';\n @ViewChild('searchInput') private searchInput?: ElementRef;\n\n public data: { filter: IFilterSearch; viewConfig: IViewConfig } = inject(FILTER_DATA);\n public value?: IFilterSearchValue = inject(FILTER_VALUE);\n public onChange: (value?: IFilterSearchValue) => void = inject(FILTER_CHANGE);\n\n public query?: string = this.value?.query;\n public mode: Mode = this.data.filter.mode || this.value?.mode || 'PHRASE';\n\n ngAfterViewInit(): void {\n if (!this.searchInput) return;\n\n const element: HTMLInputElement = this.searchInput.nativeElement;\n element?.focus();\n }\n\n updateQuery(query: string): void {\n query = query && Helper.IS.string(query) ? query.trim() : '';\n this.query = query.length === 0 ? undefined : query;\n\n this.onChange(this.query ? { query: this.query, mode: this.mode || 'PHRASE' } : undefined);\n }\n\n updateMode(mode: Mode): void {\n this.mode = mode;\n\n this.onChange(this.query ? { query: this.query, mode: this.mode || 'PHRASE' } : undefined);\n }\n}\n","<div class=\"filter-search\">\n <input\n type=\"text\"\n [ngModel]=\"query || ''\"\n [placeholder]=\"'جستجو'\"\n [class.ngx-table-m3-en]=\"data.filter.english\"\n (input)=\"updateQuery(searchInput.value)\"\n #searchInput\n />\n</div>\n\n@if (!data.filter.mode) {\n<div class=\"filter-items\">\n <mat-radio-group (change)=\"updateMode($event.value)\">\n <mat-radio-button [value]=\"'PHRASE'\" [checked]=\"mode === 'PHRASE'\">\n <div class=\"title\">عبارت کامل</div>\n </mat-radio-button>\n <mat-radio-button [value]=\"'ALL'\" [checked]=\"mode === 'ALL'\">\n <div class=\"title\">همه کلمات</div>\n </mat-radio-button>\n <mat-radio-button [value]=\"'EACH'\" [checked]=\"mode === 'EACH'\">\n <div class=\"title\">هر کدام از کلمات</div>\n </mat-radio-button>\n </mat-radio-group>\n</div>\n}\n","import { Helper } from '@webilix/helper-library';\n\nimport { FilterMethods } from '../filter.interface';\n\ntype Mode = 'PHRASE' | 'ALL' | 'EACH';\nconst modeList: Mode[] = ['PHRASE', 'ALL', 'EACH'];\n\nexport interface IFilterSearchValue {\n readonly query: string;\n readonly mode: Mode;\n}\n\nexport interface IFilterSearch {\n readonly type: 'SEARCH';\n readonly mode?: Mode;\n readonly english?: boolean;\n\n readonly toParam?: (value: IFilterSearchValue) => string;\n}\n\nexport class FilterSearchMethods<T> extends FilterMethods<IFilterSearch, IFilterSearchValue> {\n override toParam(value: IFilterSearchValue): string {\n return `${value.query}:${value.mode}`;\n }\n\n override value(value: string, filter: IFilterSearch): IFilterSearchValue | undefined {\n if (!value || !Helper.IS.string(value)) return undefined;\n\n const index: number = value.lastIndexOf(':');\n if (index === -1) return undefined;\n\n const query: string = value.substring(0, index);\n if (!query || !Helper.IS.string(query)) return undefined;\n\n const mode: Mode = value.substring(index + 1) as Mode;\n if (!modeList.includes(mode)) return undefined;\n if (filter.mode && filter.mode !== mode) return undefined;\n\n return { query, mode };\n }\n\n override query(value: IFilterSearchValue): string {\n return this.toParam(value);\n }\n\n override active(value: IFilterSearchValue, filter: IFilterSearch): { value: string; english: boolean } {\n return { value: value.query, english: !!filter.english };\n }\n}\n","import { Component, HostBinding, inject, OnInit } from '@angular/core';\n\nimport { MatRadioButton, MatRadioGroup } from '@angular/material/radio';\n\nimport { IViewConfig } from '../../views';\n\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE } from '../filter.interface';\n\nimport { IFilterSelect } from './filter-select.interface';\n\n@Component({\n host: { selector: 'filter-select' },\n imports: [MatRadioButton, MatRadioGroup],\n templateUrl: './filter-select.component.html',\n styleUrl: './filter-select.component.scss',\n})\nexport class FilterSelectComponent implements OnInit {\n @HostBinding('className') private className: string = 'ngx-table-m3-filter';\n\n public data: { filter: IFilterSelect; viewConfig: IViewConfig } = inject(FILTER_DATA);\n public value?: string = inject(FILTER_VALUE);\n public onChange: (value?: string) => void = inject(FILTER_CHANGE);\n\n private searchQuery: string = '';\n public options: {\n readonly id: string;\n readonly title: string;\n }[] = [];\n\n ngOnInit(): void {\n this.setOptions('');\n }\n\n setOptions(query: string) {\n this.searchQuery = query.trim() || '';\n this.options = this.data.filter.options.filter(\n (o) => this.value === o.id || !this.searchQuery || o.title.includes(this.searchQuery),\n );\n\n const maxItem: number = this.data.filter.maxItem || 0;\n if (maxItem > 20) this.options = this.options.slice(0, maxItem);\n }\n\n updateValue(id: string): void {\n this.value = id;\n this.onChange(this.value);\n }\n}\n","@if (data.filter.options.length > 20) {\n<div class=\"filter-item-search\">\n <input\n type=\"text\"\n [placeholder]=\"'جستجو'\"\n [class.ngx-table-m3-en]=\"data.filter.english\"\n (input)=\"setOptions(searchInput.value.trim())\"\n #searchInput\n />\n</div>\n}\n\n<div class=\"filter-items\">\n <mat-radio-group (change)=\"updateValue($event.value)\">\n @for (item of options; track $index) {\n <mat-radio-button [value]=\"item.id\" [checked]=\"item.id === value\">\n <div class=\"title\" [class.ngx-table-m3-en]=\"data.filter.english\">{{ item.title }}</div>\n </mat-radio-button>\n }\n </mat-radio-group>\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { FilterMethods } from '../filter.interface';\n\nexport interface IFilterSelect {\n readonly type: 'SELECT';\n readonly options: {\n readonly id: string;\n readonly title: string;\n }[];\n readonly english?: boolean;\n readonly maxItem?: number;\n\n readonly toParam?: (value: string) => string;\n}\n\nexport class FilterSelectMethods<T> extends FilterMethods<IFilterSelect, string> {\n override toParam(value: string): string {\n return value;\n }\n\n override value(value: string, filter: IFilterSelect): string | undefined {\n if (!value || !Helper.IS.string(value)) return undefined;\n\n const ids: string[] = filter.options.map((options) => options.id);\n return ids.includes(value) ? value : undefined;\n }\n\n override query(value: string): string {\n return this.toParam(value);\n }\n\n override active(value: string, filter: IFilterSelect): { value: string; english: boolean } {\n return { value: filter.options.find((o) => o.id === value)?.title || '', english: !!filter.english };\n }\n}\n","import { ComponentType } from '@angular/cdk/portal';\n\nimport {\n Filter,\n FilterDateComponent,\n FilterDateMethods,\n FilterMethods,\n FilterMultiSelectComponent,\n FilterMultiSelectMethods,\n FilterNumberComponent,\n FilterNumberMethods,\n FilterSearchComponent,\n FilterSearchMethods,\n FilterSelectComponent,\n FilterSelectMethods,\n} from '.';\n\nexport const FilterInfo: {\n [key in Filter['type']]: {\n readonly methods: FilterMethods<any, any>;\n readonly component: ComponentType<any>;\n };\n} = {\n DATE: { methods: new FilterDateMethods(), component: FilterDateComponent },\n 'MULTI-SELECT': { methods: new FilterMultiSelectMethods(), component: FilterMultiSelectComponent },\n NUMBER: { methods: new FilterNumberMethods(), component: FilterNumberComponent },\n SEARCH: { methods: new FilterSearchMethods(), component: FilterSearchComponent },\n SELECT: { methods: new FilterSelectMethods(), component: FilterSelectComponent },\n};\n","import { Component, HostBinding, inject, Injector, OnInit } from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\n\nimport { MatButton } from '@angular/material/button';\n\nimport { NGX_HELPER_CONTAINER_CLOSE, NGX_HELPER_CONTAINER_DATA } from '@webilix/ngx-helper-m3';\n\nimport { IViewConfig } from '../views';\n\nimport { FilterInfo } from './filter.info';\nimport { FILTER_CHANGE, FILTER_DATA, FILTER_VALUE, IFilter } from './filter.interface';\n\n@Component({\n selector: 'filter',\n host: { '(window:keydown)': 'onKeydown($event)' },\n imports: [MatButton, NgComponentOutlet],\n templateUrl: './filter.component.html',\n styleUrl: './filter.component.scss',\n})\nexport class FilterComponent implements OnInit {\n @HostBinding('className') private className: string = 'ngx-table-m3-filter';\n\n public data: { filter: IFilter; viewConfig: IViewConfig } = inject(NGX_HELPER_CONTAINER_DATA);\n public closeContainer: (response?: any) => void = inject(NGX_HELPER_CONTAINER_CLOSE);\n\n public filterInfo = FilterInfo;\n\n public value?: any = undefined;\n public injector!: Injector;\n\n ngOnInit(): void {\n this.value = this.data.filter.value;\n\n this.injector = Injector.create({\n providers: [\n { provide: FILTER_DATA, useValue: { filter: this.data.filter.filter, viewConfig: this.data.viewConfig } },\n { provide: FILTER_VALUE, useValue: this.value },\n { provide: FILTER_CHANGE, useFactory: () => (value?: any) => (this.value = value) },\n ],\n });\n }\n\n onKeydown(event: any): void {\n if (!(event instanceof KeyboardEvent)) return;\n if (event.code === 'Enter' && this.value) this.closeContainer({ value: this.value });\n }\n}\n","<div class=\"filter-content\">\n <ng-container *ngComponentOutlet=\"filterInfo[data.filter.filter.type].component; injector: injector\"></ng-container>\n</div>\n\n<div class=\"filter-footer\">\n <button mat-stroked-button type=\"button\" [disabled]=\"!value\" (click)=\"closeContainer({ value: undefined })\">\n لغو فیلتر\n </button>\n <button mat-flat-button type=\"button\" class=\"confirm\" [disabled]=\"!value\" (click)=\"closeContainer({value})\">\n تایید\n </button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { Helper } from '@webilix/helper-library';\nimport { NgxHelperContainerService } from '@webilix/ngx-helper-m3';\n\nimport { IViewConfig } from '../views';\nimport { INgxTable } from '../ngx-table.interface';\n\nimport { FilterComponent } from './filter.component';\nimport { FilterInfo } from './filter.info';\nimport { IFilter } from './filter.interface';\n\nexport type Filters = { [key: string]: IFilter };\n\n@Injectable()\nexport class FilterService {\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly ngxHelperContainerService: NgxHelperContainerService,\n ) {}\n\n getFilters<T>(ngxTable: INgxTable<T>): Filters {\n const filters: Filters = {};\n\n // CHECK COLUMNS\n ngxTable.columns.forEach((column) => {\n if (!column.tools || !('filter' in column.tools) || !column.tools.filter) return;\n\n const title: string = column.title || '';\n const key: string = column.tools.id;\n filters[key] = { title, filter: column.tools.filter };\n });\n\n if (Object.keys(filters).length === 0) return {};\n\n // CHECK QUERY PARAMS\n const queryParams: { [key: string]: any } = { ...this.activatedRoute.snapshot.queryParams };\n Object.keys(filters).forEach((id: string) => {\n const param: string = queryParams[`ngx-table-filter-${id}`];\n if (!param || !Helper.IS.string(param)) return;\n\n const column = ngxTable.columns.find((column) => column.tools?.id === id);\n if (!column || !column.tools || !('filter' in column.tools) || !column.tools.filter) return;\n\n const value = FilterInfo[column.tools.filter.type].methods.value(param, column.tools.filter);\n filters[id] = { ...filters[id], value };\n });\n\n return filters;\n }\n\n updateFilter(filter: IFilter, viewConfig: IViewConfig): Promise<IFilter | undefined> {\n return new Promise<IFilter | undefined>((resolve) => {\n this.ngxHelperContainerService\n .init(FilterComponent, filter.title, { data: { filter, viewConfig }, padding: '0' })\n .bottomSheet<{ value: any }>(\n (response) => resolve({ ...filter, value: response.value }),\n () => resolve(undefined),\n );\n });\n }\n}\n","import { Component, HostBinding, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { Router } from '@angular/router';\n\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { NgxTableAction } from '../../ngx-table.interface';\n\nimport { IViewConfig } from '../view.interface';\n\ninterface Action<T> {\n readonly title: string;\n readonly icon: string;\n readonly action: (data: T) => string[] | void;\n readonly color?: string;\n readonly isDisabled: boolean;\n}\n\n@Component({\n selector: 'view-action',\n imports: [MatButton, MatDivider, MatIconButton, MatIcon, MatMenuModule],\n templateUrl: './view-action.component.html',\n styleUrl: './view-action.component.scss',\n})\nexport class ViewActionComponent<T> implements OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-action';\n\n @Input({ required: true }) actions!: NgxTableAction<T>[];\n @Input({ required: true }) item!: T;\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Input({ required: true }) isMobile!: boolean;\n\n public inRow: Action<T>[] = [];\n public inMenu: ('DIVIDER' | Action<T>)[] = [];\n\n constructor(private readonly router: Router) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.inRow = [];\n this.inMenu = [];\n\n this.actions.forEach((action: NgxTableAction<T>) => {\n if (action === 'DIVIDER') {\n if (this.inMenu.length === 0) return;\n if (this.inMenu[this.inMenu.length - 1] === 'DIVIDER') return;\n\n this.inMenu.push('DIVIDER');\n return;\n }\n\n if (action.hideOn && action.hideOn(this.item)) return;\n\n let item: Action<T> | undefined = undefined;\n const isDisabled: boolean = !!action.disableOn && action.disableOn(this.item);\n\n switch (action.type) {\n case 'ACTION':\n item = {\n title: action.title,\n icon: action.icon,\n action: action.action,\n color: action.color,\n isDisabled,\n };\n break;\n\n case 'UPDATE':\n item = { title: 'ویرایش', icon: 'edit', action: action.action, isDisabled };\n break;\n\n case 'DELETE':\n item = {\n title: 'حذف',\n icon: 'delete',\n color: 'var(--error)',\n action: action.action,\n isDisabled,\n };\n break;\n\n case 'STATUS':\n const isDeactive: boolean = action.isDeactive(this.item);\n item = {\n title: isDeactive ? 'فعال کردن' : 'غیرفعال کردن',\n icon: isDeactive ? 'check_box' : 'disabled_by_default',\n color: isDeactive ? undefined : 'var(--error)',\n action: (data: T) => action.action(data, isDeactive),\n isDisabled,\n };\n break;\n\n case 'LOG':\n item = {\n title: 'گزارش تغییرات',\n icon: 'published_with_changes',\n action: action.action,\n isDisabled,\n };\n break;\n }\n\n if (!item) return;\n action.standalone ? this.inRow.push(item) : this.inMenu.push(item);\n });\n\n while (this.inMenu[this.inMenu.length - 1] === 'DIVIDER') this.inMenu.splice(this.inMenu.length - 1, 1);\n\n if (this.inMenu.length === 1 && this.inMenu[0] !== 'DIVIDER') {\n this.inRow.push(this.inMenu[0]);\n this.inMenu = [];\n }\n }\n\n onClick(action: (data: T) => string[] | void): void {\n const result = action(this.item);\n if (result) this.router.navigate(result);\n }\n}\n","<!-- ROW -->\n@for (item of inRow; track $index) {\n<!-- DESKTOP -->\n@if (!isMobile) {\n<button\n mat-button\n type=\"button\"\n class=\"desktop-view\"\n [style.color]=\"item.isDisabled ? '' : item.color\"\n [disabled]=\"item.isDisabled\"\n (click)=\"onClick(item.action)\"\n>\n {{ item.title }}\n</button>\n}\n<!-- MOBILE -->\n@else {\n<button mat-icon-button type=\"button\" [disabled]=\"item.isDisabled\" (click)=\"onClick(item.action)\">\n <mat-icon [style.color]=\"item.isDisabled ? '' : item.color\" [class.disabled]=\"item.isDisabled\">{{ item.icon }}</mat-icon>\n</button>\n} }\n\n<!-- MENU -->\n@if (this.inMenu.length > 0) {\n<!-- DESKTOP -->\n@if (!isMobile) {\n<button mat-button type=\"button\" class=\"desktop-view\" [matMenuTriggerFor]=\"actionMenu\">\n {{ viewConfig.actionMenuTitle }}\n</button>\n}\n<!-- MOBILE -->\n@else {\n<button mat-icon-button type=\"button\" [matMenuTriggerFor]=\"actionMenu\">\n <mat-icon>more_vert</mat-icon>\n</button>\n}\n\n<mat-menu #actionMenu=\"matMenu\" [xPosition]=\"'before'\" class=\"ngx-table-action-menu\">\n @for (item of inMenu; track $index) {\n <!-- DIVIDER -->\n @if (item === 'DIVIDER') {\n <mat-divider></mat-divider>\n }\n\n <!-- MENU ITEM -->\n @else {\n <button\n mat-menu-item\n type=\"button\"\n [class.disabled]=\"item.isDisabled\"\n [style.color]=\"item.isDisabled ? '' : item.color\"\n (click)=\"onClick(item.action)\"\n [disabled]=\"item.isDisabled\"\n >\n <span class=\"title\">{{ item.title }}</span>\n <mat-icon [style.color]=\"item.isDisabled ? '' : item.color\">{{ item.icon }}</mat-icon>\n </button>\n } }\n</mat-menu>\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { Filter } from '../filters';\n\ninterface IColumnOrder {\n readonly type?: 'ORDER' | 'ASC' | 'DESC';\n readonly initial?: 'ASC' | 'DESC';\n readonly isDefault?: boolean;\n}\n\nexport interface IColumn<T> {\n readonly title: string;\n readonly value: keyof T | ((data: T) => any);\n readonly subValue?: keyof T | ((data: T) => string | { value: string; english: true } | undefined);\n readonly english?: ((data: T) => boolean) | boolean;\n readonly color?: string | ((data: T) => string | null | undefined);\n readonly textAlign?: 'RIGHT' | 'CENTER' | 'LEFT';\n readonly mode?: 'TITLE' | 'SUBTITLE';\n\n readonly onClick?: (data: T) => string[] | (() => void);\n readonly onCopy?: (data: T) => string;\n\n readonly tools?:\n | { readonly id: string; readonly order: IColumnOrder }\n | { readonly id: string; readonly filter: Filter }\n | { readonly id: string; readonly order: IColumnOrder; readonly filter: Filter };\n}\n\nexport abstract class ColumnMethods<C /** COLUMN **/, V /** VALUE **/> {\n abstract column(column: C): C;\n abstract value(value: any, column?: C): V | undefined;\n}\n\nexport interface IColumnConfig {\n readonly isEN: boolean;\n readonly isDeactive: boolean;\n}\n\nexport const COLUMN_TYPE: InjectionToken<any> = new InjectionToken('NGX-TABLE-COLUMN-TYPE');\nexport const COLUMN_CONFIG: InjectionToken<IColumnConfig> = new InjectionToken('NGX-TABLE-COLUMN-CONFIG');\nexport const COLUMN_VALUE: InjectionToken<any> = new InjectionToken('NGX-TABLE-COLUMN-VALUE');\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperDatePipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnDate } from './column-date.interface';\n\n@Component({\n host: { selector: 'column-date' },\n imports: [NgxHelperDatePipe],\n templateUrl: './column-date.component.html',\n styleUrl: './column-date.component.scss',\n})\nexport class ColumnDateComponent<T> {\n public column: IColumnDate<T> = inject(COLUMN_TYPE);\n public value: Date = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div [style.display]=\"'inline-block'\" [class.ngx-table-m3-deactive]=\"config.isDeactive\">\n {{ value | ngxHelperDate : { format: column.format } }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnDate<T> extends Omit<IColumn<T>, 'title' | 'english'> {\n readonly type: 'DATE';\n readonly title?: string;\n readonly format?: string | 'FULL' | 'SHORT' | 'DATE' | 'TIME' | 'WEEK' | 'MONTH' | 'YEAR';\n}\n\nexport class ColumnDateMethods<T> extends ColumnMethods<IColumnDate<T>, Date> {\n override column(column: IColumnDate<T>): IColumnDate<T> {\n return { ...column, title: column.title || 'تاریخ' };\n }\n\n override value(value: any, column?: IColumnDate<T> | undefined): Date | undefined {\n return Helper.IS.date(value) ? value : undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperDurationPipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnDuration } from './column-duration.interface';\n\n@Component({\n host: { selector: 'column-duration' },\n imports: [NgxHelperDurationPipe],\n templateUrl: './column-duration.component.html',\n styleUrl: './column-duration.component.scss',\n})\nexport class ColumnDurationComponent<T> {\n public column: IColumnDuration<T> = inject(COLUMN_TYPE);\n public value: number = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value | ngxHelperDuration : { english: config.isEN, format: column.format } }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnDuration<T> extends IColumn<T> {\n readonly type: 'DURATION';\n readonly format?: 'FULL' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND';\n}\n\nexport class ColumnDurationMethods<T> extends ColumnMethods<IColumnDuration<T>, number> {\n override column(column: IColumnDuration<T>): IColumnDuration<T> {\n return { ...column };\n }\n\n override value(value: any, column?: IColumnDuration<T> | undefined): number | undefined {\n if (Helper.IS.number(value)) return Math.abs(value);\n else if (Helper.IS.date(value)) return Math.floor(Math.abs(new Date().getTime() - value.getTime()) / 1000);\n else if (Helper.IS.object(value)) {\n const from: Date | undefined = Helper.IS.date(value?.from) ? value.from : undefined;\n const to: Date | undefined = Helper.IS.date(value?.to) ? value.to : undefined;\n\n if (!from && !to) return undefined;\n return Math.floor(Math.abs((from || new Date()).getTime() - (to || new Date()).getTime()) / 1000);\n }\n\n return undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperFileSizePipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnFileSize } from './column-file-size.interface';\n\n@Component({\n host: { selector: 'column-file-size' },\n imports: [NgxHelperFileSizePipe],\n templateUrl: './column-file-size.component.html',\n styleUrl: './column-file-size.component.scss',\n})\nexport class ColumnFileSizeComponent<T> {\n public column: IColumnFileSize<T> = inject(COLUMN_TYPE);\n public value: number = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value | ngxHelperFileSize : { english: config.isEN } }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnFileSize<T> extends Omit<IColumn<T>, 'title'> {\n readonly type: 'FILE-SIZE';\n readonly title?: string;\n readonly format?: 'FULL' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND';\n}\n\nexport class ColumnFileSizeMethods<T> extends ColumnMethods<IColumnFileSize<T>, number> {\n override column(column: IColumnFileSize<T>): IColumnFileSize<T> {\n return { ...column, title: column.title || 'حجم فایل' };\n }\n\n override value(value: any, column?: IColumnFileSize<T> | undefined): number | undefined {\n return Helper.IS.number(value) && value >= 0 ? value : undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperMobilePipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnMobile } from './column-mobile.interface';\n\n@Component({\n host: { selector: 'column-mobile' },\n imports: [NgxHelperMobilePipe],\n templateUrl: './column-mobile.component.html',\n styleUrl: './column-mobile.component.scss',\n})\nexport class ColumnMobileComponent<T> {\n public column: IColumnMobile<T> = inject(COLUMN_TYPE);\n public value: string = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [style.direction]=\"'ltr'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value | ngxHelperMobile }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnMobile<T> extends Omit<IColumn<T>, 'title'> {\n readonly type: 'MOBILE';\n readonly title?: string;\n}\n\nexport class ColumnMobileMethods<T> extends ColumnMethods<IColumnMobile<T>, string> {\n override column(column: IColumnMobile<T>): IColumnMobile<T> {\n return { ...column, title: column.title || 'موبایل' };\n }\n\n override value(value: any, column?: IColumnMobile<T> | undefined): string | undefined {\n return Helper.IS.STRING.mobile(value) ? value : undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperNumberPipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnNumber } from './column-number.interface';\n\n@Component({\n host: { selector: 'column-number' },\n imports: [NgxHelperNumberPipe],\n templateUrl: './column-number.component.html',\n styleUrl: './column-number.component.scss',\n})\nexport class ColumnNumberComponent<T> {\n public column: IColumnNumber<T> = inject(COLUMN_TYPE);\n public value: number = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [style.direction]=\"'ltr'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value | ngxHelperNumber : { english: config.isEN, fractionDigits: column.fractionDigits } }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnNumber<T> extends IColumn<T> {\n readonly type: 'NUMBER';\n readonly fractionDigits?: number;\n}\n\nexport class ColumnNumberMethods<T> extends ColumnMethods<IColumnNumber<T>, number> {\n override column(column: IColumnNumber<T>): IColumnNumber<T> {\n return { ...column };\n }\n\n override value(value: any, column?: IColumnNumber<T> | undefined): number | undefined {\n return Helper.IS.number(value) ? value : undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperPeriodPipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnPeriod } from './column-period.interface';\n\n@Component({\n host: { selector: 'column-period' },\n imports: [NgxHelperPeriodPipe],\n templateUrl: './column-period.component.html',\n styleUrl: './column-period.component.scss',\n})\nexport class ColumnPeriodComponent<T> {\n public column: IColumnPeriod<T> = inject(COLUMN_TYPE);\n public value: { from: Date; to: Date } = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div [style.display]=\"'inline-block'\" [class.ngx-table-m3-deactive]=\"config.isDeactive\">\n {{ value | ngxHelperPeriod }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnPeriod<T> extends Omit<IColumn<T>, 'english'> {\n readonly type: 'PERIOD';\n}\n\nexport class ColumnPeriodMethods<T> extends ColumnMethods<IColumnPeriod<T>, { from?: Date; to?: Date }> {\n override column(column: IColumnPeriod<T>): IColumnPeriod<T> {\n return { ...column };\n }\n\n override value(value: any, column?: IColumnPeriod<T> | undefined): { from?: Date; to?: Date } | undefined {\n if (Helper.IS.date(value)) return { from: value };\n else if (Helper.IS.object(value)) {\n const from: Date | undefined = Helper.IS.date(value?.from) ? value.from : undefined;\n const to: Date | undefined = Helper.IS.date(value?.to) ? value.to : undefined;\n\n return from || to ? { from, to } : undefined;\n }\n\n return undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnText } from './column-text.interface';\n\n@Component({\n host: { selector: 'column-text' },\n imports: [],\n templateUrl: './column-text.component.html',\n styleUrl: './column-text.component.scss',\n})\nexport class ColumnTextComponent<T> {\n public column: IColumnText<T> = inject(COLUMN_TYPE);\n public value: string = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnText<T> extends IColumn<T> {\n readonly type: 'TEXT';\n}\n\nexport class ColumnTextMethods<T> extends ColumnMethods<IColumnText<T>, string> {\n override column(column: IColumnText<T>): IColumnText<T> {\n return { ...column };\n }\n\n override value(value: any, column?: IColumnText<T> | undefined): string | undefined {\n return Helper.IS.string(value) && value !== '' ? value : undefined;\n }\n}\n","import { Component, inject } from '@angular/core';\n\nimport { NgxHelperWeightPipe } from '@webilix/ngx-helper-m3';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, IColumnConfig } from '../column.interface';\n\nimport { IColumnWeight } from './column-weight.interface';\n\n@Component({\n host: { selector: 'column-weight' },\n imports: [NgxHelperWeightPipe],\n templateUrl: './column-weight.component.html',\n styleUrl: './column-weight.component.scss',\n})\nexport class ColumnWeightComponent<T> {\n public column: IColumnWeight<T> = inject(COLUMN_TYPE);\n public value: number = inject(COLUMN_VALUE);\n public config: IColumnConfig = inject(COLUMN_CONFIG);\n}\n","<div\n [style.display]=\"'inline-block'\"\n [style.direction]=\"config.isEN ? 'ltr' : 'rtl'\"\n [class.ngx-table-m3-en]=\"config.isEN\"\n [class.ngx-table-m3-deactive]=\"config.isDeactive\"\n>\n {{ value | ngxHelperWeight : { short:column.short, english: config.isEN, } }}\n</div>\n","import { Helper } from '@webilix/helper-library';\n\nimport { ColumnMethods, IColumn } from '../column.interface';\n\nexport interface IColumnWeight<T> extends Omit<IColumn<T>, 'title'> {\n readonly type: 'WEIGHT';\n readonly title?: string;\n readonly short?: boolean;\n}\n\nexport class ColumnWeightMethods<T> extends ColumnMethods<IColumnWeight<T>, number> {\n override column(column: IColumnWeight<T>): IColumnWeight<T> {\n return { ...column, title: column.title || 'وزن' };\n }\n\n override value(value: any, column?: IColumnWeight<T> | undefined): number | undefined {\n return Helper.IS.number(value) ? value : undefined;\n }\n}\n","import { ComponentType } from '@angular/cdk/portal';\n\nimport { NgxTableColumn } from '../ngx-table.interface';\n\nimport {\n ColumnDateComponent,\n ColumnDateMethods,\n ColumnDurationComponent,\n ColumnDurationMethods,\n ColumnFileSizeComponent,\n ColumnFileSizeMethods,\n ColumnMethods,\n ColumnMobileComponent,\n ColumnMobileMethods,\n ColumnNumberComponent,\n ColumnNumberMethods,\n ColumnPeriodComponent,\n ColumnPeriodMethods,\n ColumnTextComponent,\n ColumnTextMethods,\n ColumnWeightComponent,\n ColumnWeightMethods,\n} from '.';\n\nexport const ColumnInfo: {\n [key in NgxTableColumn<any>['type']]: {\n readonly methods: ColumnMethods<any, any>;\n readonly component: ComponentType<any>;\n };\n} = {\n DATE: { methods: new ColumnDateMethods(), component: ColumnDateComponent },\n DURATION: { methods: new ColumnDurationMethods(), component: ColumnDurationComponent },\n 'FILE-SIZE': { methods: new ColumnFileSizeMethods(), component: ColumnFileSizeComponent },\n MOBILE: { methods: new ColumnMobileMethods(), component: ColumnMobileComponent },\n NUMBER: { methods: new ColumnNumberMethods(), component: ColumnNumberComponent },\n PERIOD: { methods: new ColumnPeriodMethods(), component: ColumnPeriodComponent },\n TEXT: { methods: new ColumnTextMethods(), component: ColumnTextComponent },\n WEIGHT: { methods: new ColumnWeightMethods(), component: ColumnWeightComponent },\n};\n","import { Component, HostBinding, Injector, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { NgComponentOutlet } from '@angular/common';\nimport { ClipboardModule } from '@angular/cdk/clipboard';\nimport { Router } from '@angular/router';\n\nimport { MatIcon } from '@angular/material/icon';\n\nimport { Helper } from '@webilix/helper-library';\n\nimport { COLUMN_CONFIG, COLUMN_TYPE, COLUMN_VALUE, ColumnInfo, IColumnConfig } from '../../columns';\nimport { NgxTableColumn } from '../../ngx-table.interface';\n\nimport { IViewConfig } from '../view.interface';\n\n@Component({\n selector: 'view-value',\n imports: [NgComponentOutlet, ClipboardModule, MatIcon],\n templateUrl: './view-value.component.html',\n styleUrl: './view-value.component.scss',\n})\nexport class ViewValueComponent<T> implements OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-value';\n @HostBinding('style.text-align') private textAlign: string = 'left';\n\n @Input({ required: true }) column!: NgxTableColumn<T>;\n @Input({ required: true }) item!: T;\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Input({ required: false }) isDeactive?: boolean;\n @Input({ required: false }) isCard?: boolean;\n @Input({ required: false }) isCardTitle?: boolean;\n @Input({ required: false }) isCardSubTitle?: boolean;\n\n public columnInfo = ColumnInfo;\n public injector!: Injector;\n\n public value!: any;\n public subValue?: { value: string; isEN: boolean };\n public color?: string;\n public hasClick!: boolean;\n public copyText?: string;\n\n public isCopied: boolean = false;\n private copyTimeout: any;\n\n constructor(private readonly router: Router) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.textAlign = this.isCard ? 'right' : (this.column.textAlign || 'RIGHT').toLocaleLowerCase();\n\n this.value = this.getValue();\n this.subValue = this.getSubValue();\n this.color = this.column.color\n ? typeof this.column.color === 'function'\n ? this.column.color(this.item) || undefined\n : this.column.color\n : undefined;\n this.hasClick = !!this.column.onClick;\n this.copyText = !this.hasClick && this.column.onCopy ? this.column.onCopy(this.item) : undefined;\n\n const columnConfig: IColumnConfig = {\n isEN:\n 'english' in this.column && this.column.english\n ? typeof this.column.english === 'function'\n ? this.column.english(this.item)\n : this.column.english\n : false,\n isDeactive: !!this.isDeactive,\n };\n this.injector = Injector.create({\n providers: [\n { provide: COLUMN_TYPE, useValue: this.column },\n { provide: COLUMN_VALUE, useValue: this.value },\n { provide: COLUMN_CONFIG, useValue: columnConfig },\n ],\n });\n }\n\n getValue(): any {\n const value: any =\n typeof this.column.value === 'function' ? this.column.value(this.item) : this.item[this.column.value];\n if (Helper.IS.empty(value)) return undefined;\n\n return ColumnInfo[this.column.type].methods.value(value, this.column);\n }\n\n getSubValue(): { value: string; isEN: boolean } | undefined {\n if (!this.column.subValue) return undefined;\n\n if (typeof this.column.subValue === 'function') {\n const subValue = this.column.subValue(this.item);\n if (subValue === undefined || Helper.IS.empty(subValue)) return undefined;\n\n return {\n value: typeof subValue === 'string' ? subValue : subValue.value,\n isEN: typeof subValue === 'string' ? false : !!subValue.english,\n };\n } else {\n const subValue: any = this.item[this.column.subValue];\n if (Helper.IS.empty(subValue)) return undefined;\n\n return { value: subValue, isEN: false };\n }\n }\n\n onClick(): void {\n if (!this.column.onClick) return;\n\n const onClick = this.column.onClick(this.item);\n if (typeof onClick === 'function') onClick();\n else this.router.navigate(onClick);\n }\n\n onCopy(): void {\n if (!this.copyText) return;\n if (this.copyTimeout) clearTimeout(this.copyTimeout);\n\n this.isCopied = true;\n this.copyTimeout = setTimeout(() => {\n this.isCopied = false;\n this.copyTimeout = undefined;\n }, 2000);\n }\n}\n","<!-- EMPTY VALUE -->\n@if (value === undefined) { }\n\n<!-- SHOW VALUE -->\n@else {\n<div class=\"value-container\" [style.color]=\"color\" [class.card-title]=\"isCardTitle\" [class.card-sub-title]=\"isCardSubTitle\">\n <div\n class=\"value\"\n [style.cursor]=\"hasClick || copyText ? 'pointer' : 'default'\"\n (click)=\"hasClick ? onClick() : copyText ? onCopy() : null\"\n [cdkCopyToClipboard]=\"copyText || ''\"\n >\n <ng-container *ngComponentOutlet=\"columnInfo[column.type].component; injector: injector\"></ng-container>\n <!-- CLICK -->\n @if (hasClick) { <mat-icon>open_in_new</mat-icon> }\n <!-- COPY -->\n @if (copyText) { <mat-icon>{{ isCopied ? 'done_all' : 'copy' }}</mat-icon> }\n </div>\n\n <!-- SUB VALUE -->\n @if (subValue) {\n <div class=\"sub-value\" [class.ngx-table-m3-en]=\"subValue.isEN\">{{ subValue.value }}</div>\n }\n</div>\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\nimport { INgxTable } from '../ngx-table.interface';\n\ntype OrderType = 'ASC' | 'DESC';\ninterface IOrder {\n readonly title: string;\n readonly type: 'ORDER' | OrderType;\n readonly initial: OrderType;\n readonly current?: OrderType;\n}\nexport type Orders = { [key: string]: IOrder };\n\n@Injectable()\nexport class ViewService {\n constructor(private readonly activatedRoute: ActivatedRoute) {}\n\n getTitleIndex<T>(ngxTable: INgxTable<T>): number {\n const index: number = ngxTable.columns.findIndex((l) => l.mode === 'TITLE');\n return index === -1 ? 0 : index;\n }\n\n getSubTitleIndex<T>(ngxTable: INgxTable<T>): number | undefined {\n const index: number = ngxTable.columns.findIndex((l) => l.mode === 'SUBTITLE');\n return index === -1 ? undefined : index;\n }\n\n getIcons<T>(ngxTable: INgxTable<T>, data: T[]): { icon: string; color?: string }[] {\n const iconFn = ngxTable.rows?.icon;\n if (!iconFn) return [];\n\n return data.map((item, index: number) => {\n const icon = iconFn(item, index);\n return typeof icon === 'string'\n ? { icon }\n : 'emoji' in icon\n ? { icon: '' }\n : { icon: icon.icon, color: icon.color || undefined };\n });\n }\n\n getEmojis<T>(ngxTable: INgxTable<T>, data: T[]): string[] {\n const iconFn = ngxTable.rows?.icon;\n if (!iconFn) return [];\n\n return data.map((item, index: number) => {\n const icon = iconFn(item, index);\n return typeof icon === 'string' ? '' : 'emoji' in icon ? icon.emoji : '';\n });\n }\n\n getColors<T>(ngxTable: INgxTable<T>, data: T[]): string[] {\n const colorFn = ngxTable.rows?.color;\n if (!colorFn) return [];\n\n return data.map((item, index: number) => colorFn(item, index) || '');\n }\n\n getDescriptions<T>(ngxTable: INgxTable<T>, data: T[]): (string | undefined)[] {\n const descriptionFn = ngxTable.rows?.description;\n if (!descriptionFn) return [];\n\n return data.map((item, index: number) => descriptionFn(item, index) || undefined);\n }\n\n getDeactives<T>(ngxTable: INgxTable<T>, data: T[]): number[] {\n const deactives: number[] = [];\n data.forEach((item: T, index: number) => {\n if (ngxTable.rows?.isDeactive?.(item, index)) deactives.push(index);\n });\n\n return deactives;\n }\n\n getOrders<T>(ngxTable: INgxTable<T>): Orders {\n let defaultFound: boolean = false;\n const orders: Orders = {};\n\n // CHECK COLUMNS\n ngxTable.columns.forEach((column) => {\n if (!column.tools || !('order' in column.tools) || !column.tools.order) return;\n\n const title: string = column.title || '';\n const key: string = column.tools.id;\n const type: 'ORDER' | OrderType = column.tools.order.type || 'ORDER';\n const initial: OrderType = type !== 'ORDER' ? type : column.tools.order.initial || 'ASC';\n const isDefault: boolean = !defaultFound && !!column.tools.order.isDefault;\n\n orders[key] = { title, type, initial, current: isDefault ? initial : undefined };\n if (isDefault) defaultFound = true;\n });\n\n if (Object.keys(orders).length === 0) return {};\n\n // CHECK QUERY PARAMS\n const queryParams: { [key: string]: any } = { ...this.activatedRoute.snapshot.queryParams };\n if (!!ngxTable.route && queryParams['ngx-table-order']) {\n const param: string = queryParams['ngx-table-order'];\n const index: number = param.lastIndexOf(':');\n\n if (index !== -1) {\n const id: string = param.substring(0, index);\n const type: 'ASC' | 'DESC' = param.substring(index + 1) as 'ASC' | 'DESC';\n\n if (\n orders[id] &&\n (type === 'ASC' || type === 'DESC') &&\n (orders[id].type === 'ORDER' || orders[id].type === type)\n ) {\n Object.keys(orders).forEach((key: string) => {\n orders[key] = { ...orders[key], current: key === id ? type : undefined };\n });\n }\n }\n }\n\n return orders;\n }\n}\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nimport { MatDivider } from '@angular/material/divider';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { Filters } from '../../../filters/filter.service';\n\nimport { IViewConfig, IViewOrder } from '../../view.interface';\nimport { Orders } from '../../view.service';\n\n@Component({\n selector: 'view-card-toolbar',\n imports: [MatDivider, MatIcon, MatMenuModule],\n templateUrl: './view-card-toolbar.component.html',\n styleUrl: './view-card-toolbar.component.scss',\n})\nexport class ViewCardToolbarComponent implements OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-card-view-toolbar';\n\n @Input({ required: true }) orders!: Orders;\n @Input({ required: true }) filters!: Filters;\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Output() orderChanged: EventEmitter<IViewOrder> = new EventEmitter<IViewOrder>();\n @Output() updateFilter: EventEmitter<string> = new EventEmitter<string>();\n @Output() clearFilter: EventEmitter<void> = new EventEmitter<void>();\n\n public orderKeys: string[] = [];\n public filterKeys: string[] = [];\n public showClear: boolean = false;\n\n private swipeStart?: number;\n private swipeLeft: number = 0;\n\n ngOnChanges(changes: SimpleChanges): void {\n this.orderKeys = Object.keys(this.orders);\n\n const activeKeys: string[] = [];\n const deactiveKeys: string[] = [];\n Object.keys(this.filters).forEach((key: string) => {\n if (this.filters[key].value !== undefined) activeKeys.push(key);\n else deactiveKeys.push(key);\n });\n this.filterKeys = [...activeKeys, ...deactiveKeys];\n this.showClear = activeKeys.length > 2;\n }\n\n updateOrder(id: string, type: 'ASC' | 'DESC'): void {\n this.orderChanged.next({ id, type });\n }\n\n swipe(\n event: MouseEvent | TouchEvent,\n action: 'START' | 'MOVE' | 'END',\n container: HTMLElement,\n items: HTMLElement,\n ): void {\n if (container.offsetWidth > items.offsetWidth) return;\n const clientX: number = event instanceof MouseEvent ? event.clientX : event.changedTouches[0].clientX;\n\n switch (action) {\n case 'START':\n this.swipeStart = clientX - this.swipeLeft;\n break;\n case 'END':\n this.swipeStart = undefined;\n\n break;\n case 'MOVE':\n if (!this.swipeStart) return;\n\n let left: number = clientX - this.swipeStart;\n\n if (left <= 0) left = 0;\n else if (left > items.offsetWidth - container.offsetWidth) left = items.offsetWidth - container.offsetWidth;\n\n this.swipeLeft = left;\n items.style.left = `${left}px`;\n break;\n }\n }\n}\n","<div\n class=\"toolbar-container\"\n [style.position]=\"viewConfig.stickyView?.top ? 'sticky' : 'static'\"\n [style.top]=\"viewConfig.stickyView?.top?.mobileView || undefined\"\n (mousedown)=\"swipe($event, 'START', toolbarContainer, toolbarItems)\"\n (mousemove)=\"swipe($event, 'MOVE', toolbarContainer, toolbarItems)\"\n (mouseup)=\"swipe($event, 'END', toolbarContainer, toolbarItems)\"\n (touchstart)=\"swipe($event, 'START', toolbarContainer, toolbarItems)\"\n (touchmove)=\"swipe($event, 'MOVE', toolbarContainer, toolbarItems)\"\n (touchend)=\"swipe($event, 'END', toolbarContainer, toolbarItems)\"\n #toolbarContainer\n>\n <div class=\"toolbar-items\" #toolbarItems>\n <!-- ORDER -->\n @if (orderKeys.length > 0) {\n <div class=\"item\" [matMenuTriggerFor]=\"orderMenu\">\n <mat-icon>swap_vert</mat-icon>\n <span>ترتیب نمایش</span>\n </div>\n <mat-menu #orderMenu=\"matMenu\" [xPosition]=\"'after'\" class=\"ngx-table-order-menu\">\n @for (item of orderKeys; track $index) {\n <!-- DIVIDER -->\n @if ($index !== 0) {<mat-divider></mat-divider>}\n\n <!-- TYPES -->\n @switch (orders[item].type) {\n <!-- ORDR -->\n @case ('ORDER') {\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"orders[item].current === 'ASC'\"\n (click)=\"updateOrder(item, 'ASC')\"\n >\n <mat-icon>north</mat-icon>\n <span>{{ orders[item].title }}</span>\n </button>\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"orders[item].current === 'DESC'\"\n (click)=\"updateOrder(item, 'DESC')\"\n >\n <mat-icon>south</mat-icon>\n <span>{{ orders[item].title }}</span>\n </button>\n }\n <!-- ASC, DESC -->\n @default {\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"orders[item].current\"\n (click)=\"updateOrder(item, orders[item].type)\"\n >\n <mat-icon>{{ orders[item].type === 'ASC' ? 'north' : 'south' }}</mat-icon>\n <span>{{ orders[item].title }}</span>\n </button>\n } } }\n </mat-menu>\n }\n\n <!-- CLEAR -->\n @if (showClear) {\n <div class=\"item clear\" (click)=\"clearFilter.next()\">\n <span>لغو فیلترها</span>\n <mat-icon>filter_alt_off</mat-icon>\n </div>\n\n }\n\n <!-- FILTER -->\n @for (item of filterKeys; track $index) {\n <div class=\"item\" [class.active]=\"filters[item].value\" (click)=\"updateFilter.next(item)\">\n <mat-icon>filter_alt</mat-icon>\n <span>{{ filters[item].title }}</span>\n </div>\n }\n </div>\n</div>\n\n<div\n class=\"toolbar-seperator\"\n [style.position]=\"viewConfig.stickyView?.top ? 'sticky' : 'static'\"\n [style.top]=\"\n 'calc(' + (viewConfig.stickyView?.top?.mobileView || undefined) + ' + var(--ngx-table-m3-toolbar-height) + 2px)'\n \"\n></div>\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nimport { MatIcon } from '@angular/material/icon';\n\nimport { NgxHelperMultiLinePipe } from '@webilix/ngx-helper-m3';\n\nimport { IFilter } from '../../filters';\nimport { INgxTable } from '../../ngx-table.interface';\nimport { Filters, FilterService } from '../../filters/filter.service';\n\nimport { ViewActionComponent } from '../action/view-action.component';\nimport { ViewValueComponent } from '../value/view-value.component';\nimport { Orders, ViewService } from '../view.service';\nimport { IViewConfig, IViewFilter, IViewOrder } from '..';\n\nimport { ViewCardToolbarComponent } from './toolbar/view-card-toolbar.component';\n\n@Component({\n selector: 'view-card',\n imports: [MatIcon, NgxHelperMultiLinePipe, ViewActionComponent, ViewValueComponent, ViewCardToolbarComponent],\n providers: [FilterService, ViewService],\n templateUrl: './view-card.component.html',\n styleUrl: './view-card.component.scss',\n})\nexport class ViewCardComponent<T> implements OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-card-view';\n\n @Input({ required: true }) ngxTable!: INgxTable<T>;\n @Input({ required: true }) data!: T[];\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Output() orderChanged: EventEmitter<IViewOrder> = new EventEmitter<IViewOrder>();\n @Output() filterChanged: EventEmitter<IViewFilter> = new EventEmitter<IViewFilter>();\n @Output() filterCleared: EventEmitter<void> = new EventEmitter<void>();\n\n public hasIcon: boolean = false;\n public hasAction: boolean = false;\n\n public titleIndex!: number;\n public subTitleIndex?: number;\n\n public icons: { icon: string; color?: string }[] = [];\n public emojis: string[] = [];\n public colors: string[] = [];\n public descriptions: (string | undefined)[] = [];\n public deactives: number[] = [];\n\n public orders!: Orders;\n public filters!: Filters;\n public hasToolbar: boolean = false;\n public top: string = '';\n\n public hasContent!: boolean;\n\n constructor(private readonly filterService: FilterService, private readonly viewService: ViewService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.hasIcon = !!this.ngxTable.rows?.icon;\n this.hasAction = (this.ngxTable.actions || []).length > 0;\n\n this.titleIndex = this.viewService.getTitleIndex(this.ngxTable);\n this.subTitleIndex = this.viewService.getSubTitleIndex(this.ngxTable);\n\n this.icons = this.viewService.getIcons(this.ngxTable, this.data);\n this.emojis = this.viewService.getEmojis(this.ngxTable, this.data);\n this.colors = this.viewService.getColors(this.ngxTable, this.data);\n this.descriptions = this.viewService.getDescriptions(this.ngxTable, this.data);\n this.deactives = this.viewService.getDeactives(this.ngxTable, this.data);\n\n this.orders = this.viewService.getOrders(this.ngxTable);\n this.filters = this.filterService.getFilters(this.ngxTable);\n this.hasToolbar = Object.keys(this.orders).length > 0 || Object.keys(this.filters).length > 0;\n\n const top = this.viewConfig.stickyView?.top?.mobileView;\n this.top = top ? (this.hasToolbar ? `calc(${top} + var(--ngx-table-m3-toolbar-height) + 1rem + 2px)` : top) : '';\n\n this.hasContent = this.ngxTable.columns.some(\n (_, index: number) => index != this.titleIndex && index !== this.subTitleIndex,\n );\n }\n\n updateFilter(id: string): void {\n const filter = this.filters[id];\n if (!filter) return;\n\n this.filterService.updateFilter(filter, this.viewConfig).then((filter?: IFilter) => {\n if (!filter) return;\n\n this.filters[id] = filter;\n this.filterChanged.next({ id, value: filter.value });\n });\n }\n}\n","<!-- TOOLBAR -->\n@if (hasToolbar) {\n<view-card-toolbar\n [orders]=\"orders\"\n [filters]=\"filters\"\n [viewConfig]=\"viewConfig\"\n (orderChanged)=\"orderChanged.next($event)\"\n (updateFilter)=\"updateFilter($event)\"\n (clearFilter)=\"filterCleared.next()\"\n></view-card-toolbar>\n}\n\n<!-- DATA -->\n<div class=\"card-container\">\n @for (item of data; track $index; let dataIndex = $index) {\n <div class=\"card\">\n <div class=\"card-header\" [style.position]=\"viewConfig.stickyView?.top ? 'sticky' : 'static'\" [style.top]=\"top\">\n <!-- ICON -->\n @if (hasIcon) {\n <!-- MATERIAL ICON -->\n @if (icons[$index].icon) {\n <mat-icon class=\"icon\" [style.color]=\"icons[$index].color\" [style.font-size]=\"viewConfig.iconSize\">\n {{ icons[$index].icon }}\n </mat-icon>\n }\n <!-- EMOJI -->\n @else {\n <td class=\"emoji\" [style.font-size]=\"viewConfig.emojiSize\">{{ emojis[$index] || '' }}</td>\n } }\n\n <!-- TITLE -->\n <div class=\"title\" [style.color]=\"colors[dataIndex]\">\n <view-value\n [column]=\"ngxTable.columns[this.titleIndex]\"\n [item]=\"item\"\n [viewConfig]=\"viewConfig\"\n [isDeactive]=\"deactives.includes(dataIndex)\"\n [isCard]=\"true\"\n [isCardTitle]=\"true\"\n ></view-value>\n <!-- SUB TITLE -->\n @if (subTitleIndex !== undefined) {\n <view-value\n [column]=\"ngxTable.columns[this.subTitleIndex]\"\n [item]=\"item\"\n [viewConfig]=\"viewConfig\"\n [isCard]=\"true\"\n [isCardSubTitle]=\"true\"\n ></view-value>\n }\n </div>\n\n <!-- ACTION -->\n @if (hasAction) {\n <view-action\n [actions]=\"ngxTable.actions || []\"\n [item]=\"item\"\n [viewConfig]=\"viewConfig\"\n [isMobile]=\"true\"\n ></view-action>\n }\n </div>\n\n <!-- CONTENT -->\n @if (hasContent) {\n <div class=\"card-content\" [style.color]=\"colors[dataIndex]\">\n @for (column of ngxTable.columns; track $index; let columnIndex = $index) {\n <!-- CHECK TITLE AND SUBTITLE -->\n @if (columnIndex !== titleIndex && columnIndex !== subTitleIndex) {\n <div class=\"item\">\n <div class=\"title\">{{ column.title }}{{ !!column.title ? ' :' : '' }}</div>\n <div class=\"value\">\n <view-value [column]=\"column\" [item]=\"item\" [viewConfig]=\"viewConfig\" [isCard]=\"true\"></view-value>\n </div>\n </div>\n } }\n\n <!-- DESCRIPTION -->\n @if (descriptions[dataIndex]) {\n <div class=\"description\" [innerHTML]=\"descriptions[dataIndex] || '' | ngxHelperMultiLine\"></div>\n }\n </div>\n }\n </div>\n }\n</div>\n","import { DecimalPipe } from '@angular/common';\nimport {\n Component,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\n\nimport { MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { INgxTablePagination } from '../../ngx-table.interface';\n\nimport { IViewConfig } from '..';\n\n@Component({\n selector: 'view-pagination',\n host: { '(window:scroll)': 'onScroll($event)' },\n imports: [DecimalPipe, MatIconButton, MatIcon, MatMenuModule],\n templateUrl: './view-pagination.component.html',\n styleUrl: './view-pagination.component.scss',\n})\nexport class ViewPaginationComponent implements OnInit, OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-pagination';\n @HostBinding('style.position') private stylePosition!: string;\n @HostBinding('style.bottom') private styleBottom!: string;\n\n @Input({ required: true }) type!: string;\n @Input({ required: true }) pagination!: INgxTablePagination;\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Input({ required: true }) isMobile!: boolean;\n @Input({ required: true }) stickyBottom?: { desktopView: string; mobileView: string };\n @Output() pageChanged: EventEmitter<number> = new EventEmitter<number>();\n\n public pages: number[] = [];\n public hasShadow: boolean = false;\n\n constructor(private readonly elementRef: ElementRef) {}\n\n ngOnInit(): void {\n setTimeout(this.onScroll.bind(this), 0);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const isDefaultPage = (page: number): boolean => page === 1 || page === this.pagination.page.total;\n\n const period: number = Math.floor(this.pagination.page.total / 8) || 1;\n const trunc: number = period < 100 ? 10 : period < 1000 ? 100 : 1000;\n\n this.pages = Array(this.pagination.page.total)\n .fill('0')\n .map((_, index: number) => index + 1)\n .filter((page: number) => page !== this.pagination.page.current)\n .filter((page: number) => isDefaultPage(page) || (page - 1) % period === 0)\n .map((page: number) => (isDefaultPage(page) || period < 10 ? page : page - (page % trunc)));\n\n this.stylePosition = this.stickyBottom ? 'sticky' : 'static';\n this.styleBottom = this.stickyBottom\n ? this.isMobile\n ? this.stickyBottom.mobileView\n : this.stickyBottom.desktopView\n : '';\n }\n\n onScroll(): void {\n if (!this.elementRef) return;\n\n const element: HTMLElement = this.elementRef.nativeElement;\n const elementPosition: number = element.offsetTop + element.offsetHeight + 8;\n\n const parentHeight = element.parentElement?.offsetHeight;\n this.hasShadow = !!parentHeight && elementPosition < parentHeight;\n }\n}\n","<div\n class=\"pagination-content\"\n [class.desktop-view]=\"!isMobile\"\n [class.mobile-view]=\"isMobile\"\n [class.has-shadow]=\"hasShadow\"\n>\n <div class=\"counts\">\n <div class=\"title\">صفحه {{ pagination.page.current | number }} از {{ pagination.page.total | number }}</div>\n <div class=\"total\">{{ pagination.item.total | number }} {{ type }}</div>\n </div>\n\n <button\n mat-icon-button\n type=\"button\"\n [disabled]=\"pagination.page.current === pagination.page.total\"\n (click)=\"pageChanged.next(pagination.page.total)\"\n >\n <mat-icon>keyboard_double_arrow_right</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n [disabled]=\"pagination.page.current === pagination.page.total\"\n (click)=\"pageChanged.next(pagination.page.current + 1)\"\n >\n <mat-icon>chevron_right</mat-icon>\n </button>\n\n <button mat-icon-button [matMenuTriggerFor]=\"pageMenu\"><mat-icon>tag</mat-icon></button>\n <mat-menu #pageMenu=\"matMenu\" class=\"ngx-table-m3-pagination\">\n @for (page of pages; track $index) {\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"page === pagination.page.current\"\n class=\"ngx-table-m3-pagination-item\"\n (click)=\"pageChanged.next(page)\"\n >\n {{ page | number }}\n </button>\n }\n </mat-menu>\n\n <button\n mat-icon-button\n type=\"button\"\n [disabled]=\"pagination.page.current === 1\"\n (click)=\"pageChanged.next(pagination.page.current - 1)\"\n >\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button mat-icon-button type=\"button\" [disabled]=\"pagination.page.current === 1\" (click)=\"pageChanged.next(1)\">\n <mat-icon>keyboard_double_arrow_left</mat-icon>\n </button>\n</div>\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { animate, style, transition, trigger } from '@angular/animations';\n\nimport { MatIcon } from '@angular/material/icon';\n\nimport { NgxHelperMultiLinePipe } from '@webilix/ngx-helper-m3';\n\nimport { IFilter } from '../../filters';\nimport { INgxTable } from '../../ngx-table.interface';\nimport { FilterInfo } from '../../filters/filter.info';\nimport { Filters, FilterService } from '../../filters/filter.service';\n\nimport { ViewActionComponent } from '../action/view-action.component';\nimport { ViewValueComponent } from '../value/view-value.component';\nimport { Orders, ViewService } from '../view.service';\nimport { IViewConfig, IViewFilter, IViewOrder } from '..';\n\n@Component({\n selector: 'view-table',\n imports: [MatIcon, NgxHelperMultiLinePipe, ViewActionComponent, ViewValueComponent],\n providers: [FilterService, ViewService],\n templateUrl: './view-table.component.html',\n styleUrl: './view-table.component.scss',\n animations: [\n trigger('toolbar', [\n transition(':enter', [style({ opacity: 0, height: 0 }), animate('150ms', style({ opacity: 1, height: '*' }))]),\n ]),\n ],\n})\nexport class ViewTableComponent<T> implements OnChanges {\n @HostBinding('className') private className: string = 'ngx-table-m3-table-view';\n\n @Input({ required: true }) ngxTable!: INgxTable<T>;\n @Input({ required: true }) data!: T[];\n @Input({ required: true }) viewConfig!: IViewConfig;\n @Output() orderChanged: EventEmitter<IViewOrder> = new EventEmitter<IViewOrder>();\n @Output() filterChanged: EventEmitter<IViewFilter> = new EventEmitter<IViewFilter>();\n @Output() filterCleared: EventEmitter<void> = new EventEmitter<void>();\n\n public hasIcon: boolean = false;\n public hasAction: boolean = false;\n\n public titleIndex!: number;\n public subTitleIndex?: number;\n\n public icons: { icon: string; color?: string }[] = [];\n public emojis: string[] = [];\n public colors: string[] = [];\n public descriptions: (string | undefined)[] = [];\n public deactives: number[] = [];\n\n public orders!: Orders;\n public filters!: Filters;\n public activeFilters: { id: string; title: string; value: string; english: boolean }[] = [];\n\n constructor(private readonly viewService: ViewService, private readonly filterService: FilterService) {}\n\n ngOnChanges(changes: SimpleChanges): void {\n this.hasIcon = !!this.ngxTable.rows?.icon;\n this.hasAction = (this.ngxTable.actions || []).length > 0;\n\n this.titleIndex = this.viewService.getTitleIndex(this.ngxTable);\n this.subTitleIndex = this.viewService.getSubTitleIndex(this.ngxTable);\n\n this.icons = this.viewService.getIcons(this.ngxTable, this.data);\n this.emojis = this.viewService.getEmojis(this.ngxTable, this.data);\n this.colors = this.viewService.getColors(this.ngxTable, this.data);\n this.descriptions = this.viewService.getDescriptions(this.ngxTable, this.data);\n this.deactives = this.viewService.getDeactives(this.ngxTable, this.data);\n\n this.orders = this.viewService.getOrders(this.ngxTable);\n this.filters = this.filterService.getFilters(this.ngxTable);\n this.activeFilters = Object.keys(this.filters)\n .filter((id: string) => this.filters[id].value !== undefined)\n .map((id: string) => ({\n id,\n title: this.filters[id].title,\n ...FilterInfo[this.filters[id].filter.type].methods.active(this.filters[id].value, this.filters[id].filter),\n }));\n }\n\n updateOrder(id: string): void {\n const order = this.orders[id];\n if (!order || order.type === order.current) return;\n\n const type: 'ASC' | 'DESC' = order.current ? (order.current === 'ASC' ? 'DESC' : 'ASC') : order.initial;\n this.orderChanged.next({ id, type });\n }\n\n updateFilter(id: string): void {\n const filter = this.filters[id];\n if (!filter) return;\n\n this.filterService.updateFilter(filter, this.viewConfig).then((filter?: IFilter) => {\n if (!filter) return;\n\n this.filters[id] = filter;\n this.filterChanged.next({ id, value: filter.value });\n });\n }\n\n clearFilter(id: string): void {\n const filter = this.filters[id];\n if (!filter) return;\n\n this.filters[id] = { ...this.filters[id], value: undefined };\n this.filterChanged.next({ id, value: undefined });\n }\n}\n","<table [cellPadding]=\"0\" [cellSpacing]=\"0\" [width]=\"'100%'\" [border]=\"0\">\n <!-- HEADER -->\n\n <thead\n [style.position]=\"viewConfig.stickyView?.top ? 'sticky' : 'static'\"\n [style.top]=\"viewConfig.stickyView?.top?.desktopView || undefined\"\n >\n <!-- ACTIVE FILTERS -->\n @if (activeFilters.length > 0) {\n <tr>\n <!-- ICON -->\n @if (hasIcon) {\n <th class=\"active-filters\"></th>\n }\n\n <!-- TOOLBAR -->\n <th class=\"active-filters\" [colSpan]=\"ngxTable.columns.length + (this.hasAction ? 1 : 0)\">\n <div class=\"toolbar\" [@toolbar]>\n @for (item of activeFilters; track $index) {\n <div class=\"item\">\n <div class=\"title\" (click)=\"updateFilter(item.id)\">{{ item.title }}:</div>\n <div class=\"value\" (click)=\"updateFilter(item.id)\" [class.ngx-table-m3-en]=\"item.english\">\n {{ item.value }}\n </div>\n <div class=\"icon\" (click)=\"clearFilter(item.id)\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n }\n\n <!-- CLEAR ALL -->\n @if (activeFilters.length > 2) {\n <div class=\"item clear\" (click)=\"filterCleared.next()\">\n <div class=\"title\">لغو فیلترها</div>\n <div class=\"icon\"><mat-icon>filter_alt_off</mat-icon></div>\n </div>\n }\n </div>\n </th>\n </tr>\n }\n\n <tr>\n <!-- ICON -->\n @if (hasIcon) {\n <th></th>\n }\n\n <!-- COLUMNS -->\n @for (column of ngxTable.columns; track $index) {\n <th [style.text-align]=\"(column.textAlign || 'RIGHT').toLowerCase()\">\n <div\n class=\"column\"\n [class.flex-end]=\"column.textAlign === 'LEFT'\"\n [class.flex-center]=\"column.textAlign === 'CENTER'\"\n >\n <div class=\"title\">{{ column.title }}</div>\n\n <!-- ORDER -->\n @if (column.tools && orders[column.tools.id]) {\n <mat-icon\n (click)=\"updateOrder(column.tools.id)\"\n [style.cursor]=\"\n orders[column.tools.id].type === 'ORDER' || !orders[column.tools.id].current\n ? 'pointer'\n : 'default'\n \"\n >\n {{\n orders[column.tools.id].current === 'ASC'\n ? 'north'\n : orders[column.tools.id].current === 'DESC'\n ? 'south'\n : 'swap_vert'\n }}\n </mat-icon>\n }\n\n <!-- FILTER -->\n @if (column.tools && filters[column.tools.id]) {\n <mat-icon [style.cursor]=\"'pointer'\" (click)=\"updateFilter(column.tools.id)\">filter_alt</mat-icon>\n }\n </div>\n </th>\n }\n\n <!-- ACTION -->\n @if (hasAction) {\n <th></th>\n }\n </tr>\n </thead>\n\n <!-- BODY -->\n <tbody>\n @for (item of data; track $index; let dataIndex = $index) {\n <tr\n [style.color]=\"colors[dataIndex]\"\n [class.odd-row]=\"viewConfig.alternateRows && dataIndex % 2 === 1\"\n [class.even-row]=\"viewConfig.alternateRows && dataIndex % 2 === 0\"\n >\n <!-- ICON -->\n @if (hasIcon) {\n <!-- MATERIAL ICON -->\n @if (icons[$index].icon) {\n <td class=\"icon\">\n <mat-icon [style.color]=\"icons[$index].color\" [style.font-size]=\"viewConfig.iconSize\">\n {{ icons[$index].icon }}\n </mat-icon>\n </td>\n }\n <!-- EMOJI -->\n @else {\n <td class=\"emoji\" [style.font-size]=\"viewConfig.emojiSize\">{{ emojis[$index] || '' }}</td>\n } }\n\n <!-- DATA -->\n @for (column of ngxTable.columns; track $index; let columnIndex = $index) {\n <td>\n <view-value\n [column]=\"column\"\n [item]=\"item\"\n [viewConfig]=\"viewConfig\"\n [isDeactive]=\"columnIndex === titleIndex && deactives.includes(dataIndex)\"\n ></view-value>\n </td>\n }\n\n <!-- ACTION -->\n @if (hasAction) {\n <td class=\"action\">\n <view-action\n [actions]=\"ngxTable.actions || []\"\n [item]=\"item\"\n [viewConfig]=\"viewConfig\"\n [isMobile]=\"false\"\n ></view-action>\n </td>\n }\n </tr>\n\n <!-- DESCRIPTION -->\n @if (descriptions[dataIndex]) {\n <tr\n [style.color]=\"colors[dataIndex]\"\n [class.odd-row]=\"viewConfig.alternateRows && dataIndex % 2 === 1\"\n [class.even-row]=\"viewConfig.alternateRows && dataIndex % 2 === 0\"\n >\n @if (hasIcon) {\n <td class=\"description\"></td>\n }\n <td\n class=\"description\"\n [colSpan]=\"ngxTable.columns.length + (hasAction ? 1 : 0)\"\n [innerHTML]=\"descriptions[dataIndex] || '' | ngxHelperMultiLine\"\n ></td>\n </tr>\n } }\n </tbody>\n</table>\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Provider } from '@angular/core';\n\nexport interface INgxTableConfig {\n readonly mobileWidth: number;\n readonly alternateRows: boolean;\n readonly iconSize: number;\n readonly emojiSize: number;\n readonly actionMenuTitle?: string;\n readonly stickyView: {\n readonly top?: string | { readonly desktopView: string; readonly mobileView: string };\n readonly bottom?: string | { readonly desktopView: string; readonly mobileView: string };\n };\n}\n\nexport const NGX_TABLE_CONFIG = new InjectionToken<Partial<INgxTableConfig>>('NGX-TABLE-CONFIG');\n\nexport const provideNgxTableConfig = (config: Partial<INgxTableConfig>): EnvironmentProviders => {\n const providers: Provider[] = [{ provide: NGX_TABLE_CONFIG, useValue: config }];\n\n return makeEnvironmentProviders(providers);\n};\n","import { Component, EventEmitter, Inject, Input, OnChanges, OnInit, Optional, Output, SimpleChanges } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { Helper } from '@webilix/helper-library';\nimport { NgxHelperLoaderComponent } from '@webilix/ngx-helper-m3';\n\nimport {\n IViewConfig,\n IViewFilter,\n IViewOrder,\n ViewCardComponent,\n ViewPaginationComponent,\n ViewTableComponent,\n} from './views';\n\nimport { ColumnInfo } from './columns';\nimport { FilterInfo } from './filters/filter.info';\nimport { FilterService } from './filters/filter.service';\nimport { ViewService } from './views/view.service';\nimport { INgxTableConfig, NGX_TABLE_CONFIG } from './ngx-table.config';\nimport { INgxTable, INgxTableFilter, INgxTablePagination } from './ngx-table.interface';\n\n@Component({\n selector: 'ngx-table',\n host: { '(window:resize)': 'onResize($event)' },\n imports: [NgxHelperLoaderComponent, ViewCardComponent, ViewPaginationComponent, ViewTableComponent],\n providers: [FilterService, ViewService],\n templateUrl: './ngx-table.component.html',\n styleUrl: './ngx-table.component.scss',\n})\nexport class NgxTableComponent<T> implements OnInit, OnChanges {\n @Input({ required: true }) loading!: boolean;\n @Input({ required: true }) ngxTable!: INgxTable<T>;\n @Input({ required: true }) data!: T[];\n @Input({ required: false }) pagination?: INgxTablePagination | null;\n @Output() filterChanged: EventEmitter<INgxTableFilter> = new EventEmitter<INgxTableFilter>();\n\n public isMobile: boolean = false;\n public viewConfig!: IViewConfig;\n\n private filter!: INgxTableFilter;\n public hasFilter: boolean = false;\n\n constructor(\n private readonly activatedRoute: ActivatedRoute,\n private readonly router: Router,\n private readonly filterService: FilterService,\n private readonly viewService: ViewService,\n @Optional() @Inject(NGX_TABLE_CONFIG) private readonly config?: Partial<INgxTableConfig>,\n ) {}\n\n ngOnInit(): void {\n const queryParams: { [key: string]: any } = { ...this.activatedRoute.snapshot.queryParams };\n const page: number = !!this.ngxTable.route\n ? Helper.IS.number(+queryParams['ngx-table-page'])\n ? +queryParams['ngx-table-page']\n : 1\n : 1;\n\n const orders = this.viewService.getOrders(this.ngxTable);\n let order: { id: string; type: 'ASC' | 'DESC'; param: string } | undefined = undefined;\n Object.keys(orders).forEach((id: string) => {\n if (!orders[id].current) return;\n\n const type = orders[id].current;\n order = { id, type: type, param: `${id}:${type}` };\n });\n\n const filters = this.filterService.getFilters(this.ngxTable);\n const filter: { [id: string]: { value: any; param: string } } = {};\n Object.keys(filters).forEach((id: string) => {\n if (filters[id].value === undefined) return;\n\n const column = this.ngxTable.columns.find((column) => column.tools?.id === id);\n if (!column || !column.tools || !('filter' in column.tools) || !column.tools.filter) return;\n\n const param: string =\n column.tools.filter.toParam?.(filters[id].value) ||\n FilterInfo[column.tools.filter.type].methods.toParam(filters[id].value);\n\n filter[id] = { value: filters[id].value, param };\n });\n\n this.filter = { page, order, filter };\n this.filterChanged.next(this.filter);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.ngxTable = {\n ...this.ngxTable,\n columns: this.ngxTable.columns.map((column) => ColumnInfo[column.type].methods.column(column)),\n };\n\n const getStickyView = (\n config: string | { desktopView: string; mobileView: string },\n ): { desktopView: string; mobileView: string } => {\n return {\n desktopView: typeof config === 'string' ? config : config.desktopView,\n mobileView: typeof config === 'string' ? config : config.mobileView,\n };\n };\n\n this.viewConfig = {\n alternateRows: !!this.config?.alternateRows,\n iconSize: `${this.config?.iconSize || 24}px`,\n emojiSize: `${this.config?.emojiSize || 19}px`,\n actionMenuTitle: this.config?.actionMenuTitle || 'امکانات',\n stickyView: this.config?.stickyView\n ? {\n top: this.config.stickyView.top ? getStickyView(this.config.stickyView.top) : undefined,\n bottom: this.config.stickyView.bottom ? getStickyView(this.config.stickyView.bottom) : undefined,\n }\n : undefined,\n };\n\n this.hasFilter = this.filter && Object.keys(this.filter).length !== 0;\n this.onResize();\n }\n\n onResize(): void {\n const mobileWidth: number = this.config?.mobileWidth || 600;\n this.isMobile = this.ngxTable.mobileView || window.innerWidth <= mobileWidth;\n }\n\n setQueryParams(): void {\n if (!this.ngxTable.route) return;\n\n const queryParams: { [key: string]: any } = { ...this.activatedRoute.snapshot.queryParams };\n const keys: string[] = Object.keys(queryParams);\n keys.forEach((id: string) => id.substring(0, 17) === 'ngx-table-filter-' && delete queryParams[id]);\n\n queryParams['ngx-table-page'] = this.filter.page !== 1 ? this.filter.page.toString() : undefined;\n queryParams['ngx-table-order'] = this.filter.order ? this.filter.order.param : undefined;\n Object.keys(this.filter.filter).forEach((id: string) => {\n const column = this.ngxTable.columns.find((column) => column.tools?.id === id);\n if (!column || !column.tools || !('filter' in column.tools) || !column.tools.filter) return;\n\n const param: string = FilterInfo[column.tools.filter.type].methods.query(this.filter.filter[id].value);\n queryParams[`ngx-table-filter-${id}`] = param;\n });\n this.router.navigate(this.ngxTable.route, { queryParams });\n }\n\n pageChanged(page: number): void {\n this.filter = { ...this.filter, page };\n\n this.setQueryParams();\n this.filterChanged.next(this.filter);\n }\n\n orderChanged(order: IViewOrder): void {\n const param: string = `${order.id}:${order.type}`;\n this.filter = { ...this.filter, order: { ...order, param } };\n\n this.setQueryParams();\n this.filterChanged.next(this.filter);\n }\n\n filterItemChanged(filter: IViewFilter): void {\n const column = this.ngxTable.columns.find((column) => column.tools?.id === filter.id);\n if (!column || !column.tools || !('filter' in column.tools) || !column.tools.filter) return;\n\n if (filter.value === undefined) delete this.filter.filter[filter.id];\n else {\n const param: string =\n column.tools.filter.toParam?.(filter.value) ||\n FilterInfo[column.tools.filter.type].methods.toParam(filter.value);\n this.filter.filter[filter.id] = { value: filter.value, param };\n }\n\n this.setQueryParams();\n this.filterChanged.next(this.filter);\n }\n\n filterCleared(): void {\n this.filter = { ...this.filter, filter: {} };\n\n this.setQueryParams();\n this.filterChanged.next(this.filter);\n }\n}\n","@if (loading) {\n<div class=\"ngx-table-m3-loader\">\n <ngx-helper-loader [mode]=\"'SPINNER'\"></ngx-helper-loader>\n</div>\n}\n\n<!-- EMPTY -->\n@if (!loading && ngxTable.columns.length <= 0 ) {\n<div class=\"ngx-table-m3-empty\">ستون‌های جدول به صورت صحیح مشخص نشده است.</div>\n}\n\n<!-- EMPTY -->\n@if (!loading && ngxTable.columns.length > 0 && data.length === 0 && !hasFilter) {\n<div class=\"ngx-table-m3-empty\">{{ ngxTable.type }} ثبت نشده است.</div>\n}\n\n<!-- DATA -->\n@if (!loading && ngxTable.columns.length > 0 && (data.length > 0 || hasFilter)) {\n<content class=\"ngx-table-m3\">\n <!-- DESKTOP -->\n @if (!isMobile) {\n <view-table\n [ngxTable]=\"ngxTable\"\n [data]=\"data\"\n [viewConfig]=\"viewConfig\"\n (orderChanged)=\"orderChanged($event)\"\n (filterChanged)=\"filterItemChanged($event)\"\n (filterCleared)=\"filterCleared()\"\n ></view-table>\n }\n\n <!-- MOBILE -->\n @if (isMobile) {\n <view-card\n [ngxTable]=\"ngxTable\"\n [data]=\"data\"\n [viewConfig]=\"viewConfig\"\n (orderChanged)=\"orderChanged($event)\"\n (filterChanged)=\"filterItemChanged($event)\"\n (filterCleared)=\"filterCleared()\"\n ></view-card>\n }\n\n <!-- PAGINATION -->\n @if (pagination && pagination.page.total> 1) {\n <view-pagination\n [type]=\"ngxTable.type\"\n [pagination]=\"pagination\"\n [viewConfig]=\"viewConfig\"\n [isMobile]=\"isMobile\"\n [stickyBottom]=\"viewConfig.stickyView?.bottom\"\n (pageChanged)=\"pageChanged($event)\"\n ></view-pagination>\n }\n\n <!-- EMPTY -->\n @if ( data.length === 0) {\n <div class=\"ngx-table-m3-empty\">{{ ngxTable.type }} ثبت نشده است.</div>\n }\n</content>\n}\n","/*\n * Public API Surface of ngx-table-m3\n */\n\nexport * from './lib/ngx-table.component';\nexport * from './lib/ngx-table.config';\nexport * from './lib/ngx-table.interface';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["modeList","i1","i2","i1.FilterService","i2.ViewService","i1.ViewService","i2.FilterService"],"mappings":"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"}