@webilix/ngx-table-m3 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +6 -0
  2. package/fesm2022/webilix-ngx-table-m3.mjs +1258 -0
  3. package/fesm2022/webilix-ngx-table-m3.mjs.map +1 -0
  4. package/index.d.ts +5 -0
  5. package/lib/columns/column.action.d.ts +24 -0
  6. package/lib/columns/column.info.d.ts +9 -0
  7. package/lib/columns/column.interface.d.ts +46 -0
  8. package/lib/columns/date/column-date.component.d.ts +10 -0
  9. package/lib/columns/date/column-date.interface.d.ts +10 -0
  10. package/lib/columns/duration/column-duration.component.d.ts +10 -0
  11. package/lib/columns/duration/column-duration.interface.d.ts +9 -0
  12. package/lib/columns/index.d.ts +13 -0
  13. package/lib/columns/mobile/column-mobile.component.d.ts +10 -0
  14. package/lib/columns/mobile/column-mobile.interface.d.ts +9 -0
  15. package/lib/columns/number/column-number.component.d.ts +10 -0
  16. package/lib/columns/number/column-number.interface.d.ts +9 -0
  17. package/lib/columns/text/column-text.component.d.ts +10 -0
  18. package/lib/columns/text/column-text.interface.d.ts +8 -0
  19. package/lib/filters/date/filter-date.component.d.ts +13 -0
  20. package/lib/filters/date/filter-date.interface.d.ts +16 -0
  21. package/lib/filters/filter.component.d.ts +35 -0
  22. package/lib/filters/filter.info.d.ts +8 -0
  23. package/lib/filters/filter.interface.d.ts +24 -0
  24. package/lib/filters/filter.service.d.ts +18 -0
  25. package/lib/filters/index.d.ts +10 -0
  26. package/lib/filters/multi-select/filter-multi-select.component.d.ts +14 -0
  27. package/lib/filters/multi-select/filter-multi-select.interface.d.ts +19 -0
  28. package/lib/filters/search/filter-search.component.d.ts +20 -0
  29. package/lib/filters/search/filter-search.interface.d.ts +20 -0
  30. package/lib/filters/select/filter-select.component.d.ts +13 -0
  31. package/lib/filters/select/filter-select.interface.d.ts +19 -0
  32. package/lib/ngx-table.component.d.ts +37 -0
  33. package/lib/ngx-table.config.d.ts +45 -0
  34. package/lib/ngx-table.interface.d.ts +43 -0
  35. package/lib/views/action/view-action.component.d.ts +27 -0
  36. package/lib/views/card/toolbar/view-card-toolbar.component.d.ts +23 -0
  37. package/lib/views/card/view-card.component.d.ts +38 -0
  38. package/lib/views/index.d.ts +4 -0
  39. package/lib/views/pagination/view-pagination.component.d.ts +26 -0
  40. package/lib/views/table/view-table.component.d.ts +42 -0
  41. package/lib/views/value/view-value.component.d.ts +60 -0
  42. package/lib/views/view.interface.d.ts +41 -0
  43. package/lib/views/view.service.d.ts +30 -0
  44. package/package.json +47 -0
  45. package/public-api.d.ts +3 -0
@@ -0,0 +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/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/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/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/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, IFilterSearch, IFilterSelect } from '.';\n\nexport type Filter = IFilterDate | IFilterMultiSelect | 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, inject } from '@angular/core';\nimport { NgClass } from '@angular/common';\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: [NgClass, MatCheckbox],\n templateUrl: './filter-multi-select.component.html',\n styleUrl: './filter-multi-select.component.scss',\n})\nexport class FilterMultiSelectComponent {\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 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","@for (item of data.filter.options; track $index) {\n<mat-checkbox [checked]=\"(value || []).includes(item.id)\" (change)=\"updateValue(item.id, $event.checked)\">\n <div class=\"title\" [ngClass]=\"data.filter.english ? data.viewConfig.enClass : ''\">\n {{ item.title }}\n </div>\n</mat-checkbox>\n}\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\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, inject, ViewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { NgClass } from '@angular/common';\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\n@Component({\n host: { selector: 'filter-search' },\n imports: [NgClass, FormsModule, MatRadioButton, MatRadioGroup],\n templateUrl: './filter-search.component.html',\n styleUrl: './filter-search.component.scss',\n})\nexport class FilterSearchComponent implements AfterViewInit {\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?: 'PHRASE' | 'ALL' | 'EACH' = 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: 'PHRASE' | 'ALL' | 'EACH'): void {\n this.mode = mode;\n\n this.onChange(this.query ? { query: this.query, mode: this.mode || 'PHRASE' } : undefined);\n }\n}\n","<div class=\"input\">\n <input\n [ngModel]=\"query || ''\"\n [ngClass]=\"data.filter.english ? data.viewConfig.enClass : ''\"\n [style.color]=\"data.viewConfig.inputText\"\n [style.background-color]=\"data.viewConfig.inputBackground\"\n [style.border-color]=\"data.viewConfig.borderColor\"\n [style.direction]=\"data.filter.english ? 'ltr' : 'rtl'\"\n (input)=\"updateQuery(searchInput.value)\"\n #searchInput\n />\n</div>\n\n@if (!data.filter.mode) {\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}\n","import { Helper } from '@webilix/helper-library';\n\nimport { FilterMethods } from '../filter.interface';\n\nexport interface IFilterSearchValue {\n readonly query: string;\n readonly mode: 'PHRASE' | 'ALL' | 'EACH';\n}\n\nexport interface IFilterSearch {\n readonly type: 'SEARCH';\n readonly mode?: 'PHRASE' | 'ALL' | 'EACH';\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: 'PHRASE' | 'ALL' | 'EACH' = value.substring(index + 1) as 'PHRASE' | 'ALL' | 'EACH';\n if (!['PHRASE', 'EACH', 'ALL'].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, inject } from '@angular/core';\nimport { NgClass } from '@angular/common';\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: [NgClass, MatRadioButton, MatRadioGroup],\n templateUrl: './filter-select.component.html',\n styleUrl: './filter-select.component.scss',\n})\nexport class FilterSelectComponent {\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","<mat-radio-group (change)=\"onChange($event.value)\">\n @for (item of data.filter.options; track $index) {\n <mat-radio-button [value]=\"item.id\" [checked]=\"item.id === value\">\n <div class=\"title\" [ngClass]=\"data.filter.english ? data.viewConfig.enClass : ''\">\n {{ item.title }}\n </div>\n </mat-radio-button>\n }\n</mat-radio-group>\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\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 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 SEARCH: { methods: new FilterSearchMethods(), component: FilterSearchComponent },\n SELECT: { methods: new FilterSelectMethods(), component: FilterSelectComponent },\n};\n","import { Component, 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 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","<content>\n <ng-container *ngComponentOutlet=\"filterInfo[data.filter.filter.type].component; injector: injector\"></ng-container>\n</content>\n\n<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</footer>\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, 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 @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 const color: string = action.standalone ? this.viewConfig.actionButtonColor : this.viewConfig.actionMenuColor;\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 || color,\n isDisabled,\n };\n break;\n\n case 'UPDATE':\n item = { title: 'ویرایش', icon: 'edit', color, action: action.action, isDisabled };\n break;\n\n case 'DELETE':\n item = {\n title: 'حذف',\n icon: 'delete',\n color: this.viewConfig.actionWarnColor,\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 ? color : this.viewConfig.actionWarnColor,\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 color,\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\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 [style.color]=\"item.isDisabled ? '' : item.color\"\n [style.font-size]=\"viewConfig.actionButtonSize\"\n [disabled]=\"item.isDisabled\"\n (click)=\"onClick(item.action)\"\n class=\"desktop\"\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\">{{ item.icon }}</mat-icon>\n</button>\n} }\n\n<!-- MENU -->\n@if (this.inMenu.length > 0) {\n<!-- DESKTOP -->\n@if (!isMobile) {\n<button\n mat-button\n type=\"button\"\n [matMenuTriggerFor]=\"actionMenu\"\n [style.color]=\"viewConfig.actionButtonColor\"\n [style.font-size]=\"viewConfig.actionButtonSize\"\n class=\"desktop\"\n>\n {{ viewConfig.actionMenuTitle }}\n</button>\n}\n<!-- MOBILE -->\n@else {\n<button mat-icon-button type=\"button\" [matMenuTriggerFor]=\"actionMenu\">\n <mat-icon [style.color]=\"viewConfig.actionButtonColor\">more_vert</mat-icon>\n</button>\n}\n\n<mat-menu #actionMenu=\"matMenu\" [xPosition]=\"'after'\" class=\"ngx-helper-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 [style.color]=\"item.isDisabled ? '' : item.color\"\n (click)=\"onClick(item.action)\"\n [disabled]=\"item.isDisabled\"\n >\n <span>{{ 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);\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 enClass: string;\n readonly isDeactive: boolean;\n readonly deactiveClass: string;\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';\nimport { NgClass } from '@angular/common';\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: [NgClass, 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'\" [ngClass]=\"[config.isDeactive ? config.deactiveClass : '']\">\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';\nimport { NgClass } from '@angular/common';\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: [NgClass, 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 [ngClass]=\"[config.isEN ? config.enClass : '', config.isDeactive ? config.deactiveClass : '']\"\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';\nimport { NgClass } from '@angular/common';\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: [NgClass, 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 [ngClass]=\"[config.isEN ? config.enClass : '', config.isDeactive ? config.deactiveClass : '']\"\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';\nimport { NgClass } from '@angular/common';\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: [NgClass, 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 [dir]=\"'ltr'\"\n [ngClass]=\"[config.isEN ? config.enClass : '', config.isDeactive ? config.deactiveClass : '']\"\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';\nimport { NgClass } from '@angular/common';\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: [NgClass],\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 [ngClass]=\"[config.isEN ? config.enClass : '', config.isDeactive ? config.deactiveClass : '']\"\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 { ComponentType } from '@angular/cdk/portal';\n\nimport { NgxTableColumn } from '../ngx-table.interface';\n\nimport {\n ColumnDateComponent,\n ColumnDateMethods,\n ColumnDurationComponent,\n ColumnDurationMethods,\n ColumnMethods,\n ColumnMobileComponent,\n ColumnMobileMethods,\n ColumnNumberComponent,\n ColumnNumberMethods,\n ColumnTextComponent,\n ColumnTextMethods,\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 MOBILE: { methods: new ColumnMobileMethods(), component: ColumnMobileComponent },\n NUMBER: { methods: new ColumnNumberMethods(), component: ColumnNumberComponent },\n TEXT: { methods: new ColumnTextMethods(), component: ColumnTextComponent },\n};\n","import { Component, HostBinding, Injector, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { NgClass, 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: [NgClass, NgComponentOutlet, ClipboardModule, MatIcon],\n templateUrl: './view-value.component.html',\n styleUrl: './view-value.component.scss',\n})\nexport class ViewValueComponent<T> implements OnChanges {\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)\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 enClass: this.viewConfig.enClass,\n isDeactive: !!this.isDeactive,\n deactiveClass: this.viewConfig.deactiveClass,\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 [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=\"subvalue\" [ngClass]=\"[subValue.isEN ? viewConfig.enClass : '']\">{{ 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;\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));\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, 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 @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 toolbar: HTMLElement,\n container: HTMLElement,\n ): void {\n if (toolbar.offsetWidth > container.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 > container.offsetWidth - toolbar.offsetWidth)\n left = container.offsetWidth - toolbar.offsetWidth;\n\n this.swipeLeft = left;\n container.style.left = `${left}px`;\n break;\n }\n }\n}\n","<div\n class=\"toolbar\"\n [style.background-color]=\"viewConfig.paginationBackgroundColor\"\n [style.position]=\"viewConfig.stickyView?.headerTop ? 'sticky' : 'static'\"\n [style.top]=\"viewConfig.stickyView?.headerTop?.mobileView || undefined\"\n (mousedown)=\"swipe($event, 'START', toolbar, toolbarContainer)\"\n (mousemove)=\"swipe($event, 'MOVE', toolbar, toolbarContainer)\"\n (mouseup)=\"swipe($event, 'END', toolbar, toolbarContainer)\"\n (touchstart)=\"swipe($event, 'START', toolbar, toolbarContainer)\"\n (touchmove)=\"swipe($event, 'MOVE', toolbar, toolbarContainer)\"\n (touchend)=\"swipe($event, 'END', toolbar, toolbarContainer)\"\n #toolbar\n>\n <div class=\"toolbar-items\" #toolbarContainer>\n <!-- ORDER -->\n @if (orderKeys.length > 0) {\n <div class=\"item\" [style.border-color]=\"viewConfig.borderColor\" [matMenuTriggerFor]=\"orderMenu\">\n <mat-icon>swap_vert</mat-icon>\n <span>ترتیب نمایش</span>\n </div>\n <mat-menu #orderMenu=\"matMenu\" [xPosition]=\"'before'\" class=\"ngx-helper-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\n class=\"item\"\n [style.color]=\"viewConfig.highlightText\"\n [style.border-color]=\"viewConfig.highlightText\"\n [style.background-color]=\"viewConfig.highlightBackground\"\n (click)=\"clearFilter.next()\"\n >\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\n class=\"item\"\n [style.color]=\"filters[item].value ? viewConfig.highlightText : ''\"\n [style.border-color]=\"filters[item].value ? viewConfig.highlightText : viewConfig.borderColor\"\n [style.background-color]=\"filters[item].value ? viewConfig.highlightBackground : ''\"\n (click)=\"updateFilter.next(item)\"\n >\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=\"seperator\"\n [style.background-color]=\"viewConfig.backgroundColor\"\n [style.position]=\"viewConfig.stickyView?.headerTop ? 'sticky' : 'static'\"\n [style.top]=\"'calc(' + (viewConfig.stickyView?.headerTop?.mobileView || undefined) + ' + var(--toolbarHeight) + 2px)'\"\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('style.--toolbarHeight') private toolbarHeight: string = '32px';\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 headerTop: 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?.headerTop?.mobileView;\n this.headerTop = top ? (this.hasToolbar ? `calc(${top} + var(--toolbarHeight) + 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=\"data\">\n @for (item of data; track $index; let dataIndex = $index) {\n <section [style.border-color]=\"viewConfig.borderColor\">\n <header\n [style.border-color]=\"viewConfig.borderColor\"\n [style.background-color]=\"viewConfig.headerBackgroundColor\"\n [style.position]=\"viewConfig.stickyView?.headerTop ? 'sticky' : 'static'\"\n [style.top]=\"headerTop\"\n >\n <!-- ICON -->\n @if (hasIcon) {\n <mat-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]=\"viewConfig.headerTextColor\">\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) {\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 </header>\n\n <!-- CONTENT -->\n @if (hasContent) {\n <content\n [style.border-color]=\"viewConfig.borderColor\"\n [style.color]=\"colors[dataIndex]\"\n [style.backgroundColor]=\"viewConfig.cardBackgroundColor\"\n >\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 }}:</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\n class=\"description\"\n [style.border-color]=\"viewConfig.borderColor\"\n [innerHTML]=\"descriptions[dataIndex] || '' | ngxHelperMultiLine\"\n ></div>\n }\n </content>\n }\n </section>\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('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","<content\n [class.desktop]=\"!isMobile\"\n [class.mobile]=\"isMobile\"\n [class.shadow]=\"hasShadow\"\n [style.backgroundColor]=\"viewConfig.paginationBackgroundColor\"\n>\n <section>\n <div class=\"title\">صفحه {{ pagination.page.current | number }} از {{ pagination.page.total | number }}</div>\n <div class=\"total\">{{ pagination.item.total | number }} {{ type }}</div>\n </section>\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\">\n @for (page of pages; track $index) {\n <button\n mat-menu-item\n type=\"button\"\n [disabled]=\"page === pagination.page.current\"\n class=\"pagination-menu-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</content>\n","import { Component, EventEmitter, HostBinding, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { NgClass } from '@angular/common';\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: [NgClass, 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 @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.color]=\"viewConfig.headerTextColor\"\n [style.background-color]=\"viewConfig.headerBackgroundColor\"\n [style.position]=\"viewConfig.stickyView?.headerTop ? 'sticky' : 'static'\"\n [style.top]=\"viewConfig.stickyView?.headerTop?.desktopView || undefined\"\n >\n <!-- ACTIVE FILTERS -->\n @if (activeFilters.length > 0) {\n <tr>\n <!-- ICON -->\n @if (hasIcon) {\n <th class=\"active-filters\" [style.border-color]=\"viewConfig.borderColor\"></th>\n }\n\n <!-- TOOLBAR -->\n <th\n class=\"active-filters\"\n [colSpan]=\"ngxTable.columns.length + (this.hasAction ? 1 : 0)\"\n [style.border-color]=\"viewConfig.borderColor\"\n >\n <div class=\"toolbar\" [@toolbar]>\n @for (item of activeFilters; track $index) {\n <div class=\"item\" [style.border-color]=\"viewConfig.borderColor\">\n <div class=\"title\" (click)=\"updateFilter(item.id)\">{{ item.title }}:</div>\n <div\n class=\"value\"\n (click)=\"updateFilter(item.id)\"\n [ngClass]=\"item.english ? viewConfig.enClass : ''\"\n >\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\n class=\"clear\"\n [style.border-color]=\"viewConfig.highlightText\"\n [style.color]=\"viewConfig.highlightText\"\n [style.background-color]=\"viewConfig.highlightBackground\"\n (click)=\"filterCleared.next()\"\n >\n <div class=\"title\">لغو فیلترها</div>\n <mat-icon>filter_alt_off</mat-icon>\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 class=\"column\">\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 [style.background-color]=\"\n viewConfig.alternateRows\n ? dataIndex % 2 === 1\n ? viewConfig.oddRowsBackgroundColor\n : viewConfig.evenRowsBackgroundColor\n : ''\n \"\n >\n <!-- ICON -->\n @if (hasIcon) {\n <td class=\"icon\" [style.border-color]=\"viewConfig.alternateRows ? '' : viewConfig.borderColor\">\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 [style.border-color]=\"viewConfig.alternateRows ? '' : viewConfig.borderColor\">\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\" [style.border-color]=\"viewConfig.alternateRows ? '' : viewConfig.borderColor\">\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.background-color]=\"\n viewConfig.alternateRows\n ? dataIndex % 2 === 1\n ? viewConfig.oddRowsBackgroundColor\n : viewConfig.evenRowsBackgroundColor\n : ''\n \"\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 cssClasses: {\n readonly loader?: string;\n readonly empty?: string;\n readonly en?: string;\n readonly deactive?: string;\n };\n readonly colors: {\n readonly border?: string;\n readonly background?: string;\n readonly headerText?: string;\n readonly headerBackground?: string;\n readonly oddRowsBackground?: string;\n readonly evenRowsBackground?: string;\n readonly cardBackground?: string;\n readonly paginationBackground?: string;\n readonly highlightText?: string;\n readonly highlightBackground?: string;\n readonly inputText?: string;\n readonly inputBackground?: string;\n };\n readonly action: {\n readonly buttonSize?: string;\n readonly buttonColor?: string;\n readonly menuColor?: string;\n readonly warnColor?: string;\n readonly menuTitle?: string;\n };\n readonly stickyView: {\n readonly headerTop?:\n | string\n | {\n readonly desktopView: string;\n readonly mobileView: string;\n };\n readonly paginationBottom?:\n | string\n | {\n readonly desktopView: string;\n readonly mobileView: string;\n };\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 { NgClass } from '@angular/common';\nimport { ActivatedRoute, Router } from '@angular/router';\n\nimport { Helper } from '@webilix/helper-library';\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: [NgClass, 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 loaderClass!: string;\n public emptyClass!: string;\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 this.loaderClass = this.config?.cssClasses?.loader || 'ngx-table-loader';\n this.emptyClass = this.config?.cssClasses?.empty || 'ngx-table-empty';\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\n enClass: this.config?.cssClasses?.en || 'ngx-table-en',\n deactiveClass: this.config?.cssClasses?.deactive || 'ngx-table-deactive',\n\n borderColor: this.config?.colors?.border || 'var(--outline-variant)',\n backgroundColor: this.config?.colors?.background || 'var(--background)',\n headerTextColor: this.config?.colors?.headerText || '',\n headerBackgroundColor: this.config?.colors?.headerBackground || 'var(--surface-container-highest)',\n oddRowsBackgroundColor: this.config?.colors?.oddRowsBackground || 'var(--background)',\n evenRowsBackgroundColor: this.config?.colors?.evenRowsBackground || 'var(--surface-container)',\n cardBackgroundColor: this.config?.colors?.cardBackground || 'var(--surface-container-high)',\n paginationBackgroundColor: this.config?.colors?.paginationBackground || 'var(--background)',\n highlightText: this.config?.colors?.highlightText || 'var(--secondary)',\n highlightBackground: this.config?.colors?.highlightBackground || 'var(--secondary-container)',\n inputText: this.config?.colors?.inputText || 'var(--on-surface)',\n inputBackground: this.config?.colors?.inputBackground || 'var(--surface-container-highest)',\n\n actionButtonSize: this.config?.action?.buttonSize || '90%',\n actionButtonColor: this.config?.action?.buttonColor || 'var(--primary)',\n actionMenuColor: this.config?.action?.buttonColor || '',\n actionWarnColor: this.config?.action?.warnColor || 'var(--error)',\n actionMenuTitle: this.config?.action?.menuTitle || 'امکانات',\n\n stickyView: this.config?.stickyView\n ? {\n headerTop: this.config.stickyView.headerTop\n ? getStickyView(this.config.stickyView.headerTop)\n : undefined,\n paginationBottom: this.config.stickyView.paginationBottom\n ? getStickyView(this.config.stickyView.paginationBottom)\n : 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 [ngClass]=\"loaderClass\"></div>\n}\n\n<!-- EMPTY -->\n@if (!loading && data.length === 0 && !hasFilter) {\n<div [ngClass]=\"emptyClass\" [dir]=\"'rtl'\">{{ ngxTable.type }} ثبت نشده است.</div>\n}\n\n<!-- DATA -->\n@if (!loading && (data.length > 0 || hasFilter)) {\n<content>\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?.paginationBottom\"\n (pageChanged)=\"pageChanged($event)\"\n ></view-pagination>\n }\n\n <!-- EMPTY -->\n @if ( data.length === 0) {\n <div [ngClass]=\"emptyClass\" [dir]=\"'rtl'\">{{ 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":["i1","i2","i1.FilterService","i2.ViewService","i1.ViewService","i2.FilterService"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@webilix/ngx-table-m3" />
5
+ export * from './public-api';
@@ -0,0 +1,24 @@
1
+ export interface IAction<T> {
2
+ readonly type: 'ACTION';
3
+ readonly title: string;
4
+ readonly icon: string;
5
+ readonly action: (data: T) => string[] | void;
6
+ readonly color?: string;
7
+ readonly standalone?: boolean;
8
+ disableOn?: (data: T) => boolean;
9
+ hideOn?: (data: T) => boolean;
10
+ }
11
+ export interface IActionUpdate<T> extends Omit<IAction<T>, 'type' | 'title' | 'icon' | 'color'> {
12
+ readonly type: 'UPDATE';
13
+ }
14
+ export interface IActionDelete<T> extends Omit<IAction<T>, 'type' | 'title' | 'icon' | 'color'> {
15
+ readonly type: 'DELETE';
16
+ }
17
+ export interface IActionStatus<T> extends Omit<IAction<T>, 'type' | 'title' | 'icon' | 'action' | 'color'> {
18
+ readonly type: 'STATUS';
19
+ readonly action: (data: T, active: boolean) => string[] | void;
20
+ readonly isDeactive: (data: T) => boolean;
21
+ }
22
+ export interface IActionLog<T> extends Omit<IAction<T>, 'type' | 'title' | 'icon' | 'color'> {
23
+ readonly type: 'LOG';
24
+ }
@@ -0,0 +1,9 @@
1
+ import { ComponentType } from '@angular/cdk/portal';
2
+ import { NgxTableColumn } from '../ngx-table.interface';
3
+ import { ColumnMethods } from '.';
4
+ export declare const ColumnInfo: {
5
+ [key in NgxTableColumn<any>['type']]: {
6
+ readonly methods: ColumnMethods<any, any>;
7
+ readonly component: ComponentType<any>;
8
+ };
9
+ };
@@ -0,0 +1,46 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ import { Filter } from '../filters';
3
+ interface IColumnOrder {
4
+ readonly type?: 'ORDER' | 'ASC' | 'DESC';
5
+ readonly initial?: 'ASC' | 'DESC';
6
+ readonly isDefault?: boolean;
7
+ }
8
+ export interface IColumn<T> {
9
+ readonly title: string;
10
+ readonly value: keyof T | ((data: T) => any);
11
+ readonly subValue?: keyof T | ((data: T) => string | {
12
+ value: string;
13
+ english: true;
14
+ } | undefined);
15
+ readonly english?: ((data: T) => boolean) | boolean;
16
+ readonly color?: string | ((data: T) => string);
17
+ readonly textAlign?: 'RIGHT' | 'CENTER' | 'LEFT';
18
+ readonly mode?: 'TITLE' | 'SUBTITLE';
19
+ readonly onClick?: (data: T) => string[] | (() => void);
20
+ readonly onCopy?: (data: T) => string;
21
+ readonly tools?: {
22
+ readonly id: string;
23
+ readonly order: IColumnOrder;
24
+ } | {
25
+ readonly id: string;
26
+ readonly filter: Filter;
27
+ } | {
28
+ readonly id: string;
29
+ readonly order: IColumnOrder;
30
+ readonly filter: Filter;
31
+ };
32
+ }
33
+ export declare abstract class ColumnMethods<C /** COLUMN **/, V /** VALUE **/> {
34
+ abstract column(column: C): C;
35
+ abstract value(value: any, column?: C): V | undefined;
36
+ }
37
+ export interface IColumnConfig {
38
+ readonly isEN: boolean;
39
+ readonly enClass: string;
40
+ readonly isDeactive: boolean;
41
+ readonly deactiveClass: string;
42
+ }
43
+ export declare const COLUMN_TYPE: InjectionToken<any>;
44
+ export declare const COLUMN_CONFIG: InjectionToken<IColumnConfig>;
45
+ export declare const COLUMN_VALUE: InjectionToken<any>;
46
+ export {};
@@ -0,0 +1,10 @@
1
+ import { IColumnConfig } from '../column.interface';
2
+ import { IColumnDate } from './column-date.interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ColumnDateComponent<T> {
5
+ column: IColumnDate<T>;
6
+ value: Date;
7
+ config: IColumnConfig;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColumnDateComponent<any>, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColumnDateComponent<any>, "ng-component", never, {}, {}, never, never, true, never>;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { ColumnMethods, IColumn } from '../column.interface';
2
+ export interface IColumnDate<T> extends Omit<IColumn<T>, 'title' | 'english'> {
3
+ readonly type: 'DATE';
4
+ readonly title?: string;
5
+ readonly format?: string | 'FULL' | 'SHORT' | 'DATE' | 'TIME' | 'WEEK' | 'MONTH' | 'YEAR';
6
+ }
7
+ export declare class ColumnDateMethods<T> extends ColumnMethods<IColumnDate<T>, Date> {
8
+ column(column: IColumnDate<T>): IColumnDate<T>;
9
+ value(value: any, column?: IColumnDate<T> | undefined): Date | undefined;
10
+ }
@@ -0,0 +1,10 @@
1
+ import { IColumnConfig } from '../column.interface';
2
+ import { IColumnDuration } from './column-duration.interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ColumnDurationComponent<T> {
5
+ column: IColumnDuration<T>;
6
+ value: number;
7
+ config: IColumnConfig;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColumnDurationComponent<any>, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColumnDurationComponent<any>, "ng-component", never, {}, {}, never, never, true, never>;
10
+ }
@@ -0,0 +1,9 @@
1
+ import { ColumnMethods, IColumn } from '../column.interface';
2
+ export interface IColumnDuration<T> extends IColumn<T> {
3
+ readonly type: 'DURATION';
4
+ readonly format?: 'FULL' | 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND';
5
+ }
6
+ export declare class ColumnDurationMethods<T> extends ColumnMethods<IColumnDuration<T>, number> {
7
+ column(column: IColumnDuration<T>): IColumnDuration<T>;
8
+ value(value: any, column?: IColumnDuration<T> | undefined): number | undefined;
9
+ }
@@ -0,0 +1,13 @@
1
+ export * from './date/column-date.component';
2
+ export * from './date/column-date.interface';
3
+ export * from './duration/column-duration.component';
4
+ export * from './duration/column-duration.interface';
5
+ export * from './mobile/column-mobile.component';
6
+ export * from './mobile/column-mobile.interface';
7
+ export * from './number/column-number.component';
8
+ export * from './number/column-number.interface';
9
+ export * from './text/column-text.component';
10
+ export * from './text/column-text.interface';
11
+ export * from './column.action';
12
+ export * from './column.info';
13
+ export * from './column.interface';
@@ -0,0 +1,10 @@
1
+ import { IColumnConfig } from '../column.interface';
2
+ import { IColumnMobile } from './column-mobile.interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ColumnMobileComponent<T> {
5
+ column: IColumnMobile<T>;
6
+ value: string;
7
+ config: IColumnConfig;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColumnMobileComponent<any>, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColumnMobileComponent<any>, "ng-component", never, {}, {}, never, never, true, never>;
10
+ }
@@ -0,0 +1,9 @@
1
+ import { ColumnMethods, IColumn } from '../column.interface';
2
+ export interface IColumnMobile<T> extends Omit<IColumn<T>, 'title'> {
3
+ readonly type: 'MOBILE';
4
+ readonly title?: string;
5
+ }
6
+ export declare class ColumnMobileMethods<T> extends ColumnMethods<IColumnMobile<T>, string> {
7
+ column(column: IColumnMobile<T>): IColumnMobile<T>;
8
+ value(value: any, column?: IColumnMobile<T> | undefined): string | undefined;
9
+ }
@@ -0,0 +1,10 @@
1
+ import { IColumnConfig } from '../column.interface';
2
+ import { IColumnNumber } from './column-number.interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ColumnNumberComponent<T> {
5
+ column: IColumnNumber<T>;
6
+ value: number;
7
+ config: IColumnConfig;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColumnNumberComponent<any>, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColumnNumberComponent<any>, "ng-component", never, {}, {}, never, never, true, never>;
10
+ }
@@ -0,0 +1,9 @@
1
+ import { ColumnMethods, IColumn } from '../column.interface';
2
+ export interface IColumnNumber<T> extends IColumn<T> {
3
+ readonly type: 'NUMBER';
4
+ readonly fractionDigits?: number;
5
+ }
6
+ export declare class ColumnNumberMethods<T> extends ColumnMethods<IColumnNumber<T>, number> {
7
+ column(column: IColumnNumber<T>): IColumnNumber<T>;
8
+ value(value: any, column?: IColumnNumber<T> | undefined): number | undefined;
9
+ }
@@ -0,0 +1,10 @@
1
+ import { IColumnConfig } from '../column.interface';
2
+ import { IColumnText } from './column-text.interface';
3
+ import * as i0 from "@angular/core";
4
+ export declare class ColumnTextComponent<T> {
5
+ column: IColumnText<T>;
6
+ value: string;
7
+ config: IColumnConfig;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColumnTextComponent<any>, never>;
9
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColumnTextComponent<any>, "ng-component", never, {}, {}, never, never, true, never>;
10
+ }
@@ -0,0 +1,8 @@
1
+ import { ColumnMethods, IColumn } from '../column.interface';
2
+ export interface IColumnText<T> extends IColumn<T> {
3
+ readonly type: 'TEXT';
4
+ }
5
+ export declare class ColumnTextMethods<T> extends ColumnMethods<IColumnText<T>, string> {
6
+ column(column: IColumnText<T>): IColumnText<T>;
7
+ value(value: any, column?: IColumnText<T> | undefined): string | undefined;
8
+ }