@nexterajs/ui 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/nexterajs-ui-core.mjs +189 -5
- package/fesm2022/nexterajs-ui-core.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-dropdowns.mjs +314 -50
- package/fesm2022/nexterajs-ui-dropdowns.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-file-uploader.mjs +6 -3
- package/fesm2022/nexterajs-ui-file-uploader.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-forms.mjs +729 -370
- package/fesm2022/nexterajs-ui-forms.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-grid.mjs +1188 -208
- package/fesm2022/nexterajs-ui-grid.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-intl.mjs +15 -5
- package/fesm2022/nexterajs-ui-intl.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-notify.mjs +351 -0
- package/fesm2022/nexterajs-ui-notify.mjs.map +1 -0
- package/fesm2022/nexterajs-ui-pivot.mjs +146 -116
- package/fesm2022/nexterajs-ui-pivot.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-styling.mjs +568 -3
- package/fesm2022/nexterajs-ui-styling.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-tree-view.mjs +147 -18
- package/fesm2022/nexterajs-ui-tree-view.mjs.map +1 -1
- package/fesm2022/nexterajs-ui-validation.mjs +247 -92
- package/fesm2022/nexterajs-ui-validation.mjs.map +1 -1
- package/fesm2022/nexterajs-ui.mjs +1 -0
- package/fesm2022/nexterajs-ui.mjs.map +1 -1
- package/package.json +5 -1
- package/styles/_dropdown.scss +149 -0
- package/styles/_editor.scss +23 -4
- package/styles/_icons.scss +92 -0
- package/styles/_mixins.scss +104 -1
- package/styles/_scrollbar.scss +134 -0
- package/styles/_toast.scss +243 -0
- package/styles/_tokens.scss +48 -0
- package/styles/index.scss +4 -0
- package/types/nexterajs-ui-core.d.ts +142 -22
- package/types/nexterajs-ui-dropdowns.d.ts +145 -27
- package/types/nexterajs-ui-file-uploader.d.ts +4 -1
- package/types/nexterajs-ui-forms.d.ts +103 -19
- package/types/nexterajs-ui-grid.d.ts +445 -57
- package/types/nexterajs-ui-notify.d.ts +147 -0
- package/types/nexterajs-ui-pivot.d.ts +35 -22
- package/types/nexterajs-ui-styling.d.ts +163 -3
- package/types/nexterajs-ui-tree-view.d.ts +50 -1
- package/types/nexterajs-ui-validation.d.ts +94 -15
- package/types/nexterajs-ui.d.ts +1 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { OnDestroy, TemplateRef, InjectionToken, OnInit } from '@angular/core';
|
|
3
|
-
import { NxeFormControlBase } from '@nexterajs/ui/core';
|
|
3
|
+
import { NxeFormControlBase, NxeExpr } from '@nexterajs/ui/core';
|
|
4
4
|
import { Subject } from 'rxjs';
|
|
5
5
|
|
|
6
6
|
/** DevExtreme-shaped selection-changed payload (handlers read `selectedItem`). */
|
|
@@ -14,10 +14,11 @@ interface NxeSelectionChangedEvent {
|
|
|
14
14
|
*
|
|
15
15
|
* A signal-CVA single-select dropdown over a plain array (`[dataSource]`). It bakes in the app's
|
|
16
16
|
* 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
|
|
17
|
+
* `searchEnabled`), so the bound control value is the `valueExpr` field (a string code) and the
|
|
18
|
+
* field shows the `displayExpr` field. The clear button follows dx and is off unless asked for.
|
|
19
|
+
* Dropdown is a CDK overlay with an in-field search filter. Emits `(valueChange)` (the code) and
|
|
20
|
+
* `(onSelectionChanged)` (`{selectedItem}`). Hosts a projected `nxe-validator` via
|
|
21
|
+
* {@link NXE_VALIDATION_TARGET}.
|
|
21
22
|
*/
|
|
22
23
|
declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implements OnDestroy {
|
|
23
24
|
private readonly overlay;
|
|
@@ -28,17 +29,28 @@ declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implemen
|
|
|
28
29
|
/** The source array (plain JS array of `Lov`-shaped objects, or primitives). */
|
|
29
30
|
readonly dataSource: _angular_core.InputSignal<readonly unknown[]>;
|
|
30
31
|
/** 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<
|
|
32
|
+
readonly displayExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
33
|
+
readonly displayExpr: _angular_core.Signal<NxeExpr>;
|
|
33
34
|
/** 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<
|
|
35
|
+
readonly valueExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
36
|
+
readonly valueExpr: _angular_core.Signal<NxeExpr>;
|
|
36
37
|
/** Field matched while searching (DevExtreme default `lovName`). */
|
|
37
|
-
readonly searchExprInput: _angular_core.InputSignal<
|
|
38
|
-
|
|
38
|
+
readonly searchExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
39
|
+
/**
|
|
40
|
+
* dx searches by `displayExpr` when `searchExpr` is not given. Defaulting to the literal
|
|
41
|
+
* 'lovName' instead meant that any picker with a custom displayExpr searched a field its
|
|
42
|
+
* items do not have, and found nothing - silently, because an empty result looks like no
|
|
43
|
+
* match. Where displayExpr is the default this resolves to 'lovName' exactly as before.
|
|
44
|
+
*/
|
|
45
|
+
readonly searchExpr: _angular_core.Signal<NxeExpr>;
|
|
39
46
|
readonly searchEnabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
40
47
|
readonly searchEnabled: _angular_core.Signal<boolean>;
|
|
41
48
|
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
49
|
+
/**
|
|
50
|
+
* dx defaults `showClearButton` to false (m_text_editor.base.js). The library used to default it
|
|
51
|
+
* on, which gave every host that never asked for one a clear button dx would not show. An app
|
|
52
|
+
* that wants it everywhere says so once through `NXE_DEFAULT_OPTIONS.selectBox.showClearButton`.
|
|
53
|
+
*/
|
|
42
54
|
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
43
55
|
/** dx parity: dx-select-box shows its drop-down arrow unless showDropDownButton=false. */
|
|
44
56
|
readonly showDropDownButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
@@ -95,8 +107,10 @@ declare class NxeSelectBoxComponent extends NxeFormControlBase<unknown> implemen
|
|
|
95
107
|
* `nxe-tag-box` — drop-in replacement for DevExtreme `dx-tag-box` (multi-select sibling of
|
|
96
108
|
* `nxe-select-box`). The bound value is an **array of `valueExpr` keys** (`lovCode` strings).
|
|
97
109
|
* Bakes in the app's global `dxTagBox.defaultOptions` (display/search `lovName`, value `lovCode`,
|
|
98
|
-
* search +
|
|
99
|
-
*
|
|
110
|
+
* search + selection-controls on); the clear button follows dx and is off unless asked for.
|
|
111
|
+
* Selected items render as removable chips; with selection controls the dropdown shows a checkbox
|
|
112
|
+
* per row under a tri-state "Select All". Provides {@link NXE_VALIDATION_TARGET} for a projected
|
|
113
|
+
* `nxe-validator`.
|
|
100
114
|
*/
|
|
101
115
|
declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implements OnDestroy {
|
|
102
116
|
private readonly overlay;
|
|
@@ -104,16 +118,37 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
104
118
|
private readonly dropdownTemplate;
|
|
105
119
|
private readonly inputEl;
|
|
106
120
|
readonly dataSource: _angular_core.InputSignal<readonly unknown[]>;
|
|
107
|
-
readonly displayExprInput: _angular_core.InputSignal<
|
|
108
|
-
readonly displayExpr: _angular_core.Signal<
|
|
109
|
-
readonly valueExprInput: _angular_core.InputSignal<
|
|
110
|
-
readonly valueExpr: _angular_core.Signal<
|
|
111
|
-
readonly searchExprInput: _angular_core.InputSignal<
|
|
112
|
-
|
|
121
|
+
readonly displayExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
122
|
+
readonly displayExpr: _angular_core.Signal<NxeExpr>;
|
|
123
|
+
readonly valueExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
124
|
+
readonly valueExpr: _angular_core.Signal<NxeExpr>;
|
|
125
|
+
readonly searchExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
126
|
+
/**
|
|
127
|
+
* dx searches by `displayExpr` when `searchExpr` is not given. Defaulting to the literal
|
|
128
|
+
* 'lovName' instead meant that any picker with a custom displayExpr searched a field its
|
|
129
|
+
* items do not have, and found nothing - silently, because an empty result looks like no
|
|
130
|
+
* match. Where displayExpr is the default this resolves to 'lovName' exactly as before.
|
|
131
|
+
*/
|
|
132
|
+
readonly searchExpr: _angular_core.Signal<NxeExpr>;
|
|
113
133
|
readonly searchEnabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
114
134
|
readonly searchEnabled: _angular_core.Signal<boolean>;
|
|
115
135
|
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
136
|
+
/**
|
|
137
|
+
* dx defaults `showClearButton` to false (m_text_editor.base.js). The library used to default it
|
|
138
|
+
* on, which gave every host that never asked for one a clear button dx would not show. An app
|
|
139
|
+
* that wants it everywhere says so once through `NXE_DEFAULT_OPTIONS.tagBox.showClearButton`.
|
|
140
|
+
*/
|
|
116
141
|
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
142
|
+
readonly showSelectionControlsInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
143
|
+
/**
|
|
144
|
+
* dx `showSelectionControls`. On (the literal, and what every consumer site passes): a checkbox
|
|
145
|
+
* per row and a tri-state "Select All" row — dx switches its list to `selectionMode: 'all'`
|
|
146
|
+
* (m_tag_box.js `_listConfig`). Off: plain rows whose fill marks the selection
|
|
147
|
+
* (`selectionMode: 'multiple'`).
|
|
148
|
+
*/
|
|
149
|
+
readonly showSelectionControls: _angular_core.Signal<boolean>;
|
|
150
|
+
/** dx `selectAllText` — the label of the "Select All" row (dx: `dxList-selectAll`). */
|
|
151
|
+
readonly selectAllText: _angular_core.InputSignal<string>;
|
|
117
152
|
/** dx parity: dx-tag-box does NOT show a drop-down arrow unless showDropDownButton is set. */
|
|
118
153
|
readonly showDropDownButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
119
154
|
readonly showDropDownButton: _angular_core.Signal<boolean>;
|
|
@@ -136,10 +171,21 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
136
171
|
protected readonly hasValue: _angular_core.Signal<boolean>;
|
|
137
172
|
protected readonly filteredItems: _angular_core.Signal<readonly unknown[]>;
|
|
138
173
|
protected isSelected(item: unknown): boolean;
|
|
174
|
+
/**
|
|
175
|
+
* The "Select All" checkbox value over the rows currently listed — dx `selectAllMode: 'page'`,
|
|
176
|
+
* so a search narrows what it counts: `true` when every listed row is selected, `false` when
|
|
177
|
+
* none is, and `undefined` (indeterminate) in between.
|
|
178
|
+
*/
|
|
179
|
+
protected readonly selectAllState: _angular_core.Signal<boolean>;
|
|
139
180
|
protected onFieldMousedown(event: MouseEvent): void;
|
|
140
181
|
protected onSearchInput(event: Event): void;
|
|
141
182
|
protected onBlur(): void;
|
|
142
183
|
protected toggle(item: unknown, event: Event): void;
|
|
184
|
+
/**
|
|
185
|
+
* dx `_selectAllHandler`: anything short of all-selected selects every listed row (keeping
|
|
186
|
+
* selections the search hides); all-selected deselects the listed rows only.
|
|
187
|
+
*/
|
|
188
|
+
protected toggleAll(event: Event): void;
|
|
143
189
|
protected removeTag(item: unknown, event: Event): void;
|
|
144
190
|
protected onClear(event: Event): void;
|
|
145
191
|
protected onKeydown(event: KeyboardEvent): void;
|
|
@@ -147,7 +193,7 @@ declare class NxeTagBoxComponent extends NxeFormControlBase<unknown[]> implement
|
|
|
147
193
|
private close;
|
|
148
194
|
ngOnDestroy(): void;
|
|
149
195
|
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>;
|
|
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>;
|
|
151
197
|
}
|
|
152
198
|
|
|
153
199
|
/**
|
|
@@ -183,10 +229,10 @@ declare class NxeDropDownBoxComponent extends NxeFormControlBase<unknown> implem
|
|
|
183
229
|
private readonly options;
|
|
184
230
|
readonly dataSource: _angular_core.InputSignal<readonly unknown[]>;
|
|
185
231
|
/** Field name shown in the closed box; empty => the raw value string. */
|
|
186
|
-
readonly displayExprInput: _angular_core.InputSignal<
|
|
187
|
-
readonly displayExpr: _angular_core.Signal<
|
|
188
|
-
readonly valueExprInput: _angular_core.InputSignal<
|
|
189
|
-
readonly valueExpr: _angular_core.Signal<
|
|
232
|
+
readonly displayExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
233
|
+
readonly displayExpr: _angular_core.Signal<NxeExpr>;
|
|
234
|
+
readonly valueExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
235
|
+
readonly valueExpr: _angular_core.Signal<NxeExpr>;
|
|
190
236
|
readonly placeholderInput: _angular_core.InputSignal<string>;
|
|
191
237
|
readonly placeholder: _angular_core.Signal<string>;
|
|
192
238
|
/** DevExtreme `[dropDownOptions]` — accepted for parity (popup-class hook). */
|
|
@@ -260,6 +306,13 @@ declare class NxeListComponent {
|
|
|
260
306
|
id?: string;
|
|
261
307
|
class?: string;
|
|
262
308
|
}>;
|
|
309
|
+
/**
|
|
310
|
+
* dx `keyExpr` — the field identifying an item. Used for `@for` tracking, so a list whose
|
|
311
|
+
* items are replaced by equal-but-not-identical objects keeps its DOM instead of rebuilding
|
|
312
|
+
* every row. Falls back to the index when unset, which is the previous behaviour.
|
|
313
|
+
*/
|
|
314
|
+
readonly keyExpr: _angular_core.InputSignal<string>;
|
|
315
|
+
protected trackItem(item: unknown, index: number): unknown;
|
|
263
316
|
readonly onItemClick: _angular_core.OutputEmitterRef<NxeListItemClickEvent>;
|
|
264
317
|
protected readonly items: _angular_core.Signal<readonly unknown[]>;
|
|
265
318
|
protected readonly itemTemplateRef: _angular_core.Signal<_angular_core.TemplateRef<unknown>>;
|
|
@@ -268,7 +321,72 @@ declare class NxeListComponent {
|
|
|
268
321
|
protected isDisabled(item: unknown): boolean;
|
|
269
322
|
protected select(item: unknown): void;
|
|
270
323
|
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>;
|
|
324
|
+
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
|
+
}
|
|
326
|
+
|
|
327
|
+
/** How a typed query is matched against `searchExpr` (dx `searchMode`). */
|
|
328
|
+
type NxeAutoCompleteSearchMode = 'contains' | 'startswith' | 'equals';
|
|
329
|
+
/** DevExtreme-shaped selection payload, emitted when a suggestion is picked. */
|
|
330
|
+
interface NxeAutoCompleteSelectionChangedEvent {
|
|
331
|
+
selectedItem: unknown;
|
|
332
|
+
value: string | null;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* `nxe-auto-complete` — drop-in replacement for DevExtreme `dx-autocomplete`.
|
|
336
|
+
*
|
|
337
|
+
* The distinction from `nxe-select-box` is the value contract, and it is the whole reason this
|
|
338
|
+
* is a separate component: here the control value is the TEXT the user typed. A suggestion is a
|
|
339
|
+
* shortcut for typing, not a constraint on what may be entered, so free text survives and
|
|
340
|
+
* `valueExpr` only says which field of a picked item becomes that text.
|
|
341
|
+
*
|
|
342
|
+
* Deliberately not merged into the existing Material-shaped `nxe-autocomplete`: that one takes
|
|
343
|
+
* projected `nxe-option` children rather than a `[dataSource]`, so the two have incompatible
|
|
344
|
+
* content models and merging them would make every future change to one a risk to the other.
|
|
345
|
+
*/
|
|
346
|
+
declare class NxeAutoCompleteComponent extends NxeFormControlBase<string> implements OnDestroy {
|
|
347
|
+
private readonly overlay;
|
|
348
|
+
private readonly viewContainerRef;
|
|
349
|
+
private readonly dropdownTemplate;
|
|
350
|
+
private readonly inputEl;
|
|
351
|
+
readonly dataSource: _angular_core.InputSignal<readonly unknown[]>;
|
|
352
|
+
/** Field of a picked item that becomes the value (dx default `lovName`). */
|
|
353
|
+
readonly valueExpr: _angular_core.InputSignal<NxeExpr>;
|
|
354
|
+
/** Field matched against the query; defaults to {@link valueExpr}, as dx does. */
|
|
355
|
+
readonly searchExprInput: _angular_core.InputSignal<NxeExpr>;
|
|
356
|
+
readonly searchExpr: _angular_core.Signal<NxeExpr>;
|
|
357
|
+
readonly searchMode: _angular_core.InputSignal<NxeAutoCompleteSearchMode>;
|
|
358
|
+
/** Characters required before suggestions appear. dx defaults to 1; 0 shows all on focus. */
|
|
359
|
+
readonly minSearchLength: _angular_core.InputSignal<number>;
|
|
360
|
+
/** dx caps the suggestion list; beyond this the user is expected to keep typing. */
|
|
361
|
+
readonly maxItemCount: _angular_core.InputSignal<number>;
|
|
362
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
363
|
+
readonly showClearButton: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
364
|
+
readonly onSelectionChanged: _angular_core.OutputEmitterRef<NxeAutoCompleteSelectionChangedEvent>;
|
|
365
|
+
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
366
|
+
readonly open: _angular_core.WritableSignal<boolean>;
|
|
367
|
+
readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
368
|
+
readonly panelWidth: _angular_core.WritableSignal<number>;
|
|
369
|
+
/** dx `.instance` facade — `focus()` is what the autofocus directive calls. */
|
|
370
|
+
get instance(): this;
|
|
371
|
+
private overlayRef?;
|
|
372
|
+
private closeSub?;
|
|
373
|
+
private flipSub?;
|
|
374
|
+
protected readonly text: _angular_core.Signal<string>;
|
|
375
|
+
protected itemText(item: unknown): string;
|
|
376
|
+
private searchText;
|
|
377
|
+
protected readonly suggestions: _angular_core.Signal<unknown[]>;
|
|
378
|
+
protected onFieldInput(event: Event): void;
|
|
379
|
+
protected onFocus(): void;
|
|
380
|
+
protected onBlur(): void;
|
|
381
|
+
protected pick(item: unknown, event: Event): void;
|
|
382
|
+
protected onKeydown(event: KeyboardEvent): void;
|
|
383
|
+
protected onClear(event: Event): void;
|
|
384
|
+
focus(): void;
|
|
385
|
+
private openPanel;
|
|
386
|
+
private closePanel;
|
|
387
|
+
ngOnDestroy(): void;
|
|
388
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeAutoCompleteComponent, never>;
|
|
389
|
+
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
390
|
}
|
|
273
391
|
|
|
274
392
|
/** What an `nxe-option` needs from its parent autocomplete: a way to request close on select. */
|
|
@@ -330,5 +448,5 @@ declare class NxeOptionComponent {
|
|
|
330
448
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeOptionComponent, "nxe-option", ["nxeOption"], {}, {}, never, ["*"], true, never>;
|
|
331
449
|
}
|
|
332
450
|
|
|
333
|
-
export { NXE_AUTOCOMPLETE, NxeAutocompleteComponent, NxeAutocompleteTriggerDirective, NxeDropDownBoxComponent, NxeDropDownOptionsComponent, NxeListComponent, NxeOptionComponent, NxeSelectBoxComponent, NxeTagBoxComponent };
|
|
334
|
-
export type { NxeAutocompletePanel, NxeListItemClickEvent, NxeSelectionChangedEvent };
|
|
451
|
+
export { NXE_AUTOCOMPLETE, NxeAutoCompleteComponent, NxeAutocompleteComponent, NxeAutocompleteTriggerDirective, NxeDropDownBoxComponent, NxeDropDownOptionsComponent, NxeListComponent, NxeOptionComponent, NxeSelectBoxComponent, NxeTagBoxComponent };
|
|
452
|
+
export type { NxeAutoCompleteSearchMode, NxeAutoCompleteSelectionChangedEvent, NxeAutocompletePanel, NxeListItemClickEvent, NxeSelectionChangedEvent };
|
|
@@ -13,11 +13,14 @@ import { NxeValidationTarget } from '@nexterajs/ui/core';
|
|
|
13
13
|
* `required` rule works — invalid while no file is chosen.
|
|
14
14
|
*/
|
|
15
15
|
declare class NxeFileUploaderComponent implements NxeValidationTarget {
|
|
16
|
+
/** Shows the per-file cancel button — except in `useForm` mode, where dx never renders one
|
|
17
|
+
* (m_file_uploader.js `_getCancelButton` returns null for useForm before it reads this). */
|
|
16
18
|
readonly allowCanceling: _angular_core.InputSignal<boolean>;
|
|
17
19
|
readonly accept: _angular_core.InputSignal<string>;
|
|
18
20
|
readonly labelText: _angular_core.InputSignal<string>;
|
|
19
21
|
readonly selectButtonText: _angular_core.InputSignal<string>;
|
|
20
|
-
/** Accepted for parity; only `useForm` is used (no server upload by the widget).
|
|
22
|
+
/** Accepted for parity; only `useForm` is used (no server upload by the widget). It also
|
|
23
|
+
* gates the cancel button, which dx omits in `useForm` mode. */
|
|
21
24
|
readonly uploadMode: _angular_core.InputSignal<"instantly" | "useButtons" | "useForm">;
|
|
22
25
|
readonly multiple: _angular_core.InputSignal<boolean>;
|
|
23
26
|
readonly name: _angular_core.InputSignal<string>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { OnDestroy } from '@angular/core';
|
|
2
|
+
import { OnChanges, SimpleChanges, OnDestroy } from '@angular/core';
|
|
3
3
|
import { NxeValidationResult, NxeFormControlBase } from '@nexterajs/ui/core';
|
|
4
4
|
import { DateTime } from 'luxon';
|
|
5
5
|
import { NxeCalendarZoom, NxePeriodCell } from '@nexterajs/ui/intl';
|
|
@@ -30,21 +30,22 @@ interface NxeButtonClickEvent {
|
|
|
30
30
|
/**
|
|
31
31
|
* `nxe-button` — drop-in replacement for DevExtreme `dx-button`.
|
|
32
32
|
*
|
|
33
|
-
* The host element IS the button (mirrors DevExtreme's `
|
|
34
|
-
* styling classes and contains a single `.
|
|
35
|
-
* `.nxe-btn*` / `.
|
|
36
|
-
* shared `buttonLoading` directive working, which swaps `.
|
|
37
|
-
* spinner (`getElementsByClassName('
|
|
33
|
+
* The host element IS the button (mirrors DevExtreme's `nxe-button` DOM: the host carries the
|
|
34
|
+
* styling classes and contains a single `.nxe-button-content` child). This keeps every existing
|
|
35
|
+
* `.nxe-btn*` / `.nxe-button-content` global rule matching verbatim, and — critically — keeps the
|
|
36
|
+
* shared `buttonLoading` directive working, which swaps `.nxe-button-content` innerHTML for a
|
|
37
|
+
* spinner (`getElementsByClassName('nxe-button-content')[0]`).
|
|
38
38
|
*
|
|
39
39
|
* Content is projected (`<nxe-icon> + <span>`, the dominant pattern). The legacy `text`/`type`
|
|
40
|
-
* inputs render a `.
|
|
40
|
+
* inputs render a `.nxe-button-text` label for the ~25 attribute-styled buttons.
|
|
41
41
|
*
|
|
42
42
|
* `onClick` emits {@link NxeButtonClickEvent}; native `(click)` also fires (27 sites bind it).
|
|
43
43
|
*/
|
|
44
44
|
declare class NxeButtonComponent {
|
|
45
45
|
private readonly registry;
|
|
46
|
+
private readonly groupScope;
|
|
46
47
|
private readonly elementRef;
|
|
47
|
-
/** Legacy `text` label (rendered as `.
|
|
48
|
+
/** Legacy `text` label (rendered as `.nxe-button-text` when set, no projected content). */
|
|
48
49
|
readonly text: _angular_core.InputSignal<string>;
|
|
49
50
|
/** Style intent (`default`=blue, `success`=green, `danger`=red, `normal`=white). */
|
|
50
51
|
readonly type: _angular_core.InputSignal<NxeButtonType>;
|
|
@@ -55,8 +56,8 @@ declare class NxeButtonComponent {
|
|
|
55
56
|
/** DevExtreme parity input; only ever `false` in this codebase (suppresses tab focus). */
|
|
56
57
|
readonly focusStateEnabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
57
58
|
/**
|
|
58
|
-
* dx `icon` — renders `<i class="
|
|
59
|
-
* `.
|
|
59
|
+
* dx `icon` — renders `<i class="nxe-icon nxe-icon-NAME">` as the first child of
|
|
60
|
+
* `.nxe-button-content`, before any projected content. Projection is the dominant pattern
|
|
60
61
|
* here (a `mat-icon` plus a `span`), so the two must coexist rather than compete.
|
|
61
62
|
*/
|
|
62
63
|
readonly icon: _angular_core.InputSignal<string>;
|
|
@@ -83,6 +84,10 @@ type NxeTextBoxMode = 'text' | 'password' | 'email' | 'tel' | 'search';
|
|
|
83
84
|
* `[(ngModel)]`, one-way `[value]`, and `[readOnly]`. Like DevExtreme's default
|
|
84
85
|
* (`valueChangeEvent='change'`), the value commits on **blur** — not on every keystroke.
|
|
85
86
|
*
|
|
87
|
+
* `showClearButton` (dx default `false`) adds dx's clear area after the input while the field
|
|
88
|
+
* holds text and is neither read-only nor disabled; it sets the value to `''`, dx's own empty
|
|
89
|
+
* value for a text box, and focuses the input.
|
|
90
|
+
*
|
|
86
91
|
* It provides {@link NXE_VALIDATION_TARGET} so a projected `nxe-validator` can read its value
|
|
87
92
|
* and push back the invalid message, which renders as the red `.nxe-invalid-message` bubble.
|
|
88
93
|
*/
|
|
@@ -93,11 +98,30 @@ declare class NxeTextBoxComponent extends NxeFormControlBase<string> {
|
|
|
93
98
|
/** DevExtreme parity input; cosmetic, unused in behaviour. */
|
|
94
99
|
readonly hoverStateEnabledInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
95
100
|
readonly hoverStateEnabled: _angular_core.Signal<boolean>;
|
|
101
|
+
/** dx `showClearButton` — off by default, as in dx; `NXE_DEFAULT_OPTIONS.textBox` can turn it on app-wide. */
|
|
102
|
+
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
103
|
+
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
96
104
|
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
97
105
|
readonly displayValue: _angular_core.Signal<string>;
|
|
106
|
+
private readonly fieldRef;
|
|
107
|
+
/**
|
|
108
|
+
* The text in the field right now, typed or not. dx shows the clear button by the field's
|
|
109
|
+
* emptiness (`.dx-texteditor-empty`), which follows every keystroke, not the committed value.
|
|
110
|
+
*/
|
|
111
|
+
private readonly fieldText;
|
|
112
|
+
protected readonly clearButtonVisible: _angular_core.Signal<boolean>;
|
|
113
|
+
/** dx `valueChangeEvent: 'input'` — the search-as-you-type case. */
|
|
114
|
+
protected onTypedInput(event: Event): void;
|
|
115
|
+
/**
|
|
116
|
+
* dx `_clearValueHandler`: value back to `''`, then focus on the input. The field is emptied by
|
|
117
|
+
* hand as well — typed-but-uncommitted text over an already-empty value would otherwise survive,
|
|
118
|
+
* because the `[value]` binding has not changed.
|
|
119
|
+
*/
|
|
120
|
+
protected onClear(event: Event): void;
|
|
121
|
+
protected onTypedKeyup(event: Event): void;
|
|
98
122
|
protected onBlur(event: Event): void;
|
|
99
123
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeTextBoxComponent, never>;
|
|
100
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeTextBoxComponent, "nxe-text-box", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "placeholderInput": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hoverStateEnabledInput": { "alias": "hoverStateEnabled"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
124
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeTextBoxComponent, "nxe-text-box", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "placeholderInput": { "alias": "placeholder"; "required": false; "isSignal": true; }; "hoverStateEnabledInput": { "alias": "hoverStateEnabled"; "required": false; "isSignal": true; }; "showClearButtonInput": { "alias": "showClearButton"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
101
125
|
}
|
|
102
126
|
|
|
103
127
|
/**
|
|
@@ -115,6 +139,9 @@ declare class NxeTextAreaComponent extends NxeFormControlBase<string> {
|
|
|
115
139
|
readonly height: _angular_core.Signal<string | number>;
|
|
116
140
|
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
117
141
|
readonly displayValue: _angular_core.Signal<string>;
|
|
142
|
+
/** dx `valueChangeEvent: 'input'` — the search-as-you-type case. */
|
|
143
|
+
protected onTypedInput(event: Event): void;
|
|
144
|
+
protected onTypedKeyup(event: Event): void;
|
|
118
145
|
protected onBlur(event: Event): void;
|
|
119
146
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeTextAreaComponent, never>;
|
|
120
147
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeTextAreaComponent, "nxe-text-area", never, { "placeholderInput": { "alias": "placeholder"; "required": false; "isSignal": true; }; "heightInput": { "alias": "height"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
@@ -123,15 +150,33 @@ declare class NxeTextAreaComponent extends NxeFormControlBase<string> {
|
|
|
123
150
|
/**
|
|
124
151
|
* `nxe-check-box` — drop-in replacement for DevExtreme `dx-check-box`.
|
|
125
152
|
*
|
|
126
|
-
* A
|
|
127
|
-
*
|
|
128
|
-
* `
|
|
129
|
-
*
|
|
153
|
+
* A signal-CVA editor (extends {@link NxeFormControlBase}) over `true` / `false` / `null`. As in
|
|
154
|
+
* dx, a `null` value is the indeterminate state: the box shows a 12px square and reports
|
|
155
|
+
* `aria-checked="mixed"`. That is what a `new FormControl()` (or a `reset()`) looks like, and what
|
|
156
|
+
* `[value]="null"` looks like; an unbound box starts unchecked, like dx's default `false`. A click
|
|
157
|
+
* or Space always lands on `true` or `false` — there is no `enableThreeStateBehavior` cycling back
|
|
158
|
+
* to `null`.
|
|
159
|
+
*
|
|
160
|
+
* Supports `formControlName`/`[(ngModel)]`/`[(value)]`/`[value]`, `[readOnly]`, `[disabled]`, an
|
|
161
|
+
* inline `text` label, `(onValueChanged)` (`{value}`) and `(valueChange)` (raw value). A read-only
|
|
162
|
+
* box stays focusable (tabindex 0) and still shows hover and focus, as in dx; it just never
|
|
163
|
+
* toggles. Provides {@link NXE_VALIDATION_TARGET} for a projected `nxe-validator` (a `required`
|
|
130
164
|
* rule is invalid while unchecked, matching DevExtreme's RequiredRule treating `false` as empty).
|
|
131
165
|
*/
|
|
132
|
-
declare class NxeCheckBoxComponent extends NxeFormControlBase<boolean> {
|
|
166
|
+
declare class NxeCheckBoxComponent extends NxeFormControlBase<boolean> implements OnChanges {
|
|
133
167
|
/** Inline label rendered next to the box. */
|
|
134
168
|
readonly text: _angular_core.InputSignal<string>;
|
|
169
|
+
/**
|
|
170
|
+
* Whether a value has been handed in at all — by the forms API or a `[value]` binding.
|
|
171
|
+
*
|
|
172
|
+
* The base class starts `value` at `null`, which is also the indeterminate value, so `null`
|
|
173
|
+
* alone cannot tell "given null" from "given nothing". dx can: its unset value is `false`.
|
|
174
|
+
*/
|
|
175
|
+
private readonly valueProvided;
|
|
176
|
+
/** dx `.dx-checkbox-indeterminate`: the value was given, and it is `null`. */
|
|
177
|
+
readonly indeterminate: _angular_core.Signal<boolean>;
|
|
178
|
+
writeValue(value: boolean | null): void;
|
|
179
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
135
180
|
protected toggle(event: Event): void;
|
|
136
181
|
protected onSpace(event: Event): void;
|
|
137
182
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeCheckBoxComponent, never>;
|
|
@@ -148,6 +193,10 @@ declare class NxeCheckBoxComponent extends NxeFormControlBase<boolean> {
|
|
|
148
193
|
*
|
|
149
194
|
* Supports `formControlName`/`[(ngModel)]`/`[(value)]`/`[value]`, `[readOnly]`, `[min]`/`[max]`,
|
|
150
195
|
* `format` (string LDML pattern), `(valueChange)` (numeric), and a projected `nxe-validator`.
|
|
196
|
+
*
|
|
197
|
+
* `showClearButton` (dx default `false`) adds dx's clear area after the input while the field
|
|
198
|
+
* holds text and is neither read-only nor disabled; it sets the value to `null`, as dx's
|
|
199
|
+
* `clear()` does for a number box, and focuses the input.
|
|
151
200
|
*/
|
|
152
201
|
declare class NxeNumberBoxComponent extends NxeFormControlBase<number> {
|
|
153
202
|
/** LDML format pattern (e.g. `#,##0.00`); empty = raw number. */
|
|
@@ -155,14 +204,27 @@ declare class NxeNumberBoxComponent extends NxeFormControlBase<number> {
|
|
|
155
204
|
readonly format: _angular_core.Signal<string>;
|
|
156
205
|
readonly min: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
157
206
|
readonly max: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
207
|
+
/** dx `showClearButton` — off by default, as in dx; `NXE_DEFAULT_OPTIONS.numberBox` can turn it on app-wide. */
|
|
208
|
+
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
209
|
+
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
158
210
|
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
159
211
|
private readonly parsedFormat;
|
|
212
|
+
private readonly fieldRef;
|
|
160
213
|
/** Locale characters, configured once by the application. Defaults to en-US. */
|
|
161
214
|
private readonly separators;
|
|
162
215
|
readonly displayValue: _angular_core.Signal<string>;
|
|
216
|
+
/** The text in the field right now; dx shows the clear button by the field's emptiness. */
|
|
217
|
+
private readonly fieldText;
|
|
218
|
+
protected readonly clearButtonVisible: _angular_core.Signal<boolean>;
|
|
219
|
+
protected onFieldInput(event: Event): void;
|
|
220
|
+
/**
|
|
221
|
+
* dx `_clearValueHandler`: value to `null`, then focus on the input. The field is emptied by hand
|
|
222
|
+
* too, for typed-but-uncommitted text over a value that was already `null`.
|
|
223
|
+
*/
|
|
224
|
+
protected onClear(event: Event): void;
|
|
163
225
|
protected onBlur(event: Event): void;
|
|
164
226
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeNumberBoxComponent, never>;
|
|
165
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeNumberBoxComponent, "nxe-number-box", never, { "formatInput": { "alias": "format"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
227
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeNumberBoxComponent, "nxe-number-box", never, { "formatInput": { "alias": "format"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "showClearButtonInput": { "alias": "showClearButton"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
166
228
|
}
|
|
167
229
|
|
|
168
230
|
/** DevExtreme date-box `type`. */
|
|
@@ -175,6 +237,15 @@ type NxeDateBoxType = 'date' | 'datetime' | 'time';
|
|
|
175
237
|
* typeable (parsed on blur per `displayFormat`) and opens a CDK-overlay calendar from the icon
|
|
176
238
|
* button. Built on Luxon. Default `displayFormat` is `dd-MMM-yyyy`. Hosts a projected
|
|
177
239
|
* `nxe-validator` via {@link NXE_VALIDATION_TARGET}.
|
|
240
|
+
*
|
|
241
|
+
* `showClearButton` (dx default `false`) adds dx's clear area between the input and the calendar
|
|
242
|
+
* button while the field holds text and is neither read-only nor disabled; it sets the value to
|
|
243
|
+
* `null` and focuses the input.
|
|
244
|
+
*
|
|
245
|
+
* The button and calendar glyphs are drawn in an 18-unit viewBox (1 unit = 1px) to the ink measured
|
|
246
|
+
* off dx's `event` (`date`), `eventall` (`datetime`) and `clock` (`time`) glyphs and its chevrons,
|
|
247
|
+
* each laid out from those metrics in rects, stroked rects and circles, and straight-edged polygons;
|
|
248
|
+
* the templates state each construction.
|
|
178
249
|
*/
|
|
179
250
|
declare class NxeDateBoxComponent extends NxeFormControlBase<string> implements OnDestroy {
|
|
180
251
|
private readonly overlay;
|
|
@@ -187,6 +258,9 @@ declare class NxeDateBoxComponent extends NxeFormControlBase<string> implements
|
|
|
187
258
|
/** DevExtreme `[min]`/`[max]` bounds: calendar days outside are disabled, typed values clamp. */
|
|
188
259
|
readonly min: _angular_core.InputSignal<string | Date>;
|
|
189
260
|
readonly max: _angular_core.InputSignal<string | Date>;
|
|
261
|
+
/** dx `showClearButton` — off by default, as in dx; `NXE_DEFAULT_OPTIONS.dateBox` can turn it on app-wide. */
|
|
262
|
+
readonly showClearButtonInput: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
263
|
+
readonly showClearButton: _angular_core.Signal<boolean>;
|
|
190
264
|
readonly focused: _angular_core.WritableSignal<boolean>;
|
|
191
265
|
readonly opened: _angular_core.WritableSignal<boolean>;
|
|
192
266
|
readonly viewMonth: _angular_core.WritableSignal<DateTime<boolean>>;
|
|
@@ -199,6 +273,9 @@ declare class NxeDateBoxComponent extends NxeFormControlBase<string> implements
|
|
|
199
273
|
readonly effectivePlaceholder: _angular_core.Signal<string>;
|
|
200
274
|
private readonly selected;
|
|
201
275
|
readonly displayValue: _angular_core.Signal<string>;
|
|
276
|
+
/** The text in the field right now; dx shows the clear button by the field's emptiness. */
|
|
277
|
+
private readonly fieldText;
|
|
278
|
+
protected readonly clearButtonVisible: _angular_core.Signal<boolean>;
|
|
202
279
|
readonly weeks: _angular_core.Signal<DateTime<boolean>[][]>;
|
|
203
280
|
/** Two-digit hour/minute for the popup's time strip; blank when nothing is selected. */
|
|
204
281
|
readonly hourText: _angular_core.Signal<string>;
|
|
@@ -231,6 +308,13 @@ declare class NxeDateBoxComponent extends NxeFormControlBase<string> implements
|
|
|
231
308
|
disabled: boolean;
|
|
232
309
|
}): void;
|
|
233
310
|
protected onButtonMousedown(event: Event): void;
|
|
311
|
+
protected onFieldInput(event: Event): void;
|
|
312
|
+
/**
|
|
313
|
+
* dx `_clearValueHandler`: value to `null` (dx's `clear()` for a date box), then focus on the
|
|
314
|
+
* input. `syncField` repaints the field, so typed-but-uncommitted text over a value that was
|
|
315
|
+
* already `null` goes too.
|
|
316
|
+
*/
|
|
317
|
+
protected onClear(event: Event): void;
|
|
234
318
|
protected onFocus(event: Event): void;
|
|
235
319
|
/**
|
|
236
320
|
* Commit what the user TYPED — and nothing when they typed nothing.
|
|
@@ -269,13 +353,13 @@ declare class NxeDateBoxComponent extends NxeFormControlBase<string> implements
|
|
|
269
353
|
protected close(): void;
|
|
270
354
|
ngOnDestroy(): void;
|
|
271
355
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NxeDateBoxComponent, never>;
|
|
272
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeDateBoxComponent, "nxe-date-box", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
356
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NxeDateBoxComponent, "nxe-date-box", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "showClearButtonInput": { "alias": "showClearButton"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
273
357
|
}
|
|
274
358
|
|
|
275
359
|
/**
|
|
276
360
|
* `nxe-scroll-view` — drop-in replacement for DevExtreme `dx-scroll-view`.
|
|
277
361
|
*
|
|
278
|
-
* In this app `
|
|
362
|
+
* In this app `nxe-scroll-view` is used purely as a dumb scroll container: no `@ViewChild`, no
|
|
279
363
|
* `.instance` methods, no events (see survey). Every live tag is the same literal triple
|
|
280
364
|
* `[scrollByContent]="true" [scrollByThumb]="true" [showScrollbar]="'onScroll'"`. So this is a
|
|
281
365
|
* styled `overflow:auto` wrapper that projects its content inside a `.nxe-scrollview-content`
|