ngx-kit 3.2.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngx-kit-data-table.mjs +619 -0
- package/fesm2022/ngx-kit-data-table.mjs.map +1 -0
- package/fesm2022/ngx-kit-message.mjs +10 -2
- package/fesm2022/ngx-kit-message.mjs.map +1 -1
- package/fesm2022/ngx-kit-notify.mjs +9 -0
- package/fesm2022/ngx-kit-notify.mjs.map +1 -1
- package/fesm2022/ngx-kit-shared.mjs +94 -7
- package/fesm2022/ngx-kit-shared.mjs.map +1 -1
- package/package.json +5 -1
- package/types/ngx-kit-data-table.d.ts +334 -0
- package/types/ngx-kit-message.d.ts +1 -0
- package/types/ngx-kit-notify.d.ts +2 -0
- package/types/ngx-kit-shared.d.ts +30 -4
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
|
+
import { InputSignal, Type, TemplateRef, InjectionToken, EnvironmentProviders, OnInit, AfterContentInit } from '@angular/core';
|
|
3
|
+
import * as ngx_kit_shared from 'ngx-kit/shared';
|
|
4
|
+
import * as ngx_kit_data_table from 'ngx-kit/data-table';
|
|
5
|
+
|
|
6
|
+
type SortDirection = 'asc' | 'desc';
|
|
7
|
+
interface SortMeta<T> {
|
|
8
|
+
field: Extract<keyof T, string>;
|
|
9
|
+
direction: SortDirection;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
interface PageEvent {
|
|
13
|
+
page: number;
|
|
14
|
+
pageSize: number;
|
|
15
|
+
}
|
|
16
|
+
interface PageState {
|
|
17
|
+
pageIndex: number;
|
|
18
|
+
pageSize: number;
|
|
19
|
+
/** آفست صفر-پایهی اولین ردیف صفحهی جاری. */
|
|
20
|
+
first: number;
|
|
21
|
+
}
|
|
22
|
+
/** هر بار سرور باید صفحهی جدید را (در حالت lazy) واکشی کند، امیت میشود. */
|
|
23
|
+
interface LazyLoadEvent<T> extends PageState {
|
|
24
|
+
sorts: SortMeta<T>[];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
interface PaginationLabel {
|
|
28
|
+
first: string;
|
|
29
|
+
last: string;
|
|
30
|
+
next: string;
|
|
31
|
+
previous: string;
|
|
32
|
+
showing: string;
|
|
33
|
+
to: string;
|
|
34
|
+
of: string;
|
|
35
|
+
results: string;
|
|
36
|
+
pageSize: string;
|
|
37
|
+
}
|
|
38
|
+
interface NgxPaginationOptions {
|
|
39
|
+
labels: PaginationLabel;
|
|
40
|
+
pageSizeOptions: number[];
|
|
41
|
+
defaultPageSize: number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
interface CellRendererComponent<TValue = unknown, TRow extends object = object> {
|
|
45
|
+
value: InputSignal<TValue>;
|
|
46
|
+
row: InputSignal<TRow>;
|
|
47
|
+
field: InputSignal<TableFieldBase<TRow>>;
|
|
48
|
+
}
|
|
49
|
+
type RendererRegistry = Readonly<Record<string, Type<CellRendererComponent<any, any>>>>;
|
|
50
|
+
/**
|
|
51
|
+
* Identity helper: یک رجیستری رندرر را با inference کامل تعریف میکند.
|
|
52
|
+
* همین آبجکت باید هم در provideTable({ renderers }) و هم در defineFields(renderers, ...)
|
|
53
|
+
* استفاده شود تا کلیدها (و ورودیهای اضافهی هر رندرر) در کل پروژه type-check شوند.
|
|
54
|
+
*/
|
|
55
|
+
declare function defineRenderers<R extends RendererRegistry>(registry: R): R;
|
|
56
|
+
type InstanceOf<C> = C extends Type<infer I> ? I : never;
|
|
57
|
+
type UnwrapSignal<S> = S extends () => infer V ? V : never;
|
|
58
|
+
type RendererExtraInputs<C extends Type<any>> = {
|
|
59
|
+
[K in keyof InstanceOf<C> as K extends 'value' | 'row' | 'field' ? never : InstanceOf<C>[K] extends () => any ? K : never]?: UnwrapSignal<InstanceOf<C>[K]>;
|
|
60
|
+
};
|
|
61
|
+
type ColumnAlign = 'start' | 'center' | 'end';
|
|
62
|
+
type TableCellFormatter<T extends object = object> = (value: unknown, row: T, field: TableFieldBase<T>) => unknown;
|
|
63
|
+
interface CellTemplateContext<T extends object> {
|
|
64
|
+
$implicit: T;
|
|
65
|
+
row: T;
|
|
66
|
+
value: unknown;
|
|
67
|
+
rowIndex: number;
|
|
68
|
+
field: TableFieldBase<T>;
|
|
69
|
+
}
|
|
70
|
+
/** شکل پایهای مشترک بین همهی ستونها، صرفنظر از اینکه renderer دارند یا نه. */
|
|
71
|
+
interface TableFieldBase<T extends object> {
|
|
72
|
+
column: Extract<keyof T, string>;
|
|
73
|
+
title: string;
|
|
74
|
+
width?: number;
|
|
75
|
+
minWidth?: number;
|
|
76
|
+
maxWidth?: number;
|
|
77
|
+
resizable?: boolean;
|
|
78
|
+
sortable?: boolean;
|
|
79
|
+
wrap?: boolean;
|
|
80
|
+
align?: ColumnAlign;
|
|
81
|
+
prefix?: string;
|
|
82
|
+
formatter?: string | TableCellFormatter<T>;
|
|
83
|
+
}
|
|
84
|
+
/** ستون بدون renderer (متن ساده / formatter / cellTemplate دستی). */
|
|
85
|
+
interface PlainTableField<T extends object> extends TableFieldBase<T> {
|
|
86
|
+
renderer?: undefined;
|
|
87
|
+
rendererInputs?: undefined;
|
|
88
|
+
cellTemplate?: TemplateRef<CellTemplateContext<T>>;
|
|
89
|
+
}
|
|
90
|
+
/** ستونی که یک renderer از رجیستری R انتخاب کرده؛ rendererInputs دقیقاً همان
|
|
91
|
+
* ورودیهای اضافهی همان renderer است — نه یک Record<string, unknown> آزاد. */
|
|
92
|
+
type RenderedTableField<T extends object, R extends RendererRegistry> = {
|
|
93
|
+
[K in keyof R]: TableFieldBase<T> & {
|
|
94
|
+
renderer: K;
|
|
95
|
+
rendererInputs?: RendererExtraInputs<R[K]>;
|
|
96
|
+
cellTemplate?: undefined;
|
|
97
|
+
};
|
|
98
|
+
}[keyof R];
|
|
99
|
+
type TableField<T extends object, R extends RendererRegistry = {}> = PlainTableField<T> | RenderedTableField<T, R>;
|
|
100
|
+
/**
|
|
101
|
+
* Identity helper برای تعریف ستونهای یک جدول با inference و type-check کامل
|
|
102
|
+
* نسبت به هم مدل داده (T) و هم رجیستری رندررها (R).
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* const renderers = defineRenderers({ avatar: AvatarCellRenderer, boolean: BooleanCellRenderer });
|
|
106
|
+
*
|
|
107
|
+
* const fields = defineFields<Tenant, typeof renderers>(renderers, [
|
|
108
|
+
* { column: 'avatarUrl', title: 'کاربر', renderer: 'avatar', rendererInputs: { showName: true } }, // ✅
|
|
109
|
+
* { column: 'avatarUrl', title: 'کاربر', renderer: 'avatar', rendererInputs: { showName: 'x' } }, // ❌ باید boolean باشد
|
|
110
|
+
* { column: 'isActive', title: 'فعال', renderer: 'bool' }, // ❌ کلید رجیستری نیست
|
|
111
|
+
* { column: 'ageXYZ', title: '...' }, // ❌ فیلد Tenant نیست
|
|
112
|
+
* ]);
|
|
113
|
+
*/
|
|
114
|
+
declare function defineFields<T extends object, R extends RendererRegistry = {}>(_renderers: R, fields: TableField<T, R>[]): TableField<T, R>[];
|
|
115
|
+
|
|
116
|
+
interface TableLabels {
|
|
117
|
+
operation?: string;
|
|
118
|
+
noData?: string;
|
|
119
|
+
loading?: string;
|
|
120
|
+
}
|
|
121
|
+
interface ColumnSizingConfig {
|
|
122
|
+
/** حداقل عرض (px) که برای همهی ستونهای resizable اعمال میشود مگر اینکه ستون خودش override کند. */
|
|
123
|
+
minWidth: number;
|
|
124
|
+
/** حداکثر عرض (px). */
|
|
125
|
+
maxWidth: number;
|
|
126
|
+
/** عرض پیشفرض وقتی ستون width مشخص نکرده و کاربر هم دستی ریسایز نکرده. */
|
|
127
|
+
defaultWidth: number;
|
|
128
|
+
}
|
|
129
|
+
interface NgxTableOptions {
|
|
130
|
+
showRecordNumber?: boolean;
|
|
131
|
+
labels?: TableLabels;
|
|
132
|
+
/** فعالسازی سورت چندستونه با Ctrl/Shift+Click. */
|
|
133
|
+
multiSort?: boolean;
|
|
134
|
+
resizable?: boolean;
|
|
135
|
+
stripedRows?: boolean;
|
|
136
|
+
hoverable?: boolean;
|
|
137
|
+
stickyHeader?: boolean;
|
|
138
|
+
column?: ColumnSizingConfig;
|
|
139
|
+
/** رجیستری رندررهای سراسری. با defineRenderers({...}) بسازید. */
|
|
140
|
+
renderers?: RendererRegistry;
|
|
141
|
+
formatters?: Readonly<Record<string, TableCellFormatter<any>>>;
|
|
142
|
+
}
|
|
143
|
+
type ResolvedTableOptions = Required<Omit<NgxTableOptions, 'labels' | 'renderers' | 'formatters'>> & {
|
|
144
|
+
labels: Required<TableLabels>;
|
|
145
|
+
renderers: RendererRegistry;
|
|
146
|
+
formatters: Readonly<Record<string, TableCellFormatter<any>>>;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
declare const NGX_TABLE_CONFIG_DEFAULT: ResolvedTableOptions;
|
|
150
|
+
/** به هر نمونهی ngx-table تزریق میشود. با provideTable() مقداردهی کنید. */
|
|
151
|
+
declare const NGX_TABLE_CONFIG: InjectionToken<ResolvedTableOptions>;
|
|
152
|
+
|
|
153
|
+
declare const NGX_PAGINATION_CONFIG_DEFAULT: NgxPaginationOptions;
|
|
154
|
+
declare const NGX_PAGINATION_CONFIG: InjectionToken<NgxPaginationOptions>;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* کانفیگ سراسری <ngx-table>: جهت پیشفرض، حداقل/حداکثر عرض ستون، فعال بودن
|
|
158
|
+
* پیشفرض سورت چندستونه، و از همه مهمتر رجیستری رندررها.
|
|
159
|
+
*
|
|
160
|
+
* @example
|
|
161
|
+
* provideTable({
|
|
162
|
+
* renderers: defineRenderers({ avatar: AvatarCellRenderer, boolean: BooleanCellRenderer }),
|
|
163
|
+
* column: { minWidth: 80, maxWidth: 480, defaultWidth: 160 },
|
|
164
|
+
* })
|
|
165
|
+
*/
|
|
166
|
+
declare function provideTable(options?: NgxTableOptions): EnvironmentProviders;
|
|
167
|
+
|
|
168
|
+
declare function providePagination(options?: Partial<NgxPaginationOptions>): EnvironmentProviders;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* برای projection قالب سفارشی یک ستون بدون اینکه مجبور باشید cellTemplate را
|
|
172
|
+
* از طریق ViewChild به آبجکت ستون وصل کنید:
|
|
173
|
+
*
|
|
174
|
+
* <ngx-table [fields]="fields" [data]="rows()">
|
|
175
|
+
* <ng-template ngxTableCell="userName" let-row let-value="value">
|
|
176
|
+
* <strong>{{ value }}</strong>
|
|
177
|
+
* </ng-template>
|
|
178
|
+
* </ngx-table>
|
|
179
|
+
*
|
|
180
|
+
* مهم: چون این دایرکتیو در تمپلیت *کامپوننت مصرفکننده* (نه ngx-table) استفاده
|
|
181
|
+
* میشود، باید آن را در آرایهی imports همان کامپوننت (standalone) وارد کنید:
|
|
182
|
+
* imports: [NgxTable, TableCell]
|
|
183
|
+
*
|
|
184
|
+
* محدودیت شناختهشده: context این تمپلیت (row/value) از نوع T دقیق نیست
|
|
185
|
+
* (چون TemplateRef اینجا بهصورت پویا از ContentChildren جمعآوری میشود و
|
|
186
|
+
* اطلاعات جنریک T در آن نقطه از بین میرود). برای type-safety کامل روی
|
|
187
|
+
* row/value، از field.cellTemplate به همراه @ViewChild استفاده کنید (به README
|
|
188
|
+
* بخش «Cell Template کاملاً Type-Safe» مراجعه کنید).
|
|
189
|
+
*/
|
|
190
|
+
declare class TableCell<T extends object = object> {
|
|
191
|
+
readonly column: _angular_core.InputSignal<string>;
|
|
192
|
+
readonly templateRef: TemplateRef<any>;
|
|
193
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TableCell<any>, never>;
|
|
194
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TableCell<any>, "ng-template[ngxTableCell]", never, { "column": { "alias": "ngxTableCell"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* دستگیرهی درگ برای ریسایز ستون. روی لبهی «انتهای منطقی» (inline-end) قرار
|
|
199
|
+
* میگیرد، یعنی خودش زیر [dir="rtl"] جابهجا میشود؛ فقط جهت محاسبهی دلتا هم
|
|
200
|
+
* برعکس میشود تا حس درگ همیشه طبیعی باشد.
|
|
201
|
+
*
|
|
202
|
+
* مقدار نهایی توسط جدول در یک Map از عرضها ذخیره میشود (نه در استایل مستقیم
|
|
203
|
+
* ستون)، به همراه علامتگذاری «دستی ریسایز شده» — یعنی بعد از این، هیچ
|
|
204
|
+
* re-render یا تغییر دادهای این عرض را از بین نمیبرد.
|
|
205
|
+
*/
|
|
206
|
+
declare class ColumnResize {
|
|
207
|
+
readonly startWidth: _angular_core.InputSignal<number>;
|
|
208
|
+
readonly minWidth: _angular_core.InputSignal<number>;
|
|
209
|
+
readonly maxWidth: _angular_core.InputSignal<number>;
|
|
210
|
+
readonly direction: _angular_core.InputSignal<"ltr" | "rtl">;
|
|
211
|
+
readonly resizing: _angular_core.OutputEmitterRef<number>;
|
|
212
|
+
readonly resizeEnd: _angular_core.OutputEmitterRef<number>;
|
|
213
|
+
private dragging;
|
|
214
|
+
private startX;
|
|
215
|
+
private baseWidth;
|
|
216
|
+
onPointerDown(event: PointerEvent): void;
|
|
217
|
+
onPointerMove(event: PointerEvent): void;
|
|
218
|
+
onPointerUp(event: PointerEvent): void;
|
|
219
|
+
private computeWidth;
|
|
220
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ColumnResize, never>;
|
|
221
|
+
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>;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* جدول دادهی جنریک و Type-Safe.
|
|
226
|
+
*
|
|
227
|
+
* `T` از روی چیزی که به [data] بایند میکنید استنتاج میشود؛ `field.column` در
|
|
228
|
+
* `TableField<T, R>` محدود به `keyof T` است، و اگر از defineFields(renderers, ...)
|
|
229
|
+
* استفاده کنید، `field.renderer` محدود به کلیدهای رجیستری و `rendererInputs`
|
|
230
|
+
* دقیقاً همان ورودیهای اضافهی همان renderer است.
|
|
231
|
+
*
|
|
232
|
+
* دو حالت:
|
|
233
|
+
* - کلاینتساید (پیشفرض): [data] کل آرایه است؛ سورت/صفحهبندی داخلی و روی
|
|
234
|
+
* یک computed خالص انجام میشود (بدون mutation روی آبجکتهای شما).
|
|
235
|
+
* - lazy: [lazy]="true" + [totalRecords]؛ [data] فقط صفحهی جاری است؛ به
|
|
236
|
+
* (lazyLoad) گوش بدهید.
|
|
237
|
+
*/
|
|
238
|
+
declare class NgxTable<T extends object> implements OnInit, AfterContentInit {
|
|
239
|
+
protected readonly config: ngx_kit_data_table.ResolvedTableOptions;
|
|
240
|
+
protected readonly paginationConfig: ngx_kit_data_table.NgxPaginationOptions;
|
|
241
|
+
readonly fields: _angular_core.InputSignal<TableField<T, any>[]>;
|
|
242
|
+
readonly data: _angular_core.InputSignal<readonly T[]>;
|
|
243
|
+
readonly totalRecords: _angular_core.InputSignal<number>;
|
|
244
|
+
readonly showRecordNumber: _angular_core.InputSignal<boolean>;
|
|
245
|
+
readonly operations: _angular_core.InputSignal<TemplateRef<{
|
|
246
|
+
$implicit: T;
|
|
247
|
+
}> | undefined>;
|
|
248
|
+
readonly operationWidth: _angular_core.InputSignal<number>;
|
|
249
|
+
readonly numWidth: _angular_core.InputSignal<number>;
|
|
250
|
+
readonly pageSize: _angular_core.InputSignal<number>;
|
|
251
|
+
readonly loading: _angular_core.InputSignal<boolean>;
|
|
252
|
+
readonly multiSort: _angular_core.InputSignal<boolean | undefined>;
|
|
253
|
+
readonly lazy: _angular_core.InputSignal<boolean>;
|
|
254
|
+
/** پیشفرض بر اساس ایندکس؛ برای جلوگیری از گمشدن state سطرها هنگام سورت،
|
|
255
|
+
* یک شناسهی یکتا بدهید: [trackBy]="(i, row) => row.id" */
|
|
256
|
+
readonly trackBy: _angular_core.InputSignal<(index: number, row: T) => unknown>;
|
|
257
|
+
readonly lazyLoad: _angular_core.OutputEmitterRef<LazyLoadEvent<T>>;
|
|
258
|
+
readonly sortChange: _angular_core.OutputEmitterRef<SortMeta<T>[]>;
|
|
259
|
+
readonly columnResize: _angular_core.OutputEmitterRef<{
|
|
260
|
+
field: string;
|
|
261
|
+
width: number;
|
|
262
|
+
}>;
|
|
263
|
+
protected readonly page: _angular_core.WritableSignal<number>;
|
|
264
|
+
protected readonly pageSizeS: _angular_core.WritableSignal<number>;
|
|
265
|
+
protected readonly sorts: _angular_core.WritableSignal<SortMeta<T>[]>;
|
|
266
|
+
protected readonly widths: _angular_core.WritableSignal<Record<string, number>>;
|
|
267
|
+
private readonly manuallyResized;
|
|
268
|
+
private readonly rendererInputsCache;
|
|
269
|
+
private cellTemplates;
|
|
270
|
+
private templateMap;
|
|
271
|
+
protected readonly resolvedMultiSort: _angular_core.Signal<boolean>;
|
|
272
|
+
private readonly directionService;
|
|
273
|
+
protected readonly resolvedDirection: _angular_core.Signal<ngx_kit_shared.Direction>;
|
|
274
|
+
constructor();
|
|
275
|
+
ngOnInit(): void;
|
|
276
|
+
ngAfterContentInit(): void;
|
|
277
|
+
private syncTemplateMap;
|
|
278
|
+
protected readonly sortedData: _angular_core.Signal<readonly T[]>;
|
|
279
|
+
protected readonly totalCount: _angular_core.Signal<number>;
|
|
280
|
+
protected readonly pagedData: _angular_core.Signal<readonly T[]>;
|
|
281
|
+
private compare;
|
|
282
|
+
/** بدون mutation روی دادهی ورودی: شمارهی ردیف صرفاً از روی page/pageSize/rowIndex محاسبه میشود. */
|
|
283
|
+
protected recordNumber(rowIndex: number): number;
|
|
284
|
+
protected sortDirectionFor(column: string): SortDirection | null;
|
|
285
|
+
protected onHeaderClick(field: TableField<T, any>, event: MouseEvent): void;
|
|
286
|
+
protected onPaginate(event: PageEvent): void;
|
|
287
|
+
private emitLazyIfNeeded;
|
|
288
|
+
protected columnWidth(column: string): number;
|
|
289
|
+
protected columnMin(field: TableField<T, any>): number;
|
|
290
|
+
protected columnMax(field: TableField<T, any>): number;
|
|
291
|
+
protected isResizable(field: TableField<T, any>): boolean;
|
|
292
|
+
protected onColumnResizing(column: string, width: number): void;
|
|
293
|
+
protected onColumnResizeEnd(column: string, width: number): void;
|
|
294
|
+
protected getTemplate(column: string): TemplateRef<CellTemplateContext<T>> | null;
|
|
295
|
+
protected getRenderer(field: TableField<T, any>): Type<CellRendererComponent> | null;
|
|
296
|
+
protected getCellValue(row: T, field: TableField<T, any>): unknown;
|
|
297
|
+
protected formatCellValue(row: T, field: TableField<T, any>): string;
|
|
298
|
+
private stringify;
|
|
299
|
+
/** ورودیهای renderer را بهازای هر (field, row) کش میکند تا هر Change
|
|
300
|
+
* Detection یک آبجکت جدید ساخته نشود؛ با WeakMap، وقتی row از حافظه خارج
|
|
301
|
+
* شود (مثلاً بعد از عوضشدن صفحه)، entry آن هم خودکار پاک میشود. */
|
|
302
|
+
protected getRendererInputs(row: T, field: TableField<T, any>): Record<string, unknown>;
|
|
303
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxTable<any>, never>;
|
|
304
|
+
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; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "multiSort": { "alias": "multiSort"; "required": false; "isSignal": true; }; "lazy": { "alias": "lazy"; "required": false; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; }, { "lazyLoad": "lazyLoad"; "sortChange": "sortChange"; "columnResize": "columnResize"; }, ["cellTemplates"], never, true, never>;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
declare class NgxPagination {
|
|
308
|
+
protected readonly config: ngx_kit_data_table.NgxPaginationOptions;
|
|
309
|
+
readonly total: _angular_core.InputSignal<number>;
|
|
310
|
+
readonly page: _angular_core.ModelSignal<number>;
|
|
311
|
+
readonly pageSize: _angular_core.ModelSignal<number>;
|
|
312
|
+
readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
|
|
313
|
+
readonly labels: _angular_core.InputSignal<ngx_kit_data_table.PaginationLabel>;
|
|
314
|
+
readonly siblingCount: _angular_core.InputSignal<number>;
|
|
315
|
+
readonly boundaryCount: _angular_core.InputSignal<number>;
|
|
316
|
+
readonly paginate: _angular_core.OutputEmitterRef<PageEvent>;
|
|
317
|
+
protected readonly totalPages: _angular_core.Signal<number>;
|
|
318
|
+
protected readonly firstItem: _angular_core.Signal<number>;
|
|
319
|
+
protected readonly lastItem: _angular_core.Signal<number>;
|
|
320
|
+
protected readonly pages: _angular_core.Signal<(string | number)[]>;
|
|
321
|
+
constructor();
|
|
322
|
+
private buildPages;
|
|
323
|
+
protected next(): void;
|
|
324
|
+
protected previous(): void;
|
|
325
|
+
protected first(): void;
|
|
326
|
+
protected last(): void;
|
|
327
|
+
protected goto(page: number): void;
|
|
328
|
+
protected onPageSizeChange(value: number): void;
|
|
329
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxPagination, never>;
|
|
330
|
+
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; }; "labels": { "alias": "labels"; "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>;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export { ColumnResize, NGX_PAGINATION_CONFIG, NGX_PAGINATION_CONFIG_DEFAULT, NGX_TABLE_CONFIG, NGX_TABLE_CONFIG_DEFAULT, NgxPagination, NgxTable, TableCell, defineFields, defineRenderers, providePagination, provideTable };
|
|
334
|
+
export type { CellRendererComponent, CellTemplateContext, ColumnAlign, ColumnSizingConfig, LazyLoadEvent, NgxPaginationOptions, NgxTableOptions, PageEvent, PageState, PaginationLabel, PlainTableField, RenderedTableField, RendererExtraInputs, RendererRegistry, ResolvedTableOptions, SortDirection, SortMeta, TableCellFormatter, TableField, TableFieldBase, TableLabels };
|
|
@@ -173,6 +173,7 @@ declare class MSG {
|
|
|
173
173
|
static success(title: string, text?: string, options?: IMessageOptions): ngx_kit_message.MessageOutput<any>;
|
|
174
174
|
static warning(title: string, text?: string, options?: IMessageOptions): ngx_kit_message.MessageOutput<any>;
|
|
175
175
|
static error(title: string, text?: string, options?: IMessageOptions): ngx_kit_message.MessageOutput<any>;
|
|
176
|
+
static question(title: string, text?: string, options?: IMessageOptions): ngx_kit_message.MessageOutput<any>;
|
|
176
177
|
static loading(title: string, text?: string, options?: IMessageOptions): ngx_kit_message.MessageOutput<any>;
|
|
177
178
|
}
|
|
178
179
|
|
|
@@ -12,6 +12,7 @@ interface NgxNotifyPayload {
|
|
|
12
12
|
options: NgxNotifyOptions;
|
|
13
13
|
onClose: EventEmitter<INotifyEnd>;
|
|
14
14
|
onFinish: EventEmitter<INotifyEnd>;
|
|
15
|
+
close: () => void;
|
|
15
16
|
}
|
|
16
17
|
interface INotifyEnd {
|
|
17
18
|
id: string;
|
|
@@ -129,6 +130,7 @@ declare class NgxNotifyService {
|
|
|
129
130
|
configureContainer(position: NgxNotifyOptions['position'], containerClass: string): void;
|
|
130
131
|
show(message: string, description?: string, type?: NgxNotifyType, options?: NgxNotifyOptions): NgxNotifyPayload;
|
|
131
132
|
private _createAndShow;
|
|
133
|
+
private close;
|
|
132
134
|
private removeNode;
|
|
133
135
|
private removeEl;
|
|
134
136
|
private _showNextIfPossible;
|
|
@@ -165,6 +165,8 @@ declare class SliderComponent implements OnInit, ControlValueAccessor, Validator
|
|
|
165
165
|
static ɵcmp: i0.ɵɵComponentDeclaration<SliderComponent, "slider", never, { "step": { "alias": "step"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "background": { "alias": "background"; "required": false; }; "isBgTransparent": { "alias": "isBgTransparent"; "required": false; }; }, { "change": "change"; }, never, ["*"], true, never>;
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
+
declare function mergeConfig<T>(base: T, override?: Partial<T>): T;
|
|
169
|
+
|
|
168
170
|
declare function getOffsetPosition(evt: MouseEvent | TouchEvent, parent: HTMLElement): {
|
|
169
171
|
x: number;
|
|
170
172
|
y: number;
|
|
@@ -174,8 +176,6 @@ declare const WINDOW: InjectionToken<Window | null>;
|
|
|
174
176
|
|
|
175
177
|
declare function randomStrnig(extraLength?: number, useNumeric?: boolean): string;
|
|
176
178
|
|
|
177
|
-
declare function IsRtl(doc: Document): boolean;
|
|
178
|
-
|
|
179
179
|
declare function makeConfetti(doc: Document, wrap: HTMLElement): void;
|
|
180
180
|
|
|
181
181
|
declare class BrowserService {
|
|
@@ -187,6 +187,31 @@ declare class BrowserService {
|
|
|
187
187
|
static ɵprov: i0.ɵɵInjectableDeclaration<BrowserService>;
|
|
188
188
|
}
|
|
189
189
|
|
|
190
|
+
type Direction = 'ltr' | 'rtl';
|
|
191
|
+
/**
|
|
192
|
+
* جهت صفحه را بهصورت خودکار و زنده تشخیص میدهد — بدون اینکه کاربرِ این
|
|
193
|
+
* سرویس مجبور باشد چیزی به آن بدهد. هر تغییری در attribute های dir/class
|
|
194
|
+
* روی <html> یا <body> (چه از طریق Angular، چه با یک تمسوییچر خارج از
|
|
195
|
+
* Angular) بلافاصله signal را آپدیت میکند.
|
|
196
|
+
*
|
|
197
|
+
* نکته: effect() اینجا جواب نمیدهد چون هیچکدام از این مقادیر (attribute
|
|
198
|
+
* روی DOM) یک Signal نیستند؛ effect فقط به تغییر Signalها reactive است، نه
|
|
199
|
+
* به تغییرات دلخواه DOM. برای گوشدادن به تغییرات DOM باید از MutationObserver
|
|
200
|
+
* استفاده کرد و مقدار را دستی داخل یک Signal نوشت (که دقیقاً کاری است که
|
|
201
|
+
* این سرویس انجام میدهد).
|
|
202
|
+
*/
|
|
203
|
+
declare class DirectionService {
|
|
204
|
+
private readonly doc;
|
|
205
|
+
private readonly destroyRef;
|
|
206
|
+
private readonly _direction;
|
|
207
|
+
/** جهت جاری، بهصورت Signal فقط-خواندنی. */
|
|
208
|
+
readonly direction: i0.Signal<Direction>;
|
|
209
|
+
readonly isRtl: i0.Signal<boolean>;
|
|
210
|
+
constructor();
|
|
211
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DirectionService, never>;
|
|
212
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DirectionService>;
|
|
213
|
+
}
|
|
214
|
+
|
|
190
215
|
declare class OverlayRef<T> {
|
|
191
216
|
private readonly dialogEl;
|
|
192
217
|
private readonly teardownFn;
|
|
@@ -234,6 +259,7 @@ declare class OverlayService implements OnDestroy {
|
|
|
234
259
|
private resizeRafPending;
|
|
235
260
|
private readonly doc;
|
|
236
261
|
private readonly abortController;
|
|
262
|
+
private readonly directionService;
|
|
237
263
|
ngOnDestroy(): void;
|
|
238
264
|
open<T>(options: OverlayOptions<T>): OverlayRef<T>;
|
|
239
265
|
openTemplate(options: TemplateOptions): OverlayRef<any>;
|
|
@@ -274,5 +300,5 @@ interface OverlayInstance {
|
|
|
274
300
|
cleanup: () => void;
|
|
275
301
|
}
|
|
276
302
|
|
|
277
|
-
export { BrowserService, DIALOG_OVERLAY_CLASSNAME,
|
|
278
|
-
export type { Alignment, BaseOverlayOptions, IPosition, IValue, OverlayInstance, OverlayOptions, Placement, Point, TemplateOptions };
|
|
303
|
+
export { BrowserService, DIALOG_OVERLAY_CLASSNAME, DirectionService, FOCUSABLE_SELECTOR, OverlayRef, OverlayService, RangeSliderComponent, SaturationComponent, SliderComponent, ValueModel, WINDOW, getOffsetPosition, makeConfetti, mergeConfig, randomStrnig };
|
|
304
|
+
export type { Alignment, BaseOverlayOptions, Direction, IPosition, IValue, OverlayInstance, OverlayOptions, Placement, Point, TemplateOptions };
|