@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.
- package/autocomplete/lib/autocomplete.component.d.ts +4 -4
- package/autocomplete/lib/autocomplete.interface.d.ts +2 -2
- package/common/lib/services/index.d.ts +1 -0
- package/common/lib/services/layout-settings/layout-settings.service.d.ts +15 -0
- package/common/lib/services/theme/index.d.ts +3 -0
- package/common/lib/services/theme/theme.models.d.ts +16 -0
- package/common/lib/services/theme/theme.provider.d.ts +4 -0
- package/common/lib/services/theme/theme.service.d.ts +16 -0
- package/fesm2022/yuuvis-client-framework-common.mjs +213 -4
- package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-datepicker.mjs +1 -1
- package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-forms.mjs +60 -37
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs +2 -2
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs +135 -52
- package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-versions.mjs +4 -3
- package/fesm2022/yuuvis-client-framework-object-versions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-query-list.mjs +5 -4
- package/fesm2022/yuuvis-client-framework-query-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-tile-list.mjs +20 -4
- package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework.mjs +616 -98
- package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
- package/forms/lib/elements/datetime/datetime.component.d.ts +0 -1
- package/forms/lib/elements/datetime-range/datetime-range.component.d.ts +6 -5
- package/forms/lib/elements/organization/organization.component.d.ts +1 -1
- package/forms/lib/elements/organization-set/organization-set.component.d.ts +1 -1
- package/index.d.ts +5 -2
- package/lib/config/index.d.ts +1 -0
- package/lib/config/session/index.d.ts +3 -0
- package/lib/config/session/session-activity-window-before-end.const.d.ts +43 -0
- package/lib/config/session/session-default-duration.const.d.ts +47 -0
- package/lib/config/session/session-popup-before-end.const.d.ts +47 -0
- package/lib/enums/channel-message.enum.d.ts +4 -0
- package/lib/enums/index.d.ts +1 -0
- package/lib/models/index.d.ts +2 -0
- package/lib/models/session/channel-payload.model.d.ts +5 -0
- package/lib/models/session/index.d.ts +1 -0
- package/lib/models/snack-bar/index.d.ts +3 -0
- package/lib/models/snack-bar/snack-bar-data.model.d.ts +6 -0
- package/lib/models/snack-bar/snack-bar-level.model.d.ts +1 -0
- package/lib/{services/snack-bar/snack-bar.interface.d.ts → models/snack-bar/snack-bar-options.model.d.ts} +1 -6
- package/lib/providers/index.d.ts +1 -0
- package/lib/providers/session/index.d.ts +1 -0
- package/lib/providers/session/provide-session.provider.d.ts +43 -0
- package/lib/services/index.d.ts +2 -2
- package/lib/services/session/session.service.d.ts +113 -0
- package/lib/services/snack-bar/snack-bar.service.d.ts +5 -5
- package/object-relationship/index.d.ts +1 -0
- package/object-relationship/lib/actions/add-relationship/add-relationship.component.d.ts +10 -0
- package/object-relationship/lib/actions/relationship-target-search/relationship-target-search.component.d.ts +17 -4
- package/object-relationship/lib/object-relationship.const.d.ts +0 -1
- package/object-versions/lib/object-versions.component.d.ts +1 -0
- package/package.json +8 -8
- package/query-list/lib/query-list.component.d.ts +8 -7
- package/tile-list/lib/tile-list/tile-list.component.d.ts +4 -2
- package/lib/assets/i18n/de.json +0 -202
- package/lib/assets/i18n/en.json +0 -202
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { MatSnackBarHorizontalPosition, MatSnackBarVerticalPosition } from "@angular/material/snack-bar";
|
|
2
|
-
|
|
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;
|
package/lib/providers/index.d.ts
CHANGED
|
@@ -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;
|
package/lib/services/index.d.ts
CHANGED
|
@@ -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 '
|
|
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
|
-
|
|
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
|
|
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; }; "
|
|
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 {};
|
|
@@ -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.
|
|
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.
|
|
12
|
-
"@yuuvis/client-shell-core": "^2.
|
|
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.
|
|
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[]) =>
|
|
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<
|
|
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:
|
|
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:
|
|
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
|
|
189
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<QueryListComponent
|
|
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
|
-
|
|
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.
|