@yuuvis/client-framework 3.14.1 → 3.16.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.
Files changed (46) hide show
  1. package/fesm2022/yuuvis-client-framework-actions.mjs +19 -19
  2. package/fesm2022/yuuvis-client-framework-app-bar.mjs +3 -3
  3. package/fesm2022/yuuvis-client-framework-badges.mjs +16 -13
  4. package/fesm2022/yuuvis-client-framework-badges.mjs.map +1 -1
  5. package/fesm2022/yuuvis-client-framework-breadcrumb.mjs +3 -3
  6. package/fesm2022/yuuvis-client-framework-clipboard.mjs +3 -3
  7. package/fesm2022/yuuvis-client-framework-datepicker.mjs +31 -31
  8. package/fesm2022/yuuvis-client-framework-forms.mjs +70 -68
  9. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  10. package/fesm2022/yuuvis-client-framework-icons.mjs +9 -9
  11. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +7 -7
  12. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +18 -18
  13. package/fesm2022/yuuvis-client-framework-object-details.mjs +28 -28
  14. package/fesm2022/yuuvis-client-framework-object-flavor.mjs +18 -18
  15. package/fesm2022/yuuvis-client-framework-object-form.mjs +35 -35
  16. package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
  17. package/fesm2022/yuuvis-client-framework-object-preview.mjs +9 -9
  18. package/fesm2022/yuuvis-client-framework-object-relationship.mjs +38 -38
  19. package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
  20. package/fesm2022/yuuvis-client-framework-object-summary.mjs +13 -13
  21. package/fesm2022/yuuvis-client-framework-object-versions.mjs +8 -8
  22. package/fesm2022/yuuvis-client-framework-object-versions.mjs.map +1 -1
  23. package/fesm2022/yuuvis-client-framework-pagination.mjs +3 -3
  24. package/fesm2022/yuuvis-client-framework-query-list.mjs +7 -7
  25. package/fesm2022/yuuvis-client-framework-renderer.mjs +99 -53
  26. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
  27. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +16 -8
  28. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  29. package/fesm2022/yuuvis-client-framework-simple-search.mjs +3 -3
  30. package/fesm2022/yuuvis-client-framework-smart-search.mjs +13 -13
  31. package/fesm2022/yuuvis-client-framework-sort.mjs +3 -3
  32. package/fesm2022/yuuvis-client-framework-tile-list.mjs +77 -35
  33. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  34. package/fesm2022/yuuvis-client-framework-token-search.mjs +7 -7
  35. package/fesm2022/yuuvis-client-framework-tree.mjs +9 -9
  36. package/fesm2022/yuuvis-client-framework-upload-progress.mjs +10 -10
  37. package/fesm2022/yuuvis-client-framework.mjs +108 -36
  38. package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
  39. package/lib/assets/i18n/de.json +4 -3
  40. package/lib/assets/i18n/en.json +4 -3
  41. package/package.json +10 -10
  42. package/types/yuuvis-client-framework-forms.d.ts +3 -1
  43. package/types/yuuvis-client-framework-renderer.d.ts +18 -2
  44. package/types/yuuvis-client-framework-sequence-list.d.ts +9 -1
  45. package/types/yuuvis-client-framework-tile-list.d.ts +1 -0
  46. package/types/yuuvis-client-framework.d.ts +12 -2
@@ -137,12 +137,12 @@
137
137
  "yuv.object-versions.tabs.indexdata.title": "Metadata",
138
138
  "yuv.audit.label.create.metadata": "Object was created",
139
139
  "yuv.audit.label.create.metadata.withcontent": "Object was created with document file",
140
- "yuv.audit.label.create.relationship": "Relationship was created",
140
+ "yuv.audit.label.create.relationship": "Link was created",
141
141
  "yuv.audit.label.create.tag": "Tag was created",
142
142
  "yuv.audit.label.delete": "Object was deleted",
143
143
  "yuv.audit.label.delete.content": "Document file was deleted",
144
144
  "yuv.audit.label.delete.marked": "Object was marked for deletion",
145
- "yuv.audit.label.delete.relationship": "Relationship was deleted",
145
+ "yuv.audit.label.delete.relationship": "Link was deleted",
146
146
  "yuv.audit.label.delete.tag": "Tag was deleted",
147
147
  "yuv.audit.label.delete.version": "Document version was deleted",
148
148
  "yuv.audit.label.get.content": "Document file was read",
@@ -156,7 +156,7 @@
156
156
  "yuv.audit.label.update.metadata.withcontent": "Metadata and document file were changed",
157
157
  "yuv.audit.label.update.move": "Object was moved",
158
158
  "yuv.audit.label.update.move.content": "Document file was moved",
159
- "yuv.audit.label.update.relationship": "Relationship was changed",
159
+ "yuv.audit.label.update.relationship": "Link was changed",
160
160
  "yuv.audit.label.update.restore": "An old version was restored",
161
161
  "yuv.audit.label.update.restore.more": "Restored from version {{version}}",
162
162
  "yuv.audit.label.update.tag": "Tag was changed",
@@ -223,6 +223,7 @@
223
223
  "yuv.tile-config.slot.property.headline": "Attributes",
224
224
  "yuv.tile-config.title": "Hit list configuration for {{bucket}}",
225
225
  "yuv.tile-config.trigger.tooltip": "Hit list configuration",
226
+ "yuv.tile-config.warning.empty": "An empty tile configuration cannot be saved. The default configuration will be used instead.",
226
227
  "yuv.tile-list.item.actions-menu.button.tooltip": "Open actions menu",
227
228
  "yuv.upload-progress-overlay.error.403": "You do not have the required permissions to upload the file.",
228
229
  "yuv.upload-progress-overlay.error.default": "Unable to upload the file.",
package/package.json CHANGED
@@ -1,24 +1,24 @@
1
1
  {
2
2
  "name": "@yuuvis/client-framework",
3
- "version": "3.14.1",
3
+ "version": "3.16.0",
4
4
  "author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
7
- "@angular/cdk": "^21.2.7",
8
- "@angular/common": "^21.2.9",
9
- "@angular/core": "^21.2.9",
7
+ "@angular/cdk": "^21.2.14",
8
+ "@angular/common": "^21.2.19",
9
+ "@angular/core": "^21.2.19",
10
10
  "angular-gridster2": "^21.0.1",
11
- "@yuuvis/client-core": "^3.14.1",
12
- "@yuuvis/client-shell-core": "^3.14.1",
13
- "@yuuvis/client-components": "^3.14.1",
11
+ "@yuuvis/client-core": "^3.16.0",
12
+ "@yuuvis/client-shell-core": "^3.16.0",
13
+ "@yuuvis/client-components": "^3.16.0",
14
14
  "ng-dynamic-component": "^10.8.2",
15
15
  "modern-normalize": "^3.0.1"
16
16
  },
17
17
  "dependencies": {
18
- "@angular/material": "^21.2.7",
18
+ "@angular/material": "^21.2.14",
19
19
  "@ngrx/signals": "^21.1.0",
20
- "@yuuvis/material": "^3.14.1",
21
- "@yuuvis/media-viewer": "^3.0.6",
20
+ "@yuuvis/material": "^3.16.0",
21
+ "@yuuvis/media-viewer": "^4.0.0",
22
22
  "angular-split": "^20.0.0",
23
23
  "vis-network": "^10.0.2",
24
24
  "tslib": "^2.3.0"
@@ -388,7 +388,9 @@ declare class NumberComponent extends AbstractMatFormField<number> implements Co
388
388
  declare class OrganizationSetComponent extends AbstractMatFormField<string | string[] | undefined> implements ControlValueAccessor, OnDestroy, OnInit {
389
389
  #private;
390
390
  /**
391
- * Possibles values are `EDIT` (default),`SEARCH`,`CREATE`. In search situation validation of the form element will be turned off, so you are able to enter search terms that do not meet the elements validators.
391
+ * Possibles values are `EDIT` (default),`SEARCH`,`CREATE`.
392
+ * In search situation validation of the form element will be turned off,
393
+ * so you are able to enter search terms that do not meet the elements validators.
392
394
  */
393
395
  situation: _angular_core.InputSignal<string | undefined>;
394
396
  /**
@@ -97,6 +97,22 @@ declare class FileSizeRendererComponent extends AbstractRendererComponent {
97
97
  static ɵcmp: i0.ɵɵComponentDeclaration<FileSizeRendererComponent, "yuv-string-renderer", never, {}, {}, never, never, true, never>;
98
98
  }
99
99
 
100
+ /**
101
+ * Renders the value(s) of an i18n catalog field (classification `i18n:catalog[one, two, three]`).
102
+ *
103
+ * Catalog fields store the technical value, so the label has to be resolved from the
104
+ * localizations. This uses the same label keys as the `yuv-i18n-catalog` form element:
105
+ * for property name `status` and value `open` the key is `catalog:status:open_label`.
106
+ * Values without a matching localization fall back to the technical value.
107
+ */
108
+ declare class I18nCatalogRendererComponent extends AbstractRendererComponent<string | string[]> {
109
+ #private;
110
+ readonly label: i0.Signal<string>;
111
+ constructor();
112
+ static ɵfac: i0.ɵɵFactoryDeclaration<I18nCatalogRendererComponent, never>;
113
+ static ɵcmp: i0.ɵɵComponentDeclaration<I18nCatalogRendererComponent, "yuv-i18n-catalog-renderer", never, {}, {}, never, never, true, never>;
114
+ }
115
+
100
116
  declare class IconRendererComponent extends AbstractRendererComponent {
101
117
  #private;
102
118
  protected readonly customId: `${string}-${string}-${string}-${string}-${string}`;
@@ -146,7 +162,7 @@ declare class UnknownRendererComponent extends AbstractRendererComponent<any> {
146
162
  static ɵcmp: i0.ɵɵComponentDeclaration<UnknownRendererComponent, "yuv-unknown-renderer", never, {}, {}, never, never, true, never>;
147
163
  }
148
164
 
149
- type RendererComponent = IntegerRendererComponent | DecimalRendererComponent | DateTimeRendererComponent | IconRendererComponent | StringRendererComponent | BooleanRendererComponent | TableRendererComponent;
165
+ type RendererComponent = IntegerRendererComponent | DecimalRendererComponent | DateTimeRendererComponent | IconRendererComponent | StringRendererComponent | BooleanRendererComponent | TableRendererComponent | I18nCatalogRendererComponent;
150
166
  type RendererDirectiveInput = ResolvedObjectConfigItem;
151
167
 
152
168
  /**
@@ -191,5 +207,5 @@ declare class RendererDirective {
191
207
  static ɵdir: i0.ɵɵDirectiveDeclaration<RendererDirective, "[yuvRenderer]", never, { "yuvRenderer": { "alias": "yuvRenderer"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
192
208
  }
193
209
 
194
- export { AbstractAuditRendererComponent, AbstractRendererComponent, AuditRendererDirective, AuditRendererService, BooleanRendererComponent, DateTimeRendererComponent, DecimalRendererComponent, DefaultAuditRendererComponent, FileSizeRendererComponent, IconRendererComponent, IntegerRendererComponent, OrganizationRendererComponent, RendererDirective, RendererService, StringRendererComponent, TableRendererComponent, UnknownRendererComponent };
210
+ export { AbstractAuditRendererComponent, AbstractRendererComponent, AuditRendererDirective, AuditRendererService, BooleanRendererComponent, DateTimeRendererComponent, DecimalRendererComponent, DefaultAuditRendererComponent, FileSizeRendererComponent, I18nCatalogRendererComponent, IconRendererComponent, IntegerRendererComponent, OrganizationRendererComponent, RendererDirective, RendererService, StringRendererComponent, TableRendererComponent, UnknownRendererComponent };
195
211
  export type { RendererComponent, RendererDirectiveInput };
@@ -38,6 +38,14 @@ declare class SequenceListComponent implements ControlValueAccessor, Validator {
38
38
  * Maximum number of sequence items (defaults to 100).
39
39
  */
40
40
  maxLength: _angular_core.InputSignal<number>;
41
+ /**
42
+ * Minimum number of sequence items that must remain (defaults to 1, matching
43
+ * the original behaviour where a list can never be emptied). Consumers that
44
+ * represent a tail of optional follow-up items (e.g. the remaining steps of
45
+ * an already-started routing list) can set this to 0 to allow removing the
46
+ * last remaining item.
47
+ */
48
+ minLength: _angular_core.InputSignal<number>;
41
49
  maxLengthExceeded: _angular_core.WritableSignal<boolean>;
42
50
  readonly controlCount: _angular_core.WritableSignal<number>;
43
51
  sequenceForm: SequenceForm;
@@ -53,7 +61,7 @@ declare class SequenceListComponent implements ControlValueAccessor, Validator {
53
61
  propagateChange: (_: any) => void;
54
62
  registerOnTouched(): void;
55
63
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SequenceListComponent, never>;
56
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SequenceListComponent, "yuv-sequence-list", never, { "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
64
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SequenceListComponent, "yuv-sequence-list", never, { "maxLength": { "alias": "maxLength"; "required": false; "isSignal": true; }; "minLength": { "alias": "minLength"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
57
65
  }
58
66
 
59
67
  export { SequenceListComponent };
@@ -771,6 +771,7 @@ declare class TileConfigComponent {
771
771
  */
772
772
  excludeProperties: _angular_core.InputSignal<string[]>;
773
773
  get configChanged(): boolean;
774
+ get isConfigEmpty(): boolean;
774
775
  types: Signal<InnerType[]>;
775
776
  save: _angular_core.OutputEmitterRef<void>;
776
777
  canceled: _angular_core.OutputEmitterRef<void>;
@@ -92,13 +92,21 @@ declare const defaultHaloFocusOffset = 3;
92
92
  * **Style Properties:**
93
93
  * - `position: 'fixed'` - Keeps halo in viewport regardless of scroll position
94
94
  * - `pointerEvents: 'none'` - Allows click-through; halo doesn't block interactions
95
- * - `zIndex: '9999'` - Ensures halo appears above most other elements
95
+ * - `zIndex: '9999'` - Stacking fallback for browsers without the Popover API. The halo normally
96
+ * joins the browser's top layer instead (see {@link HaloFocusService}), where z-index does not
97
+ * apply, because Angular CDK renders overlays there as well.
96
98
  * - `border` - Primary border using CSS variable `--ymt-primary` (2px solid)
97
99
  * - `boxShadow` - Soft shadow with 20% opacity for subtle depth effect
98
100
  * - `borderRadius` - Default 8px rounded corners for modern appearance
99
101
  * - `opacity: '0'` - Initially hidden; visibility controlled by service
100
102
  * - `transform: 'translateZ(0)'` - Creates GPU layer for smoother animations
101
103
  *
104
+ * **Popover user-agent resets:**
105
+ * Once the halo carries `popover="manual"` the UA stylesheet applies
106
+ * `inset: 0; margin: auto; padding: 0.25em; overflow: auto; background-color: Canvas` to it. Those
107
+ * defaults would re-center the halo and paint it as an opaque filled box over the content, so they
108
+ * are neutralised here. This mirrors the resets the CDK applies to its own `.cdk-overlay-popover`.
109
+ *
102
110
  * **CSS Variable Dependencies:**
103
111
  * - `--ymt-primary` - Primary theme color for border and shadow
104
112
  *
@@ -528,6 +536,7 @@ declare function provideSession(sessionDuration?: number): EnvironmentProviders;
528
536
  * - Automatic visibility detection (handles clipping, hidden elements, etc.)
529
537
  * - Responsive to dynamic DOM changes via ResizeObserver and MutationObserver
530
538
  * - Smart exclusion for Angular Material form fields (prevents redundant styling)
539
+ * - Renders in the browser's top layer, so it stays visible inside CDK overlays
531
540
  *
532
541
  * **Usage:**
533
542
  * 1. Add `provideHaloFocus()` to your providers array in app.config.ts
@@ -582,7 +591,8 @@ declare class HaloFocusService {
582
591
  *
583
592
  * This method performs the following initialization steps:
584
593
  * 1. Applies optional configuration for halo appearance (inner and outer colors)
585
- * 2. Creates and appends the halo DIV element to the document body
594
+ * 2. Creates and appends the halo DIV element to the document body, as a `popover` so it can
595
+ * join the browser's top layer, and marks the body with `yuv-halo-focus`
586
596
  * 3. Attaches global event listeners for focus, blur, keyboard, mouse, scroll, and resize events
587
597
  * 4. Sets up ResizeObserver and MutationObserver for tracking dynamic DOM changes
588
598
  *