@yuuvis/client-framework 3.20.1 → 3.21.0

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.
@@ -24,7 +24,7 @@
24
24
  "yuv.action-menu.action.unlock.description-locked-by-other": "Das Objekt ist von {{ user }} gesperrt.",
25
25
  "yuv.action-menu.action.unlock.description-locked-by-unknown-user": " Das Objekt ist von einem Benutzer gesperrt.",
26
26
  "yuv.badge.empty.selection": "Derzeit gibt es keine Badges zur Auswahl.",
27
- "yuv.badge.lock.description": "Dieses Objekt ist gegen Änderungen gesperrt.",
27
+ "yuv.badge.lock.description": "Dieses Objekt ist von {{ user }} gesperrt.",
28
28
  "yuv.badge.lock.label": "Gesperrt",
29
29
  "yuv.badge.lock.self.description": "Dieses Objekt ist von Ihnen gesperrt.",
30
30
  "yuv.badge.lock.self.label": "Von Ihnen gesperrt",
@@ -24,7 +24,7 @@
24
24
  "yuv.action-menu.action.unlock.description-locked-by-other": "The object is locked by {{ user }}.",
25
25
  "yuv.action-menu.action.unlock.description-locked-by-unknown-user": " The object is locked by a user.",
26
26
  "yuv.badge.empty.selection": "No badges currently available for selection.",
27
- "yuv.badge.lock.description": "This object is locked and cannot be modified.",
27
+ "yuv.badge.lock.description": "This object is locked by {{ user }}.",
28
28
  "yuv.badge.lock.label": "Locked",
29
29
  "yuv.badge.lock.self.description": "This object is locked by you.",
30
30
  "yuv.badge.lock.self.label": "Locked by you",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuuvis/client-framework",
3
- "version": "3.20.1",
3
+ "version": "3.21.0",
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.19",
9
9
  "@angular/core": "^21.2.19",
10
10
  "angular-gridster2": "^21.0.1",
11
- "@yuuvis/client-core": "^3.20.1",
12
- "@yuuvis/client-shell-core": "^3.20.1",
13
- "@yuuvis/client-components": "^3.20.1",
11
+ "@yuuvis/client-core": "^3.21.0",
12
+ "@yuuvis/client-shell-core": "^3.21.0",
13
+ "@yuuvis/client-components": "^3.21.0",
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.14",
19
19
  "@ngrx/signals": "^21.1.0",
20
- "@yuuvis/material": "^3.20.1",
20
+ "@yuuvis/material": "^3.21.0",
21
21
  "@yuuvis/media-viewer": "^4.1.0",
22
22
  "angular-split": "^20.0.0",
23
23
  "vis-network": "^10.0.2",
@@ -1,6 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
2
  import { Signal } from '@angular/core';
3
3
  import { DmsObject, YuvUser, LockState, VirtualObjectType } from '@yuuvis/client-core';
4
+ import { Observable } from 'rxjs';
4
5
  import { Severity } from '@yuuvis/material/badge';
5
6
 
6
7
  type BadgeSeverity = Severity;
@@ -8,7 +9,14 @@ type BadgeSeverity = Severity;
8
9
  interface BadgeContext {
9
10
  currentUser?: YuvUser;
10
11
  lockState?: LockState;
12
+ /**
13
+ * Resolves a user id to a user (cached IDM lookup). Emits `null` when the
14
+ * user is unknown or the lookup fails.
15
+ */
16
+ resolveUser: (userId: string) => Observable<YuvUser | null>;
11
17
  }
18
+ /** Interpolation params for a translated badge description (`{{ placeholder }}` syntax). */
19
+ type BadgeDescriptionParams = Record<string, unknown>;
12
20
  interface BadgeRule {
13
21
  field: string;
14
22
  op: 'isSet' | 'equals' | 'tagPresent';
@@ -35,6 +43,13 @@ interface Badge {
35
43
  id: string;
36
44
  labelKey: string;
37
45
  descriptionKey?: string;
46
+ /**
47
+ * Optional interpolation params for `descriptionKey`. May resolve asynchronously
48
+ * (e.g. a user name looked up from an id). Only evaluated by `yuv-badge-chip`
49
+ * when a `dmsObject` is bound; until the params resolve, the description is
50
+ * rendered without them.
51
+ */
52
+ descriptionParams?: (dmsObject: DmsObject, ctx: BadgeContext) => Observable<BadgeDescriptionParams> | BadgeDescriptionParams;
38
53
  icon: string;
39
54
  svgIcon?: boolean;
40
55
  severity?: BadgeSeverity;
@@ -60,6 +75,16 @@ declare class BadgeChipComponent {
60
75
  #private;
61
76
  badge: _angular_core.InputSignal<Badge>;
62
77
  showLabel: _angular_core.InputSignal<boolean>;
78
+ /**
79
+ * The object the badge is shown for. Required to resolve {@link Badge.descriptionParams}
80
+ * (e.g. the name of the user holding a lock); without it the description renders as-is.
81
+ */
82
+ dmsObject: _angular_core.InputSignal<DmsObject | undefined>;
83
+ /**
84
+ * Translated tooltip. Uses `descriptionKey` (interpolated with the badge's resolved
85
+ * `descriptionParams`) and falls back to `labelKey` when no description is available.
86
+ * While async params are pending, the description is shown without them.
87
+ */
63
88
  readonly tooltip: _angular_core.Signal<string>;
64
89
  /**
65
90
  * Accessible name for the icon-only variant. Without a label the chip renders nothing
@@ -69,7 +94,7 @@ declare class BadgeChipComponent {
69
94
  */
70
95
  readonly ariaLabel: _angular_core.Signal<string | null>;
71
96
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeChipComponent, never>;
72
- 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>;
97
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeChipComponent, "yuv-badge-chip", never, { "badge": { "alias": "badge"; "required": true; "isSignal": true; }; "showLabel": { "alias": "showLabel"; "required": false; "isSignal": true; }; "dmsObject": { "alias": "dmsObject"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
73
98
  }
74
99
 
75
100
  declare class BadgeSelectComponent {
@@ -201,6 +226,11 @@ declare class BadgeRegistryService {
201
226
  bucket?: string;
202
227
  idFilter?: string[];
203
228
  }): Badge[];
229
+ /**
230
+ * Builds the evaluation context for a badge against the given object. Used both
231
+ * for `applies` evaluation and for resolving {@link Badge.descriptionParams}.
232
+ */
233
+ createContext(dmsObject: DmsObject): BadgeContext;
204
234
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeRegistryService, never>;
205
235
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<BadgeRegistryService>;
206
236
  }
@@ -245,4 +275,4 @@ declare function evaluateRule(rule: BadgeRule, dmsObject: DmsObject): boolean;
245
275
  declare function badgeSupportsType(badge: Badge, objectType?: VirtualObjectType): boolean;
246
276
 
247
277
  export { BadgeChipComponent, BadgeRegistryService, BadgeSelectComponent, LOCK_BADGE, LOCK_SELF_BADGE, RETENTION_BADGE, TileBadgesComponent, badgeSupportsType, evaluateRule };
248
- export type { Badge, BadgeContext, BadgeRule, BadgeSeverity, BadgeSupport };
278
+ export type { Badge, BadgeContext, BadgeDescriptionParams, BadgeRule, BadgeSeverity, BadgeSupport };
@@ -165,6 +165,12 @@ declare class SmartSearchEditController {
165
165
  * searchable type of the schema is a candidate and nothing is restricted.
166
166
  */
167
167
  allowedTypes: _angular_core.WritableSignal<string[]>;
168
+ /**
169
+ * Whether to bypass the user's object-type read permissions when offering types
170
+ * (mirrors the host `ignoreTypePermissions` input). Off by default: only types the
171
+ * user may search are offered.
172
+ */
173
+ ignoreTypePermissions: _angular_core.WritableSignal<boolean>;
168
174
  /** ObjectTypeField IDs to exclude from the field-step autocomplete suggestions. */
169
175
  skipProperties: _angular_core.WritableSignal<string[]>;
170
176
  fieldCtrl: FormControl<string | null>;
@@ -516,6 +522,15 @@ declare class SmartSearchComponent {
516
522
  * is offered in the picker, so only a full-text search can be built.
517
523
  */
518
524
  types: _angular_core.InputSignal<string[]>;
525
+ /**
526
+ * Offers every object type of the schema in the type picker, not only those the user
527
+ * has READ permission for. Off by default.
528
+ *
529
+ * Meant for surfaces that *author* a query rather than execute it as the current user
530
+ * (admin/configuration screens, stored-search templates). {@link types} still applies
531
+ * on top: this widens what the permissions allow, never what the consumer scoped.
532
+ */
533
+ ignoreTypePermissions: _angular_core.InputSignal<boolean>;
519
534
  /**
520
535
  * Field ids to hide from the field-step autocomplete (e.g. internal/system
521
536
  * properties that should not be user-queryable). Applies to block fields and
@@ -788,7 +803,7 @@ declare class SmartSearchComponent {
788
803
  */
789
804
  getObjectTypeField(item: SuggestionItem | null): ObjectTypeField | null;
790
805
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartSearchComponent, never>;
791
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartSearchComponent, "yuv-smart-search", never, { "types": { "alias": "types"; "required": false; "isSignal": true; }; "skipProperties": { "alias": "skipProperties"; "required": false; "isSignal": true; }; "fulltextOnly": { "alias": "fulltextOnly"; "required": false; "isSignal": true; }; "supportDynamicConditions": { "alias": "supportDynamicConditions"; "required": false; "isSignal": true; }; }, { "queryChange": "queryChange"; "querySubmit": "querySubmit"; }, never, never, true, never>;
806
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartSearchComponent, "yuv-smart-search", never, { "types": { "alias": "types"; "required": false; "isSignal": true; }; "ignoreTypePermissions": { "alias": "ignoreTypePermissions"; "required": false; "isSignal": true; }; "skipProperties": { "alias": "skipProperties"; "required": false; "isSignal": true; }; "fulltextOnly": { "alias": "fulltextOnly"; "required": false; "isSignal": true; }; "supportDynamicConditions": { "alias": "supportDynamicConditions"; "required": false; "isSignal": true; }; }, { "queryChange": "queryChange"; "querySubmit": "querySubmit"; }, never, never, true, never>;
792
807
  }
793
808
 
794
809
  declare class YuvSmartSearchModule {