@yuuvis/client-framework 3.1.0 → 3.2.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 (65) hide show
  1. package/fesm2022/yuuvis-client-framework-actions.mjs +209 -126
  2. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  3. package/fesm2022/yuuvis-client-framework-app-bar.mjs +3 -3
  4. package/fesm2022/yuuvis-client-framework-app-bar.mjs.map +1 -1
  5. package/fesm2022/yuuvis-client-framework-badges.mjs +379 -0
  6. package/fesm2022/yuuvis-client-framework-badges.mjs.map +1 -0
  7. package/fesm2022/yuuvis-client-framework-breadcrumb.mjs +3 -3
  8. package/fesm2022/yuuvis-client-framework-breadcrumb.mjs.map +1 -1
  9. package/fesm2022/yuuvis-client-framework-clipboard.mjs +8 -8
  10. package/fesm2022/yuuvis-client-framework-clipboard.mjs.map +1 -1
  11. package/fesm2022/yuuvis-client-framework-datepicker.mjs +31 -31
  12. package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -1
  13. package/fesm2022/yuuvis-client-framework-forms.mjs +65 -66
  14. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  15. package/fesm2022/yuuvis-client-framework-icons.mjs +9 -9
  16. package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
  17. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +7 -7
  18. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
  19. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +15 -15
  20. package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
  21. package/fesm2022/yuuvis-client-framework-object-details.mjs +53 -46
  22. package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
  23. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +18 -18
  24. package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
  25. package/fesm2022/yuuvis-client-framework-object-form.mjs +32 -32
  26. package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
  27. package/fesm2022/yuuvis-client-framework-object-preview.mjs +9 -9
  28. package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -1
  29. package/fesm2022/yuuvis-client-framework-object-relationship.mjs +28 -28
  30. package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
  31. package/fesm2022/yuuvis-client-framework-object-summary.mjs +14 -14
  32. package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
  33. package/fesm2022/yuuvis-client-framework-object-versions.mjs +18 -12
  34. package/fesm2022/yuuvis-client-framework-object-versions.mjs.map +1 -1
  35. package/fesm2022/yuuvis-client-framework-pagination.mjs +3 -3
  36. package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
  37. package/fesm2022/yuuvis-client-framework-query-list.mjs +7 -7
  38. package/fesm2022/yuuvis-client-framework-query-list.mjs.map +1 -1
  39. package/fesm2022/yuuvis-client-framework-renderer.mjs +39 -39
  40. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
  41. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +3 -3
  42. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  43. package/fesm2022/yuuvis-client-framework-simple-search.mjs +3 -3
  44. package/fesm2022/yuuvis-client-framework-simple-search.mjs.map +1 -1
  45. package/fesm2022/yuuvis-client-framework-sort.mjs +3 -3
  46. package/fesm2022/yuuvis-client-framework-sort.mjs.map +1 -1
  47. package/fesm2022/yuuvis-client-framework-tile-list.mjs +163 -125
  48. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  49. package/fesm2022/yuuvis-client-framework-token-search.mjs +7 -7
  50. package/fesm2022/yuuvis-client-framework-token-search.mjs.map +1 -1
  51. package/fesm2022/yuuvis-client-framework-tree.mjs +9 -9
  52. package/fesm2022/yuuvis-client-framework-tree.mjs.map +1 -1
  53. package/fesm2022/yuuvis-client-framework-upload-progress.mjs +10 -10
  54. package/fesm2022/yuuvis-client-framework-upload-progress.mjs.map +1 -1
  55. package/fesm2022/yuuvis-client-framework.mjs +96 -51
  56. package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
  57. package/lib/assets/i18n/de.json +12 -1
  58. package/lib/assets/i18n/en.json +12 -1
  59. package/package.json +9 -5
  60. package/types/yuuvis-client-framework-actions.d.ts +81 -52
  61. package/types/yuuvis-client-framework-badges.d.ts +194 -0
  62. package/types/yuuvis-client-framework-object-details.d.ts +5 -5
  63. package/types/yuuvis-client-framework-object-versions.d.ts +1 -0
  64. package/types/yuuvis-client-framework-tile-list.d.ts +10 -6
  65. package/types/yuuvis-client-framework.d.ts +13 -0
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injector, Signal, TemplateRef } from '@angular/core';
2
+ import { TemplateRef, Injector, Signal, InjectionToken } from '@angular/core';
3
3
  import * as i1 from '@ngx-translate/core';
4
- import { MatIconRegistry } from '@angular/material/icon';
4
+ import { CdkMenu, CdkMenuItem, CdkContextMenuTrigger } from '@angular/cdk/menu';
5
5
  import { DmsObject } from '@yuuvis/client-core';
6
6
  import { Observable } from 'rxjs';
7
- import { CdkMenu, CdkMenuItem, CdkContextMenuTrigger } from '@angular/cdk/menu';
7
+ import { MatIconRegistry } from '@angular/material/icon';
8
8
 
9
9
  /**
10
10
  * Module for the actions library.
@@ -15,6 +15,14 @@ declare class ActionsModule {
15
15
  static ɵinj: i0.ɵɵInjectorDeclaration<ActionsModule>;
16
16
  }
17
17
 
18
+ declare const ACTION_ICON: {
19
+ download: string;
20
+ delete: string;
21
+ copy: string;
22
+ cut: string;
23
+ manageFlavor: string;
24
+ };
25
+
18
26
  type ActionClass = {
19
27
  new (...args: any[]): any;
20
28
  };
@@ -120,6 +128,69 @@ declare const BASE_ACTION: {
120
128
  delete: string;
121
129
  };
122
130
 
131
+ interface ContextMenuAction extends Action {
132
+ iconName?: string;
133
+ disabled?: boolean;
134
+ executeFn?: (...args: any[]) => void;
135
+ }
136
+ interface ContextMenuItemSelectEvent {
137
+ action: ContextMenuAction;
138
+ }
139
+
140
+ declare class ContextmenuComponent {
141
+ actions: i0.InputSignal<ContextMenuAction[]>;
142
+ selection: i0.InputSignal<unknown[]>;
143
+ itemSelect: i0.OutputEmitterRef<ContextMenuItemSelectEvent>;
144
+ private translate;
145
+ cdkMenu: i0.Signal<CdkMenu>;
146
+ menuItems: i0.Signal<readonly (CdkMenuItem | null)[]>;
147
+ sortedActions: i0.Signal<ContextMenuAction[]>;
148
+ constructor();
149
+ onItemTrigger({ action }: ContextMenuItemSelectEvent): void;
150
+ static ɵfac: i0.ɵɵFactoryDeclaration<ContextmenuComponent, never>;
151
+ static ɵcmp: i0.ɵɵComponentDeclaration<ContextmenuComponent, "yuv-contextmenu", never, { "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; }, { "itemSelect": "itemSelect"; }, never, never, true, never>;
152
+ }
153
+
154
+ declare class YuvContextMenuTriggerDirective extends CdkContextMenuTrigger {
155
+ #private;
156
+ menuTemplateRef: TemplateRef<unknown>;
157
+ triggerWhen: i0.InputSignal<boolean | null>;
158
+ constructor();
159
+ _openOnContextMenu(event: MouseEvent): void;
160
+ static ɵfac: i0.ɵɵFactoryDeclaration<YuvContextMenuTriggerDirective, never>;
161
+ static ɵdir: i0.ɵɵDirectiveDeclaration<YuvContextMenuTriggerDirective, "[yuvContextMenuTrigger]", ["yuvContextMenuTrigger"], { "menuTemplateRef": { "alias": "yuvContextMenuTrigger"; "required": false; }; "triggerWhen": { "alias": "yuvContextMenuTriggerWhen"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
162
+ }
163
+
164
+ declare const ActionPriorityLevel: {
165
+ readonly LEVEL_1: 1;
166
+ readonly LEVEL_2: 2;
167
+ readonly LEVEL_3: 3;
168
+ readonly LEVEL_4: 4;
169
+ readonly LEVEL_5: 5;
170
+ readonly LEVEL_6: 6;
171
+ readonly LEVEL_7: 7;
172
+ readonly LEVEL_8: 8;
173
+ readonly LEVEL_9: 9;
174
+ readonly LEVEL_10: 10;
175
+ };
176
+
177
+ /**
178
+ * Service responsible for validating actions on DMS objects.
179
+ * Provides checks for document lock states and related user information.
180
+ */
181
+ /** @deprecated */
182
+ declare class ActionsValidationService {
183
+ #private;
184
+ private readonly translate;
185
+ /** @deprecated */
186
+ checkDocumentLock(dmsObject: DmsObject): Observable<{
187
+ state: boolean;
188
+ description?: string;
189
+ }>;
190
+ static ɵfac: i0.ɵɵFactoryDeclaration<ActionsValidationService, never>;
191
+ static ɵprov: i0.ɵɵInjectableDeclaration<ActionsValidationService>;
192
+ }
193
+
123
194
  declare class ActionsService {
124
195
  #private;
125
196
  readonly injector: Injector;
@@ -176,34 +247,33 @@ declare class ActionsService {
176
247
  * are available for use.
177
248
  */
178
249
  registerDefaultActions(): void;
179
- private _actionsSupportsType;
180
250
  static ɵfac: i0.ɵɵFactoryDeclaration<ActionsService, never>;
181
251
  static ɵprov: i0.ɵɵInjectableDeclaration<ActionsService>;
182
252
  }
183
253
 
254
+ declare const ACTION_CONTEXT_TOKEN: InjectionToken<ActionContext>;
255
+
184
256
  declare class DeleteAction extends AbstractContextAction implements Action {
185
257
  #private;
186
- private translate;
187
- private retention;
188
258
  id: string;
189
259
  label: any;
190
260
  description: any;
191
- priority: number;
261
+ priority: 8;
192
262
  icon: string;
193
263
  group: string;
194
264
  range: SelectionRange;
195
265
  supports: ActionSupport;
266
+ isDisabled(items: DmsObject[]): Observable<boolean>;
196
267
  isExecutable(items: DmsObject[]): Observable<boolean>;
197
268
  run(items: DmsObject[]): Observable<boolean>;
198
269
  }
199
270
 
200
271
  declare class DownloadAction extends AbstractContextAction implements Action {
201
- private translate;
202
- private dmsService;
272
+ #private;
203
273
  id: string;
204
274
  label: any;
205
275
  description: any;
206
- priority: number;
276
+ priority: 2;
207
277
  icon: string;
208
278
  group: string;
209
279
  range: SelectionRange;
@@ -212,46 +282,5 @@ declare class DownloadAction extends AbstractContextAction implements Action {
212
282
  run(selection: DmsObject[]): Observable<boolean>;
213
283
  }
214
284
 
215
- declare const ACTION_ICON: {
216
- download: string;
217
- delete: string;
218
- copy: string;
219
- cut: string;
220
- manageFlavor: string;
221
- };
222
-
223
- interface ContextMenuAction extends Action {
224
- iconName?: string;
225
- disabled?: boolean;
226
- executeFn?: (...args: any[]) => void;
227
- }
228
- interface ContextMenuItemSelectEvent {
229
- action: ContextMenuAction;
230
- }
231
-
232
- declare class ContextmenuComponent {
233
- actions: i0.InputSignal<ContextMenuAction[]>;
234
- selection: i0.InputSignal<unknown[]>;
235
- itemSelect: i0.OutputEmitterRef<ContextMenuItemSelectEvent>;
236
- private translate;
237
- cdkMenu: i0.Signal<CdkMenu>;
238
- menuItems: i0.Signal<readonly (CdkMenuItem | null)[]>;
239
- sortedActions: i0.Signal<ContextMenuAction[]>;
240
- constructor();
241
- onItemTrigger({ action }: ContextMenuItemSelectEvent): void;
242
- static ɵfac: i0.ɵɵFactoryDeclaration<ContextmenuComponent, never>;
243
- static ɵcmp: i0.ɵɵComponentDeclaration<ContextmenuComponent, "yuv-contextmenu", never, { "actions": { "alias": "actions"; "required": false; "isSignal": true; }; "selection": { "alias": "selection"; "required": false; "isSignal": true; }; }, { "itemSelect": "itemSelect"; }, never, never, true, never>;
244
- }
245
-
246
- declare class YuvContextMenuTriggerDirective extends CdkContextMenuTrigger {
247
- #private;
248
- menuTemplateRef: TemplateRef<unknown>;
249
- triggerWhen: i0.InputSignal<boolean | null>;
250
- constructor();
251
- _openOnContextMenu(event: MouseEvent): void;
252
- static ɵfac: i0.ɵɵFactoryDeclaration<YuvContextMenuTriggerDirective, never>;
253
- static ɵdir: i0.ɵɵDirectiveDeclaration<YuvContextMenuTriggerDirective, "[yuvContextMenuTrigger]", ["yuvContextMenuTrigger"], { "menuTemplateRef": { "alias": "yuvContextMenuTrigger"; "required": false; }; "triggerWhen": { "alias": "yuvContextMenuTriggerWhen"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
254
- }
255
-
256
- export { ACTION_ICON, AbstractContextAction, ActionsModule, ActionsService, BASE_ACTION, ContextmenuComponent, DeleteAction, DownloadAction, SelectionRange, YuvContextMenuTriggerDirective };
285
+ export { ACTION_CONTEXT_TOKEN, ACTION_ICON, AbstractContextAction, ActionPriorityLevel, ActionsModule, ActionsService, ActionsValidationService, BASE_ACTION, ContextmenuComponent, DeleteAction, DownloadAction, SelectionRange, YuvContextMenuTriggerDirective };
257
286
  export type { Action, ActionClass, ActionContext, ActionOptions, ActionSupport, BaseAction, ContextMenuAction, ContextMenuItemSelectEvent };
@@ -0,0 +1,194 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { Signal } from '@angular/core';
3
+ import { DmsObject, YuvUser, LockState } from '@yuuvis/client-core';
4
+ import { Severity } from '@yuuvis/material/badge';
5
+
6
+ type BadgeSeverity = Severity;
7
+
8
+ interface BadgeContext {
9
+ currentUser?: YuvUser;
10
+ lockState?: LockState;
11
+ }
12
+ interface BadgeRule {
13
+ field: string;
14
+ op: 'isSet' | 'equals' | 'tagPresent';
15
+ value?: unknown;
16
+ }
17
+ interface Badge {
18
+ id: string;
19
+ labelKey: string;
20
+ descriptionKey?: string;
21
+ icon: string;
22
+ svgIcon?: boolean;
23
+ severity?: BadgeSeverity;
24
+ priority?: number;
25
+ /**
26
+ * Marks this badge as a context-specific variant of another badge id.
27
+ * The parent badge id alone is configured (e.g. in tile-config); the
28
+ * registry implicitly evaluates variants whenever their parent is in
29
+ * the id filter. Variants are hidden from selection UIs.
30
+ */
31
+ variantOf?: string;
32
+ applies?: (dmsObject: DmsObject, ctx: BadgeContext) => boolean;
33
+ rule?: BadgeRule;
34
+ }
35
+
36
+ declare class BadgeChipComponent {
37
+ #private;
38
+ badge: _angular_core.InputSignal<Badge>;
39
+ showLabel: _angular_core.InputSignal<boolean>;
40
+ readonly tooltip: _angular_core.Signal<string>;
41
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeChipComponent, never>;
42
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeChipComponent, "yuv-badge-chip", never, { "badge": { "alias": "badge"; "required": true; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
43
+ }
44
+
45
+ declare class BadgeSelectComponent {
46
+ #private;
47
+ selectedBadgeIds: _angular_core.InputSignal<string[]>;
48
+ bucket: _angular_core.InputSignal<string | undefined>;
49
+ badgeSelect: _angular_core.OutputEmitterRef<Badge>;
50
+ readonly badges: Signal<Badge[]>;
51
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeSelectComponent, never>;
52
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeSelectComponent, "yuv-tile-badge-select", never, { "selectedBadgeIds": { "alias": "selectedBadgeIds"; "required": false; "isSignal": true; }; "bucket": { "alias": "bucket"; "required": false; "isSignal": true; }; }, { "badgeSelect": "badgeSelect"; }, never, never, true, never>;
53
+ }
54
+
55
+ /**
56
+ * Badge shown when an object is locked by another user.
57
+ */
58
+ declare const LOCK_BADGE: Badge;
59
+ /**
60
+ * Badge shown when an object is locked by the current user.
61
+ */
62
+ declare const LOCK_SELF_BADGE: Badge;
63
+
64
+ /**
65
+ * Badge definition for DMS objects that are subject to a destruction retention policy.
66
+ *
67
+ * This badge is displayed when a DMS object has the `DESTRUCTION_RETENTION` secondary object type
68
+ * assigned and an active or ongoing retention period. It helps users identify objects that are
69
+ * legally or organizationally protected from deletion during their retention period.
70
+ *
71
+ * **Applies when:**
72
+ * - The object includes the `SystemSOT.DESTRUCTION_RETENTION` secondary object type.
73
+ * - A retention start date (`RetentionField.RETENTION_START`) is present.
74
+ * - The retention period has started (start date is in the past), or an end date is set and
75
+ * still lies in the future.
76
+ *
77
+ * @remarks
78
+ * - `severity` is set to `'danger'` to visually emphasize the retention constraint.
79
+ * - `priority` is `20`, which controls the display order relative to other badges.
80
+ */ declare const RETENTION_BADGE: Badge;
81
+
82
+ declare class BadgeRegistryService {
83
+ #private;
84
+ /**
85
+ * Registers one or multiple badges in the registry.
86
+ *
87
+ * If a badge with the same id already exists in the same scope, it is replaced.
88
+ * Otherwise, the badge is added to the scope.
89
+ *
90
+ * @param badges An array of badges to register.
91
+ * @param bucket Optional bucket id (typically an APP_ID). If omitted, badges are
92
+ * registered globally and visible to every consumer. If provided,
93
+ * badges are scoped to that bucket and only visible when consumers
94
+ * query with the matching bucket.
95
+ *
96
+ * @see {@link Badge}
97
+ */
98
+ registerBadges(badges: Badge[], bucket?: string): void;
99
+ /**
100
+ * Registers the default badges into the registry.
101
+ *
102
+ * Initializes three built-in badge types:
103
+ * - LOCK_BADGE: Indicates objects locked by other users
104
+ * - LOCK_SELF_BADGE: Indicates objects locked by the current user
105
+ * - RETENTION_BADGE: Indicates objects under retention hold
106
+ *
107
+ * @param bucket Optional bucket id. If omitted, defaults are registered globally.
108
+ *
109
+ * @see {@link Badge}
110
+ */
111
+ registerDefaultBadges(bucket?: string): void;
112
+ /**
113
+ * Unregisters one or multiple badges from the registry by id.
114
+ *
115
+ * Operates only on the specified scope: omitting `bucket` removes from the global
116
+ * scope only, providing `bucket` removes from that bucket only.
117
+ *
118
+ * @param id A single badge id or an array of badge ids to remove.
119
+ * @param bucket Optional bucket id.
120
+ */
121
+ unregister(id: string | string[], bucket?: string): void;
122
+ /**
123
+ * Returns a registered badge by id.
124
+ *
125
+ * Looks first in the given bucket (if any), then in the global scope.
126
+ *
127
+ * @param id The badge id.
128
+ * @param bucket Optional bucket id.
129
+ * @returns The matching badge, or undefined if no badge is registered with that id.
130
+ */
131
+ get(id: string, bucket?: string): Badge | undefined;
132
+ /**
133
+ * Returns all registered badges across the global scope and every bucket.
134
+ *
135
+ * Bucket entries override globals with the same id; remaining duplicates between
136
+ * buckets keep the first occurrence. Useful for tests and debug inspection.
137
+ */
138
+ all(): Badge[];
139
+ /**
140
+ * Returns a reactive list of badges visible in the given scope.
141
+ *
142
+ * The returned signal recomputes whenever the registry changes. The list contains
143
+ * the global badges merged with the named bucket's badges (bucket entries override
144
+ * globals with the same id), sorted by ascending priority. At equal priority,
145
+ * globals come first, then bucket-local badges.
146
+ *
147
+ * @param bucket Optional bucket id.
148
+ */
149
+ getBadgesForBucket(bucket?: string): Signal<Badge[]>;
150
+ /**
151
+ * Resolves all active badges for a given object in the given scope.
152
+ *
153
+ * The visible scope is `main ∪ bucket`. Variants only resolve when their parent id
154
+ * is present in the visible scope. If `idFilter` is provided, only badges whose id
155
+ * (or whose variant's parent id) is in the filter are considered. The resulting
156
+ * list is sorted by ascending priority.
157
+ *
158
+ * @param dmsObject The object to evaluate badges against.
159
+ * @param options Optional bucket and id filter.
160
+ */
161
+ getActiveBadges(dmsObject: DmsObject, options?: {
162
+ bucket?: string;
163
+ idFilter?: string[];
164
+ }): Badge[];
165
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeRegistryService, never>;
166
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<BadgeRegistryService>;
167
+ }
168
+
169
+ declare class TileBadgesComponent {
170
+ #private;
171
+ dmsObject: _angular_core.InputSignal<DmsObject>;
172
+ badgeIds: _angular_core.InputSignal<string[] | undefined>;
173
+ bucket: _angular_core.InputSignal<string | undefined>;
174
+ readonly activeBadges: _angular_core.Signal<Badge[]>;
175
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TileBadgesComponent, never>;
176
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TileBadgesComponent, "yuv-tile-badges", never, { "dmsObject": { "alias": "dmsObject"; "required": true; "isSignal": true; }; "badgeIds": { "alias": "badgeIds"; "required": false; "isSignal": true; }; "bucket": { "alias": "bucket"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
177
+ }
178
+
179
+ /**
180
+ * Evaluates a single badge rule against a given DMS object.
181
+ *
182
+ * Supported operations:
183
+ * - `isSet`: returns `true` when the field value is not `undefined`, `null`, or an empty string.
184
+ * - `equals`: returns `true` when the field value strictly equals `rule.value`.
185
+ * - `tagPresent`: returns `true` when the configured tags field contains a tag whose first element equals `rule.value`.
186
+ *
187
+ * @param rule Badge rule definition to evaluate.
188
+ * @param dmsObject Source object containing field data.
189
+ * @returns `true` if the rule matches; otherwise `false`.
190
+ */
191
+ declare function evaluateRule(rule: BadgeRule, dmsObject: DmsObject): boolean;
192
+
193
+ export { BadgeChipComponent, BadgeRegistryService, BadgeSelectComponent, LOCK_BADGE, LOCK_SELF_BADGE, RETENTION_BADGE, TileBadgesComponent, evaluateRule };
194
+ export type { Badge, BadgeContext, BadgeRule, BadgeSeverity };
@@ -4,7 +4,7 @@ import * as _yuuvis_client_core from '@yuuvis/client-core';
4
4
  import { AuditQueryResult, AuditEntry, DmsObject, AuditService, EventService, SystemService, TranslateService, VirtualObjectType, RetentionState, ObjectTypeFlavor, Situation, FlavoredDmsObject, ObjectTypeField } from '@yuuvis/client-core';
5
5
  import { RendererDirectiveInput } from '@yuuvis/client-framework/renderer';
6
6
  import { ObjectFormComponent, IObjectFormElementExtension, ObjectFormOptions, FormStatusChangedEvent } from '@yuuvis/client-framework/object-form';
7
- import * as i6 from '@yuuvis/client-framework/common';
7
+ import * as i7 from '@yuuvis/client-framework/common';
8
8
  import { FormGroup } from '@angular/forms';
9
9
 
10
10
  declare class ObjectAuditComponent {
@@ -240,8 +240,8 @@ declare class ObjectMetadataComponent implements OnDestroy {
240
240
  * Set to 'true' to prevent all metadata from being edited
241
241
  */
242
242
  formDisabled: _angular_core.WritableSignal<boolean>;
243
- dmsObject: _angular_core.InputSignal<DmsObject | undefined>;
244
- _dmsObject: _angular_core.WritableSignal<DmsObject | undefined>;
243
+ dmsObjectInput: _angular_core.InputSignal<DmsObject | undefined>;
244
+ dmsObject: _angular_core.WritableSignal<DmsObject | undefined>;
245
245
  /**
246
246
  * @deprecated This input will be removed in the future.
247
247
  * Please migrate to using `dmsObject` and `flavors` inputs instead.
@@ -276,12 +276,12 @@ declare class ObjectMetadataComponent implements OnDestroy {
276
276
  setFormPristine(): void;
277
277
  ngOnDestroy(): void;
278
278
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectMetadataComponent, never>;
279
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ObjectMetadataComponent, "yuv-object-metadata", never, { "disableControls": { "alias": "disableControls"; "required": false; "isSignal": true; }; "disableBasicMetadata": { "alias": "disableBasicMetadata"; "required": false; "isSignal": true; }; "elementExtensions": { "alias": "elementExtensions"; "required": false; "isSignal": true; }; "situation": { "alias": "situation"; "required": false; "isSignal": true; }; "dmsObject": { "alias": "dmsObject"; "required": false; "isSignal": true; }; "flavoredDmsObject": { "alias": "flavoredDmsObject"; "required": false; "isSignal": true; }; "flavors": { "alias": "flavors"; "required": false; "isSignal": true; }; }, { "indexDataSaved": "indexDataSaved"; "statusChanged": "statusChanged"; }, never, never, true, never>;
279
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ObjectMetadataComponent, "yuv-object-metadata", never, { "disableControls": { "alias": "disableControls"; "required": false; "isSignal": true; }; "disableBasicMetadata": { "alias": "disableBasicMetadata"; "required": false; "isSignal": true; }; "elementExtensions": { "alias": "elementExtensions"; "required": false; "isSignal": true; }; "situation": { "alias": "situation"; "required": false; "isSignal": true; }; "dmsObjectInput": { "alias": "dmsObject"; "required": false; "isSignal": true; }; "flavoredDmsObject": { "alias": "flavoredDmsObject"; "required": false; "isSignal": true; }; "flavors": { "alias": "flavors"; "required": false; "isSignal": true; }; }, { "indexDataSaved": "indexDataSaved"; "statusChanged": "statusChanged"; }, never, never, true, never>;
280
280
  }
281
281
 
282
282
  declare class YuvObjectDetailsModule {
283
283
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<YuvObjectDetailsModule, never>;
284
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<YuvObjectDetailsModule, never, [typeof ObjectDetailsComponent, typeof ObjectDetailsHeaderComponent, typeof ObjectDetailsShellComponent, typeof ObjectMetadataComponent, typeof ObjectAuditComponent, typeof i6.RetentionBadgeComponent], [typeof ObjectDetailsComponent, typeof ObjectDetailsHeaderComponent, typeof ObjectDetailsShellComponent, typeof ObjectMetadataComponent, typeof ObjectAuditComponent, typeof i6.RetentionBadgeComponent]>;
284
+ static ɵmod: _angular_core.ɵɵNgModuleDeclaration<YuvObjectDetailsModule, never, [typeof ObjectDetailsComponent, typeof ObjectDetailsHeaderComponent, typeof ObjectDetailsShellComponent, typeof ObjectMetadataComponent, typeof ObjectMetadataSectionComponent, typeof ObjectAuditComponent, typeof i7.RetentionBadgeComponent], [typeof ObjectDetailsComponent, typeof ObjectDetailsHeaderComponent, typeof ObjectDetailsShellComponent, typeof ObjectMetadataComponent, typeof ObjectMetadataSectionComponent, typeof ObjectAuditComponent, typeof i7.RetentionBadgeComponent]>;
285
285
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<YuvObjectDetailsModule>;
286
286
  }
287
287
 
@@ -26,6 +26,7 @@ declare class ObjectVersionsComponent {
26
26
  error: _angular_core.WritableSignal<string | undefined>;
27
27
  selectedIndex: _angular_core.WritableSignal<number | null>;
28
28
  isCurrentVersion: _angular_core.Signal<boolean>;
29
+ documentLockedByOther: _angular_core.Signal<boolean>;
29
30
  metadata: Partial<Metadata>;
30
31
  itemSelected(selectedIndex: number[]): void;
31
32
  downloadCurrentVersion(): void;
@@ -7,6 +7,7 @@ import { VirtualObjectType, ResolvedObjectConfig, DmsObject, SearchQuery, Search
7
7
  import { BooleanInput } from '@angular/cdk/coercion';
8
8
  import { QueryListComponent } from '@yuuvis/client-framework/query-list';
9
9
  import { ObjectFlavor, TileExtensionComponent, TileExtensionDirectiveInput, TileExtension } from '@yuuvis/client-shell-core';
10
+ import { Badge } from '@yuuvis/client-framework/badges';
10
11
 
11
12
  declare class TileActionsMenuComponent {
12
13
  actions: _angular_core.InputSignal<Action[]>;
@@ -492,7 +493,8 @@ declare class TileListComponent implements OnInit {
492
493
  * @param event The originating mouse event (used to suppress default and for positioning).
493
494
  * @param _index Zero-based index of the right-clicked tile.
494
495
  */
495
- contextMenuHandler(event: MouseEvent, _index: number): void;
496
+ badgeIdsFor(item: TileData): string[] | undefined;
497
+ contextMenuHandler(event: MouseEvent, index: number): void;
496
498
  /**
497
499
  * Executes a tile inline action against the appropriate set of DMS objects.
498
500
  *
@@ -662,11 +664,11 @@ declare class TileListComponent implements OnInit {
662
664
  }
663
665
 
664
666
  declare class ActionSelectComponent {
665
- private actionService;
667
+ #private;
666
668
  objectType: _angular_core.InputSignal<VirtualObjectType>;
667
- actions: Signal<Action[]>;
668
669
  selectedActionIds: _angular_core.InputSignal<string[]>;
669
670
  actionSelect: _angular_core.OutputEmitterRef<Action>;
671
+ actions: Signal<Action[]>;
670
672
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActionSelectComponent, never>;
671
673
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ActionSelectComponent, "yuv-tile-action-select", never, { "objectType": { "alias": "objectType"; "required": true; "isSignal": true; }; "selectedActionIds": { "alias": "selectedActionIds"; "required": false; "isSignal": true; }; }, { "actionSelect": "actionSelect"; }, never, never, true, never>;
672
674
  }
@@ -738,14 +740,16 @@ declare class TileConfigComponent {
738
740
  selectedSlot?: string;
739
741
  flavors: ObjectFlavor[];
740
742
  changes: Record<string, ObjectConfig | undefined>;
741
- getConfigValue(p: string): ObjectConfigIcon | ObjectConfigProperty | ObjectConfigAction | ObjectConfigBadge | undefined;
742
- getConfigProperty(p: string): ObjectConfigProperty | undefined;
743
+ getConfigValue(value: string): ObjectConfigIcon | ObjectConfigProperty | ObjectConfigAction | ObjectConfigBadge | undefined;
744
+ getConfigProperty(value: string): ObjectConfigProperty | undefined;
743
745
  getSelectedActions(): string[];
746
+ getSelectedBadges(): string[];
744
747
  slotSelect(item: string): void;
745
- typeSelected(type: InnerType): void;
748
+ typeSelected(innerType: InnerType): void;
746
749
  iconSelected(icon: string | null): void;
747
750
  propertySelected(tileSlot: string, field?: Partial<ObjectTypeField>): void;
748
751
  actionSelected(action: Action): void;
752
+ badgeSelected(badge: Badge): void;
749
753
  saveConfig(): void;
750
754
  resetConfig(): void;
751
755
  cancelConfig(): void;
@@ -869,6 +869,19 @@ declare class SessionService {
869
869
  */
870
870
  extendSession(broadcast?: boolean, expiresAt?: number, skipBackendCall?: boolean): void;
871
871
  private listenToChannel;
872
+ /**
873
+ * Listens to the global LOGOUT event emitted by AuthService.
874
+ *
875
+ * Covers logout paths that bypass SessionService.performLogout — e.g.,
876
+ * 401 caught by AuthInterceptor or any manual `AuthService.logout()` call.
877
+ * Without this, other tabs would not receive a SessionLogout broadcast and
878
+ * the HTTP activity subscription would briefly stay alive after auth dies.
879
+ *
880
+ * Note: UI buttons that call only `UserService.logout()` (e.g. sidebar-nav)
881
+ * do not emit this event — for those, the system still converges via the
882
+ * 401 interceptor or local expiry.
883
+ */
884
+ private listenToGlobalLogout;
872
885
  private scheduleActivityWindow;
873
886
  private showPopup;
874
887
  private scheduleLogout;