@nexterajs/ui 0.0.2 → 0.1.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/README.md +279 -34
- package/fesm2022/nexterajs-ui-charts.mjs +1096 -0
- package/fesm2022/nexterajs-ui-charts.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-core.mjs +652 -12
- package/fesm2022/nexterajs-ui-core.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-display.mjs +1142 -0
- package/fesm2022/nexterajs-ui-display.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-dropdowns.mjs +321 -33
- package/fesm2022/nexterajs-ui-dropdowns.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-file-uploader.mjs +572 -10
- package/fesm2022/nexterajs-ui-file-uploader.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-forms.mjs +2027 -136
- package/fesm2022/nexterajs-ui-forms.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-grid.mjs +1222 -188
- package/fesm2022/nexterajs-ui-grid.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-intl.mjs +103 -11
- package/fesm2022/nexterajs-ui-intl.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-navigation.mjs +1054 -0
- package/fesm2022/nexterajs-ui-navigation.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-notify.mjs +46 -44
- package/fesm2022/nexterajs-ui-notify.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-overlay.mjs +1671 -0
- package/fesm2022/nexterajs-ui-overlay.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-pivot.mjs +51 -26
- package/fesm2022/nexterajs-ui-pivot.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-shell.mjs +542 -0
- package/fesm2022/nexterajs-ui-shell.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-tree-view.mjs +5 -2
- package/fesm2022/nexterajs-ui-tree-view.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-validation.mjs +42 -11
- package/fesm2022/nexterajs-ui-validation.mjs.map +1 -1
- package/fesm2022/nexterajs-ui.mjs +5 -0
- package/fesm2022/nexterajs-ui.mjs.map +1 -1
- package/package.json +33 -2
- package/styles/_dropdown.scss +5 -5
- package/styles/_editor.scss +52 -17
- package/styles/_mixins.scss +1 -1
- package/styles/_scrollbar.scss +5 -5
- package/styles/_status.scss +21 -0
- package/styles/_toast.scss +14 -14
- package/styles/_tokens.scss +420 -3
- package/styles/_widget.scss +14 -3
- package/styles/index.scss +6 -4
- package/types/nexterajs-ui-charts.d.ts +446 -0
- package/types/nexterajs-ui-core.d.ts +387 -22
- package/types/nexterajs-ui-display.d.ts +720 -0
- package/types/nexterajs-ui-dropdowns.d.ts +191 -48
- package/types/nexterajs-ui-file-uploader.d.ts +236 -7
- package/types/nexterajs-ui-forms.d.ts +675 -30
- package/types/nexterajs-ui-grid.d.ts +448 -93
- package/types/nexterajs-ui-intl.d.ts +39 -4
- package/types/nexterajs-ui-navigation.d.ts +531 -0
- package/types/nexterajs-ui-notify.d.ts +4 -2
- package/types/nexterajs-ui-overlay.d.ts +703 -0
- package/types/nexterajs-ui-pivot.d.ts +56 -48
- package/types/nexterajs-ui-shell.d.ts +294 -0
- package/types/nexterajs-ui-tree-view.d.ts +6 -3
- package/types/nexterajs-ui-validation.d.ts +20 -11
- package/types/nexterajs-ui.d.ts +5 -0
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { NxeNumberSeparators } from '@nexterajs/ui/intl';
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
|
-
import { NgZone, ViewContainerRef, OnDestroy, EventEmitter, TemplateRef } from '@angular/core';
|
|
4
|
-
import { NxeExpr } from '@nexterajs/ui/core';
|
|
3
|
+
import { NgZone, ViewContainerRef, Signal, OnDestroy, InputSignal, EventEmitter, TemplateRef } from '@angular/core';
|
|
4
|
+
import { NxeExpr, NxeMessageService, NxeMessageKey } from '@nexterajs/ui/core';
|
|
5
5
|
import { Overlay, OverlayRef } from '@angular/cdk/overlay';
|
|
6
|
+
import { Observable } from 'rxjs';
|
|
6
7
|
|
|
7
8
|
/** A DevExtreme-style column `format`: a number-mask string, a date format string, or `{ type }`. */
|
|
8
9
|
interface NxeColumnFormatObject {
|
|
@@ -184,6 +185,13 @@ interface NxeTreeListNode<T = any> {
|
|
|
184
185
|
interface NxeGridInstance<T = any> {
|
|
185
186
|
getSelectedRowsData(): T[];
|
|
186
187
|
getSelectedRowKeys(): T[];
|
|
188
|
+
/** dx `clearSelection()`: deselects every row, including rows the current filter hides. */
|
|
189
|
+
clearSelection(): void;
|
|
190
|
+
/**
|
|
191
|
+
* dx `deselectAll()`: deselects the rows the current filter shows (the current page of a
|
|
192
|
+
* server-side grid). A tree list deselects every node.
|
|
193
|
+
*/
|
|
194
|
+
deselectAll(): void;
|
|
187
195
|
refresh(): void;
|
|
188
196
|
/**
|
|
189
197
|
* dx `clearFilter()`: no argument clears the filter row AND header filters (including
|
|
@@ -277,7 +285,7 @@ declare function nxeNumberValue(raw: unknown): number;
|
|
|
277
285
|
* JS number meets any valid `format`, whatever the column declared. So a number in an untyped
|
|
278
286
|
* or string column still takes its mask, and a number column honours object formats as well.
|
|
279
287
|
*/
|
|
280
|
-
declare function nxeDefaultFormat(dataType: NxeColumnDataType | 'object' | undefined, format: NxeColumnFormat | undefined, raw: any, separators?: NxeNumberSeparators): string;
|
|
288
|
+
declare function nxeDefaultFormat(dataType: NxeColumnDataType | 'object' | undefined, format: NxeColumnFormat | undefined, raw: any, separators?: NxeNumberSeparators, locale?: string): string;
|
|
281
289
|
|
|
282
290
|
/**
|
|
283
291
|
* `nxe-header-filter` — drop-in replacement for DevExtreme `dxo-header-filter` (grid child option).
|
|
@@ -291,9 +299,9 @@ declare class NxeHeaderFilterComponent {
|
|
|
291
299
|
readonly visible: _angular_core.InputSignal<boolean>;
|
|
292
300
|
readonly search: _angular_core.InputSignal<{
|
|
293
301
|
enabled?: boolean;
|
|
294
|
-
}>;
|
|
302
|
+
} | undefined>;
|
|
295
303
|
/** Legacy alias for `search.enabled` (one holdout). */
|
|
296
|
-
readonly allowSearch: _angular_core.InputSignal<boolean>;
|
|
304
|
+
readonly allowSearch: _angular_core.InputSignal<boolean | undefined>;
|
|
297
305
|
/**
|
|
298
306
|
* dx `headerFilter.dataSource` — a fixed `{ text, value }` list shown instead of the values
|
|
299
307
|
* derived from the rows.
|
|
@@ -301,7 +309,7 @@ declare class NxeHeaderFilterComponent {
|
|
|
301
309
|
readonly dataSource: _angular_core.InputSignal<readonly {
|
|
302
310
|
text?: string;
|
|
303
311
|
value?: any;
|
|
304
|
-
}[]>;
|
|
312
|
+
}[] | undefined>;
|
|
305
313
|
/** Whether the in-popup search box shows.
|
|
306
314
|
*
|
|
307
315
|
* Defaults to **true**, matching the legacy DevExtreme deployment: a popup listing every
|
|
@@ -329,17 +337,17 @@ declare class NxeColumnComponent {
|
|
|
329
337
|
* Unset = dx: inferred from the loaded data (m_columns_controller.js:914-975), so a numeric
|
|
330
338
|
* column nobody typed still right-aligns and honours its `format`. Declaring it wins.
|
|
331
339
|
*/
|
|
332
|
-
readonly dataType: _angular_core.InputSignal<NxeColumnDataType>;
|
|
340
|
+
readonly dataType: _angular_core.InputSignal<NxeColumnDataType | undefined>;
|
|
333
341
|
/** px width — number (`[width]="150"`) or numeric string (`width="200"`). */
|
|
334
|
-
readonly width: _angular_core.InputSignal<string | number>;
|
|
335
|
-
readonly minWidth: _angular_core.InputSignal<string | number>;
|
|
336
|
-
readonly alignment: _angular_core.InputSignal<"left" | "center" | "right">;
|
|
342
|
+
readonly width: _angular_core.InputSignal<string | number | undefined>;
|
|
343
|
+
readonly minWidth: _angular_core.InputSignal<string | number | undefined>;
|
|
344
|
+
readonly alignment: _angular_core.InputSignal<"left" | "center" | "right" | undefined>;
|
|
337
345
|
/** Number-mask string (`#,##0.00`), date format string, or `{ type: 'dd MMM yyyy' }`. */
|
|
338
|
-
readonly format: _angular_core.InputSignal<NxeColumnFormat>;
|
|
346
|
+
readonly format: _angular_core.InputSignal<NxeColumnFormat | undefined>;
|
|
339
347
|
/** `(info:{value}) => string` (e.g. `formatAccounting` for parenthesized negatives). */
|
|
340
|
-
readonly customizeText: _angular_core.InputSignal<NxeCustomizeText>;
|
|
348
|
+
readonly customizeText: _angular_core.InputSignal<NxeCustomizeText | undefined>;
|
|
341
349
|
/** Name of a sibling `<ng-template nxeTemplate="...">` to render the cell. */
|
|
342
|
-
readonly cellTemplate: _angular_core.InputSignal<string>;
|
|
350
|
+
readonly cellTemplate: _angular_core.InputSignal<string | undefined>;
|
|
343
351
|
/**
|
|
344
352
|
* DevExtreme column `lookup` (orbit addition): raw values resolve to display text through
|
|
345
353
|
* `dataSource` (`{ lookup: { dataSource, valueExpr: 'lovCode', displayExpr: 'lovName' } }`).
|
|
@@ -349,7 +357,7 @@ declare class NxeColumnComponent {
|
|
|
349
357
|
dataSource: readonly any[];
|
|
350
358
|
valueExpr?: NxeExpr;
|
|
351
359
|
displayExpr?: NxeExpr;
|
|
352
|
-
}>;
|
|
360
|
+
} | undefined>;
|
|
353
361
|
readonly allowSorting: _angular_core.InputSignal<boolean>;
|
|
354
362
|
/** dx parity: whether the header can be dragged into the group panel (default true). */
|
|
355
363
|
readonly allowGrouping: _angular_core.InputSignal<boolean>;
|
|
@@ -361,18 +369,18 @@ declare class NxeColumnComponent {
|
|
|
361
369
|
readonly allowSearch: _angular_core.InputSignal<boolean>;
|
|
362
370
|
readonly allowHeaderFiltering: _angular_core.InputSignal<boolean>;
|
|
363
371
|
readonly visible: _angular_core.InputSignal<boolean>;
|
|
364
|
-
readonly sortOrder: _angular_core.InputSignal<"asc" | "desc">;
|
|
365
|
-
readonly sortIndex: _angular_core.InputSignal<number>;
|
|
366
|
-
readonly groupIndex: _angular_core.InputSignal<number>;
|
|
372
|
+
readonly sortOrder: _angular_core.InputSignal<"asc" | "desc" | undefined>;
|
|
373
|
+
readonly sortIndex: _angular_core.InputSignal<number | undefined>;
|
|
374
|
+
readonly groupIndex: _angular_core.InputSignal<number | undefined>;
|
|
367
375
|
readonly fixed: _angular_core.InputSignal<boolean>;
|
|
368
|
-
readonly filterValues: _angular_core.InputSignal<any[]>;
|
|
376
|
+
readonly filterValues: _angular_core.InputSignal<any[] | undefined>;
|
|
369
377
|
/** Column `type` (only `type="date"` seen — a display hint, NOT a command column). */
|
|
370
|
-
readonly type: _angular_core.InputSignal<string>;
|
|
378
|
+
readonly type: _angular_core.InputSignal<string | undefined>;
|
|
371
379
|
/**
|
|
372
380
|
* dx `cssClass` — extra classes on this column's header, filter and data cells. The escape
|
|
373
381
|
* hatch for one-off cell styling that does not warrant a `cellTemplate`.
|
|
374
382
|
*/
|
|
375
|
-
readonly cssClass: _angular_core.InputSignal<string>;
|
|
383
|
+
readonly cssClass: _angular_core.InputSignal<string | undefined>;
|
|
376
384
|
/**
|
|
377
385
|
* dx `editCellTemplate` — the sibling `<ng-template nxeTemplate="NAME">` rendered while this
|
|
378
386
|
* cell is being edited, in place of the built-in editor. Its context is a
|
|
@@ -380,12 +388,12 @@ declare class NxeColumnComponent {
|
|
|
380
388
|
* `ctx.data.field = $event` writes straight through, which is how dx's own edit templates
|
|
381
389
|
* were used.
|
|
382
390
|
*/
|
|
383
|
-
readonly editCellTemplate: _angular_core.InputSignal<string>;
|
|
391
|
+
readonly editCellTemplate: _angular_core.InputSignal<string | undefined>;
|
|
384
392
|
/**
|
|
385
393
|
* dx `groupCellTemplate` — replaces the `"Caption: value"` text in a group row's caption
|
|
386
394
|
* cell when this column is the one grouped by.
|
|
387
395
|
*/
|
|
388
|
-
readonly groupCellTemplate: _angular_core.InputSignal<string>;
|
|
396
|
+
readonly groupCellTemplate: _angular_core.InputSignal<string | undefined>;
|
|
389
397
|
/**
|
|
390
398
|
* Child columns declared inside this one — dx's banded header. Empty for an ordinary column.
|
|
391
399
|
*
|
|
@@ -397,7 +405,7 @@ declare class NxeColumnComponent {
|
|
|
397
405
|
* A `<nxe-header-filter>` declared inside this column, dx's per-column `headerFilter`
|
|
398
406
|
* config. Only its `dataSource` is read here; visibility and search stay grid-level.
|
|
399
407
|
*/
|
|
400
|
-
readonly headerFilterConfig: _angular_core.Signal<NxeHeaderFilterComponent>;
|
|
408
|
+
readonly headerFilterConfig: _angular_core.Signal<NxeHeaderFilterComponent | undefined>;
|
|
401
409
|
/** dx `isBand`: a column that groups other columns under a shared header instead of a field. */
|
|
402
410
|
readonly isBand: _angular_core.Signal<boolean>;
|
|
403
411
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeColumnComponent, never>;
|
|
@@ -595,16 +603,26 @@ interface NxeHeaderFilterSource<C> {
|
|
|
595
603
|
text: string;
|
|
596
604
|
}[] | null;
|
|
597
605
|
}
|
|
606
|
+
/** The words the popup writes itself; each a function so a host can read a signal inside it. */
|
|
607
|
+
interface NxeHeaderFilterLabels {
|
|
608
|
+
blanks(): string;
|
|
609
|
+
yes(): string;
|
|
610
|
+
no(): string;
|
|
611
|
+
/** Month name for a 1-based month number. */
|
|
612
|
+
month(month: number): string;
|
|
613
|
+
}
|
|
598
614
|
declare class NxeHeaderFilterModel<C = unknown> {
|
|
599
615
|
private readonly source;
|
|
600
|
-
private
|
|
616
|
+
private readonly labels;
|
|
601
617
|
/** The column whose popup is open (`null` = closed). */
|
|
602
|
-
readonly column: _angular_core.WritableSignal<C>;
|
|
618
|
+
readonly column: _angular_core.WritableSignal<C | null>;
|
|
603
619
|
/** The checked key set being edited in the popup (committed by the host on OK). */
|
|
604
620
|
readonly draft: _angular_core.WritableSignal<ReadonlySet<any>>;
|
|
605
621
|
readonly search: _angular_core.WritableSignal<string>;
|
|
606
622
|
readonly expanded: _angular_core.WritableSignal<ReadonlySet<string>>;
|
|
607
|
-
constructor(source: NxeHeaderFilterSource<C
|
|
623
|
+
constructor(source: NxeHeaderFilterSource<C>, labels?: NxeHeaderFilterLabels);
|
|
624
|
+
/** The popup's wording for a boolean bucket. */
|
|
625
|
+
private boolText;
|
|
608
626
|
/** This column's header-filter key for a raw value. */
|
|
609
627
|
key(column: C, raw: any): any;
|
|
610
628
|
/** Distinct {key, text} for the open column — `(Blanks)` first, then Yes/No or values ascending. */
|
|
@@ -674,6 +692,8 @@ declare class NxeHeaderFilterModel<C = unknown> {
|
|
|
674
692
|
* the panel itself never touches the host's filter state.
|
|
675
693
|
*/
|
|
676
694
|
declare class NxeHeaderFilterPanelComponent {
|
|
695
|
+
/** The library's runtime-switchable messages. */
|
|
696
|
+
protected readonly messages: NxeMessageService;
|
|
677
697
|
readonly model: _angular_core.InputSignal<NxeHeaderFilterModel<any>>;
|
|
678
698
|
/** Live predicate (re-read every CD, like the grid template did) — a mid-open config
|
|
679
699
|
change to `search.enabled` still shows/hides the box. */
|
|
@@ -746,15 +766,15 @@ declare abstract class NxeSummaryItemBase implements NxeSummaryItemLike {
|
|
|
746
766
|
readonly column: _angular_core.InputSignal<string>;
|
|
747
767
|
readonly summaryType: _angular_core.InputSignal<"sum" | "count" | "min" | "max" | "avg" | "custom">;
|
|
748
768
|
/** Identifier passed to `calculateCustomSummary` for `summaryType='custom'` items. */
|
|
749
|
-
readonly name: _angular_core.InputSignal<string>;
|
|
769
|
+
readonly name: _angular_core.InputSignal<string | undefined>;
|
|
750
770
|
/** Positional template; `{0}` is replaced by the customized/formatted value. */
|
|
751
771
|
readonly displayFormat: _angular_core.InputSignal<string>;
|
|
752
|
-
readonly customizeText: _angular_core.InputSignal<NxeCustomizeText>;
|
|
753
|
-
readonly valueFormat: _angular_core.InputSignal<NxeColumnFormat>;
|
|
772
|
+
readonly customizeText: _angular_core.InputSignal<NxeCustomizeText | undefined>;
|
|
773
|
+
readonly valueFormat: _angular_core.InputSignal<NxeColumnFormat | undefined>;
|
|
754
774
|
readonly alignByColumn: _angular_core.InputSignal<boolean>;
|
|
755
775
|
/** Render this group aggregate in a footer row under the group instead of the group row. */
|
|
756
776
|
readonly showInGroupFooter: _angular_core.InputSignal<boolean>;
|
|
757
|
-
readonly showInColumn: _angular_core.InputSignal<string>;
|
|
777
|
+
readonly showInColumn: _angular_core.InputSignal<string | undefined>;
|
|
758
778
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeSummaryItemBase, never>;
|
|
759
779
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NxeSummaryItemBase, never, never, { "column": { "alias": "column"; "required": false; "isSignal": true; }; "summaryType": { "alias": "summaryType"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "customizeText": { "alias": "customizeText"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "alignByColumn": { "alias": "alignByColumn"; "required": false; "isSignal": true; }; "showInGroupFooter": { "alias": "showInGroupFooter"; "required": false; "isSignal": true; }; "showInColumn": { "alias": "showInColumn"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
760
780
|
}
|
|
@@ -775,7 +795,7 @@ declare class NxeSummaryComponent {
|
|
|
775
795
|
* `{name, summaryProcess:'start'}`, then `'calculate'` once per row (`options.value` = the
|
|
776
796
|
* row object), then `'finalize'`; the handler mutates `options.totalValue`.
|
|
777
797
|
*/
|
|
778
|
-
readonly calculateCustomSummary: _angular_core.InputSignal<(options: any) => void>;
|
|
798
|
+
readonly calculateCustomSummary: _angular_core.InputSignal<((options: any) => void) | undefined>;
|
|
779
799
|
readonly totalItems: _angular_core.Signal<readonly NxeTotalItemComponent[]>;
|
|
780
800
|
readonly groupItems: _angular_core.Signal<readonly NxeGroupItemComponent[]>;
|
|
781
801
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeSummaryComponent, never>;
|
|
@@ -806,9 +826,9 @@ declare class NxePagerComponent {
|
|
|
806
826
|
*/
|
|
807
827
|
readonly displayMode: _angular_core.InputSignal<"adaptive" | "compact" | "full">;
|
|
808
828
|
/** dx `pager.infoText`: `{0}` the page, `{1}` the page count, `{2}` the item count. */
|
|
809
|
-
readonly infoText: _angular_core.InputSignal<string>;
|
|
829
|
+
readonly infoText: _angular_core.InputSignal<string | undefined>;
|
|
810
830
|
/** dx `pager.label`: the pager's accessible name. */
|
|
811
|
-
readonly label: _angular_core.InputSignal<string>;
|
|
831
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
812
832
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxePagerComponent, never>;
|
|
813
833
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxePagerComponent, "nxe-pager", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "allowedPageSizes": { "alias": "allowedPageSizes"; "required": false; "isSignal": true; }; "showPageSizeSelector": { "alias": "showPageSizeSelector"; "required": false; "isSignal": true; }; "showNavigationButtons": { "alias": "showNavigationButtons"; "required": false; "isSignal": true; }; "showInfo": { "alias": "showInfo"; "required": false; "isSignal": true; }; "displayMode": { "alias": "displayMode"; "required": false; "isSignal": true; }; "infoText": { "alias": "infoText"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
814
834
|
}
|
|
@@ -846,7 +866,7 @@ declare class NxeEditingComponent {
|
|
|
846
866
|
declare class NxeFilterRowComponent {
|
|
847
867
|
readonly visible: _angular_core.InputSignal<boolean>;
|
|
848
868
|
/** DevExtreme parity (`auto`/`onClick`); the nxe filter row always applies on input. */
|
|
849
|
-
readonly applyFilter: _angular_core.InputSignal<string>;
|
|
869
|
+
readonly applyFilter: _angular_core.InputSignal<string | undefined>;
|
|
850
870
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeFilterRowComponent, never>;
|
|
851
871
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeFilterRowComponent, "nxe-filter-row", never, { "visible": { "alias": "visible"; "required": false; "isSignal": true; }; "applyFilter": { "alias": "applyFilter"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
852
872
|
}
|
|
@@ -925,6 +945,171 @@ interface NxeExportDataGridOptions {
|
|
|
925
945
|
*/
|
|
926
946
|
declare function exportDataGrid(opts: NxeExportDataGridOptions): Promise<void>;
|
|
927
947
|
|
|
948
|
+
/** One sort level: DevExtreme's `{ selector, desc }`. */
|
|
949
|
+
interface NxeSortDescriptor {
|
|
950
|
+
/** The column's `dataField`. */
|
|
951
|
+
selector: string;
|
|
952
|
+
desc: boolean;
|
|
953
|
+
}
|
|
954
|
+
/** Operators a filter-row or header-filter condition can carry (DevExtreme's filter operations). */
|
|
955
|
+
type NxeFilterOperator = '=' | '<>' | '<' | '<=' | '>' | '>=' | 'contains' | 'notcontains' | 'startswith' | 'endswith';
|
|
956
|
+
/**
|
|
957
|
+
* A DevExtreme-style filter expression, the shape the grid's filter row and header filter produce
|
|
958
|
+
* for a remote source:
|
|
959
|
+
*
|
|
960
|
+
* - a condition: `['name', 'contains', 'acme']`
|
|
961
|
+
* - a negation: `['!', expression]`
|
|
962
|
+
* - a group: `[expression, 'and', expression, 'or', expression]`, which may nest
|
|
963
|
+
*
|
|
964
|
+
* `between` is expanded the way DevExtreme expands it: `[[f, '>=', a], 'and', [f, '<=', b]]`.
|
|
965
|
+
* Values are JSON-safe: strings, numbers, booleans and `null`; dates are `'yyyy-MM-dd'` strings.
|
|
966
|
+
*/
|
|
967
|
+
type NxeFilterExpression = readonly unknown[];
|
|
968
|
+
/** What the application (or the grid) states: the page, its size, the sort and the filter. */
|
|
969
|
+
interface NxeRemoteQuery {
|
|
970
|
+
/** 0-based page index. */
|
|
971
|
+
pageIndex: number;
|
|
972
|
+
pageSize: number;
|
|
973
|
+
sort: readonly NxeSortDescriptor[];
|
|
974
|
+
filter: NxeFilterExpression | null;
|
|
975
|
+
}
|
|
976
|
+
/**
|
|
977
|
+
* What `load` receives: the query plus the same page as `skip`/`take`, so an adapter can take
|
|
978
|
+
* whichever the endpoint speaks (`pageNo = pageIndex + 1`, or `offset = skip`).
|
|
979
|
+
*/
|
|
980
|
+
interface NxeLoadOptions extends NxeRemoteQuery {
|
|
981
|
+
readonly skip: number;
|
|
982
|
+
readonly take: number;
|
|
983
|
+
/** Always `true`: the grid needs the total to draw its pager. DevExtreme `CustomStore` parity. */
|
|
984
|
+
readonly requireTotalCount: true;
|
|
985
|
+
}
|
|
986
|
+
interface NxeLoadResult<T = any> {
|
|
987
|
+
data: readonly T[];
|
|
988
|
+
/** Rows matching the filter across every page. */
|
|
989
|
+
totalCount: number;
|
|
990
|
+
}
|
|
991
|
+
interface NxeLoadContext {
|
|
992
|
+
/** Aborted when a newer request supersedes this one, or the source is cancelled or destroyed. */
|
|
993
|
+
readonly signal: AbortSignal;
|
|
994
|
+
}
|
|
995
|
+
/** The load function: a promise or an observable (an `HttpClient` call passes straight in). */
|
|
996
|
+
type NxeRemoteLoadFn<T = any> = (options: NxeLoadOptions, context: NxeLoadContext) => Promise<NxeLoadResult<T> | readonly T[]> | Observable<NxeLoadResult<T> | readonly T[]>;
|
|
997
|
+
interface NxeRemoteDataSourceConfig {
|
|
998
|
+
/** The row key field. The grid takes its `keyExpr` from here when none is bound. */
|
|
999
|
+
key?: string;
|
|
1000
|
+
/** The query the first load runs with. Anything left out is page 0, 20 rows, no sort, no filter. */
|
|
1001
|
+
initial?: Partial<NxeRemoteQuery>;
|
|
1002
|
+
/** Milliseconds a grid waits after the last filter-row keystroke before asking. Default 300. */
|
|
1003
|
+
filterDebounce?: number;
|
|
1004
|
+
}
|
|
1005
|
+
/** The default page size of a source (and of a remote grid with no `nxe-paging`). */
|
|
1006
|
+
declare const NXE_REMOTE_DEFAULT_PAGE_SIZE = 20;
|
|
1007
|
+
/** Structural equality of two queries; what keeps a re-stated, unchanged query from reloading. */
|
|
1008
|
+
declare function nxeSameQuery(a: NxeRemoteQuery, b: NxeRemoteQuery): boolean;
|
|
1009
|
+
/** Builds the load options for a query. */
|
|
1010
|
+
declare function nxeLoadOptions(query: NxeRemoteQuery): NxeLoadOptions;
|
|
1011
|
+
/**
|
|
1012
|
+
* One condition of a flattened filter, in the form a REST adapter wants. `in` is an OR of `=` on one
|
|
1013
|
+
* field (a header-filter selection), with all its values.
|
|
1014
|
+
*/
|
|
1015
|
+
interface NxeFlatFilterCondition {
|
|
1016
|
+
field: string;
|
|
1017
|
+
operator: NxeFilterOperator | 'in';
|
|
1018
|
+
value: unknown;
|
|
1019
|
+
}
|
|
1020
|
+
/**
|
|
1021
|
+
* Flattens the AND-chain a grid builds into simple conditions, for endpoints that take a flat
|
|
1022
|
+
* parameter list (`status=sent,confirmed&supplierId=123`). An OR of `=` on one field becomes one
|
|
1023
|
+
* `in` condition. `exact` is `false` when part of the expression could not be flattened (a `!`, or
|
|
1024
|
+
* an OR across fields); those parts are left out of `conditions`, so an adapter that cannot take
|
|
1025
|
+
* `exact: false` should send the expression as JSON instead.
|
|
1026
|
+
*/
|
|
1027
|
+
declare function nxeFlattenFilter(filter: NxeFilterExpression | null | undefined): {
|
|
1028
|
+
conditions: NxeFlatFilterCondition[];
|
|
1029
|
+
exact: boolean;
|
|
1030
|
+
};
|
|
1031
|
+
/** Combines expressions with AND; `null` and empty ones are dropped, a single one is returned as is. */
|
|
1032
|
+
declare function nxeFilterAnd(...parts: readonly (NxeFilterExpression | null | undefined)[]): NxeFilterExpression | null;
|
|
1033
|
+
/** Combines expressions with OR, as {@link nxeFilterAnd} does with AND. */
|
|
1034
|
+
declare function nxeFilterOr(...parts: readonly (NxeFilterExpression | null | undefined)[]): NxeFilterExpression | null;
|
|
1035
|
+
/**
|
|
1036
|
+
* A server-backed list for `nxe-data-grid` and `nxe-paginator`. It holds one page at a time:
|
|
1037
|
+
* the grid (or the app) states a query, the source asks the server for exactly that page, and the
|
|
1038
|
+
* result lands in signals.
|
|
1039
|
+
*
|
|
1040
|
+
* ```ts
|
|
1041
|
+
* readonly orders = new NxeRemoteDataSource<Order>(
|
|
1042
|
+
* (o, { signal }) => this.http.get<OrderList>('/api/orders', { params: toParams(o) }).pipe(map(toResult)),
|
|
1043
|
+
* { key: 'id' },
|
|
1044
|
+
* );
|
|
1045
|
+
* ```
|
|
1046
|
+
*
|
|
1047
|
+
* A request still in flight is aborted (its `AbortSignal` fires, or its observable is
|
|
1048
|
+
* unsubscribed) when a newer one starts, and a late response that slips past is ignored, so the
|
|
1049
|
+
* rows on screen always belong to the latest query.
|
|
1050
|
+
*
|
|
1051
|
+
* The source is lazy: nothing loads until {@link setOptions} or {@link reload} is called, which a
|
|
1052
|
+
* grid bound to it does on its own.
|
|
1053
|
+
*/
|
|
1054
|
+
declare class NxeRemoteDataSource<T = any> {
|
|
1055
|
+
private readonly loadFn;
|
|
1056
|
+
/** The row key field, when the source was given one. */
|
|
1057
|
+
readonly key: string | undefined;
|
|
1058
|
+
/** Milliseconds a grid waits after the last filter-row keystroke before asking. */
|
|
1059
|
+
readonly filterDebounce: number;
|
|
1060
|
+
private readonly itemsState;
|
|
1061
|
+
private readonly totalCountState;
|
|
1062
|
+
private readonly loadingState;
|
|
1063
|
+
private readonly errorState;
|
|
1064
|
+
private readonly loadedState;
|
|
1065
|
+
private readonly queryState;
|
|
1066
|
+
private readonly optionsState;
|
|
1067
|
+
/** The rows of the current page. Kept (not cleared) while the next page loads. */
|
|
1068
|
+
readonly items: Signal<readonly T[]>;
|
|
1069
|
+
/** Rows matching the filter across every page, as the last successful response said. */
|
|
1070
|
+
readonly totalCount: Signal<number>;
|
|
1071
|
+
/** A request is in flight. */
|
|
1072
|
+
readonly loading: Signal<boolean>;
|
|
1073
|
+
/** The last request's failure, or `null` after a success or while a retry runs. */
|
|
1074
|
+
readonly error: Signal<unknown>;
|
|
1075
|
+
/** A response has arrived at least once. */
|
|
1076
|
+
readonly loaded: Signal<boolean>;
|
|
1077
|
+
/** The query and the `skip`/`take` of the page the next (or current) request uses. */
|
|
1078
|
+
readonly options: Signal<NxeLoadOptions>;
|
|
1079
|
+
private started;
|
|
1080
|
+
private seq;
|
|
1081
|
+
private controller;
|
|
1082
|
+
private unsubscribe;
|
|
1083
|
+
constructor(loadFn: NxeRemoteLoadFn<T>, config?: NxeRemoteDataSourceConfig);
|
|
1084
|
+
/**
|
|
1085
|
+
* States a new query (any of its parts) and loads it. Nothing happens when it is the query
|
|
1086
|
+
* already stated, so a caller can re-state its inputs freely. The first call starts the source.
|
|
1087
|
+
*/
|
|
1088
|
+
setOptions(patch: Partial<NxeRemoteQuery>): void;
|
|
1089
|
+
/** Loads the current query again (after an edit, or as a retry). */
|
|
1090
|
+
reload(): void;
|
|
1091
|
+
/** Aborts the request in flight and ignores its response. */
|
|
1092
|
+
cancel(): void;
|
|
1093
|
+
private abort;
|
|
1094
|
+
private run;
|
|
1095
|
+
/** The last value an observable emits; rejects when it errors or completes empty. */
|
|
1096
|
+
private fromObservable;
|
|
1097
|
+
}
|
|
1098
|
+
/** A DevExtreme `CustomStore`-shaped source: what `remoteOperations` makes the grid load page by page. */
|
|
1099
|
+
interface NxeStoreLike<T = any> {
|
|
1100
|
+
load: NxeRemoteLoadFn<T>;
|
|
1101
|
+
key?: string;
|
|
1102
|
+
}
|
|
1103
|
+
/** True for an object with a `load` function that is not an array or a {@link NxeRemoteDataSource}. */
|
|
1104
|
+
declare function nxeIsStoreLike(value: unknown): value is NxeStoreLike;
|
|
1105
|
+
|
|
1106
|
+
/**
|
|
1107
|
+
* The pager's page list and info text, as DevExtreme 24.2.3's pagination builds them.
|
|
1108
|
+
*
|
|
1109
|
+
* Pure functions, so the grid holds the only state (the sliding window, carried between renders
|
|
1110
|
+
* by a linkedSignal) and the rules can be specced without rendering a grid.
|
|
1111
|
+
*/
|
|
1112
|
+
|
|
928
1113
|
/** One entry of the page list: a page button, or dx's `. . .` separator. */
|
|
929
1114
|
interface NxePagerItem {
|
|
930
1115
|
/** Stable track key: the page index, or `low` / `high` for the separators. */
|
|
@@ -934,6 +1119,54 @@ interface NxePagerItem {
|
|
|
934
1119
|
readonly separator: boolean;
|
|
935
1120
|
}
|
|
936
1121
|
|
|
1122
|
+
/**
|
|
1123
|
+
* A page navigator that stands on its own: page buttons with the grid pager's sliding window,
|
|
1124
|
+
* previous/next, a page-size selector and the total. Use it beside any list, or bind it to the same
|
|
1125
|
+
* state a remote grid pages with.
|
|
1126
|
+
*
|
|
1127
|
+
* ```html
|
|
1128
|
+
* <nxe-paginator [(pageIndex)]="page" [(pageSize)]="size" [totalCount]="orders.totalCount()" />
|
|
1129
|
+
* ```
|
|
1130
|
+
*
|
|
1131
|
+
* Text comes from `NxeMessageService`, so it follows the language. The nav is a labelled
|
|
1132
|
+
* `navigation` landmark; the current page carries `aria-current="page"`. With focus on a page
|
|
1133
|
+
* button, Left/Right move to the previous/next page and Home/End to the first/last.
|
|
1134
|
+
*/
|
|
1135
|
+
declare class NxePaginatorComponent {
|
|
1136
|
+
private readonly messages;
|
|
1137
|
+
private readonly separators;
|
|
1138
|
+
private readonly host;
|
|
1139
|
+
private readonly injector;
|
|
1140
|
+
/** The 0-based current page. Two-way. */
|
|
1141
|
+
readonly pageIndex: _angular_core.ModelSignal<number>;
|
|
1142
|
+
/** Rows per page. Two-way; changing it returns to the first page. */
|
|
1143
|
+
readonly pageSize: _angular_core.ModelSignal<number>;
|
|
1144
|
+
/** Rows across every page. */
|
|
1145
|
+
readonly totalCount: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
1146
|
+
/** The sizes the selector offers. The current size is always offered too. */
|
|
1147
|
+
readonly pageSizes: _angular_core.InputSignal<readonly number[]>;
|
|
1148
|
+
readonly showPageSizeSelector: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1149
|
+
readonly showInfo: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1150
|
+
/** Greys the controls out and ignores clicks, e.g. while a page loads. */
|
|
1151
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
1152
|
+
/** The navigation landmark's accessible name; default is the `grid.pager.navigation` message. */
|
|
1153
|
+
readonly label: _angular_core.InputSignal<string | undefined>;
|
|
1154
|
+
protected t(key: NxeMessageKey, ...args: readonly unknown[]): string;
|
|
1155
|
+
protected readonly pageCount: _angular_core.Signal<number>;
|
|
1156
|
+
/** The page shown: `pageIndex` held inside the page count. */
|
|
1157
|
+
protected readonly currentPage: _angular_core.Signal<number>;
|
|
1158
|
+
private readonly window;
|
|
1159
|
+
protected readonly items: _angular_core.Signal<readonly NxePagerItem[]>;
|
|
1160
|
+
protected readonly sizes: _angular_core.Signal<number[]>;
|
|
1161
|
+
protected readonly info: _angular_core.Signal<string>;
|
|
1162
|
+
protected readonly total: _angular_core.Signal<string>;
|
|
1163
|
+
protected go(index: number): void;
|
|
1164
|
+
protected onSizeChange(event: Event): void;
|
|
1165
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
1166
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxePaginatorComponent, never>;
|
|
1167
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxePaginatorComponent, "nxe-paginator", never, { "pageIndex": { "alias": "pageIndex"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "totalCount": { "alias": "totalCount"; "required": false; "isSignal": true; }; "pageSizes": { "alias": "pageSizes"; "required": false; "isSignal": true; }; "showPageSizeSelector": { "alias": "showPageSizeSelector"; "required": false; "isSignal": true; }; "showInfo": { "alias": "showInfo"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; }, { "pageIndex": "pageIndexChange"; "pageSize": "pageSizeChange"; }, never, never, true, never>;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
937
1170
|
/**
|
|
938
1171
|
* Pointer-based column-resize engine (dx `allowColumnResizing` parity).
|
|
939
1172
|
*
|
|
@@ -947,6 +1180,8 @@ interface NxeGridResizeHooks {
|
|
|
947
1180
|
zone: NgZone;
|
|
948
1181
|
host: () => HTMLElement;
|
|
949
1182
|
mode: () => 'nextColumn' | 'widget';
|
|
1183
|
+
/** Widget mode only: the trailing column takes what a narrowed table leaves of the rows view. */
|
|
1184
|
+
fillsGrid: () => boolean;
|
|
950
1185
|
minWidth: () => number;
|
|
951
1186
|
/** Drag started — the grid pauses its auto-width engine. */
|
|
952
1187
|
onStart: () => void;
|
|
@@ -974,6 +1209,7 @@ declare class NxeGridResizeController {
|
|
|
974
1209
|
destroy(): void;
|
|
975
1210
|
private pointerMove;
|
|
976
1211
|
private pointerUp;
|
|
1212
|
+
private restore;
|
|
977
1213
|
private cancel;
|
|
978
1214
|
private teardown;
|
|
979
1215
|
}
|
|
@@ -1050,6 +1286,9 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1050
1286
|
private readonly defaults;
|
|
1051
1287
|
/** Locale separators for every number this grid renders — cells, summaries and group text. */
|
|
1052
1288
|
private readonly separators;
|
|
1289
|
+
private readonly messages;
|
|
1290
|
+
/** One library message for the active language; reading it in a template re-renders on a switch. */
|
|
1291
|
+
protected t(key: NxeMessageKey, ...args: readonly unknown[]): string;
|
|
1053
1292
|
/** Pointer drag engine: drag-to-group, chip drag-out (ungroup), chip/column reorder. */
|
|
1054
1293
|
protected readonly drag: NxeGridDragController;
|
|
1055
1294
|
/** Pointer resize engine (dx allowColumnResizing). */
|
|
@@ -1071,35 +1310,70 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1071
1310
|
/** True when any declared column is a band, i.e. the header needs more than one row. */
|
|
1072
1311
|
protected readonly hasBands: _angular_core.Signal<boolean>;
|
|
1073
1312
|
private readonly templates;
|
|
1074
|
-
protected readonly selection: _angular_core.Signal<NxeSelectionComponent>;
|
|
1075
|
-
protected readonly headerFilter: _angular_core.Signal<NxeHeaderFilterComponent>;
|
|
1076
|
-
protected readonly grouping: _angular_core.Signal<NxeGroupingComponent>;
|
|
1077
|
-
protected readonly groupPanel: _angular_core.Signal<NxeGroupPanelComponent>;
|
|
1078
|
-
protected readonly summaryCmp: _angular_core.Signal<NxeSummaryComponent>;
|
|
1079
|
-
protected readonly pagingCmp: _angular_core.Signal<NxePagingComponent>;
|
|
1080
|
-
protected readonly pagerCmp: _angular_core.Signal<NxePagerComponent>;
|
|
1081
|
-
protected readonly editingCmp: _angular_core.Signal<NxeEditingComponent>;
|
|
1082
|
-
protected readonly filterRowCmp: _angular_core.Signal<NxeFilterRowComponent>;
|
|
1083
|
-
protected readonly masterDetail: _angular_core.Signal<NxeMasterDetailComponent>;
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
readonly
|
|
1090
|
-
readonly
|
|
1091
|
-
readonly
|
|
1092
|
-
readonly
|
|
1313
|
+
protected readonly selection: _angular_core.Signal<NxeSelectionComponent | undefined>;
|
|
1314
|
+
protected readonly headerFilter: _angular_core.Signal<NxeHeaderFilterComponent | undefined>;
|
|
1315
|
+
protected readonly grouping: _angular_core.Signal<NxeGroupingComponent | undefined>;
|
|
1316
|
+
protected readonly groupPanel: _angular_core.Signal<NxeGroupPanelComponent | undefined>;
|
|
1317
|
+
protected readonly summaryCmp: _angular_core.Signal<NxeSummaryComponent | undefined>;
|
|
1318
|
+
protected readonly pagingCmp: _angular_core.Signal<NxePagingComponent | undefined>;
|
|
1319
|
+
protected readonly pagerCmp: _angular_core.Signal<NxePagerComponent | undefined>;
|
|
1320
|
+
protected readonly editingCmp: _angular_core.Signal<NxeEditingComponent | undefined>;
|
|
1321
|
+
protected readonly filterRowCmp: _angular_core.Signal<NxeFilterRowComponent | undefined>;
|
|
1322
|
+
protected readonly masterDetail: _angular_core.Signal<NxeMasterDetailComponent | undefined>;
|
|
1323
|
+
/**
|
|
1324
|
+
* The rows: a plain array (paged, sorted and filtered here), a {@link NxeRemoteDataSource}
|
|
1325
|
+
* (paged, sorted and filtered by the server; the grid holds one page), or, with
|
|
1326
|
+
* `remoteOperations` on, a `CustomStore`-shaped `{ load, key? }`.
|
|
1327
|
+
*/
|
|
1328
|
+
readonly dataSource: InputSignal<readonly any[] | NxeStoreLike<any> | NxeRemoteDataSource<any> | null | undefined>;
|
|
1329
|
+
readonly keyExpr: InputSignal<string | undefined>;
|
|
1330
|
+
readonly hoverStateEnabledInput: InputSignal<boolean | undefined>;
|
|
1331
|
+
readonly showColumnLinesInput: InputSignal<boolean | undefined>;
|
|
1332
|
+
readonly showRowLinesInput: InputSignal<boolean | undefined>;
|
|
1333
|
+
readonly showBordersInput: InputSignal<boolean | undefined>;
|
|
1334
|
+
readonly wordWrapEnabledInput: InputSignal<boolean | undefined>;
|
|
1335
|
+
readonly columnAutoWidthInput: InputSignal<boolean | undefined>;
|
|
1336
|
+
readonly rowAlternationEnabledInput: InputSignal<boolean | undefined>;
|
|
1337
|
+
readonly resizeFillsGridInput: InputSignal<boolean | undefined>;
|
|
1093
1338
|
/** dx resolves `nxe-tree-list` against the `treeList` slice, not `dataGrid`. */
|
|
1094
1339
|
private readonly widgetDefaults;
|
|
1095
1340
|
readonly hoverStateEnabled: _angular_core.Signal<boolean>;
|
|
1341
|
+
/**
|
|
1342
|
+
* Widget-mode resizing that never leaves a blank strip: the trailing column takes whatever a
|
|
1343
|
+
* narrowed layout leaves of the grid's width. Not dx - dx lets the table end short - so off
|
|
1344
|
+
* unless bound or set app-wide through `NXE_DEFAULT_OPTIONS`.
|
|
1345
|
+
*/
|
|
1346
|
+
readonly resizeFillsGrid: _angular_core.Signal<boolean>;
|
|
1096
1347
|
readonly showColumnLines: _angular_core.Signal<boolean>;
|
|
1097
1348
|
readonly showRowLines: _angular_core.Signal<boolean>;
|
|
1098
1349
|
readonly showBorders: _angular_core.Signal<boolean>;
|
|
1099
1350
|
readonly wordWrapEnabled: _angular_core.Signal<boolean>;
|
|
1100
1351
|
readonly columnAutoWidth: _angular_core.Signal<boolean>;
|
|
1101
1352
|
readonly rowAlternationEnabled: _angular_core.Signal<boolean>;
|
|
1102
|
-
|
|
1353
|
+
/**
|
|
1354
|
+
* dx `remoteOperations`. With a `{ load }` store as the `dataSource`, any truthy value makes the
|
|
1355
|
+
* grid page, sort and filter on the server (`{ paging, sorting, filtering }` is read as all or
|
|
1356
|
+
* nothing). A {@link NxeRemoteDataSource} is remote whatever this says.
|
|
1357
|
+
*/
|
|
1358
|
+
readonly remoteOperations: InputSignal<any>;
|
|
1359
|
+
/** The 0-based page. Two-way. */
|
|
1360
|
+
readonly pageIndexModel: _angular_core.ModelSignal<number | undefined>;
|
|
1361
|
+
/** Rows per page. Two-way. */
|
|
1362
|
+
readonly pageSizeModel: _angular_core.ModelSignal<number | undefined>;
|
|
1363
|
+
/** The sort, `[{ selector, desc }]`. Two-way; a header click writes its single level here. */
|
|
1364
|
+
readonly sortModel: _angular_core.ModelSignal<readonly NxeSortDescriptor[] | undefined>;
|
|
1365
|
+
/**
|
|
1366
|
+
* A filter the application owns (a filter bar, a status tab), in {@link NxeFilterExpression}
|
|
1367
|
+
* form. A remote grid ANDs it with the filter row and header filter and sends the lot to the
|
|
1368
|
+
* server. Changing it returns the grid to the first page.
|
|
1369
|
+
*/
|
|
1370
|
+
readonly filter: InputSignal<NxeFilterExpression | null | undefined>;
|
|
1371
|
+
/**
|
|
1372
|
+
* The options of every request a remote grid hands its source: page, size, sort and the
|
|
1373
|
+
* combined filter. One emission per distinct request, after filter-row typing settles. This is
|
|
1374
|
+
* where an application mirrors the grid's state into the URL.
|
|
1375
|
+
*/
|
|
1376
|
+
readonly optionsChange: _angular_core.OutputEmitterRef<NxeLoadOptions>;
|
|
1103
1377
|
/**
|
|
1104
1378
|
* dx `syncLookupFilterValues` — accepted, and deliberately inert. It asks dx to narrow a
|
|
1105
1379
|
* lookup column's header-filter list to the values still reachable under the other filters.
|
|
@@ -1107,55 +1381,55 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1107
1381
|
* already what it does; `true` is the option we do not honour.
|
|
1108
1382
|
* @nxeInert grid — parity/data-grid.yaml "syncLookupFilterValues".
|
|
1109
1383
|
*/
|
|
1110
|
-
readonly syncLookupFilterValues:
|
|
1111
|
-
readonly columnMinWidth:
|
|
1384
|
+
readonly syncLookupFilterValues: InputSignal<boolean>;
|
|
1385
|
+
readonly columnMinWidth: InputSignal<number | undefined>;
|
|
1112
1386
|
/** dx `height` — a bare number means px, anything else passes through. */
|
|
1113
|
-
readonly height:
|
|
1114
|
-
protected readonly heightStyle: _angular_core.Signal<string>;
|
|
1115
|
-
readonly noDataTextInput:
|
|
1387
|
+
readonly height: InputSignal<string | number | undefined>;
|
|
1388
|
+
protected readonly heightStyle: _angular_core.Signal<string | null>;
|
|
1389
|
+
readonly noDataTextInput: InputSignal<string | undefined>;
|
|
1116
1390
|
readonly noDataText: _angular_core.Signal<string>;
|
|
1117
|
-
readonly loadPanel:
|
|
1391
|
+
readonly loadPanel: InputSignal<{
|
|
1118
1392
|
enabled?: boolean;
|
|
1119
|
-
}>;
|
|
1120
|
-
readonly paging:
|
|
1393
|
+
} | undefined>;
|
|
1394
|
+
readonly paging: InputSignal<{
|
|
1121
1395
|
enabled?: boolean;
|
|
1122
1396
|
pageSize?: number;
|
|
1123
|
-
}>;
|
|
1124
|
-
readonly filterRow:
|
|
1397
|
+
} | undefined>;
|
|
1398
|
+
readonly filterRow: InputSignal<{
|
|
1125
1399
|
visible?: boolean;
|
|
1126
|
-
}>;
|
|
1400
|
+
} | undefined>;
|
|
1127
1401
|
/** Object-input forms of the config elements (dx accepts both; orbit uses both styles). */
|
|
1128
|
-
readonly headerFilterOptions:
|
|
1402
|
+
readonly headerFilterOptions: InputSignal<{
|
|
1129
1403
|
visible?: boolean;
|
|
1130
1404
|
search?: {
|
|
1131
1405
|
enabled?: boolean;
|
|
1132
1406
|
};
|
|
1133
|
-
}>;
|
|
1134
|
-
readonly groupingOptions:
|
|
1407
|
+
} | undefined>;
|
|
1408
|
+
readonly groupingOptions: InputSignal<{
|
|
1135
1409
|
autoExpandAll?: boolean;
|
|
1136
|
-
}>;
|
|
1137
|
-
readonly groupPanelOptions:
|
|
1410
|
+
} | undefined>;
|
|
1411
|
+
readonly groupPanelOptions: InputSignal<{
|
|
1138
1412
|
visible?: boolean;
|
|
1139
|
-
}>;
|
|
1140
|
-
readonly scrolling:
|
|
1413
|
+
} | undefined>;
|
|
1414
|
+
readonly scrolling: InputSignal<any>;
|
|
1141
1415
|
/**
|
|
1142
1416
|
* dx `sorting`. Unbound means dx's default mode 'single'. `false` and `null` are accepted as dx
|
|
1143
1417
|
* reads them - no mode, so headers keep their sort slot but a click never sorts.
|
|
1144
1418
|
*/
|
|
1145
|
-
readonly sorting:
|
|
1419
|
+
readonly sorting: InputSignal<false | {
|
|
1146
1420
|
mode?: "single" | "multiple" | "none";
|
|
1147
|
-
}>;
|
|
1148
|
-
readonly allowColumnResizing:
|
|
1421
|
+
} | null | undefined>;
|
|
1422
|
+
readonly allowColumnResizing: InputSignal<boolean>;
|
|
1149
1423
|
/** dx columnResizingMode: 'nextColumn' (default) trades width; 'widget' grows the table. */
|
|
1150
|
-
readonly columnResizingMode:
|
|
1424
|
+
readonly columnResizingMode: InputSignal<"nextColumn" | "widget">;
|
|
1151
1425
|
/** dx allowColumnReordering (default false — matches every dx-era template in this app). */
|
|
1152
|
-
readonly allowColumnReordering:
|
|
1153
|
-
readonly repaintChangesOnly:
|
|
1154
|
-
readonly showColumnHeaders:
|
|
1155
|
-
readonly parentIdExpr:
|
|
1156
|
-
readonly dataStructure:
|
|
1157
|
-
readonly rootValue:
|
|
1158
|
-
readonly autoExpandAll:
|
|
1426
|
+
readonly allowColumnReordering: InputSignal<boolean>;
|
|
1427
|
+
readonly repaintChangesOnly: InputSignal<boolean>;
|
|
1428
|
+
readonly showColumnHeaders: InputSignal<boolean>;
|
|
1429
|
+
readonly parentIdExpr: InputSignal<string | undefined>;
|
|
1430
|
+
readonly dataStructure: InputSignal<"plain" | "tree">;
|
|
1431
|
+
readonly rootValue: InputSignal<unknown>;
|
|
1432
|
+
readonly autoExpandAll: InputSignal<boolean>;
|
|
1159
1433
|
readonly expandedRowKeys: _angular_core.ModelSignal<any[]>;
|
|
1160
1434
|
/** Tree-list multi-select keys (`[(selectedRowKeys)]`); recursive via dxo-selection. */
|
|
1161
1435
|
readonly selectedRowKeys: _angular_core.ModelSignal<any[]>;
|
|
@@ -1164,7 +1438,7 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1164
1438
|
* dataFields merged hierarchically left→right — consecutive rows with equal values render one
|
|
1165
1439
|
* cell with `rowspan`; a break in an earlier field breaks all later fields.
|
|
1166
1440
|
*/
|
|
1167
|
-
readonly mergeColumns:
|
|
1441
|
+
readonly mergeColumns: InputSignal<readonly string[]>;
|
|
1168
1442
|
readonly onSelectionChanged: _angular_core.OutputEmitterRef<NxeGridSelectionChangedEvent<any>>;
|
|
1169
1443
|
readonly onRowClick: _angular_core.OutputEmitterRef<{
|
|
1170
1444
|
data: any;
|
|
@@ -1183,7 +1457,7 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1183
1457
|
*/
|
|
1184
1458
|
readonly onOptionChanged: _angular_core.OutputEmitterRef<NxeGridOptionChangedEvent>;
|
|
1185
1459
|
/** Extra CSS classes for a data row (replaces dx `onRowPrepared` class tweaks). */
|
|
1186
|
-
readonly rowClass:
|
|
1460
|
+
readonly rowClass: InputSignal<((row: any) => string) | undefined>;
|
|
1187
1461
|
/**
|
|
1188
1462
|
* dx `onCellPrepared` / `onRowPrepared`, fired once per rendered cell and row after the DOM
|
|
1189
1463
|
* is written, with the real element for handlers that mutate it.
|
|
@@ -1229,7 +1503,7 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1229
1503
|
* its rows/columns through the source adapter and keeps the aliases the specs poke.
|
|
1230
1504
|
*/
|
|
1231
1505
|
protected readonly hf: NxeHeaderFilterModel<NxeColumnComponent>;
|
|
1232
|
-
protected readonly hfColumn: _angular_core.WritableSignal<NxeColumnComponent>;
|
|
1506
|
+
protected readonly hfColumn: _angular_core.WritableSignal<NxeColumnComponent | null>;
|
|
1233
1507
|
protected readonly hfDraft: _angular_core.WritableSignal<ReadonlySet<any>>;
|
|
1234
1508
|
private hfOverlayRef?;
|
|
1235
1509
|
/**
|
|
@@ -1262,17 +1536,53 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1262
1536
|
*/
|
|
1263
1537
|
private frozenColWidth;
|
|
1264
1538
|
protected effectiveColWidth(col: NxeColumnComponent, idx: number): string | null;
|
|
1539
|
+
/** What a frozen layout's columns add up to, the command columns included. */
|
|
1540
|
+
private frozenTableWidth;
|
|
1541
|
+
/**
|
|
1542
|
+
* With `resizeFillsGrid`, the room a frozen widget-mode layout leaves on the right, which the
|
|
1543
|
+
* trailing column takes. 0 when the columns fill or overflow the grid - that table scrolls.
|
|
1544
|
+
*/
|
|
1545
|
+
private readonly frozenSlack;
|
|
1265
1546
|
protected tableWidthStyle(): string;
|
|
1266
1547
|
protected readonly selectionEnabled: _angular_core.Signal<boolean>;
|
|
1267
1548
|
protected readonly selectionMode: _angular_core.Signal<"none" | "single" | "multiple">;
|
|
1268
1549
|
protected readonly showCheckboxes: _angular_core.Signal<boolean>;
|
|
1550
|
+
/**
|
|
1551
|
+
* The detached checkbox column. A tree list has none: dx draws its row checkbox in the first
|
|
1552
|
+
* cell, after the expander, and its select-all in the first column's header.
|
|
1553
|
+
*/
|
|
1554
|
+
protected readonly selectColumnVisible: _angular_core.Signal<boolean>;
|
|
1555
|
+
protected readonly treeSelectAll: _angular_core.Signal<boolean>;
|
|
1556
|
+
private readonly recursiveTreeSelection;
|
|
1557
|
+
/**
|
|
1558
|
+
* Each node's recursive selection state as dx draws it: `all` when its key is selected or an
|
|
1559
|
+
* ancestor's is, or when every child is; `some` when only some descendants are; absent for none.
|
|
1560
|
+
* Keys hold the selection, so the hierarchy - not the key list - decides what a parent shows.
|
|
1561
|
+
*/
|
|
1562
|
+
private readonly treeCheckState;
|
|
1563
|
+
/** Parent of each tree node, for settling ancestors after a recursive toggle. */
|
|
1564
|
+
private readonly treeParents;
|
|
1269
1565
|
/** Selected rows in dataSource order (stale refs from old data naturally filtered out). */
|
|
1270
1566
|
protected readonly selectedRowsData: _angular_core.Signal<any[]>;
|
|
1271
1567
|
protected readonly allSelected: _angular_core.Signal<boolean>;
|
|
1272
1568
|
protected readonly someSelected: _angular_core.Signal<boolean>;
|
|
1569
|
+
/** The key field: the bound `keyExpr`, else the remote source's own `key`. */
|
|
1570
|
+
private readonly keyField;
|
|
1273
1571
|
private rowKey;
|
|
1274
1572
|
private treeDescendantKeys;
|
|
1275
1573
|
private toggleTreeSelection;
|
|
1574
|
+
/**
|
|
1575
|
+
* dx recursive selection. Clicking a node that is not fully checked (unchecked, or a parent
|
|
1576
|
+
* showing indeterminate) selects its whole subtree; clicking a checked one clears it. Then its
|
|
1577
|
+
* ancestors follow their children, checked once all of them are and cleared as soon as one is
|
|
1578
|
+
* not, so deselecting one child leaves its parent indeterminate rather than still ticked.
|
|
1579
|
+
*
|
|
1580
|
+
* The key list is rewritten as every checked node, which dx's `getSelectedRowKeys('all')`
|
|
1581
|
+
* also reports. The event's current keys are what changed on screen.
|
|
1582
|
+
*/
|
|
1583
|
+
private toggleRecursiveTreeSelection;
|
|
1584
|
+
/** A recursive tree list's parent with only some descendants selected (dx's indeterminate box). */
|
|
1585
|
+
protected isTreeIndeterminate(row: any): boolean;
|
|
1276
1586
|
private emitTreeSelectionChanged;
|
|
1277
1587
|
/** `grouping.autoExpandAll` from the child element or object input; dx default is true. */
|
|
1278
1588
|
private readonly groupAutoExpand;
|
|
@@ -1291,6 +1601,39 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1291
1601
|
protected readonly hasTotalFooter: _angular_core.Signal<boolean>;
|
|
1292
1602
|
/** Grand-total sums keyed by dataField → formatted text (alignByColumn placement). */
|
|
1293
1603
|
protected readonly totalSums: _angular_core.Signal<Map<string, string>>;
|
|
1604
|
+
/** A `{ load }` store handed to `dataSource` with `remoteOperations`, wrapped once per store. */
|
|
1605
|
+
private readonly storeWrappers;
|
|
1606
|
+
private wrapped;
|
|
1607
|
+
private readonly remoteWarnings;
|
|
1608
|
+
/** Rows picked on earlier pages, by key, so `selectedRowsData` still has them. */
|
|
1609
|
+
private readonly remoteRowCache;
|
|
1610
|
+
/** Set by filter-row typing; the next request waits `filterDebounce` before it is sent. */
|
|
1611
|
+
private remoteTyping;
|
|
1612
|
+
/** What the last request was for, to tell a changed filter, sort or size from a changed page. */
|
|
1613
|
+
private remoteSignature;
|
|
1614
|
+
private warnOnce;
|
|
1615
|
+
/**
|
|
1616
|
+
* The source the grid pages through, or `null` for a client-side array. An
|
|
1617
|
+
* {@link NxeRemoteDataSource} is used as it is; a `{ load }` store becomes one when
|
|
1618
|
+
* `remoteOperations` is on.
|
|
1619
|
+
*/
|
|
1620
|
+
protected readonly remote: _angular_core.Signal<NxeRemoteDataSource<any> | null>;
|
|
1621
|
+
/** The rows every client-side computed reads: the array, or the remote source's current page. */
|
|
1622
|
+
private readonly sourceRows;
|
|
1623
|
+
private readonly selectedKeySet;
|
|
1624
|
+
/** The sort a request carries: the controlled `sort`, else the header sort. */
|
|
1625
|
+
private readonly remoteSort;
|
|
1626
|
+
/** The filter a request carries: filter row AND header filters AND the application's `filter`. */
|
|
1627
|
+
private readonly remoteFilter;
|
|
1628
|
+
/** The request the remote source should be showing, or `null` for a client-side grid. */
|
|
1629
|
+
private readonly remoteRequest;
|
|
1630
|
+
private dispatchRemote;
|
|
1631
|
+
private remoteFilterRowExpression;
|
|
1632
|
+
private filterRowCondition;
|
|
1633
|
+
private remoteHeaderFilterExpression;
|
|
1634
|
+
private toggleRemoteSelection;
|
|
1635
|
+
private toggleRemoteSelectAll;
|
|
1636
|
+
private emitRemoteSelectionChanged;
|
|
1294
1637
|
protected readonly pagingEnabled: _angular_core.Signal<boolean>;
|
|
1295
1638
|
protected readonly effectivePageSize: _angular_core.Signal<number>;
|
|
1296
1639
|
protected readonly pageCount: _angular_core.Signal<number>;
|
|
@@ -1442,7 +1785,7 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1442
1785
|
private readonly expandedDetails;
|
|
1443
1786
|
protected isDetailExpanded(row: any): boolean;
|
|
1444
1787
|
protected toggleDetail(row: any, event: Event): void;
|
|
1445
|
-
protected detailTemplate(): TemplateRef<unknown
|
|
1788
|
+
protected detailTemplate(): TemplateRef<unknown> | null;
|
|
1446
1789
|
protected detailContext(row: any, rowIndex: number): {
|
|
1447
1790
|
$implicit: {
|
|
1448
1791
|
data: any;
|
|
@@ -1472,7 +1815,7 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1472
1815
|
protected readonly editingCell: _angular_core.WritableSignal<{
|
|
1473
1816
|
row: any;
|
|
1474
1817
|
field: string;
|
|
1475
|
-
}>;
|
|
1818
|
+
} | null>;
|
|
1476
1819
|
/** Buffered values for the row in edit mode (`row` mode), keyed by dataField. */
|
|
1477
1820
|
protected readonly rowEditBuffer: _angular_core.WritableSignal<Record<string, any>>;
|
|
1478
1821
|
protected isEditingCell(row: any, col: NxeColumnComponent): boolean;
|
|
@@ -1551,6 +1894,10 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1551
1894
|
*/
|
|
1552
1895
|
protected readonly displayRows: _angular_core.Signal<any[]>;
|
|
1553
1896
|
protected readonly loading: _angular_core.Signal<boolean>;
|
|
1897
|
+
/** A remote request is in flight over rows already on screen: the overlay, not the empty-body spinner. */
|
|
1898
|
+
protected readonly remoteBusy: _angular_core.Signal<boolean>;
|
|
1899
|
+
protected readonly remoteFailed: _angular_core.Signal<boolean>;
|
|
1900
|
+
protected retryRemote(): void;
|
|
1554
1901
|
/**
|
|
1555
1902
|
* dx `isEmpty()` = `!items().length` (m_data_controller.js:1044-1046), toggled as `dx-empty`
|
|
1556
1903
|
* on the rows view in `_renderCore` (m_rows_view.js:710) whether loading or not.
|
|
@@ -1648,6 +1995,8 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1648
1995
|
protected colType(col: NxeColumnComponent): NxeColType | undefined;
|
|
1649
1996
|
/** The active sort: an explicit user click, else the first column declaring `sortOrder`. */
|
|
1650
1997
|
private effectiveSort;
|
|
1998
|
+
/** A user sort change: the grid's own state, and the controlled `sort` when it is in play. */
|
|
1999
|
+
private setSort;
|
|
1651
2000
|
/**
|
|
1652
2001
|
* dx `getAlignmentByDataType` (m_columns_controller_utils.js) over the effective type:
|
|
1653
2002
|
* number right, boolean centre, everything else left. A lookup aligns by its display text
|
|
@@ -1687,7 +2036,7 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1687
2036
|
/** Column `lookup` resolution (orbit addition): raw value → display text via the lookup list. */
|
|
1688
2037
|
private lookupText;
|
|
1689
2038
|
private defaultFormat;
|
|
1690
|
-
protected templateFor(name: string | undefined): TemplateRef<unknown
|
|
2039
|
+
protected templateFor(name: string | undefined): TemplateRef<unknown> | null;
|
|
1691
2040
|
protected cellContext(row: any, rowIndex: number, columnIndex: number, col: NxeColumnComponent): {
|
|
1692
2041
|
$implicit: NxeCellInfo;
|
|
1693
2042
|
};
|
|
@@ -1806,12 +2155,18 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1806
2155
|
protected onCheckboxClick(row: any, event: Event): void;
|
|
1807
2156
|
private toggleRow;
|
|
1808
2157
|
protected toggleSelectAll(event: Event): void;
|
|
2158
|
+
/**
|
|
2159
|
+
* `clearSelection()` (`scope` null: every selected row) and `deselectAll()` (`scope`: the rows
|
|
2160
|
+
* on show). One `onSelectionChanged` with the dropped keys as deselected, none when nothing
|
|
2161
|
+
* was selected.
|
|
2162
|
+
*/
|
|
2163
|
+
private deselectRows;
|
|
1809
2164
|
private emitSelectionChanged;
|
|
1810
2165
|
private rowKeys;
|
|
1811
2166
|
private static readonly STRING_OPS;
|
|
1812
2167
|
private static readonly SCALAR_OPS;
|
|
1813
2168
|
private static readonly OP_ICON_SLUGS;
|
|
1814
|
-
protected readonly frMenuColumn: _angular_core.WritableSignal<NxeColumnComponent>;
|
|
2169
|
+
protected readonly frMenuColumn: _angular_core.WritableSignal<NxeColumnComponent | null>;
|
|
1815
2170
|
private frMenuOverlayRef?;
|
|
1816
2171
|
private readonly frMenuPanel;
|
|
1817
2172
|
/** Which editor a filter cell renders (mirrors dx: select for lookup/boolean, typed inputs). */
|
|
@@ -1866,8 +2221,8 @@ declare class NxeDataGridComponent implements OnDestroy {
|
|
|
1866
2221
|
private compare;
|
|
1867
2222
|
ngOnDestroy(): void;
|
|
1868
2223
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeDataGridComponent, never>;
|
|
1869
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeDataGridComponent, "nxe-data-grid, nxe-tree-list", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "keyExpr": { "alias": "keyExpr"; "required": false; "isSignal": true; }; "hoverStateEnabledInput": { "alias": "hoverStateEnabled"; "required": false; "isSignal": true; }; "showColumnLinesInput": { "alias": "showColumnLines"; "required": false; "isSignal": true; }; "showRowLinesInput": { "alias": "showRowLines"; "required": false; "isSignal": true; }; "showBordersInput": { "alias": "showBorders"; "required": false; "isSignal": true; }; "wordWrapEnabledInput": { "alias": "wordWrapEnabled"; "required": false; "isSignal": true; }; "columnAutoWidthInput": { "alias": "columnAutoWidth"; "required": false; "isSignal": true; }; "rowAlternationEnabledInput": { "alias": "rowAlternationEnabled"; "required": false; "isSignal": true; }; "remoteOperations": { "alias": "remoteOperations"; "required": false; "isSignal": true; }; "syncLookupFilterValues": { "alias": "syncLookupFilterValues"; "required": false; "isSignal": true; }; "columnMinWidth": { "alias": "columnMinWidth"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "noDataTextInput": { "alias": "noDataText"; "required": false; "isSignal": true; }; "loadPanel": { "alias": "loadPanel"; "required": false; "isSignal": true; }; "paging": { "alias": "paging"; "required": false; "isSignal": true; }; "filterRow": { "alias": "filterRow"; "required": false; "isSignal": true; }; "headerFilterOptions": { "alias": "headerFilter"; "required": false; "isSignal": true; }; "groupingOptions": { "alias": "grouping"; "required": false; "isSignal": true; }; "groupPanelOptions": { "alias": "groupPanel"; "required": false; "isSignal": true; }; "scrolling": { "alias": "scrolling"; "required": false; "isSignal": true; }; "sorting": { "alias": "sorting"; "required": false; "isSignal": true; }; "allowColumnResizing": { "alias": "allowColumnResizing"; "required": false; "isSignal": true; }; "columnResizingMode": { "alias": "columnResizingMode"; "required": false; "isSignal": true; }; "allowColumnReordering": { "alias": "allowColumnReordering"; "required": false; "isSignal": true; }; "repaintChangesOnly": { "alias": "repaintChangesOnly"; "required": false; "isSignal": true; }; "showColumnHeaders": { "alias": "showColumnHeaders"; "required": false; "isSignal": true; }; "parentIdExpr": { "alias": "parentIdExpr"; "required": false; "isSignal": true; }; "dataStructure": { "alias": "dataStructure"; "required": false; "isSignal": true; }; "rootValue": { "alias": "rootValue"; "required": false; "isSignal": true; }; "autoExpandAll": { "alias": "autoExpandAll"; "required": false; "isSignal": true; }; "expandedRowKeys": { "alias": "expandedRowKeys"; "required": false; "isSignal": true; }; "selectedRowKeys": { "alias": "selectedRowKeys"; "required": false; "isSignal": true; }; "mergeColumns": { "alias": "mergeColumns"; "required": false; "isSignal": true; }; "rowClass": { "alias": "rowClass"; "required": false; "isSignal": true; }; }, { "expandedRowKeys": "expandedRowKeysChange"; "selectedRowKeys": "selectedRowKeysChange"; "onSelectionChanged": "onSelectionChanged"; "onRowClick": "onRowClick"; "onContentReady": "onContentReady"; "onOptionChanged": "onOptionChanged"; "onCellPrepared": "onCellPrepared"; "onRowPrepared": "onRowPrepared"; "onRowExpanding": "onRowExpanding"; "onRowExpanded": "onRowExpanded"; }, ["declaredColumns", "templates", "selection", "headerFilter", "grouping", "groupPanel", "summaryCmp", "pagingCmp", "pagerCmp", "editingCmp", "filterRowCmp", "masterDetail"], never, true, never>;
|
|
2224
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeDataGridComponent, "nxe-data-grid, nxe-tree-list", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "keyExpr": { "alias": "keyExpr"; "required": false; "isSignal": true; }; "hoverStateEnabledInput": { "alias": "hoverStateEnabled"; "required": false; "isSignal": true; }; "showColumnLinesInput": { "alias": "showColumnLines"; "required": false; "isSignal": true; }; "showRowLinesInput": { "alias": "showRowLines"; "required": false; "isSignal": true; }; "showBordersInput": { "alias": "showBorders"; "required": false; "isSignal": true; }; "wordWrapEnabledInput": { "alias": "wordWrapEnabled"; "required": false; "isSignal": true; }; "columnAutoWidthInput": { "alias": "columnAutoWidth"; "required": false; "isSignal": true; }; "rowAlternationEnabledInput": { "alias": "rowAlternationEnabled"; "required": false; "isSignal": true; }; "resizeFillsGridInput": { "alias": "resizeFillsGrid"; "required": false; "isSignal": true; }; "remoteOperations": { "alias": "remoteOperations"; "required": false; "isSignal": true; }; "pageIndexModel": { "alias": "pageIndex"; "required": false; "isSignal": true; }; "pageSizeModel": { "alias": "pageSize"; "required": false; "isSignal": true; }; "sortModel": { "alias": "sort"; "required": false; "isSignal": true; }; "filter": { "alias": "filter"; "required": false; "isSignal": true; }; "syncLookupFilterValues": { "alias": "syncLookupFilterValues"; "required": false; "isSignal": true; }; "columnMinWidth": { "alias": "columnMinWidth"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "noDataTextInput": { "alias": "noDataText"; "required": false; "isSignal": true; }; "loadPanel": { "alias": "loadPanel"; "required": false; "isSignal": true; }; "paging": { "alias": "paging"; "required": false; "isSignal": true; }; "filterRow": { "alias": "filterRow"; "required": false; "isSignal": true; }; "headerFilterOptions": { "alias": "headerFilter"; "required": false; "isSignal": true; }; "groupingOptions": { "alias": "grouping"; "required": false; "isSignal": true; }; "groupPanelOptions": { "alias": "groupPanel"; "required": false; "isSignal": true; }; "scrolling": { "alias": "scrolling"; "required": false; "isSignal": true; }; "sorting": { "alias": "sorting"; "required": false; "isSignal": true; }; "allowColumnResizing": { "alias": "allowColumnResizing"; "required": false; "isSignal": true; }; "columnResizingMode": { "alias": "columnResizingMode"; "required": false; "isSignal": true; }; "allowColumnReordering": { "alias": "allowColumnReordering"; "required": false; "isSignal": true; }; "repaintChangesOnly": { "alias": "repaintChangesOnly"; "required": false; "isSignal": true; }; "showColumnHeaders": { "alias": "showColumnHeaders"; "required": false; "isSignal": true; }; "parentIdExpr": { "alias": "parentIdExpr"; "required": false; "isSignal": true; }; "dataStructure": { "alias": "dataStructure"; "required": false; "isSignal": true; }; "rootValue": { "alias": "rootValue"; "required": false; "isSignal": true; }; "autoExpandAll": { "alias": "autoExpandAll"; "required": false; "isSignal": true; }; "expandedRowKeys": { "alias": "expandedRowKeys"; "required": false; "isSignal": true; }; "selectedRowKeys": { "alias": "selectedRowKeys"; "required": false; "isSignal": true; }; "mergeColumns": { "alias": "mergeColumns"; "required": false; "isSignal": true; }; "rowClass": { "alias": "rowClass"; "required": false; "isSignal": true; }; }, { "pageIndexModel": "pageIndexChange"; "pageSizeModel": "pageSizeChange"; "sortModel": "sortChange"; "optionsChange": "optionsChange"; "expandedRowKeys": "expandedRowKeysChange"; "selectedRowKeys": "selectedRowKeysChange"; "onSelectionChanged": "onSelectionChanged"; "onRowClick": "onRowClick"; "onContentReady": "onContentReady"; "onOptionChanged": "onOptionChanged"; "onCellPrepared": "onCellPrepared"; "onRowPrepared": "onRowPrepared"; "onRowExpanding": "onRowExpanding"; "onRowExpanded": "onRowExpanded"; }, ["declaredColumns", "templates", "selection", "headerFilter", "grouping", "groupPanel", "summaryCmp", "pagingCmp", "pagerCmp", "editingCmp", "filterRowCmp", "masterDetail"], never, true, never>;
|
|
1870
2225
|
}
|
|
1871
2226
|
|
|
1872
|
-
export { NXE_HF_BLANKS, NxeColumnComponent, NxeDataGridComponent, NxeDragGesture, NxeEditingComponent, NxeFilterRowComponent, NxeGestureClickSuppression, NxeGridDragController, NxeGroupItemComponent, NxeGroupPanelComponent, NxeGroupingComponent, NxeHeaderFilterComponent, NxeHeaderFilterModel, NxeHeaderFilterPanelComponent, NxeMasterDetailComponent, NxePagerComponent, NxePagingComponent, NxeScrollingComponent, NxeSelectionComponent, NxeSummaryComponent, NxeTotalItemComponent, exportDataGrid, exportNxeGridToExcel, nxeDatePattern, nxeDefaultFormat, nxeExcelNumFmt, nxeExcelNumberMask, nxeFormatNumberValue, nxeHfKey, nxeNumberMask, nxeNumberValue, nxeValueDataType, openNxeHeaderFilterOverlay };
|
|
1873
|
-
export type { NxeCellInfo, NxeCellPreparedEvent, NxeColumnDataType, NxeColumnFormat, NxeColumnFormatObject, NxeCustomizeText, NxeDragGestureDelegate, NxeEditCellInfo, NxeExcelExportOptions, NxeExportColumn, NxeExportDataGridOptions, NxeFilterOp, NxeGridChange, NxeGridDragHooks, NxeGridInstance, NxeGridOptionChangedEvent, NxeGridSelectionChangedEvent, NxeGroupCellInfo, NxeHeaderCell, NxeHeaderFilterOverlayOptions, NxeHeaderFilterSource, NxeHfDateNode, NxeRowInfo, NxeRowPreparedEvent, NxeRowType, NxeSummaryItemLike, NxeTreeListNode };
|
|
2227
|
+
export { NXE_HF_BLANKS, NXE_REMOTE_DEFAULT_PAGE_SIZE, NxeColumnComponent, NxeDataGridComponent, NxeDragGesture, NxeEditingComponent, NxeFilterRowComponent, NxeGestureClickSuppression, NxeGridDragController, NxeGroupItemComponent, NxeGroupPanelComponent, NxeGroupingComponent, NxeHeaderFilterComponent, NxeHeaderFilterModel, NxeHeaderFilterPanelComponent, NxeMasterDetailComponent, NxePagerComponent, NxePaginatorComponent, NxePagingComponent, NxeRemoteDataSource, NxeScrollingComponent, NxeSelectionComponent, NxeSummaryComponent, NxeTotalItemComponent, exportDataGrid, exportNxeGridToExcel, nxeDatePattern, nxeDefaultFormat, nxeExcelNumFmt, nxeExcelNumberMask, nxeFilterAnd, nxeFilterOr, nxeFlattenFilter, nxeFormatNumberValue, nxeHfKey, nxeIsStoreLike, nxeLoadOptions, nxeNumberMask, nxeNumberValue, nxeSameQuery, nxeValueDataType, openNxeHeaderFilterOverlay };
|
|
2228
|
+
export type { NxeCellInfo, NxeCellPreparedEvent, NxeColumnDataType, NxeColumnFormat, NxeColumnFormatObject, NxeCustomizeText, NxeDragGestureDelegate, NxeEditCellInfo, NxeExcelExportOptions, NxeExportColumn, NxeExportDataGridOptions, NxeFilterExpression, NxeFilterOp, NxeFilterOperator, NxeFlatFilterCondition, NxeGridChange, NxeGridDragHooks, NxeGridInstance, NxeGridOptionChangedEvent, NxeGridSelectionChangedEvent, NxeGroupCellInfo, NxeHeaderCell, NxeHeaderFilterLabels, NxeHeaderFilterOverlayOptions, NxeHeaderFilterSource, NxeHfDateNode, NxeLoadContext, NxeLoadOptions, NxeLoadResult, NxeRemoteDataSourceConfig, NxeRemoteLoadFn, NxeRemoteQuery, NxeRowInfo, NxeRowPreparedEvent, NxeRowType, NxeSortDescriptor, NxeStoreLike, NxeSummaryItemLike, NxeTreeListNode };
|