@arsedizioni/ars-utils 21.2.308 → 21.2.311

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.308",
3
+ "version": "21.2.311",
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.
@@ -1139,8 +1139,7 @@ declare class ClipperNoteBadgeComponent {
1139
1139
  private readonly viewContainerRef;
1140
1140
  readonly populateContacts: _angular_core.OutputEmitterRef<SendToPopulateData>;
1141
1141
  private readonly popupTpl;
1142
- readonly note: _angular_core.InputSignal<ClipperDocumentNote>;
1143
- readonly noteInput: _angular_core.OutputEmitterRef<ClipperDocumentNote>;
1142
+ readonly note: _angular_core.ModelSignal<ClipperDocumentNote>;
1144
1143
  protected readonly backgroundColor: _angular_core.WritableSignal<string>;
1145
1144
  protected readonly trackingUnopenedCount: _angular_core.Signal<number>;
1146
1145
  protected readonly trackingOpenedCount: _angular_core.Signal<number>;
@@ -1199,7 +1198,7 @@ declare class ClipperNoteBadgeComponent {
1199
1198
  */
1200
1199
  protected refresh(event: MouseEvent): void;
1201
1200
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClipperNoteBadgeComponent, never>;
1202
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClipperNoteBadgeComponent, "clipper-note-badge", never, { "note": { "alias": "note"; "required": true; "isSignal": true; }; }, { "populateContacts": "populateContacts"; "noteInput": "noteInput"; }, never, never, true, never>;
1201
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClipperNoteBadgeComponent, "clipper-note-badge", never, { "note": { "alias": "note"; "required": true; "isSignal": true; }; }, { "populateContacts": "populateContacts"; "note": "noteChange"; }, never, never, true, never>;
1203
1202
  }
1204
1203
 
1205
1204
  declare class ClipperNoteEditComponent {
@@ -1369,8 +1368,7 @@ declare class ClipperSearchResultItemComponent {
1369
1368
  protected readonly screenService: ScreenService;
1370
1369
  private readonly broadcastService;
1371
1370
  readonly parent: _angular_core.InputSignal<ClipperSearchResultManager>;
1372
- readonly item: _angular_core.InputSignal<ClipperDocumentInfo>;
1373
- readonly itemInput: _angular_core.OutputEmitterRef<ClipperDocumentInfo>;
1371
+ readonly item: _angular_core.ModelSignal<ClipperDocumentInfo>;
1374
1372
  readonly actions: _angular_core.InputSignal<MatMenu>;
1375
1373
  protected taxonomy: _angular_core.WritableSignal<string[]>;
1376
1374
  readonly tileNoPictureUrl: _angular_core.InputSignal<string>;
@@ -1401,7 +1399,7 @@ declare class ClipperSearchResultItemComponent {
1401
1399
  protected readonly canBeRead: _angular_core.Signal<boolean>;
1402
1400
  constructor();
1403
1401
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ClipperSearchResultItemComponent, never>;
1404
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClipperSearchResultItemComponent, "clipper-search-result-item", never, { "parent": { "alias": "parent"; "required": true; "isSignal": true; }; "item": { "alias": "item"; "required": true; "isSignal": true; }; "actions": { "alias": "actions"; "required": true; "isSignal": true; }; "tileNoPictureUrl": { "alias": "tileNoPictureUrl"; "required": false; "isSignal": true; }; "tilePictureUrl": { "alias": "tilePictureUrl"; "required": false; "isSignal": true; }; "isSelectable": { "alias": "isSelectable"; "required": false; "isSignal": true; }; "isReadable": { "alias": "isReadable"; "required": false; "isSignal": true; }; "isReadableModel": { "alias": "isReadableModel"; "required": false; "isSignal": true; }; "displayModifiedTitle": { "alias": "displayModifiedTitle"; "required": false; "isSignal": true; }; "displayModelName": { "alias": "displayModelName"; "required": false; "isSignal": true; }; "displayDate": { "alias": "displayDate"; "required": false; "isSignal": true; }; "displayMode": { "alias": "displayMode"; "required": false; "isSignal": true; }; }, { "itemInput": "itemInput"; }, never, never, true, never>;
1402
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ClipperSearchResultItemComponent, "clipper-search-result-item", never, { "parent": { "alias": "parent"; "required": true; "isSignal": true; }; "item": { "alias": "item"; "required": true; "isSignal": true; }; "actions": { "alias": "actions"; "required": true; "isSignal": true; }; "tileNoPictureUrl": { "alias": "tileNoPictureUrl"; "required": false; "isSignal": true; }; "tilePictureUrl": { "alias": "tilePictureUrl"; "required": false; "isSignal": true; }; "isSelectable": { "alias": "isSelectable"; "required": false; "isSignal": true; }; "isReadable": { "alias": "isReadable"; "required": false; "isSignal": true; }; "isReadableModel": { "alias": "isReadableModel"; "required": false; "isSignal": true; }; "displayModifiedTitle": { "alias": "displayModifiedTitle"; "required": false; "isSignal": true; }; "displayModelName": { "alias": "displayModelName"; "required": false; "isSignal": true; }; "displayDate": { "alias": "displayDate"; "required": false; "isSignal": true; }; "displayMode": { "alias": "displayMode"; "required": false; "isSignal": true; }; }, { "item": "itemChange"; }, never, never, true, never>;
1405
1403
  }
1406
1404
 
1407
1405
  declare class ClipperDocumentsUtils {
@@ -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. */
@@ -391,15 +391,15 @@ declare class SelectTreeDialogComponent implements OnInit {
391
391
  protected readonly treeNodes: _angular_core.WritableSignal<ItemNode[]>;
392
392
  /** Currently selected tree node. */
393
393
  protected readonly currentNode: _angular_core.WritableSignal<ItemNode>;
394
- /** Current filter text, bound via ngModel. */
395
- protected filterText: string;
394
+ /** Current filter text. */
395
+ protected readonly filterText: _angular_core.WritableSignal<string>;
396
396
  /** Nodes matching the current filter text. */
397
397
  protected readonly filteredItems: _angular_core.WritableSignal<ItemNode[]>;
398
398
  /** Index of the currently highlighted filtered node. */
399
399
  protected readonly filterIndex: _angular_core.WritableSignal<number>;
400
400
  protected readonly canAppend: _angular_core.WritableSignal<boolean>;
401
401
  protected hasChild: (_: number, node: ItemNode) => boolean;
402
- ngOnInit(): void;
402
+ constructor();
403
403
  /**
404
404
  * Confirm the current selection and close the dialog.
405
405
  */
@@ -1138,9 +1138,8 @@ declare class FileInputComponent implements OnDestroy, DoCheck, MatFormFieldCont
1138
1138
  set disabled(value: boolean);
1139
1139
  get placeholder(): string;
1140
1140
  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>;
1141
+ /** The currently displayed file name. Can be bound two-way from outside or updated on file selection. */
1142
+ readonly fileName: _angular_core.ModelSignal<string>;
1144
1143
  readonly maxSizeMb: _angular_core.InputSignal<number>;
1145
1144
  readonly minSizeMb: _angular_core.InputSignal<number>;
1146
1145
  readonly isNew: _angular_core.InputSignal<boolean>;
@@ -1220,7 +1219,7 @@ declare class FileInputComponent implements OnDestroy, DoCheck, MatFormFieldCont
1220
1219
  */
1221
1220
  protected previewFile(): void;
1222
1221
  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>;
1222
+ 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
1223
  }
1225
1224
 
1226
1225
  interface FilePreviewDialogData {
@@ -1343,12 +1342,12 @@ declare class FilterBarComponent {
1343
1342
  declare class TreePickerComponent {
1344
1343
  /** Nested tree data to display. */
1345
1344
  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[]>;
1345
+ /** Currently selected node ids. Supports two-way binding via [(selection)]. */
1346
+ readonly selection: _angular_core.ModelSignal<string[]>;
1350
1347
  /** When true, checkboxes and chip remove buttons are disabled (mirrors Material convention). */
1351
1348
  readonly disabled: _angular_core.InputSignal<boolean>;
1349
+ /** Description to display when no selection is made. */
1350
+ readonly descriptionEmpty: _angular_core.InputSignal<string>;
1352
1351
  /** Maximum number of tree levels to display (default: 3). */
1353
1352
  readonly maxDepth: _angular_core.InputSignal<number>;
1354
1353
  /**
@@ -1366,6 +1365,7 @@ declare class TreePickerComponent {
1366
1365
  /** Emits void whenever the user changes the selection (toggle, remove, clear). */
1367
1366
  readonly changed: _angular_core.OutputEmitterRef<void>;
1368
1367
  private readonly _treeRef;
1368
+ private readonly _elRef;
1369
1369
  /** All three maps rebuilt lazily as a single computed whenever taxonomy changes. */
1370
1370
  private readonly _maps;
1371
1371
  /** O(1) set of selected ids, rebuilt only when selection changes. */
@@ -1376,6 +1376,14 @@ declare class TreePickerComponent {
1376
1376
  protected readonly selectedVisibleCount: _angular_core.Signal<number>;
1377
1377
  readonly treeChildrenAccessor: (node: INode) => INode[];
1378
1378
  readonly hasChild: (_: number, node: INode) => boolean;
1379
+ /** Current filter text. */
1380
+ protected readonly filterText: _angular_core.WritableSignal<string>;
1381
+ /** Nodes matching the current filter text, in nodeMap iteration order. */
1382
+ protected readonly filteredItems: _angular_core.WritableSignal<INode[]>;
1383
+ /** Index of the currently highlighted filtered node (-1 = none). */
1384
+ protected readonly filterIndex: _angular_core.WritableSignal<number>;
1385
+ /** The currently highlighted filtered node, or null. */
1386
+ protected readonly filteredNode: _angular_core.Signal<INode>;
1379
1387
  constructor();
1380
1388
  /** Expands all visible nodes in the tree. */
1381
1389
  protected expandAll(): void;
@@ -1383,6 +1391,16 @@ declare class TreePickerComponent {
1383
1391
  protected collapseAll(): void;
1384
1392
  /** Clears the entire selection. */
1385
1393
  protected clearAll(): void;
1394
+ /** Searches nodes by text and moves to the first match. */
1395
+ protected doFilter(): void;
1396
+ /** Clears the filter and restores the original tree state. */
1397
+ protected clearFilter(): void;
1398
+ /** Moves to the next matching node, cycling back to the first. */
1399
+ protected nextFiltered(): void;
1400
+ /** Returns true when the node is the currently highlighted filter match. */
1401
+ protected isFilteredNode(node: INode): boolean;
1402
+ /** Expands ancestors of the target node and scrolls it into view. */
1403
+ private _scrollToFiltered;
1386
1404
  /**
1387
1405
  * Returns true when the node is in the active selection.
1388
1406
  * @param node - tree node to check
@@ -1434,7 +1452,7 @@ declare class TreePickerComponent {
1434
1452
  */
1435
1453
  private _syncParentsInSet;
1436
1454
  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>;
1455
+ 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
1456
  }
1439
1457
 
1440
1458
  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 };