@yuuvis/client-framework 3.3.0 → 3.4.1

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": "@yuuvis/client-framework",
3
- "version": "3.3.0",
3
+ "version": "3.4.1",
4
4
  "author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
@@ -8,16 +8,16 @@
8
8
  "@angular/common": "^21.2.9",
9
9
  "@angular/core": "^21.2.9",
10
10
  "angular-gridster2": "^21.0.1",
11
- "@yuuvis/client-core": "^3.3.0",
12
- "@yuuvis/client-shell-core": "^3.3.0",
13
- "@yuuvis/client-components": "^3.3.0",
11
+ "@yuuvis/client-core": "^3.4.1",
12
+ "@yuuvis/client-shell-core": "^3.4.1",
13
+ "@yuuvis/client-components": "^3.4.1",
14
14
  "ng-dynamic-component": "^10.8.2",
15
15
  "modern-normalize": "^3.0.1"
16
16
  },
17
17
  "dependencies": {
18
18
  "@angular/material": "^21.2.7",
19
19
  "@ngrx/signals": "^21.1.0",
20
- "@yuuvis/material": "^3.3.0",
20
+ "@yuuvis/material": "^3.4.1",
21
21
  "@yuuvis/media-viewer": "^3.0.1",
22
22
  "angular-split": "^20.0.0",
23
23
  "vis-network": "^10.0.2",
@@ -1,10 +1,8 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { WritableSignal } from '@angular/core';
3
- import * as _yuuvis_client_core from '@yuuvis/client-core';
4
- import { DmsObject } from '@yuuvis/client-core';
5
- import * as _yuuvis_media_viewer from '@yuuvis/media-viewer';
3
+ import { DmsObject, YuvUser } from '@yuuvis/client-core';
6
4
  import { Metadata, EmailMetadata } from '@yuuvis/media-viewer';
7
- import * as rxjs from 'rxjs';
5
+ import { Observable } from 'rxjs';
8
6
 
9
7
  interface ViewerDetails {
10
8
  id: string;
@@ -26,17 +24,34 @@ declare class ObjectPreviewComponent {
26
24
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ObjectPreviewComponent, "yuv-object-preview", never, { "objectId": { "alias": "objectId"; "required": false; "isSignal": true; }; "dmsObjectInput": { "alias": "dmsObject"; "required": false; "isSignal": true; }; "version": { "alias": "version"; "required": false; "isSignal": true; }; "metadata": { "alias": "metadata"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
27
25
  }
28
26
 
27
+ interface BaseViewerData {
28
+ mediaViewerSrc: string;
29
+ id: string;
30
+ mimeType: string | undefined;
31
+ }
32
+ type ViewerDataEmail = BaseViewerData & {
33
+ metadata: EmailMetadata;
34
+ };
35
+ type ViewerDataDefault = BaseViewerData & {
36
+ metadata: {
37
+ type: Uppercase<string> | undefined;
38
+ name: string;
39
+ dmsObject: Record<string, unknown>;
40
+ id: string;
41
+ editable: boolean;
42
+ user: YuvUser;
43
+ theme: string;
44
+ version: number | undefined;
45
+ sendEvent: boolean;
46
+ };
47
+ };
48
+
29
49
  declare class ObjectEmailPreviewComponent {
30
50
  #private;
31
51
  objectId: _angular_core.InputSignal<string | undefined>;
32
52
  dmsObjectInput: _angular_core.InputSignal<DmsObject | undefined>;
33
53
  dmsObject: _angular_core.Signal<DmsObject | undefined>;
34
- viewerDetails: _angular_core.Signal<{
35
- mediaViewerSrc: string;
36
- id: string;
37
- mimeType: string | undefined;
38
- metadata: _yuuvis_media_viewer.EmailMetadata;
39
- } | undefined>;
54
+ viewerDetails: _angular_core.Signal<ViewerDataEmail | undefined>;
40
55
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectEmailPreviewComponent, never>;
41
56
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ObjectEmailPreviewComponent, "yuv-object-email-preview", never, { "objectId": { "alias": "objectId"; "required": false; "isSignal": true; }; "dmsObjectInput": { "alias": "dmsObject"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
42
57
  }
@@ -45,36 +60,11 @@ declare class ObjectPreviewService {
45
60
  #private;
46
61
  dmsObject: _angular_core.Signal<DmsObject | undefined>;
47
62
  setDmsObject(object: DmsObject): void;
48
- getDmsObject(id: string): rxjs.Observable<DmsObject>;
63
+ getDmsObject(id: string): Observable<DmsObject>;
49
64
  getMediaViewerSrc(id: string, mimeType: string | undefined, version?: number): string;
50
- getViewerDetails(object: DmsObject, version: number | undefined): {
51
- mediaViewerSrc: string;
52
- id: string;
53
- mimeType: string | undefined;
54
- metadata: EmailMetadata;
55
- } | {
56
- mediaViewerSrc: string;
57
- id: string;
58
- mimeType: string | undefined;
59
- metadata: {
60
- type: Uppercase<string> | undefined;
61
- name: string;
62
- dmsObject: Record<string, unknown>;
63
- id: string;
64
- editable: boolean;
65
- user: _yuuvis_client_core.YuvUser;
66
- theme: string;
67
- version: number | undefined;
68
- sendEvent: boolean;
69
- };
70
- } | undefined;
71
- getEmailViewerDetails(object: DmsObject, MAIL_APP_ID?: string): {
72
- mediaViewerSrc: string;
73
- id: string;
74
- mimeType: string | undefined;
75
- metadata: EmailMetadata;
76
- };
65
+ getEmailViewerDetails(object: DmsObject, MAIL_APP_ID?: string): ViewerDataEmail;
77
66
  getEmailMetadata(object: DmsObject, MAIL_APP_ID?: string): EmailMetadata;
67
+ getViewerDetails(object: DmsObject, version: number | undefined): ViewerDataEmail | ViewerDataDefault | undefined;
78
68
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectPreviewService, never>;
79
69
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ObjectPreviewService>;
80
70
  }
@@ -416,6 +416,33 @@ declare class QueryListComponent<T = any> {
416
416
  * Defaults to `true` so the newly dropped items are immediately visible.
417
417
  */
418
418
  dropItems(items: T[], scrollTo?: boolean): void;
419
+ /**
420
+ * Surgically removes specific items from the drop-in set by their stable IDs.
421
+ *
422
+ * Filters `#dropInItems` to drop any entry whose `idProperty` value is in `ids`,
423
+ * leaving the remaining drop-ins (and the rest of the result list) untouched.
424
+ * The structural shift is handled by the rendering pipeline — `resultItems`
425
+ * recomputes automatically, and the leading `drop-in` class follows the new
426
+ * (smaller) `dropInSize()`.
427
+ *
428
+ * This method intentionally does **not** mutate the inner list's selection
429
+ * state. The caller (typically `TileListComponent.removeDropItems`) is in a
430
+ * better position to decide whether to clear, shift, or preserve selection,
431
+ * because it tracks selection at a higher level by stable object identity.
432
+ *
433
+ * Requires `idProperty` to be set — without it items cannot be identified
434
+ * and the call is a no-op (returns 0).
435
+ *
436
+ * **Typical use case:** an upstream deletion (e.g. `DmsService.deleteDmsObject`)
437
+ * removed an object that is currently rendered as a drop-in. Without removing
438
+ * it from `#dropInItems`, the deleted tile would remain visible after `refresh()`
439
+ * because the framework treats drop-ins as authoritative and prepends them to
440
+ * every refreshed result set.
441
+ *
442
+ * @param ids Array of ID values (as resolved via `idProperty`) to remove.
443
+ * @returns Number of items that were actually removed from the drop-in set.
444
+ */
445
+ removeDropItems(ids: string[]): number;
419
446
  /**
420
447
  * Programmatically replaces the entire selection with the given indices.
421
448
  *
@@ -565,6 +565,33 @@ declare class TileListComponent implements OnInit {
565
565
  * @param objects `DmsObject` instances to prepend to the visible list.
566
566
  */
567
567
  dropItems(objects: DmsObject[]): void;
568
+ /**
569
+ * Surgically removes tiles matching the given IDs from the rendered list.
570
+ *
571
+ * Use this when an upstream deletion (e.g. `DmsService.deleteDmsObject`) removes
572
+ * an object that is currently rendered. Without this call, drop-in tiles would
573
+ * remain visible after `refresh()` because `onQueryResult` reconstructs them by
574
+ * slicing the leading `dropInSize()` items from the `items` signal — the deleted
575
+ * tile would survive as a stale leader.
576
+ *
577
+ * The method is also invoked automatically by an internal `DMS_OBJECT_DELETED`
578
+ * subscription, so consumers that delete via `DmsService` get correct behavior
579
+ * without any extra wiring. Calling it directly is only needed for deletions
580
+ * that do not flow through the standard event service.
581
+ *
582
+ * Internally:
583
+ * 1. Locates positions of matching tiles in the `items` signal.
584
+ * 2. Removes them from `items` (the parent-visible view model).
585
+ * 3. Filters `_selection` to drop indices on removed tiles, then shifts the
586
+ * remaining indices back by the count of removed positions that preceded
587
+ * each surviving entry so selection stays attached to the same logical items.
588
+ * 4. Clears `_lastSelection` if it pointed to a removed tile, else shifts it.
589
+ * 5. Delegates to `QueryListComponent.removeDropItems` to filter the inner
590
+ * drop-in set so `resultItems` recomputes with the correct leading slice.
591
+ *
592
+ * @param ids Object IDs to remove.
593
+ */
594
+ removeDropItems(ids: string[]): void;
568
595
  /**
569
596
  * Toggles an `ObjectFlavor` on or off and re-maps the current result set.
570
597
  *