@yuuvis/client-framework 2.10.3 → 2.11.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.
Files changed (62) hide show
  1. package/autocomplete/lib/autocomplete.component.d.ts +4 -4
  2. package/autocomplete/lib/autocomplete.interface.d.ts +2 -2
  3. package/common/lib/services/index.d.ts +1 -0
  4. package/common/lib/services/layout-settings/layout-settings.service.d.ts +15 -0
  5. package/common/lib/services/theme/index.d.ts +3 -0
  6. package/common/lib/services/theme/theme.models.d.ts +16 -0
  7. package/common/lib/services/theme/theme.provider.d.ts +4 -0
  8. package/common/lib/services/theme/theme.service.d.ts +16 -0
  9. package/fesm2022/yuuvis-client-framework-common.mjs +213 -4
  10. package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
  11. package/fesm2022/yuuvis-client-framework-datepicker.mjs +1 -1
  12. package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -1
  13. package/fesm2022/yuuvis-client-framework-forms.mjs +60 -37
  14. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  15. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
  16. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +2 -2
  17. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
  18. package/fesm2022/yuuvis-client-framework-object-relationship.mjs +135 -52
  19. package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
  20. package/fesm2022/yuuvis-client-framework-object-versions.mjs +4 -3
  21. package/fesm2022/yuuvis-client-framework-object-versions.mjs.map +1 -1
  22. package/fesm2022/yuuvis-client-framework-query-list.mjs +5 -4
  23. package/fesm2022/yuuvis-client-framework-query-list.mjs.map +1 -1
  24. package/fesm2022/yuuvis-client-framework-tile-list.mjs +20 -4
  25. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  26. package/fesm2022/yuuvis-client-framework.mjs +616 -98
  27. package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
  28. package/forms/lib/elements/datetime/datetime.component.d.ts +0 -1
  29. package/forms/lib/elements/datetime-range/datetime-range.component.d.ts +6 -5
  30. package/forms/lib/elements/organization/organization.component.d.ts +1 -1
  31. package/forms/lib/elements/organization-set/organization-set.component.d.ts +1 -1
  32. package/index.d.ts +5 -2
  33. package/lib/config/index.d.ts +1 -0
  34. package/lib/config/session/index.d.ts +3 -0
  35. package/lib/config/session/session-activity-window-before-end.const.d.ts +43 -0
  36. package/lib/config/session/session-default-duration.const.d.ts +47 -0
  37. package/lib/config/session/session-popup-before-end.const.d.ts +47 -0
  38. package/lib/enums/channel-message.enum.d.ts +4 -0
  39. package/lib/enums/index.d.ts +1 -0
  40. package/lib/models/index.d.ts +2 -0
  41. package/lib/models/session/channel-payload.model.d.ts +5 -0
  42. package/lib/models/session/index.d.ts +1 -0
  43. package/lib/models/snack-bar/index.d.ts +3 -0
  44. package/lib/models/snack-bar/snack-bar-data.model.d.ts +6 -0
  45. package/lib/models/snack-bar/snack-bar-level.model.d.ts +1 -0
  46. package/lib/{services/snack-bar/snack-bar.interface.d.ts → models/snack-bar/snack-bar-options.model.d.ts} +1 -6
  47. package/lib/providers/index.d.ts +1 -0
  48. package/lib/providers/session/index.d.ts +1 -0
  49. package/lib/providers/session/provide-session.provider.d.ts +43 -0
  50. package/lib/services/index.d.ts +2 -2
  51. package/lib/services/session/session.service.d.ts +113 -0
  52. package/lib/services/snack-bar/snack-bar.service.d.ts +5 -5
  53. package/object-relationship/index.d.ts +1 -0
  54. package/object-relationship/lib/actions/add-relationship/add-relationship.component.d.ts +10 -0
  55. package/object-relationship/lib/actions/relationship-target-search/relationship-target-search.component.d.ts +17 -4
  56. package/object-relationship/lib/object-relationship.const.d.ts +0 -1
  57. package/object-versions/lib/object-versions.component.d.ts +1 -0
  58. package/package.json +8 -8
  59. package/query-list/lib/query-list.component.d.ts +8 -7
  60. package/tile-list/lib/tile-list/tile-list.component.d.ts +4 -2
  61. package/lib/assets/i18n/de.json +0 -202
  62. package/lib/assets/i18n/en.json +0 -202
@@ -1,10 +1,5 @@
1
1
  import { MatSnackBarHorizontalPosition, MatSnackBarVerticalPosition } from "@angular/material/snack-bar";
2
- export type SnackBarLevel = 'info' | 'success' | 'warning' | 'danger';
3
- export interface SnackBarData {
4
- level: SnackBarLevel;
5
- message: string;
6
- action?: string;
7
- }
2
+ import { SnackBarLevel } from "./snack-bar-level.model";
8
3
  export interface SnackBarOptions {
9
4
  duration?: number;
10
5
  horizontalPosition?: MatSnackBarHorizontalPosition;
@@ -1 +1,2 @@
1
1
  export * from './halo-focus';
2
+ export * from './session';
@@ -0,0 +1 @@
1
+ export * from './provide-session.provider';
@@ -0,0 +1,43 @@
1
+ import { EnvironmentProviders } from '@angular/core';
2
+ /**
3
+ * Provides and initializes the SessionService at application startup.
4
+ *
5
+ * What it does
6
+ * - Registers SessionService as a singleton to manage session expiry across the app
7
+ * - Runs `session.init()` via APP_INITIALIZER when the app boots
8
+ * - Initializes cross-tab BroadcastChannel sync, HTTP debounce hooks, and user-activity listeners
9
+ * - Automatically tracks HTTP activity and user interactions to extend sessions
10
+ *
11
+ * Usage scenarios
12
+ *
13
+ * Scenario 1: Known session duration at startup
14
+ * When the session duration is predetermined and constant, provide it here.
15
+ * ```ts
16
+ * // app.config.ts
17
+ * export const appConfig: ApplicationConfig = {
18
+ * providers: [
19
+ * provideSession(30 * 60 * 1000), // 30 minutes
20
+ * ]
21
+ * };
22
+ * ```
23
+ *
24
+ * Scenario 2: Dynamic session duration from backend
25
+ * When the session duration is determined after login (e.g., from backend response),
26
+ * omit the parameter here and call `startSession()` after receiving the duration.
27
+ * ```ts
28
+ * // app.config.ts
29
+ * export const appConfig: ApplicationConfig = {
30
+ * providers: [
31
+ * provideSession(), // Defaults to 30 minutes until startSession() is called
32
+ * ]
33
+ * };
34
+ *
35
+ * // After login in AuthService:
36
+ * login().subscribe(response => {
37
+ * sessionService.startSession(response.sessionExpiresIn); // Set actual duration
38
+ * });
39
+ * ```
40
+ *
41
+ * @param sessionDuration Optional session duration in milliseconds. If omitted, defaults to 30 minutes (1800000ms).
42
+ */
43
+ export declare function provideSession(sessionDuration?: number): EnvironmentProviders;
@@ -1,4 +1,4 @@
1
1
  export * from './halo-focus/halo-focus.service';
2
- export * from './snack-bar/snack-bar.interface';
3
- export * from './snack-bar/snack-bar.service';
4
2
  export * from './halo-utility/halo-utility.service';
3
+ export * from './session/session.service';
4
+ export * from './snack-bar/snack-bar.service';
@@ -0,0 +1,113 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Manages client-side session expiry: persists expiration, tracks user and HTTP activity,
4
+ * shows a pre-expiry popup with an extend CTA, and syncs state across tabs via BroadcastChannel.
5
+ *
6
+ * Key behaviors
7
+ * - Persists `expiresAt` in AppCacheService so multiple tabs share the same deadline
8
+ * - Automatically listens to BackendService HTTP activity (debounced) to extend sessions
9
+ * - Extends backend session by calling `/api-web/api/idm/whoami` endpoint (skipped when triggered by HTTP activity)
10
+ * - User activity (mouse, keyboard, scroll) inside a defined window will auto-extend the session
11
+ * - Displays a snack popup shortly before expiry; user can extend from the popup
12
+ * - Broadcasts `SessionExtended` / `SessionLogout` to keep tabs in sync
13
+ *
14
+ * Setup options
15
+ *
16
+ * Option 1: Known session duration at startup
17
+ * Use when the session duration is known in advance and remains constant.
18
+ * ```ts
19
+ * // app.config.ts
20
+ * export const appConfig: ApplicationConfig = {
21
+ * providers: [
22
+ * provideSession(30 * 60 * 1000), // 30 minutes - set at app startup
23
+ * ]
24
+ * };
25
+ * ```
26
+ *
27
+ * Option 2: Dynamic session duration from backend
28
+ * Use when the session duration is determined after login (e.g., from backend response).
29
+ * ```ts
30
+ * // app.config.ts
31
+ * export const appConfig: ApplicationConfig = {
32
+ * providers: [
33
+ * provideSession(), // Initialize without duration (defaults to 30 minutes)
34
+ * ]
35
+ * };
36
+ *
37
+ * // After login in AuthService:
38
+ * login().subscribe(response => {
39
+ * const sessionDuration = response.sessionExpiresIn; // from backend
40
+ * sessionService.startSession(sessionDuration);
41
+ * });
42
+ * ```
43
+ * Note: If no duration is provided to provideSession(), a default of 30 minutes is used until startSession() is called.
44
+ *
45
+ * Lifecycle notes
46
+ * - HTTP activity is automatically tracked via BackendService.httpCommunicationOccurred$
47
+ * - Backend session is extended via whoami endpoint, except when triggered by HTTP activity or cross-tab sync
48
+ * - Internal flag prevents recursive whoami calls when the endpoint itself triggers httpCommunicationOccurred$
49
+ * - Warning and logout timers are reset on every extend
50
+ * - All timers and the popup are cleared on logout
51
+ * - Broadcast messages are listened for and mirrored across tabs
52
+ * - For UI activity, this service listens to DOM events (mousemove, keydown, click, scroll)
53
+ */
54
+ export declare class SessionService {
55
+ #private;
56
+ private translate;
57
+ /**
58
+ * Initializes cross-tab listeners and activity hooks.
59
+ *
60
+ * IMPORTANT: This is automatically called by `provideSession()` via APP_INITIALIZER.
61
+ * You should NOT call this manually - just add `provideSession()` to your app providers.
62
+ *
63
+ * What it does:
64
+ * - Initializes session with provided or default duration value
65
+ * - Wires BroadcastChannel subscriptions for cross-tab sync
66
+ * - Subscribes to BackendService.httpCommunicationOccurred$ for automatic HTTP activity tracking
67
+ * - Attaches DOM event listeners (mousemove, keydown, click, scroll) for the activity window
68
+ */
69
+ init(sessionDuration?: number): void;
70
+ /**
71
+ * Sets the session duration and starts the session lifecycle.
72
+ *
73
+ * Use this method when you need to set or update the session duration dynamically,
74
+ * typically after receiving authentication/session information from the backend.
75
+ *
76
+ * This is the correct approach when:
77
+ * - Session duration is not known at application startup
78
+ * - Duration comes from a backend API response after login
79
+ * - You need to manually override the duration set via provideSession()
80
+ *
81
+ * Example:
82
+ * ```ts
83
+ * // After login in AuthService
84
+ * login().subscribe(response => {
85
+ * this.sessionService.startSession(response.sessionExpiresIn);
86
+ * });
87
+ * ```
88
+ *
89
+ * @param duration Total session length in milliseconds
90
+ */
91
+ startSession(duration: number): void;
92
+ /**
93
+ * Extends the session expiry, resets all timers, and optionally broadcasts to other tabs.
94
+ *
95
+ * @param broadcast When true (default), posts a BroadcastChannel message so other tabs sync
96
+ * @param expiresAt Optional custom expiry timestamp; if not provided, calculates based on session duration
97
+ * @param skipBackendCall When true, skips the whoami backend call (used when already triggered by HTTP activity)
98
+ */
99
+ extendSession(broadcast?: boolean, expiresAt?: number, skipBackendCall?: boolean): void;
100
+ private listenToChannel;
101
+ private scheduleActivityWindow;
102
+ private showPopup;
103
+ private scheduleLogout;
104
+ private performLogout;
105
+ private setupHttpDebounce;
106
+ private setupUserActivityTracking;
107
+ private resetAllTimers;
108
+ private getExpiresAt;
109
+ private setExpiresAt;
110
+ private clearTimers;
111
+ static ɵfac: i0.ɵɵFactoryDeclaration<SessionService, never>;
112
+ static ɵprov: i0.ɵɵInjectableDeclaration<SessionService>;
113
+ }
@@ -1,12 +1,12 @@
1
1
  import { MatSnackBarRef } from '@angular/material/snack-bar';
2
- import { SnackBarLevel, SnackBarOptions } from './snack-bar.interface';
2
+ import { SnackBarLevel, SnackBarOptions } from '../../models';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class SnackBarService {
5
5
  #private;
6
- info(message: string, action?: string): MatSnackBarRef<SnackBarComponent>;
7
- success(message: string, action?: string): MatSnackBarRef<SnackBarComponent>;
8
- warning(message: string, action?: string): MatSnackBarRef<SnackBarComponent>;
9
- danger(message: string, action?: string): MatSnackBarRef<SnackBarComponent>;
6
+ info(message: string, action?: string, duration?: number): MatSnackBarRef<SnackBarComponent>;
7
+ success(message: string, action?: string, duration?: number): MatSnackBarRef<SnackBarComponent>;
8
+ warning(message: string, action?: string, duration?: number): MatSnackBarRef<SnackBarComponent>;
9
+ danger(message: string, action?: string, duration?: number): MatSnackBarRef<SnackBarComponent>;
10
10
  snack(message: string, options: SnackBarOptions): MatSnackBarRef<SnackBarComponent>;
11
11
  static ɵfac: i0.ɵɵFactoryDeclaration<SnackBarService, never>;
12
12
  static ɵprov: i0.ɵɵInjectableDeclaration<SnackBarService>;
@@ -1,4 +1,5 @@
1
1
  export * from './lib/object-relationship.module';
2
2
  export * from './lib/object-relationship.component';
3
+ export * from './lib/object-relationship.const';
3
4
  export * from './lib/object-relationship.interface';
4
5
  export * from './lib/actions/add-relationship/add-relationship.component';
@@ -5,13 +5,22 @@ import * as i0 from "@angular/core";
5
5
  export declare class AddRelationshipComponent {
6
6
  #private;
7
7
  readonly translate: TranslateService;
8
+ targetTypeLabels: Record<string, string>;
9
+ targetTypeFilterControl: FormControl<string[] | null>;
10
+ targetTypeFilterValue: import("@angular/core").Signal<string[] | null>;
8
11
  object: import("@angular/core").InputSignal<DmsObject>;
9
12
  config: import("@angular/core").InputSignal<RelationshipComponentConfig>;
10
13
  supportedRelationships: import("@angular/core").Signal<Relationship[]>;
14
+ filteredRelationships: import("@angular/core").Signal<Relationship[]>;
11
15
  availableTargetTypes: import("@angular/core").Signal<string[]>;
16
+ labeledTargetTypes: import("@angular/core").Signal<{
17
+ id: string;
18
+ label: string;
19
+ }[]>;
12
20
  sourceNode: import("@angular/core").Signal<{
13
21
  title: string;
14
22
  description: string | undefined;
23
+ icon: string | undefined;
15
24
  }>;
16
25
  form: FormGroup<{
17
26
  relation: FormControl<Relationship | null>;
@@ -20,6 +29,7 @@ export declare class AddRelationshipComponent {
20
29
  busy: import("@angular/core").WritableSignal<boolean>;
21
30
  error: import("@angular/core").WritableSignal<string | null>;
22
31
  optionCompareWith(o1: Relationship | undefined, o2: Relationship | undefined): boolean;
32
+ onRelationSelect(idx: number[]): void;
23
33
  submit(): void;
24
34
  close(): void;
25
35
  static ɵfac: i0.ɵɵFactoryDeclaration<AddRelationshipComponent, never>;
@@ -3,21 +3,34 @@ import { Relationship } from '@yuuvis/client-core';
3
3
  import { AutocompleteItem } from '@yuuvis/client-framework/autocomplete';
4
4
  import { RelationshipComponentConfig } from '../../object-relationship.interface';
5
5
  import * as i0 from "@angular/core";
6
+ interface AutocompleteItemValue {
7
+ description?: string;
8
+ data: Record<string, unknown>;
9
+ }
6
10
  export declare class RelationshipTargetSearchComponent implements ControlValueAccessor {
7
11
  #private;
8
12
  supportedRelationships: import("@angular/core").InputSignal<Relationship[]>;
9
- availableTargetTypes: import("@angular/core").InputSignal<string[]>;
13
+ sourceNode: import("@angular/core").InputSignal<string>;
14
+ targetTypes: import("@angular/core").InputSignal<string[]>;
10
15
  config: import("@angular/core").InputSignal<RelationshipComponentConfig>;
11
- autocompleteRes: AutocompleteItem[];
16
+ autocompleteRes: AutocompleteItem<AutocompleteItemValue>[];
17
+ innerValue: import("@angular/core").WritableSignal<AutocompleteItem<AutocompleteItemValue> | undefined>;
18
+ mappedValue: import("@angular/core").Signal<{
19
+ title: string;
20
+ description?: string;
21
+ icon?: string;
22
+ } | undefined>;
12
23
  busy: import("@angular/core").WritableSignal<boolean>;
13
- acFormControl: FormControl<AutocompleteItem[] | null>;
24
+ acFormControl: FormControl<AutocompleteItem<AutocompleteItemValue> | null>;
14
25
  constructor();
15
26
  autocompleteFn(term: string): void;
27
+ reset(): void;
16
28
  propagateChange: (_: any) => void;
17
29
  writeValue(value: any): void;
18
30
  registerOnChange(fn: any): void;
19
31
  registerOnTouched(fn: any): void;
20
32
  setDisabledState?(isDisabled: boolean): void;
21
33
  static ɵfac: i0.ɵɵFactoryDeclaration<RelationshipTargetSearchComponent, never>;
22
- static ɵcmp: i0.ɵɵComponentDeclaration<RelationshipTargetSearchComponent, "yuv-relationship-target-search", never, { "supportedRelationships": { "alias": "supportedRelationships"; "required": true; "isSignal": true; }; "availableTargetTypes": { "alias": "availableTargetTypes"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<RelationshipTargetSearchComponent, "yuv-relationship-target-search", never, { "supportedRelationships": { "alias": "supportedRelationships"; "required": true; "isSignal": true; }; "sourceNode": { "alias": "sourceNode"; "required": true; "isSignal": true; }; "targetTypes": { "alias": "targetTypes"; "required": false; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
23
35
  }
36
+ export {};
@@ -6,6 +6,5 @@ export declare const NODE_FONT_SETTINGS: Font;
6
6
  export declare const EDGE_SETTINGS: Partial<Edge>;
7
7
  export declare const EDGE_FONT_SETTINGS: Font;
8
8
  export declare const ADD_RELATIONSHIP_DIALOG_OPTIONS: {
9
- width: string;
10
9
  maxWidth: string;
11
10
  };
@@ -23,6 +23,7 @@ export declare class ObjectVersionsComponent {
23
23
  versions: import("@angular/core").WritableSignal<DmsObject[]>;
24
24
  selectedVersion: import("@angular/core").WritableSignal<DmsObject | undefined>;
25
25
  error: import("@angular/core").WritableSignal<string | undefined>;
26
+ selectedIndex: import("@angular/core").WritableSignal<number | null>;
26
27
  isCurrentVersion: import("@angular/core").Signal<boolean>;
27
28
  metadata: Partial<Metadata>;
28
29
  itemSelected(selectedIndex: number[]): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuuvis/client-framework",
3
- "version": "2.10.3",
3
+ "version": "2.11.1",
4
4
  "author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
@@ -8,15 +8,15 @@
8
8
  "@angular/common": "^19.2.1",
9
9
  "@angular/core": "^19.2.1",
10
10
  "angular-gridster2": "^19.0.0",
11
- "@yuuvis/client-core": "^2.10.3",
12
- "@yuuvis/client-shell-core": "^2.10.3",
11
+ "@yuuvis/client-core": "^2.11.1",
12
+ "@yuuvis/client-shell-core": "^2.11.1",
13
13
  "ng-dynamic-component": "^10.8.2",
14
14
  "modern-normalize": "^3.0.1"
15
15
  },
16
16
  "dependencies": {
17
17
  "@angular/material": "^19.2.15",
18
18
  "@ngrx/signals": "^19.2.0",
19
- "@yuuvis/material": "2.10.3",
19
+ "@yuuvis/material": "2.11.1",
20
20
  "@yuuvis/media-viewer": "^2.0.12",
21
21
  "angular-split": "^19.0.0",
22
22
  "vis-network": "^10.0.2",
@@ -68,14 +68,14 @@
68
68
  "types": "./list/index.d.ts",
69
69
  "default": "./fesm2022/yuuvis-client-framework-list.mjs"
70
70
  },
71
- "./metadata-form": {
72
- "types": "./metadata-form/index.d.ts",
73
- "default": "./fesm2022/yuuvis-client-framework-metadata-form.mjs"
74
- },
75
71
  "./master-details": {
76
72
  "types": "./master-details/index.d.ts",
77
73
  "default": "./fesm2022/yuuvis-client-framework-master-details.mjs"
78
74
  },
75
+ "./metadata-form": {
76
+ "types": "./metadata-form/index.d.ts",
77
+ "default": "./fesm2022/yuuvis-client-framework-metadata-form.mjs"
78
+ },
79
79
  "./metadata-form-defaults": {
80
80
  "types": "./metadata-form-defaults/index.d.ts",
81
81
  "default": "./fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs"
@@ -48,7 +48,7 @@ import * as i0 from "@angular/core";
48
48
  * } *
49
49
  * ```
50
50
  */
51
- export declare class QueryListComponent {
51
+ export declare class QueryListComponent<T = any> {
52
52
  #private;
53
53
  list: import("@angular/core").Signal<ListComponent>;
54
54
  itemTemplate: import("@angular/core").Signal<TemplateRef<any> | undefined>;
@@ -66,7 +66,7 @@ export declare class QueryListComponent {
66
66
  /**
67
67
  * Optional transformer function to map SearchResultItem to a custom format.
68
68
  */
69
- transformer: import("@angular/core").InputSignal<((items: SearchResultItem[]) => unknown[]) | null | undefined>;
69
+ transformer: import("@angular/core").InputSignal<((items: SearchResultItem[]) => T[]) | null | undefined>;
70
70
  /**
71
71
  * Function that returns `true` if selection changes should be prevented.
72
72
  * This can be used to temporarily block selection changes, e.g. while
@@ -103,7 +103,7 @@ export declare class QueryListComponent {
103
103
  /**
104
104
  * The list of result items after applying the optional transformer.
105
105
  */
106
- resultItems: import("@angular/core").Signal<unknown[]>;
106
+ resultItems: import("@angular/core").Signal<T[]>;
107
107
  /**
108
108
  * Number of items to fetch per page when executing the query.
109
109
  * @default SearchService.DEFAULT_QUERY_SIZE
@@ -150,7 +150,7 @@ export declare class QueryListComponent {
150
150
  */
151
151
  updateListItems(updates: {
152
152
  index: number;
153
- value: unknown;
153
+ value: T;
154
154
  }[]): void;
155
155
  /**
156
156
  * Optional array of items to be shown in addition to the query results.
@@ -168,11 +168,12 @@ export declare class QueryListComponent {
168
168
  * @param scrollTo If `true`, the list will scroll to the top after dropping
169
169
  * in the items. Default is `true`.
170
170
  */
171
- dropItems(items: Record<string, unknown>[], scrollTo?: boolean): void;
171
+ dropItems(items: T[], scrollTo?: boolean): void;
172
172
  /**
173
173
  * Selects multiple items in the list.
174
174
  */
175
175
  multiSelect(index: number[]): void;
176
+ select(index: number): void;
176
177
  /**
177
178
  * Clear the current selection.
178
179
  * @param silent If `true`, the `itemSelect` event will not be emitted.
@@ -185,6 +186,6 @@ export declare class QueryListComponent {
185
186
  runTransformerAgain(): void;
186
187
  changePage(pe: PageEvent): void;
187
188
  goToPage(page: number): void;
188
- static ɵfac: i0.ɵɵFactoryDeclaration<QueryListComponent, never>;
189
- static ɵcmp: i0.ɵɵComponentDeclaration<QueryListComponent, "yuv-query-list", never, { "query": { "alias": "query"; "required": false; "isSignal": true; }; "idProperty": { "alias": "idProperty"; "required": false; "isSignal": true; }; "transformer": { "alias": "transformer"; "required": false; "isSignal": true; }; "preventChangeUntil": { "alias": "preventChangeUntil"; "required": false; "isSignal": true; }; "autoSelect": { "alias": "autoSelect"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "enableDragSelect": { "alias": "enableDragSelect"; "required": false; "isSignal": true; }; "multiselect": { "alias": "multiselect"; "required": false; "isSignal": true; }; "selfHandleSelection": { "alias": "selfHandleSelection"; "required": false; "isSignal": true; }; }, { "itemSelect": "itemSelect"; "dragSelectChange": "dragSelectChange"; "itemDoubleClick": "itemDoubleClick"; "queryResult": "queryResult"; }, ["itemTemplate", "emptyTemplate"], never, true, never>;
189
+ static ɵfac: i0.ɵɵFactoryDeclaration<QueryListComponent<any>, never>;
190
+ static ɵcmp: i0.ɵɵComponentDeclaration<QueryListComponent<any>, "yuv-query-list", never, { "query": { "alias": "query"; "required": false; "isSignal": true; }; "idProperty": { "alias": "idProperty"; "required": false; "isSignal": true; }; "transformer": { "alias": "transformer"; "required": false; "isSignal": true; }; "preventChangeUntil": { "alias": "preventChangeUntil"; "required": false; "isSignal": true; }; "autoSelect": { "alias": "autoSelect"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "enableDragSelect": { "alias": "enableDragSelect"; "required": false; "isSignal": true; }; "multiselect": { "alias": "multiselect"; "required": false; "isSignal": true; }; "selfHandleSelection": { "alias": "selfHandleSelection"; "required": false; "isSignal": true; }; }, { "itemSelect": "itemSelect"; "dragSelectChange": "dragSelectChange"; "itemDoubleClick": "itemDoubleClick"; "queryResult": "queryResult"; }, ["itemTemplate", "emptyTemplate"], never, true, never>;
190
191
  }
@@ -16,7 +16,7 @@ export declare class TileListComponent implements OnInit {
16
16
  menuComponent: Signal<TileActionsMenuComponent | undefined>;
17
17
  menu: Signal<import("@angular/material/menu").MatMenu | null>;
18
18
  emptyContent: Signal<ElementRef<any> | undefined>;
19
- list: Signal<QueryListComponent>;
19
+ list: Signal<QueryListComponent<TileData>>;
20
20
  menuTriggers: Signal<readonly MatMenuTrigger[]>;
21
21
  transformer: (res: SearchResultItem[]) => {
22
22
  actions: Action[];
@@ -125,12 +125,14 @@ export declare class TileListComponent implements OnInit {
125
125
  contextMenuHandler(event: MouseEvent, index: number): void;
126
126
  executeAction(t: InnerTileData, a: Action, evt: Event): void;
127
127
  selectById(ids: string[]): void;
128
- selectByIndex(idx: number, evt?: MouseEvent | KeyboardEvent): void;
128
+ multiSelect(index: number[]): void;
129
+ select(index: number): void;
129
130
  onQueryResult(e: {
130
131
  totalCount: number;
131
132
  }): void;
132
133
  onListItemsSelect(sel: number[]): void;
133
134
  refresh(): void;
135
+ dropItems(objects: DmsObject[]): void;
134
136
  applyFlavor(flavor: ObjectFlavor): void;
135
137
  /**
136
138
  * Updates an item in the list at the specified index with the provided value.