@nexterajs/ui 0.0.1 → 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 +835 -11
- 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 +621 -69
- package/fesm2022/nexterajs-ui-dropdowns.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-file-uploader.mjs +576 -11
- package/fesm2022/nexterajs-ui-file-uploader.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-forms.mjs +2702 -452
- package/fesm2022/nexterajs-ui-forms.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-grid.mjs +2350 -336
- package/fesm2022/nexterajs-ui-grid.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-intl.mjs +117 -15
- 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 +353 -0
- package/fesm2022/nexterajs-ui-notify.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-overlay.mjs +1671 -0
- package/fesm2022/nexterajs-ui-overlay.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-pivot.mjs +191 -136
- 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-styling.mjs +568 -3
- package/fesm2022/nexterajs-ui-styling.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-tree-view.mjs +150 -18
- package/fesm2022/nexterajs-ui-tree-view.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-validation.mjs +283 -97
- package/fesm2022/nexterajs-ui-validation.mjs.map +1 -1
- package/fesm2022/nexterajs-ui.mjs +6 -0
- package/fesm2022/nexterajs-ui.mjs.map +1 -1
- package/package.json +37 -2
- package/styles/_dropdown.scss +150 -1
- package/styles/_editor.scss +75 -21
- package/styles/_icons.scss +92 -0
- package/styles/_mixins.scss +104 -1
- package/styles/_scrollbar.scss +134 -0
- package/styles/_status.scss +21 -0
- package/styles/_toast.scss +243 -0
- package/styles/_tokens.scss +467 -2
- package/styles/_widget.scss +14 -3
- package/styles/index.scss +10 -4
- package/types/nexterajs-ui-charts.d.ts +446 -0
- package/types/nexterajs-ui-core.d.ts +515 -30
- package/types/nexterajs-ui-display.d.ts +720 -0
- package/types/nexterajs-ui-dropdowns.d.ts +318 -57
- package/types/nexterajs-ui-file-uploader.d.ts +240 -8
- package/types/nexterajs-ui-forms.d.ts +772 -43
- package/types/nexterajs-ui-grid.d.ts +878 -135
- 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 +149 -0
- package/types/nexterajs-ui-overlay.d.ts +703 -0
- package/types/nexterajs-ui-pivot.d.ts +91 -70
- package/types/nexterajs-ui-shell.d.ts +294 -0
- package/types/nexterajs-ui-styling.d.ts +163 -3
- package/types/nexterajs-ui-tree-view.d.ts +56 -4
- package/types/nexterajs-ui-validation.d.ts +110 -22
- package/types/nexterajs-ui.d.ts +6 -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 { NxeFormControlBase } from '@nexterajs/ui/core';
|
|
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 {
|
|
@@ -14,10 +97,11 @@ interface NxeSelectionChangedEvent {
|
|
|
14
97
|
*
|
|
15
98
|
* A signal-CVA single-select dropdown over a plain array (`[dataSource]`). It bakes in the app's
|
|
16
99
|
* global `dxSelectBox.defaultOptions` (`displayExpr='lovName'`, `valueExpr='lovCode'`,
|
|
17
|
-
* `searchEnabled
|
|
18
|
-
*
|
|
19
|
-
* an in-field search filter. Emits `(valueChange)` (the code) and
|
|
20
|
-
* (`{selectedItem}`). Hosts a projected `nxe-validator` via
|
|
100
|
+
* `searchEnabled`), so the bound control value is the `valueExpr` field (a string code) and the
|
|
101
|
+
* field shows the `displayExpr` field. The clear button follows dx and is off unless asked for.
|
|
102
|
+
* Dropdown is a CDK overlay with an in-field search filter. Emits `(valueChange)` (the code) and
|
|
103
|
+
* `(onSelectionChanged)` (`{selectedItem}`). Hosts a projected `nxe-validator` via
|
|
104
|
+
* {@link NXE_VALIDATION_TARGET}.
|
|
21
105
|
*/
|
|
22
106
|
declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implements OnDestroy {
|
|
23
107
|
private readonly overlay;
|
|
@@ -25,37 +109,70 @@ declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implemen
|
|
|
25
109
|
private readonly dropdownTemplate;
|
|
26
110
|
private readonly inputEl;
|
|
27
111
|
private readonly templates;
|
|
28
|
-
/**
|
|
29
|
-
|
|
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>;
|
|
30
117
|
/** Field shown in the box/list (DevExtreme default `lovName`). Empty => the item itself. */
|
|
31
|
-
readonly displayExprInput: _angular_core.InputSignal<
|
|
32
|
-
readonly displayExpr: _angular_core.Signal<string>;
|
|
118
|
+
readonly displayExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
119
|
+
readonly displayExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
33
120
|
/** Field bound as the control value (DevExtreme default `lovCode`). Empty => the whole item. */
|
|
34
|
-
readonly valueExprInput: _angular_core.InputSignal<
|
|
35
|
-
readonly valueExpr: _angular_core.Signal<string>;
|
|
121
|
+
readonly valueExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
122
|
+
readonly valueExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
36
123
|
/** Field matched while searching (DevExtreme default `lovName`). */
|
|
37
|
-
readonly searchExprInput: _angular_core.InputSignal<
|
|
38
|
-
|
|
39
|
-
|
|
124
|
+
readonly searchExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
125
|
+
/**
|
|
126
|
+
* dx searches by `displayExpr` when `searchExpr` is not given. Defaulting to the literal
|
|
127
|
+
* 'lovName' instead meant that any picker with a custom displayExpr searched a field its
|
|
128
|
+
* items do not have, and found nothing - silently, because an empty result looks like no
|
|
129
|
+
* match. Where displayExpr is the default this resolves to 'lovName' exactly as before.
|
|
130
|
+
*/
|
|
131
|
+
readonly searchExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
132
|
+
readonly searchEnabledInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
40
133
|
readonly searchEnabled: _angular_core.Signal<boolean>;
|
|
41
|
-
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
134
|
+
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
135
|
+
/**
|
|
136
|
+
* dx defaults `showClearButton` to false (m_text_editor.base.js). The library used to default it
|
|
137
|
+
* on, which gave every host that never asked for one a clear button dx would not show. An app
|
|
138
|
+
* that wants it everywhere says so once through `NXE_DEFAULT_OPTIONS.selectBox.showClearButton`.
|
|
139
|
+
*/
|
|
42
140
|
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
43
141
|
/** dx parity: dx-select-box shows its drop-down arrow unless showDropDownButton=false. */
|
|
44
|
-
readonly showDropDownButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
142
|
+
readonly showDropDownButtonInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
45
143
|
readonly showDropDownButton: _angular_core.Signal<boolean>;
|
|
46
|
-
readonly placeholderInput: _angular_core.InputSignal<string>;
|
|
144
|
+
readonly placeholderInput: _angular_core.InputSignal<string | undefined>;
|
|
47
145
|
readonly placeholder: _angular_core.Signal<string>;
|
|
48
146
|
/** Named template ('displayItem') for dropdown rows; `$implicit` = the item. */
|
|
49
|
-
readonly itemTemplate: _angular_core.InputSignal<string>;
|
|
147
|
+
readonly itemTemplate: _angular_core.InputSignal<string | undefined>;
|
|
50
148
|
/** Named template ('inputField') for the closed field; `$implicit` = the selected item. */
|
|
51
|
-
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>;
|
|
52
163
|
/** DevExtreme parity, cosmetic. */
|
|
53
164
|
readonly hoverStateEnabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
54
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>;
|
|
55
172
|
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
56
173
|
readonly open: _angular_core.WritableSignal<boolean>;
|
|
57
174
|
/** What the user has typed to filter (null = not actively searching → show display text). */
|
|
58
|
-
readonly searchText: _angular_core.WritableSignal<string>;
|
|
175
|
+
readonly searchText: _angular_core.WritableSignal<string | null>;
|
|
59
176
|
readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
60
177
|
readonly panelWidth: _angular_core.WritableSignal<number>;
|
|
61
178
|
/** DevExtreme `.instance` facade — only `focus()` is used (via the customAutofocus directive). */
|
|
@@ -63,23 +180,33 @@ declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implemen
|
|
|
63
180
|
private overlayRef?;
|
|
64
181
|
private closeSub?;
|
|
65
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;
|
|
66
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;
|
|
67
192
|
protected display(item: unknown): string;
|
|
68
193
|
private extractValue;
|
|
69
|
-
readonly selectedItem: _angular_core.Signal<
|
|
194
|
+
readonly selectedItem: _angular_core.Signal<{} | null>;
|
|
70
195
|
readonly hasValue: _angular_core.Signal<boolean>;
|
|
71
196
|
/** Display text when the field is not being searched. */
|
|
72
197
|
protected readonly displayText: _angular_core.Signal<string>;
|
|
73
198
|
/** Value bound to the input element. */
|
|
74
199
|
protected readonly inputDisplay: _angular_core.Signal<string>;
|
|
75
200
|
protected readonly filteredItems: _angular_core.Signal<readonly unknown[]>;
|
|
76
|
-
protected readonly itemTemplateRef: _angular_core.Signal<TemplateRef<unknown
|
|
77
|
-
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>;
|
|
78
203
|
protected isSelected(item: unknown): boolean;
|
|
79
204
|
/** Imperative focus (DevExtreme `.instance.focus()` via customAutofocus). */
|
|
80
205
|
focus(): void;
|
|
81
206
|
protected onFieldMousedown(event: MouseEvent): void;
|
|
82
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;
|
|
83
210
|
protected onBlur(): void;
|
|
84
211
|
protected selectItem(item: unknown, event: Event): void;
|
|
85
212
|
protected onClear(event: Event): void;
|
|
@@ -88,37 +215,71 @@ declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implemen
|
|
|
88
215
|
private close;
|
|
89
216
|
ngOnDestroy(): void;
|
|
90
217
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeSelectBoxComponent, never>;
|
|
91
|
-
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>;
|
|
92
219
|
}
|
|
93
220
|
|
|
94
221
|
/**
|
|
95
222
|
* `nxe-tag-box` — drop-in replacement for DevExtreme `dx-tag-box` (multi-select sibling of
|
|
96
223
|
* `nxe-select-box`). The bound value is an **array of `valueExpr` keys** (`lovCode` strings).
|
|
97
224
|
* Bakes in the app's global `dxTagBox.defaultOptions` (display/search `lovName`, value `lovCode`,
|
|
98
|
-
* search +
|
|
99
|
-
*
|
|
225
|
+
* search + selection-controls on); the clear button follows dx and is off unless asked for.
|
|
226
|
+
* Selected items render as removable chips; with selection controls the dropdown shows a checkbox
|
|
227
|
+
* per row under a tri-state "Select All". Provides {@link NXE_VALIDATION_TARGET} for a projected
|
|
228
|
+
* `nxe-validator`.
|
|
100
229
|
*/
|
|
101
230
|
declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implements OnDestroy {
|
|
102
231
|
private readonly overlay;
|
|
103
232
|
private readonly viewContainerRef;
|
|
104
233
|
private readonly dropdownTemplate;
|
|
105
234
|
private readonly inputEl;
|
|
106
|
-
|
|
107
|
-
readonly
|
|
108
|
-
readonly
|
|
109
|
-
readonly
|
|
110
|
-
readonly
|
|
111
|
-
readonly
|
|
112
|
-
readonly
|
|
113
|
-
|
|
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>;
|
|
237
|
+
readonly displayExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
238
|
+
readonly displayExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
239
|
+
readonly valueExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
240
|
+
readonly valueExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
241
|
+
readonly searchExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
242
|
+
/**
|
|
243
|
+
* dx searches by `displayExpr` when `searchExpr` is not given. Defaulting to the literal
|
|
244
|
+
* 'lovName' instead meant that any picker with a custom displayExpr searched a field its
|
|
245
|
+
* items do not have, and found nothing - silently, because an empty result looks like no
|
|
246
|
+
* match. Where displayExpr is the default this resolves to 'lovName' exactly as before.
|
|
247
|
+
*/
|
|
248
|
+
readonly searchExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
249
|
+
readonly searchEnabledInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
114
250
|
readonly searchEnabled: _angular_core.Signal<boolean>;
|
|
115
|
-
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
251
|
+
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
252
|
+
/**
|
|
253
|
+
* dx defaults `showClearButton` to false (m_text_editor.base.js). The library used to default it
|
|
254
|
+
* on, which gave every host that never asked for one a clear button dx would not show. An app
|
|
255
|
+
* that wants it everywhere says so once through `NXE_DEFAULT_OPTIONS.tagBox.showClearButton`.
|
|
256
|
+
*/
|
|
116
257
|
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
258
|
+
readonly showSelectionControlsInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
259
|
+
/**
|
|
260
|
+
* dx `showSelectionControls`. On (the literal, and what every consumer site passes): a checkbox
|
|
261
|
+
* per row and a tri-state "Select All" row — dx switches its list to `selectionMode: 'all'`
|
|
262
|
+
* (m_tag_box.js `_listConfig`). Off: plain rows whose fill marks the selection
|
|
263
|
+
* (`selectionMode: 'multiple'`).
|
|
264
|
+
*/
|
|
265
|
+
readonly showSelectionControls: _angular_core.Signal<boolean>;
|
|
266
|
+
/** dx `selectAllText` — the label of the "Select All" row (dx: `dxList-selectAll`). */
|
|
267
|
+
readonly selectAllText: _angular_core.InputSignal<string | undefined>;
|
|
117
268
|
/** dx parity: dx-tag-box does NOT show a drop-down arrow unless showDropDownButton is set. */
|
|
118
|
-
readonly showDropDownButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
269
|
+
readonly showDropDownButtonInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
119
270
|
readonly showDropDownButton: _angular_core.Signal<boolean>;
|
|
120
|
-
readonly placeholderInput: _angular_core.InputSignal<string>;
|
|
271
|
+
readonly placeholderInput: _angular_core.InputSignal<string | undefined>;
|
|
121
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>;
|
|
122
283
|
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
123
284
|
readonly open: _angular_core.WritableSignal<boolean>;
|
|
124
285
|
readonly searchText: _angular_core.WritableSignal<string>;
|
|
@@ -126,7 +287,15 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
126
287
|
private overlayRef?;
|
|
127
288
|
private closeSub?;
|
|
128
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;
|
|
129
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;
|
|
130
299
|
/** The selected keys (always an array). */
|
|
131
300
|
private readonly selectedKeys;
|
|
132
301
|
protected display(item: unknown): string;
|
|
@@ -136,10 +305,23 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
136
305
|
protected readonly hasValue: _angular_core.Signal<boolean>;
|
|
137
306
|
protected readonly filteredItems: _angular_core.Signal<readonly unknown[]>;
|
|
138
307
|
protected isSelected(item: unknown): boolean;
|
|
308
|
+
/**
|
|
309
|
+
* The "Select All" checkbox value over the rows currently listed — dx `selectAllMode: 'page'`,
|
|
310
|
+
* so a search narrows what it counts: `true` when every listed row is selected, `false` when
|
|
311
|
+
* none is, and `undefined` (indeterminate) in between.
|
|
312
|
+
*/
|
|
313
|
+
protected readonly selectAllState: _angular_core.Signal<boolean | undefined>;
|
|
139
314
|
protected onFieldMousedown(event: MouseEvent): void;
|
|
140
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;
|
|
141
318
|
protected onBlur(): void;
|
|
142
319
|
protected toggle(item: unknown, event: Event): void;
|
|
320
|
+
/**
|
|
321
|
+
* dx `_selectAllHandler`: anything short of all-selected selects every listed row (keeping
|
|
322
|
+
* selections the search hides); all-selected deselects the listed rows only.
|
|
323
|
+
*/
|
|
324
|
+
protected toggleAll(event: Event): void;
|
|
143
325
|
protected removeTag(item: unknown, event: Event): void;
|
|
144
326
|
protected onClear(event: Event): void;
|
|
145
327
|
protected onKeydown(event: KeyboardEvent): void;
|
|
@@ -147,7 +329,7 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
147
329
|
private close;
|
|
148
330
|
ngOnDestroy(): void;
|
|
149
331
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeTagBoxComponent, never>;
|
|
150
|
-
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; }; "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>;
|
|
151
333
|
}
|
|
152
334
|
|
|
153
335
|
/**
|
|
@@ -159,8 +341,8 @@ declare class NxeDropDownOptionsComponent {
|
|
|
159
341
|
readonly wrapperAttr: _angular_core.InputSignal<{
|
|
160
342
|
class?: string;
|
|
161
343
|
id?: string;
|
|
162
|
-
}>;
|
|
163
|
-
readonly width: _angular_core.InputSignal<string | number>;
|
|
344
|
+
} | undefined>;
|
|
345
|
+
readonly width: _angular_core.InputSignal<string | number | undefined>;
|
|
164
346
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeDropDownOptionsComponent, never>;
|
|
165
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>;
|
|
166
348
|
}
|
|
@@ -181,13 +363,13 @@ declare class NxeDropDownBoxComponent extends NxeFormControlBase<unknown> implem
|
|
|
181
363
|
private readonly panelTemplate;
|
|
182
364
|
private readonly templates;
|
|
183
365
|
private readonly options;
|
|
184
|
-
readonly dataSource: _angular_core.InputSignal<readonly unknown[]>;
|
|
366
|
+
readonly dataSource: _angular_core.InputSignal<readonly unknown[] | null | undefined>;
|
|
185
367
|
/** Field name shown in the closed box; empty => the raw value string. */
|
|
186
|
-
readonly displayExprInput: _angular_core.InputSignal<
|
|
187
|
-
readonly displayExpr: _angular_core.Signal<string>;
|
|
188
|
-
readonly valueExprInput: _angular_core.InputSignal<
|
|
189
|
-
readonly valueExpr: _angular_core.Signal<string>;
|
|
190
|
-
readonly placeholderInput: _angular_core.InputSignal<string>;
|
|
368
|
+
readonly displayExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
369
|
+
readonly displayExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
370
|
+
readonly valueExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
371
|
+
readonly valueExpr: _angular_core.Signal<string | ((item: unknown) => unknown)>;
|
|
372
|
+
readonly placeholderInput: _angular_core.InputSignal<string | undefined>;
|
|
191
373
|
readonly placeholder: _angular_core.Signal<string>;
|
|
192
374
|
/** DevExtreme `[dropDownOptions]` — accepted for parity (popup-class hook). */
|
|
193
375
|
readonly dropDownOptions: _angular_core.InputSignal<unknown>;
|
|
@@ -199,7 +381,7 @@ declare class NxeDropDownBoxComponent extends NxeFormControlBase<unknown> implem
|
|
|
199
381
|
* every existing call site picks from a grid where clearing was never offered. Opt in where null
|
|
200
382
|
* is a value the field can legitimately hold.
|
|
201
383
|
*/
|
|
202
|
-
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
384
|
+
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
203
385
|
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
204
386
|
/**
|
|
205
387
|
* DevExtreme `[opened]` (orbit addition): programmatic open/close. Reflects the panel state
|
|
@@ -216,7 +398,7 @@ declare class NxeDropDownBoxComponent extends NxeFormControlBase<unknown> implem
|
|
|
216
398
|
private overlayRef?;
|
|
217
399
|
private closeSub?;
|
|
218
400
|
private flipSub?;
|
|
219
|
-
protected readonly contentTemplateRef: _angular_core.Signal<TemplateRef<unknown
|
|
401
|
+
protected readonly contentTemplateRef: _angular_core.Signal<TemplateRef<unknown> | null>;
|
|
220
402
|
/**
|
|
221
403
|
* DevExtreme sizes the popup to the editor, and every call site that says anything says
|
|
222
404
|
* `width="100%"` — which means that same thing. So the panel is fixed at the field's width and
|
|
@@ -252,23 +434,102 @@ interface NxeListItemClickEvent {
|
|
|
252
434
|
declare class NxeListComponent {
|
|
253
435
|
private readonly menu;
|
|
254
436
|
private readonly templates;
|
|
255
|
-
readonly dataSource: _angular_core.InputSignal<readonly unknown[]>;
|
|
437
|
+
readonly dataSource: _angular_core.InputSignal<readonly unknown[] | null | undefined>;
|
|
256
438
|
/** Named template ('listItem'/'actionButton') for each row; `$implicit` = the item. */
|
|
257
|
-
readonly itemTemplate: _angular_core.InputSignal<string>;
|
|
439
|
+
readonly itemTemplate: _angular_core.InputSignal<string | undefined>;
|
|
258
440
|
/** DevExtreme `[elementAttr]` — `{ id, class }` applied to the host. */
|
|
259
441
|
readonly elementAttr: _angular_core.InputSignal<{
|
|
260
442
|
id?: string;
|
|
261
443
|
class?: string;
|
|
262
|
-
}>;
|
|
444
|
+
} | undefined>;
|
|
445
|
+
/**
|
|
446
|
+
* dx `keyExpr` — the field identifying an item. Used for `@for` tracking, so a list whose
|
|
447
|
+
* items are replaced by equal-but-not-identical objects keeps its DOM instead of rebuilding
|
|
448
|
+
* every row. Falls back to the index when unset, which is the previous behaviour.
|
|
449
|
+
*/
|
|
450
|
+
readonly keyExpr: _angular_core.InputSignal<string | undefined>;
|
|
451
|
+
protected trackItem(item: unknown, index: number): unknown;
|
|
263
452
|
readonly onItemClick: _angular_core.OutputEmitterRef<NxeListItemClickEvent>;
|
|
264
453
|
protected readonly items: _angular_core.Signal<readonly unknown[]>;
|
|
265
|
-
protected readonly itemTemplateRef: _angular_core.Signal<_angular_core.TemplateRef<unknown
|
|
454
|
+
protected readonly itemTemplateRef: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
|
|
266
455
|
protected text(item: unknown): string;
|
|
267
456
|
/** dx parity: dx-list honors `item.disabled` (grayed, non-interactive). */
|
|
268
457
|
protected isDisabled(item: unknown): boolean;
|
|
269
458
|
protected select(item: unknown): void;
|
|
270
459
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeListComponent, never>;
|
|
271
|
-
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; }; }, { "onItemClick": "onItemClick"; }, ["templates"], never, true, never>;
|
|
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>;
|
|
461
|
+
}
|
|
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
|
+
|
|
470
|
+
/** How a typed query is matched against `searchExpr` (dx `searchMode`). */
|
|
471
|
+
type NxeAutoCompleteSearchMode = 'contains' | 'startswith' | 'equals';
|
|
472
|
+
/** DevExtreme-shaped selection payload, emitted when a suggestion is picked. */
|
|
473
|
+
interface NxeAutoCompleteSelectionChangedEvent {
|
|
474
|
+
selectedItem: unknown;
|
|
475
|
+
value: string | null;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* `nxe-auto-complete` — drop-in replacement for DevExtreme `dx-autocomplete`.
|
|
479
|
+
*
|
|
480
|
+
* The distinction from `nxe-select-box` is the value contract, and it is the whole reason this
|
|
481
|
+
* is a separate component: here the control value is the TEXT the user typed. A suggestion is a
|
|
482
|
+
* shortcut for typing, not a constraint on what may be entered, so free text survives and
|
|
483
|
+
* `valueExpr` only says which field of a picked item becomes that text.
|
|
484
|
+
*
|
|
485
|
+
* Deliberately not merged into the existing Material-shaped `nxe-autocomplete`: that one takes
|
|
486
|
+
* projected `nxe-option` children rather than a `[dataSource]`, so the two have incompatible
|
|
487
|
+
* content models and merging them would make every future change to one a risk to the other.
|
|
488
|
+
*/
|
|
489
|
+
declare class NxeAutoCompleteComponent extends NxeFormControlBase<string> implements OnDestroy {
|
|
490
|
+
private readonly overlay;
|
|
491
|
+
private readonly viewContainerRef;
|
|
492
|
+
private readonly dropdownTemplate;
|
|
493
|
+
private readonly inputEl;
|
|
494
|
+
readonly dataSource: _angular_core.InputSignal<readonly unknown[] | null | undefined>;
|
|
495
|
+
/** Field of a picked item that becomes the value (dx default `lovName`). */
|
|
496
|
+
readonly valueExpr: _angular_core.InputSignal<NxeExpr>;
|
|
497
|
+
/** Field matched against the query; defaults to {@link valueExpr}, as dx does. */
|
|
498
|
+
readonly searchExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
499
|
+
readonly searchExpr: _angular_core.Signal<NxeExpr>;
|
|
500
|
+
readonly searchMode: _angular_core.InputSignal<NxeAutoCompleteSearchMode>;
|
|
501
|
+
/** Characters required before suggestions appear. dx defaults to 1; 0 shows all on focus. */
|
|
502
|
+
readonly minSearchLength: _angular_core.InputSignal<number>;
|
|
503
|
+
/** dx caps the suggestion list; beyond this the user is expected to keep typing. */
|
|
504
|
+
readonly maxItemCount: _angular_core.InputSignal<number>;
|
|
505
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
506
|
+
readonly showClearButton: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
|
|
507
|
+
readonly onSelectionChanged: _angular_core.OutputEmitterRef<NxeAutoCompleteSelectionChangedEvent>;
|
|
508
|
+
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
509
|
+
readonly open: _angular_core.WritableSignal<boolean>;
|
|
510
|
+
readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
511
|
+
readonly panelWidth: _angular_core.WritableSignal<number>;
|
|
512
|
+
/** dx `.instance` facade — `focus()` is what the autofocus directive calls. */
|
|
513
|
+
get instance(): this;
|
|
514
|
+
private overlayRef?;
|
|
515
|
+
private closeSub?;
|
|
516
|
+
private flipSub?;
|
|
517
|
+
protected readonly text: _angular_core.Signal<string>;
|
|
518
|
+
protected itemText(item: unknown): string;
|
|
519
|
+
private searchText;
|
|
520
|
+
protected readonly suggestions: _angular_core.Signal<unknown[]>;
|
|
521
|
+
protected onFieldInput(event: Event): void;
|
|
522
|
+
protected onFocus(): void;
|
|
523
|
+
protected onBlur(): void;
|
|
524
|
+
protected pick(item: unknown, event: Event): void;
|
|
525
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
526
|
+
protected onClear(event: Event): void;
|
|
527
|
+
focus(): void;
|
|
528
|
+
private openPanel;
|
|
529
|
+
private closePanel;
|
|
530
|
+
ngOnDestroy(): void;
|
|
531
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeAutoCompleteComponent, never>;
|
|
532
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeAutoCompleteComponent, "nxe-auto-complete", never, { "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; "valueExpr": { "alias": "valueExpr"; "required": false; "isSignal": true; }; "searchExprInput": { "alias": "searchExpr"; "required": false; "isSignal": true; }; "searchMode": { "alias": "searchMode"; "required": false; "isSignal": true; }; "minSearchLength": { "alias": "minSearchLength"; "required": false; "isSignal": true; }; "maxItemCount": { "alias": "maxItemCount"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; }, { "onSelectionChanged": "onSelectionChanged"; }, never, ["*"], true, never>;
|
|
272
533
|
}
|
|
273
534
|
|
|
274
535
|
/** What an `nxe-option` needs from its parent autocomplete: a way to request close on select. */
|
|
@@ -330,5 +591,5 @@ declare class NxeOptionComponent {
|
|
|
330
591
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeOptionComponent, "nxe-option", ["nxeOption"], {}, {}, never, ["*"], true, never>;
|
|
331
592
|
}
|
|
332
593
|
|
|
333
|
-
export { NXE_AUTOCOMPLETE, NxeAutocompleteComponent, NxeAutocompleteTriggerDirective, NxeDropDownBoxComponent, NxeDropDownOptionsComponent, NxeListComponent, NxeOptionComponent, NxeSelectBoxComponent, NxeTagBoxComponent };
|
|
334
|
-
export type { 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 };
|