ngx-kit 8.3.9 → 8.4.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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { InputSignal, Type, TemplateRef, InjectionToken, EnvironmentProviders, OnInit, AfterContentInit } from '@angular/core';
|
|
2
|
+
import { InputSignal, Type, TemplateRef, InjectionToken, EnvironmentProviders, OnInit, AfterContentInit, ElementRef } from '@angular/core';
|
|
3
3
|
import * as ngx_kit_core from 'ngx-kit/core';
|
|
4
4
|
import * as ngx_kit_data_table from 'ngx-kit/data-table';
|
|
5
5
|
|
|
@@ -9,6 +9,43 @@ interface SortMeta<T> {
|
|
|
9
9
|
direction: SortDirection;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
declare enum DynamicDataFilterOperator {
|
|
13
|
+
Equal = 0,
|
|
14
|
+
NotEqual = 1,
|
|
15
|
+
Contains = 2,
|
|
16
|
+
StartsWith = 3,
|
|
17
|
+
EndsWith = 4,
|
|
18
|
+
GreaterThan = 5,
|
|
19
|
+
GreaterThanOrEqual = 6,
|
|
20
|
+
LessThan = 7,
|
|
21
|
+
LessThanOrEqual = 8,
|
|
22
|
+
Between = 9,
|
|
23
|
+
In = 10,
|
|
24
|
+
IsNull = 11,
|
|
25
|
+
IsNotNull = 12,
|
|
26
|
+
IsEmpty = 13,
|
|
27
|
+
IsNotEmpty = 14
|
|
28
|
+
}
|
|
29
|
+
type FilterDataType = 'text' | 'number' | 'date' | 'boolean' | 'enum';
|
|
30
|
+
interface EnumFilterOption<T = unknown> {
|
|
31
|
+
label: string;
|
|
32
|
+
value: T;
|
|
33
|
+
}
|
|
34
|
+
interface ColumnFilterConfig<T = unknown> {
|
|
35
|
+
type?: FilterDataType;
|
|
36
|
+
enabled?: boolean;
|
|
37
|
+
options?: EnumFilterOption<T>[];
|
|
38
|
+
placeholder?: string;
|
|
39
|
+
defaultOperator?: DynamicDataFilterOperator;
|
|
40
|
+
}
|
|
41
|
+
interface ColumnFilterState {
|
|
42
|
+
field: string;
|
|
43
|
+
operator: DynamicDataFilterOperator;
|
|
44
|
+
value: any;
|
|
45
|
+
valueTo?: any;
|
|
46
|
+
values?: any[];
|
|
47
|
+
}
|
|
48
|
+
|
|
12
49
|
interface PageEvent {
|
|
13
50
|
page: number;
|
|
14
51
|
pageSize: number;
|
|
@@ -16,13 +53,12 @@ interface PageEvent {
|
|
|
16
53
|
interface PageState {
|
|
17
54
|
pageIndex: number;
|
|
18
55
|
pageSize: number;
|
|
19
|
-
/** آفست صفر-پایهی اولین ردیف صفحهی جاری. */
|
|
20
56
|
first: number;
|
|
21
57
|
}
|
|
22
|
-
/** هر بار سرور باید صفحهی جدید را (در حالت lazy) واکشی کند، امیت میشود. */
|
|
23
58
|
interface LazyLoadEvent<T> extends PageState {
|
|
24
59
|
sorts?: SortMeta<T>[];
|
|
25
60
|
sorting?: string;
|
|
61
|
+
filters?: ColumnFilterState[];
|
|
26
62
|
}
|
|
27
63
|
|
|
28
64
|
interface NgxPaginationOptions {
|
|
@@ -57,7 +93,7 @@ interface CellTemplateContext<T extends object> {
|
|
|
57
93
|
field: TableFieldBase<T>;
|
|
58
94
|
}
|
|
59
95
|
/** شکل پایهای مشترک بین همهی ستونها، صرفنظر از اینکه renderer دارند یا نه. */
|
|
60
|
-
interface TableFieldBase<T extends object> {
|
|
96
|
+
interface TableFieldBase<T extends object, K extends keyof T = keyof T> {
|
|
61
97
|
column: Extract<keyof T, string>;
|
|
62
98
|
title: string;
|
|
63
99
|
/**
|
|
@@ -76,6 +112,8 @@ interface TableFieldBase<T extends object> {
|
|
|
76
112
|
align?: ColumnAlign;
|
|
77
113
|
prefix?: string;
|
|
78
114
|
formatter?: string | TableCellFormatter<T>;
|
|
115
|
+
filterable?: boolean;
|
|
116
|
+
filterConfig?: ColumnFilterConfig<T[K]>;
|
|
79
117
|
}
|
|
80
118
|
/** ستون بدون renderer (متن ساده / formatter / cellTemplate دستی). */
|
|
81
119
|
interface PlainTableField<T extends object> extends TableFieldBase<T> {
|
|
@@ -140,6 +178,29 @@ declare class TableLocalization {
|
|
|
140
178
|
noData: string;
|
|
141
179
|
loading: string;
|
|
142
180
|
operation: string;
|
|
181
|
+
filter: string;
|
|
182
|
+
clearFilter: string;
|
|
183
|
+
applyFilter: string;
|
|
184
|
+
search: string;
|
|
185
|
+
selectAll: string;
|
|
186
|
+
from: string;
|
|
187
|
+
to: string;
|
|
188
|
+
trueText: string;
|
|
189
|
+
falseText: string;
|
|
190
|
+
opEqual: string;
|
|
191
|
+
opNotEqual: string;
|
|
192
|
+
opContains: string;
|
|
193
|
+
opStartsWith: string;
|
|
194
|
+
opEndsWith: string;
|
|
195
|
+
opGreaterThan: string;
|
|
196
|
+
opGreaterThanOrEqual: string;
|
|
197
|
+
opLessThan: string;
|
|
198
|
+
opLessThanOrEqual: string;
|
|
199
|
+
opBetween: string;
|
|
200
|
+
opIsNull: string;
|
|
201
|
+
opIsNotNull: string;
|
|
202
|
+
opIsEmpty: string;
|
|
203
|
+
opIsNotEmpty: string;
|
|
143
204
|
}
|
|
144
205
|
|
|
145
206
|
declare const NGX_TABLE_CONFIG: InjectionToken<ResolvedTableOptions>;
|
|
@@ -229,24 +290,19 @@ declare class ColumnResize {
|
|
|
229
290
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ColumnResize, "[ngxColumnResize]", never, { "startWidth": { "alias": "ngxColumnResizeWidth"; "required": true; "isSignal": true; }; "minWidth": { "alias": "ngxColumnResizeMin"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "ngxColumnResizeMax"; "required": false; "isSignal": true; }; "direction": { "alias": "ngxColumnResizeDir"; "required": false; "isSignal": true; }; }, { "resizing": "resizing"; "resizeEnd": "resizeEnd"; }, never, never, true, never>;
|
|
230
291
|
}
|
|
231
292
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
* دو حالت:
|
|
241
|
-
* - کلاینتساید (پیشفرض): [data] کل آرایه است؛ سورت/صفحهبندی داخلی و روی
|
|
242
|
-
* یک computed خالص انجام میشود (بدون mutation روی آبجکتهای شما).
|
|
243
|
-
* - lazy: [lazy]="true" + [totalRecords]؛ [data] فقط صفحهی جاری است؛ به
|
|
244
|
-
* (lazyLoad) گوش بدهید.
|
|
245
|
-
*/
|
|
293
|
+
declare class ColumnFilterService {
|
|
294
|
+
applyFilters<T>(data: readonly T[], filters: Record<string, ColumnFilterState>): T[];
|
|
295
|
+
isFilterActive(filter?: ColumnFilterState | null): boolean;
|
|
296
|
+
private evaluateFilter;
|
|
297
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColumnFilterService, never>;
|
|
298
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<ColumnFilterService>;
|
|
299
|
+
}
|
|
300
|
+
|
|
246
301
|
declare class NgxTable<T extends object> implements OnInit, AfterContentInit {
|
|
247
302
|
protected readonly config: ngx_kit_data_table.ResolvedTableOptions;
|
|
248
303
|
protected readonly labels: ngx_kit_data_table.TableLocalization;
|
|
249
304
|
protected readonly paginationConfig: ngx_kit_data_table.NgxPaginationOptions;
|
|
305
|
+
protected readonly columnFilterService: ColumnFilterService;
|
|
250
306
|
readonly fields: _angular_core.InputSignal<TableField<T, any>[]>;
|
|
251
307
|
readonly data: _angular_core.InputSignal<readonly T[]>;
|
|
252
308
|
readonly totalRecords: _angular_core.InputSignal<number>;
|
|
@@ -264,8 +320,6 @@ declare class NgxTable<T extends object> implements OnInit, AfterContentInit {
|
|
|
264
320
|
readonly lazy: _angular_core.InputSignal<boolean>;
|
|
265
321
|
readonly resizable: _angular_core.InputSignal<boolean>;
|
|
266
322
|
readonly height: _angular_core.InputSignal<string>;
|
|
267
|
-
/** پیشفرض بر اساس ایندکس؛ برای جلوگیری از گمشدن state سطرها هنگام سورت،
|
|
268
|
-
* یک شناسهی یکتا بدهید: [trackBy]="(i, row) => row.id" */
|
|
269
323
|
readonly trackBy: _angular_core.InputSignal<(index: number, row: T) => unknown>;
|
|
270
324
|
readonly lazyLoad: _angular_core.OutputEmitterRef<LazyLoadEvent<T>>;
|
|
271
325
|
readonly sortChange: _angular_core.OutputEmitterRef<SortMeta<T>[]>;
|
|
@@ -273,10 +327,13 @@ declare class NgxTable<T extends object> implements OnInit, AfterContentInit {
|
|
|
273
327
|
field: string;
|
|
274
328
|
width: number;
|
|
275
329
|
}>;
|
|
330
|
+
readonly filterChange: _angular_core.OutputEmitterRef<ColumnFilterState[]>;
|
|
331
|
+
readonly elementRef: ElementRef<HTMLElement>;
|
|
276
332
|
protected readonly pageIndex: _angular_core.WritableSignal<number>;
|
|
277
333
|
protected readonly pageSizeS: _angular_core.WritableSignal<number>;
|
|
278
334
|
protected readonly sorts: _angular_core.WritableSignal<SortMeta<T>[]>;
|
|
279
335
|
protected readonly widths: _angular_core.WritableSignal<Record<string, number>>;
|
|
336
|
+
protected readonly activeFilters: _angular_core.WritableSignal<Record<string, ColumnFilterState>>;
|
|
280
337
|
private readonly manuallyResized;
|
|
281
338
|
private readonly rendererInputsCache;
|
|
282
339
|
private cellTemplates;
|
|
@@ -289,23 +346,22 @@ declare class NgxTable<T extends object> implements OnInit, AfterContentInit {
|
|
|
289
346
|
ngOnInit(): void;
|
|
290
347
|
ngAfterContentInit(): void;
|
|
291
348
|
private syncTemplateMap;
|
|
349
|
+
protected readonly filteredData: _angular_core.Signal<readonly T[]>;
|
|
292
350
|
protected readonly sortedData: _angular_core.Signal<readonly T[]>;
|
|
293
351
|
protected readonly totalCount: _angular_core.Signal<number>;
|
|
294
352
|
protected readonly pagedData: _angular_core.Signal<readonly T[]>;
|
|
295
353
|
private compare;
|
|
296
|
-
/** بدون mutation روی دادهی ورودی: شمارهی ردیف صرفاً از روی page/pageSize/rowIndex محاسبه میشود. */
|
|
297
354
|
protected recordNumber(rowIndex: number): number;
|
|
298
355
|
protected sortDirectionFor(column: string): SortDirection | null;
|
|
299
356
|
protected onHeaderClick(field: TableField<T, any>, event: MouseEvent): void;
|
|
357
|
+
protected isFilterable(field: TableField<T, any>): boolean;
|
|
358
|
+
protected getFilterState(column: string): ColumnFilterState | null;
|
|
359
|
+
protected getDistinctValues(column: string): unknown[];
|
|
360
|
+
protected onFilterApply(state: ColumnFilterState): void;
|
|
361
|
+
protected onFilterClear(field: string): void;
|
|
300
362
|
protected onPaginate(event: PageEvent): void;
|
|
301
363
|
private emitLazyIfNeeded;
|
|
302
364
|
protected columnWidth(column: string): number;
|
|
303
|
-
/**
|
|
304
|
-
* مقدار CSS `flex` واقعیِ این ستون:
|
|
305
|
-
* - اگه دستی ریسایز شده یا width عددی داره → `0 0 <px>` (ثابت، بدون رشد/کوچکشدن)
|
|
306
|
-
* - اگه width رشتهای داره (مثلاً '20%') → `0 0 <رشته>` (ثابت، هر واحد CSS معتبری)
|
|
307
|
-
* - اگه اصلاً width نداره → `1 1 0` (رشد میکنه تا فضای باقیموندهی جدول رو پر کنه)
|
|
308
|
-
*/
|
|
309
365
|
protected columnFlex(field: TableField<T, any>): string;
|
|
310
366
|
protected columnMin(field: TableField<T, any>): number;
|
|
311
367
|
protected columnMax(field: TableField<T, any>): number;
|
|
@@ -317,12 +373,9 @@ declare class NgxTable<T extends object> implements OnInit, AfterContentInit {
|
|
|
317
373
|
protected getCellValue(row: T, field: TableField<T, any>): unknown;
|
|
318
374
|
protected formatCellValue(row: T, field: TableField<T, any>): string;
|
|
319
375
|
private stringify;
|
|
320
|
-
/** ورودیهای renderer را بهازای هر (field, row) کش میکند تا هر Change
|
|
321
|
-
* Detection یک آبجکت جدید ساخته نشود؛ با WeakMap، وقتی row از حافظه خارج
|
|
322
|
-
* شود (مثلاً بعد از عوضشدن صفحه)، entry آن هم خودکار پاک میشود. */
|
|
323
376
|
protected getRendererInputs(row: T, field: TableField<T, any>): Record<string, unknown>;
|
|
324
377
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxTable<any>, never>;
|
|
325
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxTable<any>, "ngx-table", never, { "fields": { "alias": "fields"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": true; "isSignal": true; }; "showRecordNumber": { "alias": "showRecordNumber"; "required": false; "isSignal": true; }; "operations": { "alias": "operations"; "required": false; "isSignal": true; }; "operationWidth": { "alias": "operationWidth"; "required": false; "isSignal": true; }; "numWidth": { "alias": "numWidth"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "multiSort": { "alias": "multiSort"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; "lazyLoad": "lazyLoad"; "sortChange": "sortChange"; "columnResize": "columnResize"; }, ["cellTemplates"], never, true, never>;
|
|
378
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxTable<any>, "ngx-table", never, { "fields": { "alias": "fields"; "required": true; "isSignal": true; }; "data": { "alias": "data"; "required": true; "isSignal": true; }; "totalRecords": { "alias": "totalRecords"; "required": true; "isSignal": true; }; "showRecordNumber": { "alias": "showRecordNumber"; "required": false; "isSignal": true; }; "operations": { "alias": "operations"; "required": false; "isSignal": true; }; "operationWidth": { "alias": "operationWidth"; "required": false; "isSignal": true; }; "numWidth": { "alias": "numWidth"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "multiSort": { "alias": "multiSort"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; "lazyLoad": "lazyLoad"; "sortChange": "sortChange"; "columnResize": "columnResize"; "filterChange": "filterChange"; }, ["cellTemplates"], never, true, never>;
|
|
326
379
|
}
|
|
327
380
|
|
|
328
381
|
declare class NgxPagination {
|
|
@@ -351,5 +404,42 @@ declare class NgxPagination {
|
|
|
351
404
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxPagination, "ngx-pagination", never, { "total": { "alias": "total"; "required": true; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "siblingCount": { "alias": "siblingCount"; "required": false; "isSignal": true; }; "boundaryCount": { "alias": "boundaryCount"; "required": false; "isSignal": true; }; }, { "page": "pageChange"; "pageSize": "pageSizeChange"; "paginate": "paginate"; }, never, never, true, never>;
|
|
352
405
|
}
|
|
353
406
|
|
|
354
|
-
|
|
355
|
-
|
|
407
|
+
declare class NgxColumnFilter {
|
|
408
|
+
protected readonly labels: ngx_kit_data_table.TableLocalization;
|
|
409
|
+
private readonly elementRef;
|
|
410
|
+
readonly tableEl: _angular_core.InputSignal<ElementRef<HTMLElement>>;
|
|
411
|
+
readonly field: _angular_core.InputSignal<string>;
|
|
412
|
+
readonly config: _angular_core.InputSignal<ColumnFilterConfig<unknown> | undefined>;
|
|
413
|
+
readonly currentFilter: _angular_core.InputSignal<ColumnFilterState | null>;
|
|
414
|
+
readonly distinctValues: _angular_core.InputSignal<unknown[]>;
|
|
415
|
+
readonly applyFilter: _angular_core.OutputEmitterRef<ColumnFilterState>;
|
|
416
|
+
readonly clearFilter: _angular_core.OutputEmitterRef<string>;
|
|
417
|
+
protected readonly isOpen: _angular_core.WritableSignal<boolean>;
|
|
418
|
+
protected readonly filterType: _angular_core.Signal<FilterDataType>;
|
|
419
|
+
protected readonly selectedOperator: _angular_core.WritableSignal<DynamicDataFilterOperator>;
|
|
420
|
+
protected readonly filterValue: _angular_core.WritableSignal<any>;
|
|
421
|
+
protected readonly filterValueTo: _angular_core.WritableSignal<any>;
|
|
422
|
+
protected readonly selectedEnumValues: _angular_core.WritableSignal<Set<any>>;
|
|
423
|
+
protected readonly enumSearchQuery: _angular_core.WritableSignal<string>;
|
|
424
|
+
protected readonly operators: _angular_core.Signal<{
|
|
425
|
+
label: string;
|
|
426
|
+
value: DynamicDataFilterOperator;
|
|
427
|
+
}[]>;
|
|
428
|
+
protected readonly enumOptions: _angular_core.Signal<EnumFilterOption<unknown>[]>;
|
|
429
|
+
protected readonly filteredEnumOptions: _angular_core.Signal<EnumFilterOption<unknown>[]>;
|
|
430
|
+
protected readonly isNoValueOperator: _angular_core.Signal<boolean>;
|
|
431
|
+
protected toggleDropdown(event: MouseEvent): void;
|
|
432
|
+
updatePosition(): void;
|
|
433
|
+
private syncStateFromInput;
|
|
434
|
+
protected onApply(): void;
|
|
435
|
+
protected onClear(): void;
|
|
436
|
+
protected toggleEnumSelection(val: any): void;
|
|
437
|
+
protected toggleSelectAll(checked: boolean): void;
|
|
438
|
+
protected onDocumentClick(event: MouseEvent): void;
|
|
439
|
+
protected onEscape(): void;
|
|
440
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxColumnFilter, never>;
|
|
441
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxColumnFilter, "ngx-column-filter", never, { "tableEl": { "alias": "tableEl"; "required": true; "isSignal": true; }; "field": { "alias": "field"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; "currentFilter": { "alias": "currentFilter"; "required": false; "isSignal": true; }; "distinctValues": { "alias": "distinctValues"; "required": false; "isSignal": true; }; }, { "applyFilter": "applyFilter"; "clearFilter": "clearFilter"; }, never, never, true, never>;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
export { ColumnFilterService, ColumnResize, DynamicDataFilterOperator, NGX_PAGINATION_CONFIG, NGX_PAGINATION_I18N, NGX_TABLE_CONFIG, NGX_TABLE_I18N, NgxColumnFilter, NgxPagination, NgxTable, PaginationLocalization, TableCell, TableLocalization, defineFields, defineRenderers, providePagination, provideTable };
|
|
445
|
+
export type { CellRendererComponent, CellTemplateContext, ColumnAlign, ColumnFilterConfig, ColumnFilterState, ColumnSizingConfig, EnumFilterOption, FilterDataType, LazyLoadEvent, NgxPaginationOptions, NgxTableOptions, PageEvent, PageState, PlainTableField, RenderedTableField, RendererExtraInputs, RendererRegistry, ResolvedTableOptions, SortDirection, SortMeta, TableCellFormatter, TableField, TableFieldBase };
|