@arsedizioni/ars-utils 22.5.38 → 22.5.40
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 +185 -179
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +44 -43
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-core.mjs +48 -48
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +42 -42
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -15
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs +118 -0
- package/fesm2022/arsedizioni-ars-utils-ui.controls.date.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +17 -448
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs +368 -0
- package/fesm2022/arsedizioni-ars-utils-ui.controls.tree.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +18 -18
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +10 -10
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +61 -61
- package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +15 -5
- package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +9 -9
- package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +9 -9
- package/package.json +9 -1
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +2 -1
- package/types/arsedizioni-ars-utils-ui.controls.d.ts +2 -179
- package/types/arsedizioni-ars-utils-ui.controls.date.d.ts +49 -0
- package/types/arsedizioni-ars-utils-ui.controls.tree.d.ts +136 -0
- package/types/arsedizioni-ars-utils-ui.navigation.d.ts +11 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { OnDestroy } from '@angular/core';
|
|
3
3
|
import { ControlValueAccessor, NgControl } from '@angular/forms';
|
|
4
|
-
import { NameValueItem
|
|
4
|
+
import { NameValueItem } from '@arsedizioni/ars-utils/core';
|
|
5
5
|
import * as _angular_forms_signals from '@angular/forms/signals';
|
|
6
6
|
|
|
7
7
|
declare class ButtonSelectorComponent implements OnDestroy, ControlValueAccessor {
|
|
@@ -277,182 +277,5 @@ declare class ChipsSelectorComponent implements OnDestroy, ControlValueAccessor
|
|
|
277
277
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChipsSelectorComponent, "chips-selector", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "collapsedWidth": { "alias": "collapsedWidth"; "required": false; "isSignal": true; }; "collapsedDisplayMode": { "alias": "collapsedDisplayMode"; "required": false; "isSignal": true; }; "collapseAt": { "alias": "collapseAt"; "required": false; "isSignal": true; }; "collapseAtContainer": { "alias": "collapseAtContainer"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "mustSelect": { "alias": "mustSelect"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "stacked": { "alias": "stacked"; "required": false; "isSignal": true; }; "padAt": { "alias": "padAt"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "changed": "changed"; }, never, never, true, never>;
|
|
278
278
|
}
|
|
279
279
|
|
|
280
|
-
|
|
281
|
-
/** Nested tree data to display. */
|
|
282
|
-
readonly tree: _angular_core.InputSignal<INode[]>;
|
|
283
|
-
/** Currently selected node ids. Supports two-way binding via [(selection)]. */
|
|
284
|
-
readonly selection: _angular_core.ModelSignal<string[]>;
|
|
285
|
-
/** When true, checkboxes and chip remove buttons are disabled (mirrors Material convention). */
|
|
286
|
-
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
287
|
-
/** Description to display when no selection is made. */
|
|
288
|
-
readonly descriptionEmpty: _angular_core.InputSignal<string>;
|
|
289
|
-
/** Maximum number of tree levels to display (default: 3). */
|
|
290
|
-
readonly maxDepth: _angular_core.InputSignal<number>;
|
|
291
|
-
/**
|
|
292
|
-
* List of node IDs at depth >= maxDepth that unlock selection for themselves
|
|
293
|
-
* and all their descendants, regardless of depth.
|
|
294
|
-
*/
|
|
295
|
-
readonly maxDepthOverrides: _angular_core.InputSignal<string[]>;
|
|
296
|
-
/**
|
|
297
|
-
* Number of levels to auto-expand on load.
|
|
298
|
-
* 0 or undefined = only top level visible (no expansion);
|
|
299
|
-
* 1 = expand depth-0 nodes; 2 = expand depth-0 and depth-1 nodes; etc.
|
|
300
|
-
* Must be less than maxDepth.
|
|
301
|
-
*/
|
|
302
|
-
readonly minDepth: _angular_core.InputSignal<number>;
|
|
303
|
-
/**
|
|
304
|
-
* Emits the count of visible selected nodes whenever the selection changes.
|
|
305
|
-
* Emits 0 when nothing is selected (meaning all items are implicitly included).
|
|
306
|
-
*/
|
|
307
|
-
readonly selectionCount: _angular_core.OutputEmitterRef<number>;
|
|
308
|
-
/** Emits void whenever the user changes the selection (toggle, remove, clear). */
|
|
309
|
-
readonly changed: _angular_core.OutputEmitterRef<void>;
|
|
310
|
-
private readonly _treeRef;
|
|
311
|
-
private readonly _elRef;
|
|
312
|
-
/**
|
|
313
|
-
* Set of all node IDs selectable via overrides: each listed root and all its descendants.
|
|
314
|
-
* Recomputed whenever the tree data or the override list changes.
|
|
315
|
-
*/
|
|
316
|
-
private readonly _overrideSubtreeSet;
|
|
317
|
-
/** All three maps rebuilt lazily as a single computed whenever taxonomy changes. */
|
|
318
|
-
private readonly _maps;
|
|
319
|
-
/** O(1) set of selected ids, rebuilt only when selection changes. */
|
|
320
|
-
private readonly _selectedSet;
|
|
321
|
-
/** True when at least one node is explicitly selected. */
|
|
322
|
-
protected readonly hasSelection: _angular_core.Signal<boolean>;
|
|
323
|
-
/** Count of selected nodes within selectable levels (depth < maxDepth or in overrides), shown in the tab label. */
|
|
324
|
-
protected readonly selectedVisibleCount: _angular_core.Signal<number>;
|
|
325
|
-
readonly treeChildrenAccessor: (node: INode) => INode[];
|
|
326
|
-
readonly hasChild: (_: number, node: INode) => boolean;
|
|
327
|
-
/** Returns true when the node can be selected: depth < maxDepth or explicitly listed in maxDepthOverrides. */
|
|
328
|
-
protected isSelectable(node: INode): boolean;
|
|
329
|
-
private _isSelectableNode;
|
|
330
|
-
/** Current filter text. */
|
|
331
|
-
protected readonly filterText: _angular_core.WritableSignal<string>;
|
|
332
|
-
/** Root signal form bound to the filter text input. */
|
|
333
|
-
protected readonly filterForm: _angular_forms_signals.FieldTree<string, string | number, "writable">;
|
|
334
|
-
/** Nodes matching the current filter text, in nodeMap iteration order. */
|
|
335
|
-
protected readonly filteredItems: _angular_core.WritableSignal<INode[]>;
|
|
336
|
-
/** Index of the currently highlighted filtered node (-1 = none). */
|
|
337
|
-
protected readonly filterIndex: _angular_core.WritableSignal<number>;
|
|
338
|
-
/** The currently highlighted filtered node, or null. */
|
|
339
|
-
protected readonly filteredNode: _angular_core.Signal<INode>;
|
|
340
|
-
constructor();
|
|
341
|
-
/** Expands all visible nodes in the tree. */
|
|
342
|
-
protected expandAll(): void;
|
|
343
|
-
/** Collapses all nodes in the tree. */
|
|
344
|
-
protected collapseAll(): void;
|
|
345
|
-
/** Clears the entire selection. */
|
|
346
|
-
protected clearAll(): void;
|
|
347
|
-
/** Searches nodes by text and moves to the first match. */
|
|
348
|
-
protected doFilter(): void;
|
|
349
|
-
/** Clears the filter and restores the original tree state. */
|
|
350
|
-
protected clearFilter(): void;
|
|
351
|
-
/** Moves to the next matching node, cycling back to the first. */
|
|
352
|
-
protected nextFiltered(): void;
|
|
353
|
-
/** Returns true when the node is the currently highlighted filter match. */
|
|
354
|
-
protected isFilteredNode(node: INode): boolean;
|
|
355
|
-
/** Expands ancestors of the target node and scrolls it into view. */
|
|
356
|
-
private _scrollToFiltered;
|
|
357
|
-
/**
|
|
358
|
-
* Returns true when the node is in the active selection.
|
|
359
|
-
* @param node - tree node to check
|
|
360
|
-
* @returns true if selected
|
|
361
|
-
*/
|
|
362
|
-
protected isSelected(node: INode): boolean;
|
|
363
|
-
/**
|
|
364
|
-
* Returns true when a subset (but not all) of the node's descendants are selected,
|
|
365
|
-
* producing the indeterminate checkbox state.
|
|
366
|
-
* @param node - tree node to evaluate
|
|
367
|
-
* @returns true if the node is in a partial-selection (indeterminate) state
|
|
368
|
-
*/
|
|
369
|
-
protected isIndeterminate(node: INode): boolean;
|
|
370
|
-
/**
|
|
371
|
-
* Toggles the node and all its descendants; then syncs the ancestor chain.
|
|
372
|
-
* @param node - the node that was clicked
|
|
373
|
-
*/
|
|
374
|
-
protected toggleNode(node: INode): void;
|
|
375
|
-
/**
|
|
376
|
-
* Deselects the node and all its descendants. Called by the chip remove button.
|
|
377
|
-
* @param node - the node to remove from the selection
|
|
378
|
-
*/
|
|
379
|
-
protected removeNode(node: INode): void;
|
|
380
|
-
/**
|
|
381
|
-
* Returns the INode for the given id, or undefined if not found.
|
|
382
|
-
* @param id - node id to look up
|
|
383
|
-
* @returns the matching INode
|
|
384
|
-
*/
|
|
385
|
-
protected nodeById(id: string): INode | undefined;
|
|
386
|
-
/**
|
|
387
|
-
* Returns true when the node at the given id is within the visible depth range
|
|
388
|
-
* and should appear in the chip list.
|
|
389
|
-
* @param id - node id to check
|
|
390
|
-
* @returns true if the node depth is less than maxDepth
|
|
391
|
-
*/
|
|
392
|
-
protected isChipVisible(id: string): boolean;
|
|
393
|
-
/**
|
|
394
|
-
* Returns only the selectable descendants of node (depth < maxDepth or in overrides),
|
|
395
|
-
* used for indeterminate state and parent auto-selection logic.
|
|
396
|
-
* @param node - root of the subtree to traverse
|
|
397
|
-
* @returns flat array of selectable descendant INodes
|
|
398
|
-
*/
|
|
399
|
-
private _getSelectableDescendants;
|
|
400
|
-
/**
|
|
401
|
-
* Walks up the ancestor chain from node, selecting a parent only when all
|
|
402
|
-
* its descendants are in the set, deselecting it otherwise.
|
|
403
|
-
* @param node - starting node for the upward traversal
|
|
404
|
-
* @param set - mutable selection set updated in place
|
|
405
|
-
*/
|
|
406
|
-
private _syncParentsInSet;
|
|
407
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreePickerComponent, never>;
|
|
408
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreePickerComponent, "tree-picker", never, { "tree": { "alias": "tree"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "descriptionEmpty": { "alias": "descriptionEmpty"; "required": false; "isSignal": true; }; "maxDepth": { "alias": "maxDepth"; "required": false; "isSignal": true; }; "maxDepthOverrides": { "alias": "maxDepthOverrides"; "required": false; "isSignal": true; }; "minDepth": { "alias": "minDepth"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "selectionCount": "selectionCount"; "changed": "changed"; }, never, never, true, never>;
|
|
409
|
-
}
|
|
410
|
-
|
|
411
|
-
/**
|
|
412
|
-
* A blank calendar header that hides the month/year navigation controls.
|
|
413
|
-
* Used when an inline calendar should render without any navigation UI.
|
|
414
|
-
*/
|
|
415
|
-
declare class CalendarEmptyHeader<D> {
|
|
416
|
-
private readonly destroyRef;
|
|
417
|
-
private readonly calendar;
|
|
418
|
-
private readonly changeDetector;
|
|
419
|
-
constructor();
|
|
420
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CalendarEmptyHeader<any>, never>;
|
|
421
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CalendarEmptyHeader<any>, "ng-component", never, {}, {}, never, never, true, never>;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
/**
|
|
425
|
-
* Works around a MatDatepicker/Signal Forms interop bug.
|
|
426
|
-
*
|
|
427
|
-
* `MatDatepickerInputBase._onInput()` only notifies its registered validator-change
|
|
428
|
-
* callback from the branch it does not take when the parsed date is null. Signal
|
|
429
|
-
* Forms recomputes CVA parse errors from that callback or from a model value
|
|
430
|
-
* change, and neither happens while the user erases an unparseable date one
|
|
431
|
-
* character at a time (the model is already `null`, so the signal write is a
|
|
432
|
-
* no-op). The stale `matDatepickerParse` error therefore survives on an empty
|
|
433
|
-
* field. Notifying on every keystroke re-runs the datepicker validators.
|
|
434
|
-
*/
|
|
435
|
-
declare class MatDatepickerParseErrorFixDirective {
|
|
436
|
-
private readonly singleDate;
|
|
437
|
-
private readonly startDate;
|
|
438
|
-
private readonly endDate;
|
|
439
|
-
/**
|
|
440
|
-
* Re-runs the datepicker validators after Material has updated its internal
|
|
441
|
-
* parse flag.
|
|
442
|
-
*
|
|
443
|
-
* @returns Nothing.
|
|
444
|
-
*/
|
|
445
|
-
protected onInput(): void;
|
|
446
|
-
/**
|
|
447
|
-
* Notifies the validator-change callback of this input and, for range parts,
|
|
448
|
-
* of the sibling input as well.
|
|
449
|
-
*
|
|
450
|
-
* @returns Nothing.
|
|
451
|
-
*/
|
|
452
|
-
private revalidate;
|
|
453
|
-
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MatDatepickerParseErrorFixDirective, never>;
|
|
454
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MatDatepickerParseErrorFixDirective, "input[matDatepicker], input[matStartDate], input[matEndDate]", never, {}, {}, never, never, true, never>;
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
export { ButtonSelectorComponent, ButtonToggleComponent, CalendarEmptyHeader, ChipsSelectorComponent, MatDatepickerParseErrorFixDirective, TreePickerComponent };
|
|
280
|
+
export { ButtonSelectorComponent, ButtonToggleComponent, ChipsSelectorComponent };
|
|
458
281
|
export type { ButtonToggleInfo };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A blank calendar header that hides the month/year navigation controls.
|
|
5
|
+
* Used when an inline calendar should render without any navigation UI.
|
|
6
|
+
*/
|
|
7
|
+
declare class CalendarEmptyHeader<D> {
|
|
8
|
+
private readonly destroyRef;
|
|
9
|
+
private readonly calendar;
|
|
10
|
+
private readonly changeDetector;
|
|
11
|
+
constructor();
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CalendarEmptyHeader<any>, never>;
|
|
13
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<CalendarEmptyHeader<any>, "ng-component", never, {}, {}, never, never, true, never>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Works around a MatDatepicker/Signal Forms interop bug.
|
|
18
|
+
*
|
|
19
|
+
* `MatDatepickerInputBase._onInput()` only notifies its registered validator-change
|
|
20
|
+
* callback from the branch it does not take when the parsed date is null. Signal
|
|
21
|
+
* Forms recomputes CVA parse errors from that callback or from a model value
|
|
22
|
+
* change, and neither happens while the user erases an unparseable date one
|
|
23
|
+
* character at a time (the model is already `null`, so the signal write is a
|
|
24
|
+
* no-op). The stale `matDatepickerParse` error therefore survives on an empty
|
|
25
|
+
* field. Notifying on every keystroke re-runs the datepicker validators.
|
|
26
|
+
*/
|
|
27
|
+
declare class MatDatepickerParseErrorFixDirective {
|
|
28
|
+
private readonly singleDate;
|
|
29
|
+
private readonly startDate;
|
|
30
|
+
private readonly endDate;
|
|
31
|
+
/**
|
|
32
|
+
* Re-runs the datepicker validators after Material has updated its internal
|
|
33
|
+
* parse flag.
|
|
34
|
+
*
|
|
35
|
+
* @returns Nothing.
|
|
36
|
+
*/
|
|
37
|
+
protected onInput(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Notifies the validator-change callback of this input and, for range parts,
|
|
40
|
+
* of the sibling input as well.
|
|
41
|
+
*
|
|
42
|
+
* @returns Nothing.
|
|
43
|
+
*/
|
|
44
|
+
private revalidate;
|
|
45
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MatDatepickerParseErrorFixDirective, never>;
|
|
46
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<MatDatepickerParseErrorFixDirective, "input[matDatepicker], input[matStartDate], input[matEndDate]", never, {}, {}, never, never, true, never>;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export { CalendarEmptyHeader, MatDatepickerParseErrorFixDirective };
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import * as _angular_forms_signals from '@angular/forms/signals';
|
|
2
|
+
import * as _angular_core from '@angular/core';
|
|
3
|
+
import { INode } from '@arsedizioni/ars-utils/core';
|
|
4
|
+
|
|
5
|
+
declare class TreePickerComponent {
|
|
6
|
+
/** Nested tree data to display. */
|
|
7
|
+
readonly tree: _angular_core.InputSignal<INode[]>;
|
|
8
|
+
/** Currently selected node ids. Supports two-way binding via [(selection)]. */
|
|
9
|
+
readonly selection: _angular_core.ModelSignal<string[]>;
|
|
10
|
+
/** When true, checkboxes and chip remove buttons are disabled (mirrors Material convention). */
|
|
11
|
+
readonly disabled: _angular_core.InputSignal<boolean>;
|
|
12
|
+
/** Description to display when no selection is made. */
|
|
13
|
+
readonly descriptionEmpty: _angular_core.InputSignal<string>;
|
|
14
|
+
/** Maximum number of tree levels to display (default: 3). */
|
|
15
|
+
readonly maxDepth: _angular_core.InputSignal<number>;
|
|
16
|
+
/**
|
|
17
|
+
* List of node IDs at depth >= maxDepth that unlock selection for themselves
|
|
18
|
+
* and all their descendants, regardless of depth.
|
|
19
|
+
*/
|
|
20
|
+
readonly maxDepthOverrides: _angular_core.InputSignal<string[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Number of levels to auto-expand on load.
|
|
23
|
+
* 0 or undefined = only top level visible (no expansion);
|
|
24
|
+
* 1 = expand depth-0 nodes; 2 = expand depth-0 and depth-1 nodes; etc.
|
|
25
|
+
* Must be less than maxDepth.
|
|
26
|
+
*/
|
|
27
|
+
readonly minDepth: _angular_core.InputSignal<number>;
|
|
28
|
+
/**
|
|
29
|
+
* Emits the count of visible selected nodes whenever the selection changes.
|
|
30
|
+
* Emits 0 when nothing is selected (meaning all items are implicitly included).
|
|
31
|
+
*/
|
|
32
|
+
readonly selectionCount: _angular_core.OutputEmitterRef<number>;
|
|
33
|
+
/** Emits void whenever the user changes the selection (toggle, remove, clear). */
|
|
34
|
+
readonly changed: _angular_core.OutputEmitterRef<void>;
|
|
35
|
+
private readonly _treeRef;
|
|
36
|
+
private readonly _elRef;
|
|
37
|
+
/**
|
|
38
|
+
* Set of all node IDs selectable via overrides: each listed root and all its descendants.
|
|
39
|
+
* Recomputed whenever the tree data or the override list changes.
|
|
40
|
+
*/
|
|
41
|
+
private readonly _overrideSubtreeSet;
|
|
42
|
+
/** All three maps rebuilt lazily as a single computed whenever taxonomy changes. */
|
|
43
|
+
private readonly _maps;
|
|
44
|
+
/** O(1) set of selected ids, rebuilt only when selection changes. */
|
|
45
|
+
private readonly _selectedSet;
|
|
46
|
+
/** True when at least one node is explicitly selected. */
|
|
47
|
+
protected readonly hasSelection: _angular_core.Signal<boolean>;
|
|
48
|
+
/** Count of selected nodes within selectable levels (depth < maxDepth or in overrides), shown in the tab label. */
|
|
49
|
+
protected readonly selectedVisibleCount: _angular_core.Signal<number>;
|
|
50
|
+
readonly treeChildrenAccessor: (node: INode) => INode[];
|
|
51
|
+
readonly hasChild: (_: number, node: INode) => boolean;
|
|
52
|
+
/** Returns true when the node can be selected: depth < maxDepth or explicitly listed in maxDepthOverrides. */
|
|
53
|
+
protected isSelectable(node: INode): boolean;
|
|
54
|
+
private _isSelectableNode;
|
|
55
|
+
/** Current filter text. */
|
|
56
|
+
protected readonly filterText: _angular_core.WritableSignal<string>;
|
|
57
|
+
/** Root signal form bound to the filter text input. */
|
|
58
|
+
protected readonly filterForm: _angular_forms_signals.FieldTree<string, string | number, "writable">;
|
|
59
|
+
/** Nodes matching the current filter text, in nodeMap iteration order. */
|
|
60
|
+
protected readonly filteredItems: _angular_core.WritableSignal<INode[]>;
|
|
61
|
+
/** Index of the currently highlighted filtered node (-1 = none). */
|
|
62
|
+
protected readonly filterIndex: _angular_core.WritableSignal<number>;
|
|
63
|
+
/** The currently highlighted filtered node, or null. */
|
|
64
|
+
protected readonly filteredNode: _angular_core.Signal<INode>;
|
|
65
|
+
constructor();
|
|
66
|
+
/** Expands all visible nodes in the tree. */
|
|
67
|
+
protected expandAll(): void;
|
|
68
|
+
/** Collapses all nodes in the tree. */
|
|
69
|
+
protected collapseAll(): void;
|
|
70
|
+
/** Clears the entire selection. */
|
|
71
|
+
protected clearAll(): void;
|
|
72
|
+
/** Searches nodes by text and moves to the first match. */
|
|
73
|
+
protected doFilter(): void;
|
|
74
|
+
/** Clears the filter and restores the original tree state. */
|
|
75
|
+
protected clearFilter(): void;
|
|
76
|
+
/** Moves to the next matching node, cycling back to the first. */
|
|
77
|
+
protected nextFiltered(): void;
|
|
78
|
+
/** Returns true when the node is the currently highlighted filter match. */
|
|
79
|
+
protected isFilteredNode(node: INode): boolean;
|
|
80
|
+
/** Expands ancestors of the target node and scrolls it into view. */
|
|
81
|
+
private _scrollToFiltered;
|
|
82
|
+
/**
|
|
83
|
+
* Returns true when the node is in the active selection.
|
|
84
|
+
* @param node - tree node to check
|
|
85
|
+
* @returns true if selected
|
|
86
|
+
*/
|
|
87
|
+
protected isSelected(node: INode): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Returns true when a subset (but not all) of the node's descendants are selected,
|
|
90
|
+
* producing the indeterminate checkbox state.
|
|
91
|
+
* @param node - tree node to evaluate
|
|
92
|
+
* @returns true if the node is in a partial-selection (indeterminate) state
|
|
93
|
+
*/
|
|
94
|
+
protected isIndeterminate(node: INode): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Toggles the node and all its descendants; then syncs the ancestor chain.
|
|
97
|
+
* @param node - the node that was clicked
|
|
98
|
+
*/
|
|
99
|
+
protected toggleNode(node: INode): void;
|
|
100
|
+
/**
|
|
101
|
+
* Deselects the node and all its descendants. Called by the chip remove button.
|
|
102
|
+
* @param node - the node to remove from the selection
|
|
103
|
+
*/
|
|
104
|
+
protected removeNode(node: INode): void;
|
|
105
|
+
/**
|
|
106
|
+
* Returns the INode for the given id, or undefined if not found.
|
|
107
|
+
* @param id - node id to look up
|
|
108
|
+
* @returns the matching INode
|
|
109
|
+
*/
|
|
110
|
+
protected nodeById(id: string): INode | undefined;
|
|
111
|
+
/**
|
|
112
|
+
* Returns true when the node at the given id is within the visible depth range
|
|
113
|
+
* and should appear in the chip list.
|
|
114
|
+
* @param id - node id to check
|
|
115
|
+
* @returns true if the node depth is less than maxDepth
|
|
116
|
+
*/
|
|
117
|
+
protected isChipVisible(id: string): boolean;
|
|
118
|
+
/**
|
|
119
|
+
* Returns only the selectable descendants of node (depth < maxDepth or in overrides),
|
|
120
|
+
* used for indeterminate state and parent auto-selection logic.
|
|
121
|
+
* @param node - root of the subtree to traverse
|
|
122
|
+
* @returns flat array of selectable descendant INodes
|
|
123
|
+
*/
|
|
124
|
+
private _getSelectableDescendants;
|
|
125
|
+
/**
|
|
126
|
+
* Walks up the ancestor chain from node, selecting a parent only when all
|
|
127
|
+
* its descendants are in the set, deselecting it otherwise.
|
|
128
|
+
* @param node - starting node for the upward traversal
|
|
129
|
+
* @param set - mutable selection set updated in place
|
|
130
|
+
*/
|
|
131
|
+
private _syncParentsInSet;
|
|
132
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreePickerComponent, never>;
|
|
133
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TreePickerComponent, "tree-picker", never, { "tree": { "alias": "tree"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "descriptionEmpty": { "alias": "descriptionEmpty"; "required": false; "isSignal": true; }; "maxDepth": { "alias": "maxDepth"; "required": false; "isSignal": true; }; "maxDepthOverrides": { "alias": "maxDepthOverrides"; "required": false; "isSignal": true; }; "minDepth": { "alias": "minDepth"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "selectionCount": "selectionCount"; "changed": "changed"; }, never, never, true, never>;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export { TreePickerComponent };
|
|
@@ -333,6 +333,16 @@ declare class NavigationBarComponent {
|
|
|
333
333
|
readonly labelVisibility: _angular_core.InputSignal<NavigationLabelVisibility>;
|
|
334
334
|
/** Icon / label arrangement inside a destination. */
|
|
335
335
|
readonly itemLayout: _angular_core.InputSignal<NavigationItemLayout>;
|
|
336
|
+
/**
|
|
337
|
+
* Icons of the nested destinations in the expanded variants (rail-expanded,
|
|
338
|
+
* drawer, modal), where children are listed inline under their parent.
|
|
339
|
+
* `false` — the default — renders those rows as label only, which keeps the
|
|
340
|
+
* branch readable; the label stays aligned with the labels around it and a
|
|
341
|
+
* badge moves to the trailing edge. Top level destinations always keep their
|
|
342
|
+
* icon, and so do the children shown in the floating panel of the compact
|
|
343
|
+
* variants.
|
|
344
|
+
*/
|
|
345
|
+
readonly childIcons: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
336
346
|
/** Vertical alignment of the `top` destination group inside a rail. */
|
|
337
347
|
readonly alignment: _angular_core.InputSignal<NavigationAlignment>;
|
|
338
348
|
/** Edge the rail / drawer is anchored to. Mirrored automatically in RTL. */
|
|
@@ -643,7 +653,7 @@ declare class NavigationBarComponent {
|
|
|
643
653
|
*/
|
|
644
654
|
private static pathOf;
|
|
645
655
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<NavigationBarComponent, never>;
|
|
646
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationBarComponent, "navigation-bar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "autoVariants": { "alias": "autoVariants"; "required": false; "isSignal": true; }; "selectedId": { "alias": "selectedId"; "required": false; "isSignal": true; }; "expandedIds": { "alias": "expandedIds"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "labelVisibility": { "alias": "labelVisibility"; "required": false; "isSignal": true; }; "itemLayout": { "alias": "itemLayout"; "required": false; "isSignal": true; }; "alignment": { "alias": "alignment"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "headline": { "alias": "headline"; "required": false; "isSignal": true; }; "showMenuButton": { "alias": "showMenuButton"; "required": false; "isSignal": true; }; "menuIcon": { "alias": "menuIcon"; "required": false; "isSignal": true; }; "expandIcon": { "alias": "expandIcon"; "required": false; "isSignal": true; }; "overflowMode": { "alias": "overflowMode"; "required": false; "isSignal": true; }; "overflowIcon": { "alias": "overflowIcon"; "required": false; "isSignal": true; }; "overflowLabel": { "alias": "overflowLabel"; "required": false; "isSignal": true; }; "maxVisibleItems": { "alias": "maxVisibleItems"; "required": false; "isSignal": true; }; "menuAriaLabel": { "alias": "menuAriaLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "scrim": { "alias": "scrim"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "elevated": { "alias": "elevated"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "tooltips": { "alias": "tooltips"; "required": false; "isSignal": true; }; "routerSync": { "alias": "routerSync"; "required": false; "isSignal": true; }; "relativeTo": { "alias": "relativeTo"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "selectedId": "selectedIdChange"; "expandedIds": "expandedIdsChange"; "open": "openChange"; "itemSelected": "itemSelected"; "menuClick": "menuClick"; }, never, ["[navHeader]", "[navFab]", "[navFooter]"], true, never>;
|
|
656
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<NavigationBarComponent, "navigation-bar", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "sections": { "alias": "sections"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "autoVariants": { "alias": "autoVariants"; "required": false; "isSignal": true; }; "selectedId": { "alias": "selectedId"; "required": false; "isSignal": true; }; "expandedIds": { "alias": "expandedIds"; "required": false; "isSignal": true; }; "open": { "alias": "open"; "required": false; "isSignal": true; }; "labelVisibility": { "alias": "labelVisibility"; "required": false; "isSignal": true; }; "itemLayout": { "alias": "itemLayout"; "required": false; "isSignal": true; }; "childIcons": { "alias": "childIcons"; "required": false; "isSignal": true; }; "alignment": { "alias": "alignment"; "required": false; "isSignal": true; }; "position": { "alias": "position"; "required": false; "isSignal": true; }; "headline": { "alias": "headline"; "required": false; "isSignal": true; }; "showMenuButton": { "alias": "showMenuButton"; "required": false; "isSignal": true; }; "menuIcon": { "alias": "menuIcon"; "required": false; "isSignal": true; }; "expandIcon": { "alias": "expandIcon"; "required": false; "isSignal": true; }; "overflowMode": { "alias": "overflowMode"; "required": false; "isSignal": true; }; "overflowIcon": { "alias": "overflowIcon"; "required": false; "isSignal": true; }; "overflowLabel": { "alias": "overflowLabel"; "required": false; "isSignal": true; }; "maxVisibleItems": { "alias": "maxVisibleItems"; "required": false; "isSignal": true; }; "menuAriaLabel": { "alias": "menuAriaLabel"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "scrim": { "alias": "scrim"; "required": false; "isSignal": true; }; "closeOnSelect": { "alias": "closeOnSelect"; "required": false; "isSignal": true; }; "elevated": { "alias": "elevated"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "tooltips": { "alias": "tooltips"; "required": false; "isSignal": true; }; "routerSync": { "alias": "routerSync"; "required": false; "isSignal": true; }; "relativeTo": { "alias": "relativeTo"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "hidden": { "alias": "hidden"; "required": false; "isSignal": true; }; }, { "selectedId": "selectedIdChange"; "expandedIds": "expandedIdsChange"; "open": "openChange"; "itemSelected": "itemSelected"; "menuClick": "menuClick"; }, never, ["[navHeader]", "[navFab]", "[navFooter]"], true, never>;
|
|
647
657
|
}
|
|
648
658
|
|
|
649
659
|
export { DEFAULT_NAVIGATION_AUTO_VARIANTS, EXPANDED_NAVIGATION_VARIANTS, NAVIGATION_OVERFLOW_ID, NavigationBarComponent };
|