@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,7 +1,90 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { OnDestroy, TemplateRef, InjectionToken, OnInit } from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import { Subject } from 'rxjs';
|
|
2
|
+
import { Signal, OnDestroy, TemplateRef, InjectionToken, OnInit } from '@angular/core';
|
|
3
|
+
import { NxeExpr, NxeFormControlBase } from '@nexterajs/ui/core';
|
|
4
|
+
import { ObservableInput, Subject } from 'rxjs';
|
|
5
|
+
|
|
6
|
+
/** Payload of the `(searchChange)` output of the pickers: the text the user has settled on. */
|
|
7
|
+
interface NxeSearchChangedEvent {
|
|
8
|
+
searchValue: string;
|
|
9
|
+
}
|
|
10
|
+
/** What a picker hands to {@link NxePickerStore.load}; the names follow DevExtreme `LoadOptions`. */
|
|
11
|
+
interface NxePickerLoadOptions {
|
|
12
|
+
searchValue: string;
|
|
13
|
+
searchExpr: NxeExpr;
|
|
14
|
+
searchOperation: 'contains';
|
|
15
|
+
skip: number;
|
|
16
|
+
take: number;
|
|
17
|
+
}
|
|
18
|
+
/** Second argument of the store callbacks: `signal` aborts when a newer query replaces this one. */
|
|
19
|
+
interface NxePickerLoadContext {
|
|
20
|
+
signal: AbortSignal;
|
|
21
|
+
}
|
|
22
|
+
/** A page of rows; `totalCount` is optional and, when given, decides whether more pages exist. */
|
|
23
|
+
interface NxePickerLoadResult<T = any> {
|
|
24
|
+
data: readonly T[];
|
|
25
|
+
totalCount?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A lightweight server-backed source for `nxe-select-box` and `nxe-tag-box` (`[dataSource]`).
|
|
29
|
+
* Shaped like a DevExtreme `CustomStore`: `load` receives `{searchValue, skip, take}`, and `byKey`
|
|
30
|
+
* fetches one row so a selected value outside the loaded page keeps its label.
|
|
31
|
+
*/
|
|
32
|
+
interface NxePickerStore<T = any> {
|
|
33
|
+
load(options: NxePickerLoadOptions, context: NxePickerLoadContext): ObservableInput<readonly T[] | NxePickerLoadResult<T>>;
|
|
34
|
+
byKey?(key: unknown, context: NxePickerLoadContext): ObservableInput<T | null | undefined>;
|
|
35
|
+
}
|
|
36
|
+
/** True for a store object (anything with a `load` function that is not an array). */
|
|
37
|
+
declare function nxeIsPickerStore(value: unknown): value is NxePickerStore;
|
|
38
|
+
/** Reads the debounce, minimum length and remote settings of a picker; every member is a live signal. */
|
|
39
|
+
interface NxePickerSearchConfig {
|
|
40
|
+
store: Signal<NxePickerStore | null>;
|
|
41
|
+
searchExpr: Signal<NxeExpr>;
|
|
42
|
+
searchTimeout: Signal<number>;
|
|
43
|
+
minSearchLength: Signal<number>;
|
|
44
|
+
showDataBeforeSearch: Signal<boolean>;
|
|
45
|
+
pageSize: Signal<number>;
|
|
46
|
+
/** Called with each debounced search that reaches `minSearchLength` (or is cleared). */
|
|
47
|
+
searchChange: (event: NxeSearchChangedEvent) => void;
|
|
48
|
+
/** Called after a page of rows has landed. */
|
|
49
|
+
loaded?: () => void;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The search plumbing shared by the pickers: debounces typing by `searchTimeout`, emits
|
|
53
|
+
* `searchChange` once the text reaches `minSearchLength` (or is cleared), and, when the
|
|
54
|
+
* `dataSource` is a {@link NxePickerStore}, queries it and keeps only the newest response.
|
|
55
|
+
* Must be created in an injection context. It uses no `effect()`: it reacts only to the explicit
|
|
56
|
+
* {@link typed}, {@link open} and {@link loadMore} calls.
|
|
57
|
+
*/
|
|
58
|
+
declare class NxePickerSearch {
|
|
59
|
+
private readonly cfg;
|
|
60
|
+
/** Rows of the store loaded so far (all pages of the current query). */
|
|
61
|
+
readonly items: _angular_core.WritableSignal<readonly unknown[]>;
|
|
62
|
+
readonly loading: _angular_core.WritableSignal<boolean>;
|
|
63
|
+
readonly error: _angular_core.WritableSignal<unknown>;
|
|
64
|
+
readonly hasMore: _angular_core.WritableSignal<boolean>;
|
|
65
|
+
private readonly typedText;
|
|
66
|
+
private loadedFor;
|
|
67
|
+
private seq;
|
|
68
|
+
private controller;
|
|
69
|
+
constructor(cfg: NxePickerSearchConfig);
|
|
70
|
+
get hasStore(): boolean;
|
|
71
|
+
/** True when `text` is long enough to be searched. */
|
|
72
|
+
reachesMinimum(text: string): boolean;
|
|
73
|
+
/** The user typed; the search settles after `searchTimeout`. */
|
|
74
|
+
typed(text: string): void;
|
|
75
|
+
/** The panel opened with `text` in the field: load the first page unless that query is current. */
|
|
76
|
+
open(text: string): void;
|
|
77
|
+
/** Loads the next page of the current query (a scroll-to-bottom handler calls this). */
|
|
78
|
+
loadMore(): void;
|
|
79
|
+
/** Fetches one row by key through `byKey`; `null` when the store cannot or does not know it. */
|
|
80
|
+
lookup(key: unknown): Promise<unknown>;
|
|
81
|
+
private settled;
|
|
82
|
+
/** The text actually sent to the store: below the minimum nothing is searched. */
|
|
83
|
+
private effective;
|
|
84
|
+
private query;
|
|
85
|
+
private cancel;
|
|
86
|
+
private run;
|
|
87
|
+
}
|
|
5
88
|
|
|
6
89
|
/** DevExtreme-shaped selection-changed payload (handlers read `selectedItem`). */
|
|
7
90
|
interface NxeSelectionChangedEvent {
|
|
@@ -26,14 +109,17 @@ declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implemen
|
|
|
26
109
|
private readonly dropdownTemplate;
|
|
27
110
|
private readonly inputEl;
|
|
28
111
|
private readonly templates;
|
|
29
|
-
/**
|
|
30
|
-
|
|
112
|
+
/**
|
|
113
|
+
* The source: a plain array of `Lov`-shaped objects (or primitives), or an {@link NxePickerStore}
|
|
114
|
+
* whose `load({searchValue, skip, take})` the box calls itself (server-side search).
|
|
115
|
+
*/
|
|
116
|
+
readonly dataSource: _angular_core.InputSignal<NxePickerStore<any> | readonly unknown[] | null | undefined>;
|
|
31
117
|
/** Field shown in the box/list (DevExtreme default `lovName`). Empty => the item itself. */
|
|
32
118
|
readonly displayExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
33
|
-
readonly displayExpr: _angular_core.Signal<
|
|
119
|
+
readonly displayExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
34
120
|
/** Field bound as the control value (DevExtreme default `lovCode`). Empty => the whole item. */
|
|
35
121
|
readonly valueExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
36
|
-
readonly valueExpr: _angular_core.Signal<
|
|
122
|
+
readonly valueExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
37
123
|
/** Field matched while searching (DevExtreme default `lovName`). */
|
|
38
124
|
readonly searchExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
39
125
|
/**
|
|
@@ -42,10 +128,10 @@ declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implemen
|
|
|
42
128
|
* items do not have, and found nothing - silently, because an empty result looks like no
|
|
43
129
|
* match. Where displayExpr is the default this resolves to 'lovName' exactly as before.
|
|
44
130
|
*/
|
|
45
|
-
readonly searchExpr: _angular_core.Signal<
|
|
46
|
-
readonly searchEnabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
131
|
+
readonly searchExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
132
|
+
readonly searchEnabledInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
47
133
|
readonly searchEnabled: _angular_core.Signal<boolean>;
|
|
48
|
-
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
134
|
+
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
49
135
|
/**
|
|
50
136
|
* dx defaults `showClearButton` to false (m_text_editor.base.js). The library used to default it
|
|
51
137
|
* on, which gave every host that never asked for one a clear button dx would not show. An app
|
|
@@ -53,21 +139,40 @@ declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implemen
|
|
|
53
139
|
*/
|
|
54
140
|
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
55
141
|
/** dx parity: dx-select-box shows its drop-down arrow unless showDropDownButton=false. */
|
|
56
|
-
readonly showDropDownButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
142
|
+
readonly showDropDownButtonInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
57
143
|
readonly showDropDownButton: _angular_core.Signal<boolean>;
|
|
58
|
-
readonly placeholderInput: _angular_core.InputSignal<string>;
|
|
144
|
+
readonly placeholderInput: _angular_core.InputSignal<string | undefined>;
|
|
59
145
|
readonly placeholder: _angular_core.Signal<string>;
|
|
60
146
|
/** Named template ('displayItem') for dropdown rows; `$implicit` = the item. */
|
|
61
|
-
readonly itemTemplate: _angular_core.InputSignal<string>;
|
|
147
|
+
readonly itemTemplate: _angular_core.InputSignal<string | undefined>;
|
|
62
148
|
/** Named template ('inputField') for the closed field; `$implicit` = the selected item. */
|
|
63
|
-
readonly fieldTemplate: _angular_core.InputSignal<string>;
|
|
149
|
+
readonly fieldTemplate: _angular_core.InputSignal<string | undefined>;
|
|
150
|
+
/** dx `searchTimeout`: ms of typing pause before `(searchChange)` fires or a store is queried. */
|
|
151
|
+
readonly searchTimeout: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
152
|
+
/** dx `minSearchLength`: characters needed before a search is emitted, applied or sent. */
|
|
153
|
+
readonly minSearchLength: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
154
|
+
/** dx `showDataBeforeSearch`: list rows while the text is shorter than `minSearchLength`. */
|
|
155
|
+
readonly showDataBeforeSearch: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
156
|
+
/** Rows requested per page from a store `dataSource` (`take`); more load on scroll to the end. */
|
|
157
|
+
readonly pageSize: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
158
|
+
/**
|
|
159
|
+
* dx `displayValue`: the text shown for the current value while its row is not among the loaded
|
|
160
|
+
* ones (a store `dataSource` with the selection outside the current page, and no `byKey`).
|
|
161
|
+
*/
|
|
162
|
+
readonly displayValue: _angular_core.InputSignal<string | null | undefined>;
|
|
64
163
|
/** DevExtreme parity, cosmetic. */
|
|
65
164
|
readonly hoverStateEnabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
66
165
|
readonly onSelectionChanged: _angular_core.OutputEmitterRef<NxeSelectionChangedEvent>;
|
|
166
|
+
/**
|
|
167
|
+
* The search text settled: fires `searchTimeout` ms after the last keystroke, once the text has
|
|
168
|
+
* `minSearchLength` characters (or was cleared). Use it to query a server and replace
|
|
169
|
+
* `[dataSource]`, or pass a {@link NxePickerStore} and let the box query for you.
|
|
170
|
+
*/
|
|
171
|
+
readonly searchChange: _angular_core.OutputEmitterRef<NxeSearchChangedEvent>;
|
|
67
172
|
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
68
173
|
readonly open: _angular_core.WritableSignal<boolean>;
|
|
69
174
|
/** What the user has typed to filter (null = not actively searching → show display text). */
|
|
70
|
-
readonly searchText: _angular_core.WritableSignal<string>;
|
|
175
|
+
readonly searchText: _angular_core.WritableSignal<string | null>;
|
|
71
176
|
readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
72
177
|
readonly panelWidth: _angular_core.WritableSignal<number>;
|
|
73
178
|
/** DevExtreme `.instance` facade — only `focus()` is used (via the customAutofocus directive). */
|
|
@@ -75,23 +180,33 @@ declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implemen
|
|
|
75
180
|
private overlayRef?;
|
|
76
181
|
private closeSub?;
|
|
77
182
|
private flipSub?;
|
|
183
|
+
private readonly store;
|
|
184
|
+
private readonly search;
|
|
185
|
+
/** Rows picked or fetched by key from a store, so the label outlives the page that held them. */
|
|
186
|
+
private readonly resolved;
|
|
78
187
|
private readonly items;
|
|
188
|
+
/** Fetches the row of an externally set value through `byKey` when no loaded row has it. */
|
|
189
|
+
private readonly keyLookup;
|
|
190
|
+
private findRow;
|
|
191
|
+
private remember;
|
|
79
192
|
protected display(item: unknown): string;
|
|
80
193
|
private extractValue;
|
|
81
|
-
readonly selectedItem: _angular_core.Signal<
|
|
194
|
+
readonly selectedItem: _angular_core.Signal<{} | null>;
|
|
82
195
|
readonly hasValue: _angular_core.Signal<boolean>;
|
|
83
196
|
/** Display text when the field is not being searched. */
|
|
84
197
|
protected readonly displayText: _angular_core.Signal<string>;
|
|
85
198
|
/** Value bound to the input element. */
|
|
86
199
|
protected readonly inputDisplay: _angular_core.Signal<string>;
|
|
87
200
|
protected readonly filteredItems: _angular_core.Signal<readonly unknown[]>;
|
|
88
|
-
protected readonly itemTemplateRef: _angular_core.Signal<TemplateRef<unknown
|
|
89
|
-
protected readonly fieldTemplateRef: _angular_core.Signal<TemplateRef<unknown
|
|
201
|
+
protected readonly itemTemplateRef: _angular_core.Signal<TemplateRef<unknown> | null>;
|
|
202
|
+
protected readonly fieldTemplateRef: _angular_core.Signal<TemplateRef<unknown> | null>;
|
|
90
203
|
protected isSelected(item: unknown): boolean;
|
|
91
204
|
/** Imperative focus (DevExtreme `.instance.focus()` via customAutofocus). */
|
|
92
205
|
focus(): void;
|
|
93
206
|
protected onFieldMousedown(event: MouseEvent): void;
|
|
94
207
|
protected onSearchInput(event: Event): void;
|
|
208
|
+
/** Loads the next page of a store `dataSource` when the list is scrolled to its end. */
|
|
209
|
+
protected onPanelScroll(event: Event): void;
|
|
95
210
|
protected onBlur(): void;
|
|
96
211
|
protected selectItem(item: unknown, event: Event): void;
|
|
97
212
|
protected onClear(event: Event): void;
|
|
@@ -100,7 +215,7 @@ declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implemen
|
|
|
100
215
|
private close;
|
|
101
216
|
ngOnDestroy(): void;
|
|
102
217
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeSelectBoxComponent, never>;
|
|
103
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeSelectBoxComponent, "nxe-select-box", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "displayExprInput": { "alias": "displayExpr"; "required": false; "isSignal": true; }; "valueExprInput": { "alias": "valueExpr"; "required": false; "isSignal": true; }; "searchExprInput": { "alias": "searchExpr"; "required": false; "isSignal": true; }; "searchEnabledInput": { "alias": "searchEnabled"; "required": false; "isSignal": true; }; "showClearButtonInput": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "showDropDownButtonInput": { "alias": "showDropDownButton"; "required": false; "isSignal": true; }; "placeholderInput": { "alias": "placeholder"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "fieldTemplate": { "alias": "fieldTemplate"; "required": false; "isSignal": true; }; "hoverStateEnabled": { "alias": "hoverStateEnabled"; "required": false; "isSignal": true; }; }, { "onSelectionChanged": "onSelectionChanged"; }, ["templates"], ["*"], true, never>;
|
|
218
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeSelectBoxComponent, "nxe-select-box", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "displayExprInput": { "alias": "displayExpr"; "required": false; "isSignal": true; }; "valueExprInput": { "alias": "valueExpr"; "required": false; "isSignal": true; }; "searchExprInput": { "alias": "searchExpr"; "required": false; "isSignal": true; }; "searchEnabledInput": { "alias": "searchEnabled"; "required": false; "isSignal": true; }; "showClearButtonInput": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "showDropDownButtonInput": { "alias": "showDropDownButton"; "required": false; "isSignal": true; }; "placeholderInput": { "alias": "placeholder"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "fieldTemplate": { "alias": "fieldTemplate"; "required": false; "isSignal": true; }; "searchTimeout": { "alias": "searchTimeout"; "required": false; "isSignal": true; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; "isSignal": true; }; "showDataBeforeSearch": { "alias": "showDataBeforeSearch"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "displayValue": { "alias": "displayValue"; "required": false; "isSignal": true; }; "hoverStateEnabled": { "alias": "hoverStateEnabled"; "required": false; "isSignal": true; }; }, { "onSelectionChanged": "onSelectionChanged"; "searchChange": "searchChange"; }, ["templates"], ["*"], true, never>;
|
|
104
219
|
}
|
|
105
220
|
|
|
106
221
|
/**
|
|
@@ -117,11 +232,12 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
117
232
|
private readonly viewContainerRef;
|
|
118
233
|
private readonly dropdownTemplate;
|
|
119
234
|
private readonly inputEl;
|
|
120
|
-
|
|
235
|
+
/** A plain array, or an {@link NxePickerStore} the box queries itself (server-side search). */
|
|
236
|
+
readonly dataSource: _angular_core.InputSignal<NxePickerStore<any> | readonly unknown[] | null | undefined>;
|
|
121
237
|
readonly displayExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
122
|
-
readonly displayExpr: _angular_core.Signal<
|
|
238
|
+
readonly displayExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
123
239
|
readonly valueExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
124
|
-
readonly valueExpr: _angular_core.Signal<
|
|
240
|
+
readonly valueExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
125
241
|
readonly searchExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
126
242
|
/**
|
|
127
243
|
* dx searches by `displayExpr` when `searchExpr` is not given. Defaulting to the literal
|
|
@@ -129,17 +245,17 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
129
245
|
* items do not have, and found nothing - silently, because an empty result looks like no
|
|
130
246
|
* match. Where displayExpr is the default this resolves to 'lovName' exactly as before.
|
|
131
247
|
*/
|
|
132
|
-
readonly searchExpr: _angular_core.Signal<
|
|
133
|
-
readonly searchEnabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
248
|
+
readonly searchExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
249
|
+
readonly searchEnabledInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
134
250
|
readonly searchEnabled: _angular_core.Signal<boolean>;
|
|
135
|
-
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
251
|
+
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
136
252
|
/**
|
|
137
253
|
* dx defaults `showClearButton` to false (m_text_editor.base.js). The library used to default it
|
|
138
254
|
* on, which gave every host that never asked for one a clear button dx would not show. An app
|
|
139
255
|
* that wants it everywhere says so once through `NXE_DEFAULT_OPTIONS.tagBox.showClearButton`.
|
|
140
256
|
*/
|
|
141
257
|
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
142
|
-
readonly showSelectionControlsInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
258
|
+
readonly showSelectionControlsInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
143
259
|
/**
|
|
144
260
|
* dx `showSelectionControls`. On (the literal, and what every consumer site passes): a checkbox
|
|
145
261
|
* per row and a tri-state "Select All" row — dx switches its list to `selectionMode: 'all'`
|
|
@@ -148,12 +264,22 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
148
264
|
*/
|
|
149
265
|
readonly showSelectionControls: _angular_core.Signal<boolean>;
|
|
150
266
|
/** dx `selectAllText` — the label of the "Select All" row (dx: `dxList-selectAll`). */
|
|
151
|
-
readonly selectAllText: _angular_core.InputSignal<string>;
|
|
267
|
+
readonly selectAllText: _angular_core.InputSignal<string | undefined>;
|
|
152
268
|
/** dx parity: dx-tag-box does NOT show a drop-down arrow unless showDropDownButton is set. */
|
|
153
|
-
readonly showDropDownButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
269
|
+
readonly showDropDownButtonInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
154
270
|
readonly showDropDownButton: _angular_core.Signal<boolean>;
|
|
155
|
-
readonly placeholderInput: _angular_core.InputSignal<string>;
|
|
271
|
+
readonly placeholderInput: _angular_core.InputSignal<string | undefined>;
|
|
156
272
|
readonly placeholder: _angular_core.Signal<string>;
|
|
273
|
+
/** dx `searchTimeout`: ms of typing pause before `(searchChange)` fires or a store is queried. */
|
|
274
|
+
readonly searchTimeout: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
275
|
+
/** dx `minSearchLength`: characters needed before a search is emitted, applied or sent. */
|
|
276
|
+
readonly minSearchLength: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
277
|
+
/** dx `showDataBeforeSearch`: list rows while the text is shorter than `minSearchLength`. */
|
|
278
|
+
readonly showDataBeforeSearch: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
279
|
+
/** Rows requested per page from a store `dataSource` (`take`); more load on scroll to the end. */
|
|
280
|
+
readonly pageSize: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
281
|
+
/** The search text settled (after `searchTimeout`, once it has `minSearchLength` characters or was cleared). */
|
|
282
|
+
readonly searchChange: _angular_core.OutputEmitterRef<NxeSearchChangedEvent>;
|
|
157
283
|
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
158
284
|
readonly open: _angular_core.WritableSignal<boolean>;
|
|
159
285
|
readonly searchText: _angular_core.WritableSignal<string>;
|
|
@@ -161,7 +287,15 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
161
287
|
private overlayRef?;
|
|
162
288
|
private closeSub?;
|
|
163
289
|
private flipSub?;
|
|
290
|
+
private readonly store;
|
|
291
|
+
private readonly search;
|
|
292
|
+
/** Rows picked or fetched by key from a store, so a chip keeps its label off the loaded page. */
|
|
293
|
+
private readonly resolved;
|
|
164
294
|
private readonly items;
|
|
295
|
+
/** Fetches, through `byKey`, the rows of externally set keys that no loaded row has. */
|
|
296
|
+
private readonly keyLookup;
|
|
297
|
+
private findRow;
|
|
298
|
+
private remember;
|
|
165
299
|
/** The selected keys (always an array). */
|
|
166
300
|
private readonly selectedKeys;
|
|
167
301
|
protected display(item: unknown): string;
|
|
@@ -176,9 +310,11 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
176
310
|
* so a search narrows what it counts: `true` when every listed row is selected, `false` when
|
|
177
311
|
* none is, and `undefined` (indeterminate) in between.
|
|
178
312
|
*/
|
|
179
|
-
protected readonly selectAllState: _angular_core.Signal<boolean>;
|
|
313
|
+
protected readonly selectAllState: _angular_core.Signal<boolean | undefined>;
|
|
180
314
|
protected onFieldMousedown(event: MouseEvent): void;
|
|
181
315
|
protected onSearchInput(event: Event): void;
|
|
316
|
+
/** Loads the next page of a store `dataSource` when the list is scrolled to its end. */
|
|
317
|
+
protected onPanelScroll(event: Event): void;
|
|
182
318
|
protected onBlur(): void;
|
|
183
319
|
protected toggle(item: unknown, event: Event): void;
|
|
184
320
|
/**
|
|
@@ -193,7 +329,7 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
193
329
|
private close;
|
|
194
330
|
ngOnDestroy(): void;
|
|
195
331
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeTagBoxComponent, never>;
|
|
196
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeTagBoxComponent, "nxe-tag-box", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "displayExprInput": { "alias": "displayExpr"; "required": false; "isSignal": true; }; "valueExprInput": { "alias": "valueExpr"; "required": false; "isSignal": true; }; "searchExprInput": { "alias": "searchExpr"; "required": false; "isSignal": true; }; "searchEnabledInput": { "alias": "searchEnabled"; "required": false; "isSignal": true; }; "showClearButtonInput": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "showSelectionControlsInput": { "alias": "showSelectionControls"; "required": false; "isSignal": true; }; "selectAllText": { "alias": "selectAllText"; "required": false; "isSignal": true; }; "showDropDownButtonInput": { "alias": "showDropDownButton"; "required": false; "isSignal": true; }; "placeholderInput": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
332
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeTagBoxComponent, "nxe-tag-box", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "displayExprInput": { "alias": "displayExpr"; "required": false; "isSignal": true; }; "valueExprInput": { "alias": "valueExpr"; "required": false; "isSignal": true; }; "searchExprInput": { "alias": "searchExpr"; "required": false; "isSignal": true; }; "searchEnabledInput": { "alias": "searchEnabled"; "required": false; "isSignal": true; }; "showClearButtonInput": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "showSelectionControlsInput": { "alias": "showSelectionControls"; "required": false; "isSignal": true; }; "selectAllText": { "alias": "selectAllText"; "required": false; "isSignal": true; }; "showDropDownButtonInput": { "alias": "showDropDownButton"; "required": false; "isSignal": true; }; "placeholderInput": { "alias": "placeholder"; "required": false; "isSignal": true; }; "searchTimeout": { "alias": "searchTimeout"; "required": false; "isSignal": true; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; "isSignal": true; }; "showDataBeforeSearch": { "alias": "showDataBeforeSearch"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; }, { "searchChange": "searchChange"; }, never, ["*"], true, never>;
|
|
197
333
|
}
|
|
198
334
|
|
|
199
335
|
/**
|
|
@@ -205,8 +341,8 @@ declare class NxeDropDownOptionsComponent {
|
|
|
205
341
|
readonly wrapperAttr: _angular_core.InputSignal<{
|
|
206
342
|
class?: string;
|
|
207
343
|
id?: string;
|
|
208
|
-
}>;
|
|
209
|
-
readonly width: _angular_core.InputSignal<string | number>;
|
|
344
|
+
} | undefined>;
|
|
345
|
+
readonly width: _angular_core.InputSignal<string | number | undefined>;
|
|
210
346
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeDropDownOptionsComponent, never>;
|
|
211
347
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeDropDownOptionsComponent, "nxe-drop-down-options", never, { "wrapperAttr": { "alias": "wrapperAttr"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
212
348
|
}
|
|
@@ -227,13 +363,13 @@ declare class NxeDropDownBoxComponent extends NxeFormControlBase<unknown> implem
|
|
|
227
363
|
private readonly panelTemplate;
|
|
228
364
|
private readonly templates;
|
|
229
365
|
private readonly options;
|
|
230
|
-
readonly dataSource: _angular_core.InputSignal<readonly unknown[]>;
|
|
366
|
+
readonly dataSource: _angular_core.InputSignal<readonly unknown[] | null | undefined>;
|
|
231
367
|
/** Field name shown in the closed box; empty => the raw value string. */
|
|
232
368
|
readonly displayExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
233
|
-
readonly displayExpr: _angular_core.Signal<
|
|
369
|
+
readonly displayExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
234
370
|
readonly valueExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
235
|
-
readonly valueExpr: _angular_core.Signal<
|
|
236
|
-
readonly placeholderInput: _angular_core.InputSignal<string>;
|
|
371
|
+
readonly valueExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
372
|
+
readonly placeholderInput: _angular_core.InputSignal<string | undefined>;
|
|
237
373
|
readonly placeholder: _angular_core.Signal<string>;
|
|
238
374
|
/** DevExtreme `[dropDownOptions]` — accepted for parity (popup-class hook). */
|
|
239
375
|
readonly dropDownOptions: _angular_core.InputSignal<unknown>;
|
|
@@ -245,7 +381,7 @@ declare class NxeDropDownBoxComponent extends NxeFormControlBase<unknown> implem
|
|
|
245
381
|
* every existing call site picks from a grid where clearing was never offered. Opt in where null
|
|
246
382
|
* is a value the field can legitimately hold.
|
|
247
383
|
*/
|
|
248
|
-
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
384
|
+
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
249
385
|
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
250
386
|
/**
|
|
251
387
|
* DevExtreme `[opened]` (orbit addition): programmatic open/close. Reflects the panel state
|
|
@@ -262,7 +398,7 @@ declare class NxeDropDownBoxComponent extends NxeFormControlBase<unknown> implem
|
|
|
262
398
|
private overlayRef?;
|
|
263
399
|
private closeSub?;
|
|
264
400
|
private flipSub?;
|
|
265
|
-
protected readonly contentTemplateRef: _angular_core.Signal<TemplateRef<unknown
|
|
401
|
+
protected readonly contentTemplateRef: _angular_core.Signal<TemplateRef<unknown> | null>;
|
|
266
402
|
/**
|
|
267
403
|
* DevExtreme sizes the popup to the editor, and every call site that says anything says
|
|
268
404
|
* `width="100%"` — which means that same thing. So the panel is fixed at the field's width and
|
|
@@ -298,24 +434,24 @@ interface NxeListItemClickEvent {
|
|
|
298
434
|
declare class NxeListComponent {
|
|
299
435
|
private readonly menu;
|
|
300
436
|
private readonly templates;
|
|
301
|
-
readonly dataSource: _angular_core.InputSignal<readonly unknown[]>;
|
|
437
|
+
readonly dataSource: _angular_core.InputSignal<readonly unknown[] | null | undefined>;
|
|
302
438
|
/** Named template ('listItem'/'actionButton') for each row; `$implicit` = the item. */
|
|
303
|
-
readonly itemTemplate: _angular_core.InputSignal<string>;
|
|
439
|
+
readonly itemTemplate: _angular_core.InputSignal<string | undefined>;
|
|
304
440
|
/** DevExtreme `[elementAttr]` — `{ id, class }` applied to the host. */
|
|
305
441
|
readonly elementAttr: _angular_core.InputSignal<{
|
|
306
442
|
id?: string;
|
|
307
443
|
class?: string;
|
|
308
|
-
}>;
|
|
444
|
+
} | undefined>;
|
|
309
445
|
/**
|
|
310
446
|
* dx `keyExpr` — the field identifying an item. Used for `@for` tracking, so a list whose
|
|
311
447
|
* items are replaced by equal-but-not-identical objects keeps its DOM instead of rebuilding
|
|
312
448
|
* every row. Falls back to the index when unset, which is the previous behaviour.
|
|
313
449
|
*/
|
|
314
|
-
readonly keyExpr: _angular_core.InputSignal<string>;
|
|
450
|
+
readonly keyExpr: _angular_core.InputSignal<string | undefined>;
|
|
315
451
|
protected trackItem(item: unknown, index: number): unknown;
|
|
316
452
|
readonly onItemClick: _angular_core.OutputEmitterRef<NxeListItemClickEvent>;
|
|
317
453
|
protected readonly items: _angular_core.Signal<readonly unknown[]>;
|
|
318
|
-
protected readonly itemTemplateRef: _angular_core.Signal<_angular_core.TemplateRef<unknown
|
|
454
|
+
protected readonly itemTemplateRef: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
|
|
319
455
|
protected text(item: unknown): string;
|
|
320
456
|
/** dx parity: dx-list honors `item.disabled` (grayed, non-interactive). */
|
|
321
457
|
protected isDisabled(item: unknown): boolean;
|
|
@@ -324,6 +460,13 @@ declare class NxeListComponent {
|
|
|
324
460
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeListComponent, "nxe-list", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "itemTemplate": { "alias": "itemTemplate"; "required": false; "isSignal": true; }; "elementAttr": { "alias": "elementAttr"; "required": false; "isSignal": true; }; "keyExpr": { "alias": "keyExpr"; "required": false; "isSignal": true; }; }, { "onItemClick": "onItemClick"; }, ["templates"], never, true, never>;
|
|
325
461
|
}
|
|
326
462
|
|
|
463
|
+
/** What an `nxe-menu-item` needs from its parent menu: a way to request close. */
|
|
464
|
+
interface NxeMenuCloseTarget {
|
|
465
|
+
closeMenu(): void;
|
|
466
|
+
}
|
|
467
|
+
/** DI token the menu provides so projected `nxe-menu-item`s can close it on click. */
|
|
468
|
+
declare const NXE_MENU: InjectionToken<NxeMenuCloseTarget>;
|
|
469
|
+
|
|
327
470
|
/** How a typed query is matched against `searchExpr` (dx `searchMode`). */
|
|
328
471
|
type NxeAutoCompleteSearchMode = 'contains' | 'startswith' | 'equals';
|
|
329
472
|
/** DevExtreme-shaped selection payload, emitted when a suggestion is picked. */
|
|
@@ -348,7 +491,7 @@ declare class NxeAutoCompleteComponent extends NxeFormControlBase<string> implem
|
|
|
348
491
|
private readonly viewContainerRef;
|
|
349
492
|
private readonly dropdownTemplate;
|
|
350
493
|
private readonly inputEl;
|
|
351
|
-
readonly dataSource: _angular_core.InputSignal<readonly unknown[]>;
|
|
494
|
+
readonly dataSource: _angular_core.InputSignal<readonly unknown[] | null | undefined>;
|
|
352
495
|
/** Field of a picked item that becomes the value (dx default `lovName`). */
|
|
353
496
|
readonly valueExpr: _angular_core.InputSignal<NxeExpr>;
|
|
354
497
|
/** Field matched against the query; defaults to {@link valueExpr}, as dx does. */
|
|
@@ -360,7 +503,7 @@ declare class NxeAutoCompleteComponent extends NxeFormControlBase<string> implem
|
|
|
360
503
|
/** dx caps the suggestion list; beyond this the user is expected to keep typing. */
|
|
361
504
|
readonly maxItemCount: _angular_core.InputSignal<number>;
|
|
362
505
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
363
|
-
readonly showClearButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
506
|
+
readonly showClearButton: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
364
507
|
readonly onSelectionChanged: _angular_core.OutputEmitterRef<NxeAutoCompleteSelectionChangedEvent>;
|
|
365
508
|
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
366
509
|
readonly open: _angular_core.WritableSignal<boolean>;
|
|
@@ -448,5 +591,5 @@ declare class NxeOptionComponent {
|
|
|
448
591
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeOptionComponent, "nxe-option", ["nxeOption"], {}, {}, never, ["*"], true, never>;
|
|
449
592
|
}
|
|
450
593
|
|
|
451
|
-
export { NXE_AUTOCOMPLETE, NxeAutoCompleteComponent, NxeAutocompleteComponent, NxeAutocompleteTriggerDirective, NxeDropDownBoxComponent, NxeDropDownOptionsComponent, NxeListComponent, NxeOptionComponent, NxeSelectBoxComponent, NxeTagBoxComponent };
|
|
452
|
-
export type { NxeAutoCompleteSearchMode, NxeAutoCompleteSelectionChangedEvent, NxeAutocompletePanel, NxeListItemClickEvent, NxeSelectionChangedEvent };
|
|
594
|
+
export { NXE_AUTOCOMPLETE, NXE_MENU, NxeAutoCompleteComponent, NxeAutocompleteComponent, NxeAutocompleteTriggerDirective, NxeDropDownBoxComponent, NxeDropDownOptionsComponent, NxeListComponent, NxeOptionComponent, NxePickerSearch, NxeSelectBoxComponent, NxeTagBoxComponent, nxeIsPickerStore };
|
|
595
|
+
export type { NxeAutoCompleteSearchMode, NxeAutoCompleteSelectionChangedEvent, NxeAutocompletePanel, NxeListItemClickEvent, NxeMenuCloseTarget, NxePickerLoadContext, NxePickerLoadOptions, NxePickerLoadResult, NxePickerSearchConfig, NxePickerStore, NxeSearchChangedEvent, NxeSelectionChangedEvent };
|