@arsedizioni/ars-utils 21.2.310 → 21.2.313

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arsedizioni/ars-utils",
3
- "version": "21.2.310",
3
+ "version": "21.2.313",
4
4
  "author": {
5
5
  "email": "software@arsedizioni.it",
6
6
  "name": "Fabio Buscaroli, Alberto Doria"
@@ -1025,7 +1025,7 @@ declare class ClipperDocumentMenuComponent {
1025
1025
  /** Internal counter incremented on each external selection-model change to drive signal re-evaluation. */
1026
1026
  private readonly selectionChangeTick;
1027
1027
  readonly useSelections: _angular_core.InputSignal<boolean>;
1028
- readonly selectionSource: _angular_core.InputSignal<"bag" | "selection" | "none">;
1028
+ readonly selectionSource: _angular_core.InputSignal<"selection" | "bag" | "none">;
1029
1029
  /**
1030
1030
  * Computed signal that returns the current effective document selection.
1031
1031
  * Re-evaluates when any input signal or the underlying selection model changes.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnInit, OnDestroy, AfterViewInit } from '@angular/core';
2
+ import { OnDestroy } from '@angular/core';
3
3
  import { Folder, ApiResult } from '@arsedizioni/ars-utils/core';
4
4
  import { BreakpointObserver } from '@angular/cdk/layout';
5
5
  import { MatSidenav } from '@angular/material/sidenav';
@@ -61,10 +61,9 @@ declare class IndexTreeDataSource implements OnDestroy {
61
61
  static ɵfac: i0.ɵɵFactoryDeclaration<IndexTreeDataSource, never>;
62
62
  static ɵprov: i0.ɵɵInjectableDeclaration<IndexTreeDataSource>;
63
63
  }
64
- declare class HelpViewerComponent implements OnInit, OnDestroy, AfterViewInit {
64
+ declare class HelpViewerComponent {
65
65
  readonly indexPane: i0.Signal<MatSidenav>;
66
- private readonly unsubscribe;
67
- private readonly changeDetector;
66
+ private readonly destroyRef;
68
67
  private readonly dialogRef;
69
68
  protected readonly dialogData: HelpViewerDialogData;
70
69
  private readonly dialogService;
@@ -85,9 +84,7 @@ declare class HelpViewerComponent implements OnInit, OnDestroy, AfterViewInit {
85
84
  protected readonly flatNodes: i0.WritableSignal<IndexNode[]>;
86
85
  private folders?;
87
86
  protected hasChild: (_: number, _node: IndexNode) => boolean;
88
- ngOnInit(): void;
89
- ngOnDestroy(): void;
90
- ngAfterViewInit(): void;
87
+ constructor();
91
88
  /**
92
89
  * Handle filter pane visibility
93
90
  */
@@ -1,10 +1,9 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnInit, AfterViewInit } from '@angular/core';
3
2
  import { MatPaginator, PageEvent } from '@angular/material/paginator';
4
3
  import { ScreenService, SelectableModel } from '@arsedizioni/ars-utils/core';
5
4
  import { SupportNotificationInfo, SupportNotificationsSearchParams } from '@arsedizioni/ars-utils/support.common';
6
5
 
7
- declare class SupportNotificationsBrowserComponent implements OnInit, AfterViewInit {
6
+ declare class SupportNotificationsBrowserComponent {
8
7
  readonly paginator: _angular_core.Signal<MatPaginator>;
9
8
  protected readonly screenService: ScreenService;
10
9
  private readonly supportService;
@@ -15,8 +14,7 @@ declare class SupportNotificationsBrowserComponent implements OnInit, AfterViewI
15
14
  protected searchParams: SupportNotificationsSearchParams;
16
15
  protected total: _angular_core.WritableSignal<number>;
17
16
  protected items: _angular_core.WritableSignal<SupportNotificationInfo[]>;
18
- ngOnInit(): void;
19
- ngAfterViewInit(): void;
17
+ constructor();
20
18
  /**
21
19
  * Scrolls the notifications list back to the top.
22
20
  */
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { OnInit, OnDestroy, DoCheck, ElementRef } from '@angular/core';
2
+ import { OnDestroy, DoCheck, ElementRef } from '@angular/core';
3
3
  import { Searchable, SearchBag, NameValueItem, DateInterval, SearchFilterMetadata, FileInfo, INode } from '@arsedizioni/ars-utils/core';
4
4
  import { MatFormFieldAppearance, MatFormFieldControl } from '@angular/material/form-field';
5
5
  import { MatDialogRef } from '@angular/material/dialog';
@@ -373,7 +373,7 @@ interface SelectTreeDialogAppend {
373
373
  parent?: ItemNode;
374
374
  owner?: any;
375
375
  }
376
- declare class SelectTreeDialogComponent implements OnInit {
376
+ declare class SelectTreeDialogComponent {
377
377
  /** Emitted when the user confirms a selection. */
378
378
  readonly done: _angular_core.OutputEmitterRef<SelectTreeDialogResult>;
379
379
  /** Emitted when the user requests to append a new node. */
@@ -383,6 +383,7 @@ declare class SelectTreeDialogComponent implements OnInit {
383
383
  /** Dialog configuration, injected and exposed as a signal. */
384
384
  protected readonly dialogData: _angular_core.WritableSignal<SelectTreeDialogData>;
385
385
  private readonly tree;
386
+ private readonly _elRef;
386
387
  /** Reference to the Material tree component. */
387
388
  protected readonly matTree: _angular_core.Signal<MatTree<ItemNode, ItemNode>>;
388
389
  /** Provides children of a tree node to the tree component. */
@@ -391,15 +392,19 @@ declare class SelectTreeDialogComponent implements OnInit {
391
392
  protected readonly treeNodes: _angular_core.WritableSignal<ItemNode[]>;
392
393
  /** Currently selected tree node. */
393
394
  protected readonly currentNode: _angular_core.WritableSignal<ItemNode>;
394
- /** Current filter text, bound via ngModel. */
395
- protected filterText: string;
395
+ /** Current filter text. */
396
+ protected readonly filterText: _angular_core.WritableSignal<string>;
396
397
  /** Nodes matching the current filter text. */
397
398
  protected readonly filteredItems: _angular_core.WritableSignal<ItemNode[]>;
398
- /** Index of the currently highlighted filtered node. */
399
+ /** Index of the currently highlighted filtered node (-1 = none). */
399
400
  protected readonly filterIndex: _angular_core.WritableSignal<number>;
401
+ /** The currently highlighted filtered node, or null. */
402
+ protected readonly filteredNode: _angular_core.Signal<ItemNode>;
400
403
  protected readonly canAppend: _angular_core.WritableSignal<boolean>;
404
+ /** Flat node map rebuilt whenever treeNodes changes. */
405
+ private readonly _nodeMap;
401
406
  protected hasChild: (_: number, node: ItemNode) => boolean;
402
- ngOnInit(): void;
407
+ constructor();
403
408
  /**
404
409
  * Confirm the current selection and close the dialog.
405
410
  */
@@ -415,26 +420,30 @@ declare class SelectTreeDialogComponent implements OnInit {
415
420
  */
416
421
  protected clearFilter(): void;
417
422
  /**
418
- * Filter the tree nodes by name.
419
- * @param text - Optional text to set as the filter before applying.
423
+ * Filter the tree nodes by name (minimum 3 characters).
420
424
  */
421
- protected doFilter(text?: string): void;
425
+ protected doFilter(): void;
422
426
  /**
423
427
  * Advance to the next matching filtered node and scroll it into view.
424
428
  */
425
429
  protected nextFiltered(): void;
430
+ /**
431
+ * Returns true when the node is the currently highlighted filter match.
432
+ * @param node - tree node to check.
433
+ */
434
+ protected isFilteredNode(node: ItemNode): boolean;
435
+ /**
436
+ * Expands ancestors of the target node and scrolls it into view.
437
+ * @param index - index within `items` to scroll to.
438
+ * @param items - current filtered items array.
439
+ */
440
+ private _scrollToFiltered;
426
441
  /**
427
442
  * Expand a node and all of its parent nodes.
428
443
  * @param node - The node to expand.
429
444
  * @returns Always false.
430
445
  */
431
446
  expand(node: ItemNode): boolean;
432
- /**
433
- * Recursively get all nodes in depth-first order.
434
- * @param nodes - Root nodes to traverse.
435
- * @param result - Accumulator array.
436
- */
437
- private getAllNodes;
438
447
  /**
439
448
  * Recursively find a node by id.
440
449
  * @param nodes - Nodes to search.
@@ -1138,9 +1147,8 @@ declare class FileInputComponent implements OnDestroy, DoCheck, MatFormFieldCont
1138
1147
  set disabled(value: boolean);
1139
1148
  get placeholder(): string;
1140
1149
  set placeholder(value: string);
1141
- /** The currently displayed file name. Can be bound from outside or updated on file selection. */
1142
- readonly fileName: _angular_core.InputSignal<string>;
1143
- readonly fileNameInput: _angular_core.OutputEmitterRef<string>;
1150
+ /** The currently displayed file name. Can be bound two-way from outside or updated on file selection. */
1151
+ readonly fileName: _angular_core.ModelSignal<string>;
1144
1152
  readonly maxSizeMb: _angular_core.InputSignal<number>;
1145
1153
  readonly minSizeMb: _angular_core.InputSignal<number>;
1146
1154
  readonly isNew: _angular_core.InputSignal<boolean>;
@@ -1220,7 +1228,7 @@ declare class FileInputComponent implements OnDestroy, DoCheck, MatFormFieldCont
1220
1228
  */
1221
1229
  protected previewFile(): void;
1222
1230
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<FileInputComponent, [{ optional: true; self: true; }]>;
1223
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileInputComponent, "file-input", never, { "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "maxSizeMb": { "alias": "maxSizeMb"; "required": false; "isSignal": true; }; "minSizeMb": { "alias": "minSizeMb"; "required": false; "isSignal": true; }; "isNew": { "alias": "isNew"; "required": false; "isSignal": true; }; "canPreview": { "alias": "canPreview"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; }, { "fileNameInput": "fileNameInput"; "changed": "changed"; "download": "download"; "preview": "preview"; }, never, never, true, never>;
1231
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FileInputComponent, "file-input", never, { "required": { "alias": "required"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "maxSizeMb": { "alias": "maxSizeMb"; "required": false; "isSignal": true; }; "minSizeMb": { "alias": "minSizeMb"; "required": false; "isSignal": true; }; "isNew": { "alias": "isNew"; "required": false; "isSignal": true; }; "canPreview": { "alias": "canPreview"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "accept": { "alias": "accept"; "required": false; "isSignal": true; }; }, { "fileName": "fileNameChange"; "changed": "changed"; "download": "download"; "preview": "preview"; }, never, never, true, never>;
1224
1232
  }
1225
1233
 
1226
1234
  interface FilePreviewDialogData {
@@ -1343,12 +1351,12 @@ declare class FilterBarComponent {
1343
1351
  declare class TreePickerComponent {
1344
1352
  /** Nested tree data to display. */
1345
1353
  readonly tree: _angular_core.InputSignal<INode[]>;
1346
- /** Currently selected node ids. */
1347
- readonly selection: _angular_core.InputSignal<string[]>;
1348
- /** Emits the updated selection array whenever it changes. */
1349
- readonly selectionInput: _angular_core.OutputEmitterRef<string[]>;
1354
+ /** Currently selected node ids. Supports two-way binding via [(selection)]. */
1355
+ readonly selection: _angular_core.ModelSignal<string[]>;
1350
1356
  /** When true, checkboxes and chip remove buttons are disabled (mirrors Material convention). */
1351
1357
  readonly disabled: _angular_core.InputSignal<boolean>;
1358
+ /** Description to display when no selection is made. */
1359
+ readonly descriptionEmpty: _angular_core.InputSignal<string>;
1352
1360
  /** Maximum number of tree levels to display (default: 3). */
1353
1361
  readonly maxDepth: _angular_core.InputSignal<number>;
1354
1362
  /**
@@ -1366,6 +1374,7 @@ declare class TreePickerComponent {
1366
1374
  /** Emits void whenever the user changes the selection (toggle, remove, clear). */
1367
1375
  readonly changed: _angular_core.OutputEmitterRef<void>;
1368
1376
  private readonly _treeRef;
1377
+ private readonly _elRef;
1369
1378
  /** All three maps rebuilt lazily as a single computed whenever taxonomy changes. */
1370
1379
  private readonly _maps;
1371
1380
  /** O(1) set of selected ids, rebuilt only when selection changes. */
@@ -1376,6 +1385,14 @@ declare class TreePickerComponent {
1376
1385
  protected readonly selectedVisibleCount: _angular_core.Signal<number>;
1377
1386
  readonly treeChildrenAccessor: (node: INode) => INode[];
1378
1387
  readonly hasChild: (_: number, node: INode) => boolean;
1388
+ /** Current filter text. */
1389
+ protected readonly filterText: _angular_core.WritableSignal<string>;
1390
+ /** Nodes matching the current filter text, in nodeMap iteration order. */
1391
+ protected readonly filteredItems: _angular_core.WritableSignal<INode[]>;
1392
+ /** Index of the currently highlighted filtered node (-1 = none). */
1393
+ protected readonly filterIndex: _angular_core.WritableSignal<number>;
1394
+ /** The currently highlighted filtered node, or null. */
1395
+ protected readonly filteredNode: _angular_core.Signal<INode>;
1379
1396
  constructor();
1380
1397
  /** Expands all visible nodes in the tree. */
1381
1398
  protected expandAll(): void;
@@ -1383,6 +1400,16 @@ declare class TreePickerComponent {
1383
1400
  protected collapseAll(): void;
1384
1401
  /** Clears the entire selection. */
1385
1402
  protected clearAll(): void;
1403
+ /** Searches nodes by text and moves to the first match. */
1404
+ protected doFilter(): void;
1405
+ /** Clears the filter and restores the original tree state. */
1406
+ protected clearFilter(): void;
1407
+ /** Moves to the next matching node, cycling back to the first. */
1408
+ protected nextFiltered(): void;
1409
+ /** Returns true when the node is the currently highlighted filter match. */
1410
+ protected isFilteredNode(node: INode): boolean;
1411
+ /** Expands ancestors of the target node and scrolls it into view. */
1412
+ private _scrollToFiltered;
1386
1413
  /**
1387
1414
  * Returns true when the node is in the active selection.
1388
1415
  * @param node - tree node to check
@@ -1434,7 +1461,7 @@ declare class TreePickerComponent {
1434
1461
  */
1435
1462
  private _syncParentsInSet;
1436
1463
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TreePickerComponent, never>;
1437
- 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; }; "maxDepth": { "alias": "maxDepth"; "required": false; "isSignal": true; }; "minDepth": { "alias": "minDepth"; "required": false; "isSignal": true; }; }, { "selectionInput": "selectionInput"; "selectionCount": "selectionCount"; "changed": "changed"; }, never, never, true, never>;
1464
+ 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; }; "minDepth": { "alias": "minDepth"; "required": false; "isSignal": true; }; }, { "selection": "selectionChange"; "selectionCount": "selectionCount"; "changed": "changed"; }, never, never, true, never>;
1438
1465
  }
1439
1466
 
1440
1467
  export { ApplicationDialogService, ArsUIApplicationModule, ButtonSelectorComponent, ButtonToggleComponent, CalendarEmptyHeader, ChipsSelectorComponent, CurrentFilter, CurrentFilterChanged, CurrentFilterItem, FileInputComponent, FilePreviewComponent, FilterBarComponent, Filters, ItemNode, PromptDateDialogComponent, PromptDialogComponent, PromptDialogType, PromptOtpDialogComponent, PromptTimeDialogComponent, ResizeTableColumnDirective, SelectDialogComponent, SelectFileDialogComponent, SelectPictureDialogComponent, SelectTreeDialogComponent, SelectableItem, SelectableNode, SendToDialogComponent, TreeDataSource, TreePickerComponent };