@yuuvis/client-framework 3.16.0 → 3.17.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 (25) hide show
  1. package/fesm2022/yuuvis-client-framework-actions.mjs +2 -6
  2. package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
  3. package/fesm2022/yuuvis-client-framework-badges.mjs +9 -2
  4. package/fesm2022/yuuvis-client-framework-badges.mjs.map +1 -1
  5. package/fesm2022/yuuvis-client-framework-forms.mjs +237 -129
  6. package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
  7. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +1 -1
  8. package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -1
  9. package/fesm2022/yuuvis-client-framework-metadata-form.mjs +2 -2
  10. package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
  11. package/fesm2022/yuuvis-client-framework-object-relationship.mjs +47 -19
  12. package/fesm2022/yuuvis-client-framework-object-relationship.mjs.map +1 -1
  13. package/fesm2022/yuuvis-client-framework-renderer.mjs +48 -21
  14. package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
  15. package/fesm2022/yuuvis-client-framework-sequence-list.mjs +1 -1
  16. package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
  17. package/fesm2022/yuuvis-client-framework-tile-list.mjs +59 -65
  18. package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
  19. package/lib/assets/i18n/de.json +11 -10
  20. package/lib/assets/i18n/en.json +10 -9
  21. package/package.json +5 -5
  22. package/types/yuuvis-client-framework-badges.d.ts +7 -0
  23. package/types/yuuvis-client-framework-forms.d.ts +28 -8
  24. package/types/yuuvis-client-framework-object-relationship.d.ts +6 -1
  25. package/types/yuuvis-client-framework-tile-list.d.ts +13 -2
@@ -38,6 +38,7 @@
38
38
  "yuv.clipboard.text.cut.multiple": "{{count}} Elemente ausgeschnitten",
39
39
  "yuv.clipboard.text.cut.single": "1 Element ausgeschnitten",
40
40
  "yuv.calendar.time.label": "Uhrzeit",
41
+ "yuv.form.element.catalog.option.none": "Nichts ausgewählt",
41
42
  "yuv.form.element.data.grid.add-row.button.tooltip": "Zeile hinzufügen",
42
43
  "yuv.form.element.data.grid.add.headline": "Neue Zeile hinzufügen",
43
44
  "yuv.form.element.data.grid.edit": "Bearbeiten",
@@ -49,12 +50,10 @@
49
50
  "yuv.form.element.data.grid.row.button.actions.tooltip": "Aktionsmenü öffnen",
50
51
  "yuv.form.element.datetime.calendar.cancel": "Abbrechen",
51
52
  "yuv.form.element.datetime.calendar.select": "Auswählen",
52
- "yuv.form.element.catalog.option.none": "Nichts ausgewählt",
53
53
  "yuv.form.element.datetime.calendar.today": "Heute",
54
54
  "yuv.form.element.organization-set.classify.icon.title": "Gruppe",
55
55
  "yuv.form.element.organization.classify.icon.title": "Benutzer",
56
- "yuv.form.element.reference.classify.icon.title": "Referenz",
57
- "yuv.form.element.reference.open.title": "Referenziertes Objekt öffnen",
56
+ "yuv.form.element.organization.freetext.tooltip": "Freitext – kein aufgelöster Benutzer bzw. keine Gruppe",
58
57
  "yuv.form.element.range-select-date.custom.overlay.button.apply": "Anwenden",
59
58
  "yuv.form.element.range-select-date.custom.overlay.title": "Benutzerdefinierter Zeitraum",
60
59
  "yuv.form.element.range-select-date.option.any": "Beliebiges Datum",
@@ -69,9 +68,11 @@
69
68
  "yuv.form.element.range-select-date.option.yesterday": "Gestern",
70
69
  "yuv.form.element.range-select-filesize.option.any": "Beliebige Größe",
71
70
  "yuv.form.element.range-select-filesize.option.large": "Groß (10-100 MB)",
72
- "yuv.form.element.range-select-filesize.option.medium": "Mittel (1-10 MB)",
71
+ "yuv.form.element.range-select-filesize.option.medium": "Mittel (110 MB)",
73
72
  "yuv.form.element.range-select-filesize.option.small": "Klein (<1 MB)",
74
73
  "yuv.form.element.range-select-filesize.option.verylarge": "Sehr groß (>100 MB)",
74
+ "yuv.form.element.reference.classify.icon.title": "Referenz",
75
+ "yuv.form.element.reference.open.title": "Referenziertes Objekt öffnen",
75
76
  "yuv.object-metadata.button.save": "Speichern",
76
77
  "yuv.audit.fetch.error": "Historieneinträge konnten nicht geladen werden",
77
78
  "yuv.audit.label.paging": "Seitennavigation",
@@ -171,18 +172,14 @@
171
172
  "yuv.smart-search.add-type": "Suchen…",
172
173
  "yuv.smart-search.cancel": "Abbrechen",
173
174
  "yuv.smart-search.combinator.and": "UND",
174
- "yuv.smart-search.combinator.or": "ODER",
175
175
  "yuv.smart-search.combinator.as-well-as": "sowie",
176
+ "yuv.smart-search.combinator.or": "ODER",
176
177
  "yuv.smart-search.condition.edit-aria": "Bedingung bearbeiten: {{label}}",
177
178
  "yuv.smart-search.condition.mark-dynamic": "Als auszufüllendes Feld festlegen",
178
179
  "yuv.smart-search.condition.remove": "Bedingung entfernen",
179
180
  "yuv.smart-search.condition.unmark-dynamic": "Aus auszufüllenden Feldern entfernen",
180
181
  "yuv.smart-search.condition.unset-value": "Kein Wert gesetzt",
181
182
  "yuv.smart-search.confirm": "Bestätigen",
182
- "yuv.smart-search.mode.empty": "Keine auszufüllenden Felder. Markieren Sie Bedingungen mit dem Blitz-Symbol, um sie hier hinzuzufügen.",
183
- "yuv.smart-search.mode.essentials": "Kompakt",
184
- "yuv.smart-search.mode.full": "Vollständige Suche",
185
- "yuv.smart-search.mode.label": "Suchmodus",
186
183
  "yuv.smart-search.date-preset.this-month": "Dieser Monat",
187
184
  "yuv.smart-search.date-preset.this-week": "Diese Woche",
188
185
  "yuv.smart-search.date-preset.this-year": "Dieses Jahr",
@@ -196,6 +193,10 @@
196
193
  "yuv.smart-search.fulltext.scope.metadata": "Nur Metadaten",
197
194
  "yuv.smart-search.fulltext.types.all": "Alle Typen",
198
195
  "yuv.smart-search.fulltext.types.label": "Auf Typen einschränken",
196
+ "yuv.smart-search.mode.empty": "Keine auszufüllenden Felder. Markieren Sie Bedingungen mit dem Blitz-Symbol, um sie hier hinzuzufügen.",
197
+ "yuv.smart-search.mode.essentials": "Kompakt",
198
+ "yuv.smart-search.mode.full": "Vollständige Suche",
199
+ "yuv.smart-search.mode.label": "Suchmodus",
199
200
  "yuv.smart-search.operator.change": "Operator ändern",
200
201
  "yuv.smart-search.operator.empty": "ist leer",
201
202
  "yuv.smart-search.operator.eq-false": "= falsch",
@@ -215,6 +216,7 @@
215
216
  "yuv.tile-config.button.close": "Schließen",
216
217
  "yuv.tile-config.button.reset": "Zurücksetzen",
217
218
  "yuv.tile-config.button.save": "Änderungen speichern",
219
+ "yuv.tile-config.error.title-required": "Ein Titel-Attribut ist erforderlich. Wählen Sie ein Attribut für den Titel aus.",
218
220
  "yuv.tile-config.icon-select.pick": "Icon auswählen",
219
221
  "yuv.tile-config.icon-select.reset": "Zurücksetzen",
220
222
  "yuv.tile-config.slot.action.headline": "Aktionen",
@@ -223,7 +225,6 @@
223
225
  "yuv.tile-config.slot.property.headline": "Attribut",
224
226
  "yuv.tile-config.title": "Trefferlistenkonfiguration für {{bucket}}",
225
227
  "yuv.tile-config.trigger.tooltip": "Trefferlistenkonfiguration",
226
- "yuv.tile-config.warning.empty": "Eine leere Kachel-Konfiguration kann nicht gespeichert werden. Stattdessen wird die Standardkonfiguration verwendet.",
227
228
  "yuv.tile-list.item.actions-menu.button.tooltip": "Aktionsmenü öffnen",
228
229
  "yuv.upload-progress-overlay.error.403": "Sie haben nicht die erforderlichen Berechtigungen, um die Datei hochzuladen.",
229
230
  "yuv.upload-progress-overlay.error.default": "Die Datei konnte nicht hochgeladen werden.",
@@ -38,6 +38,7 @@
38
38
  "yuv.clipboard.text.cut.multiple": "{{count}} elements cut out",
39
39
  "yuv.clipboard.text.cut.single": "1 element cut out",
40
40
  "yuv.calendar.time.label": "Time",
41
+ "yuv.form.element.catalog.option.none": "No selection",
41
42
  "yuv.form.element.data.grid.add-row.button.tooltip": "Add row",
42
43
  "yuv.form.element.data.grid.add.headline": "Add new row",
43
44
  "yuv.form.element.data.grid.edit": "Edit",
@@ -49,12 +50,10 @@
49
50
  "yuv.form.element.data.grid.row.button.actions.tooltip": "Open actions menu",
50
51
  "yuv.form.element.datetime.calendar.cancel": "Cancel",
51
52
  "yuv.form.element.datetime.calendar.select": "Select",
52
- "yuv.form.element.catalog.option.none": "No selection",
53
53
  "yuv.form.element.datetime.calendar.today": "Today",
54
54
  "yuv.form.element.organization-set.classify.icon.title": "Group",
55
55
  "yuv.form.element.organization.classify.icon.title": "User",
56
- "yuv.form.element.reference.classify.icon.title": "Reference",
57
- "yuv.form.element.reference.open.title": "Open referenced object",
56
+ "yuv.form.element.organization.freetext.tooltip": "Free text – not a resolved user or group",
58
57
  "yuv.form.element.range-select-date.custom.overlay.button.apply": "Apply",
59
58
  "yuv.form.element.range-select-date.custom.overlay.title": "User-defined time period",
60
59
  "yuv.form.element.range-select-date.option.any": "Any date",
@@ -72,6 +71,8 @@
72
71
  "yuv.form.element.range-select-filesize.option.medium": "Medium (1–10 MB)",
73
72
  "yuv.form.element.range-select-filesize.option.small": "Small (<1 MB)",
74
73
  "yuv.form.element.range-select-filesize.option.verylarge": "Very large (>100 MB)",
74
+ "yuv.form.element.reference.classify.icon.title": "Reference",
75
+ "yuv.form.element.reference.open.title": "Open referenced object",
75
76
  "yuv.object-metadata.button.save": "Save",
76
77
  "yuv.audit.fetch.error": "Unable to load history entries",
77
78
  "yuv.audit.label.paging": "Page navigation",
@@ -171,18 +172,14 @@
171
172
  "yuv.smart-search.add-type": "Search...",
172
173
  "yuv.smart-search.cancel": "Cancel",
173
174
  "yuv.smart-search.combinator.and": "AND",
174
- "yuv.smart-search.combinator.or": "OR",
175
175
  "yuv.smart-search.combinator.as-well-as": "as well as",
176
+ "yuv.smart-search.combinator.or": "OR",
176
177
  "yuv.smart-search.condition.edit-aria": "Edit condition: {{label}}",
177
178
  "yuv.smart-search.condition.mark-dynamic": "Make this an input field",
178
179
  "yuv.smart-search.condition.remove": "Remove condition",
179
180
  "yuv.smart-search.condition.unmark-dynamic": "Remove from input fields",
180
181
  "yuv.smart-search.condition.unset-value": "Value not set",
181
182
  "yuv.smart-search.confirm": "Confirm",
182
- "yuv.smart-search.mode.empty": "No input fields available. Mark conditions with the lightning icon to add them here.",
183
- "yuv.smart-search.mode.essentials": "Essentials",
184
- "yuv.smart-search.mode.full": "Full search",
185
- "yuv.smart-search.mode.label": "Search mode",
186
183
  "yuv.smart-search.date-preset.this-month": "This month",
187
184
  "yuv.smart-search.date-preset.this-week": "This week",
188
185
  "yuv.smart-search.date-preset.this-year": "This year",
@@ -196,6 +193,10 @@
196
193
  "yuv.smart-search.fulltext.scope.metadata": "Metadata only",
197
194
  "yuv.smart-search.fulltext.types.all": "All types",
198
195
  "yuv.smart-search.fulltext.types.label": "Limit to types",
196
+ "yuv.smart-search.mode.empty": "No input fields available. Mark conditions with the lightning icon to add them here.",
197
+ "yuv.smart-search.mode.essentials": "Essentials",
198
+ "yuv.smart-search.mode.full": "Full search",
199
+ "yuv.smart-search.mode.label": "Search mode",
199
200
  "yuv.smart-search.operator.change": "Modify operator",
200
201
  "yuv.smart-search.operator.empty": "is empty",
201
202
  "yuv.smart-search.operator.eq-false": "= false",
@@ -215,6 +216,7 @@
215
216
  "yuv.tile-config.button.close": "Close",
216
217
  "yuv.tile-config.button.reset": "Reset",
217
218
  "yuv.tile-config.button.save": "Save changes",
219
+ "yuv.tile-config.error.title-required": "A title attribute is required. Select an attribute for the title slot.",
218
220
  "yuv.tile-config.icon-select.pick": "Select icon",
219
221
  "yuv.tile-config.icon-select.reset": "Reset",
220
222
  "yuv.tile-config.slot.action.headline": "Actions",
@@ -223,7 +225,6 @@
223
225
  "yuv.tile-config.slot.property.headline": "Attributes",
224
226
  "yuv.tile-config.title": "Hit list configuration for {{bucket}}",
225
227
  "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.",
227
228
  "yuv.tile-list.item.actions-menu.button.tooltip": "Open actions menu",
228
229
  "yuv.upload-progress-overlay.error.403": "You do not have the required permissions to upload the file.",
229
230
  "yuv.upload-progress-overlay.error.default": "Unable to upload the file.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuuvis/client-framework",
3
- "version": "3.16.0",
3
+ "version": "3.17.1",
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.16.0",
12
- "@yuuvis/client-shell-core": "^3.16.0",
13
- "@yuuvis/client-components": "^3.16.0",
11
+ "@yuuvis/client-core": "^3.17.1",
12
+ "@yuuvis/client-shell-core": "^3.17.1",
13
+ "@yuuvis/client-components": "^3.17.1",
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.16.0",
20
+ "@yuuvis/material": "^3.17.1",
21
21
  "@yuuvis/media-viewer": "^4.0.0",
22
22
  "angular-split": "^20.0.0",
23
23
  "vis-network": "^10.0.2",
@@ -38,6 +38,13 @@ declare class BadgeChipComponent {
38
38
  badge: _angular_core.InputSignal<Badge>;
39
39
  showLabel: _angular_core.InputSignal<boolean>;
40
40
  readonly tooltip: _angular_core.Signal<string>;
41
+ /**
42
+ * Accessible name for the icon-only variant. Without a label the chip renders nothing
43
+ * but an inert icon, so assistive technology has no name to announce — the tooltip is
44
+ * a description, not a name, and it is mouse-only anyway. When the label is visible it
45
+ * already names the chip, so no override is set.
46
+ */
47
+ readonly ariaLabel: _angular_core.Signal<string | null>;
41
48
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeChipComponent, never>;
42
49
  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
50
  }
@@ -66,7 +66,6 @@ declare class DataGridComponent implements ControlValueAccessor, Validator {
66
66
  selectedRow: _angular_core.WritableSignal<unknown>;
67
67
  isRequired: boolean;
68
68
  isInvalid: boolean;
69
- initalTableUpdate: boolean;
70
69
  icons: {
71
70
  add: any;
72
71
  more: any;
@@ -79,11 +78,16 @@ declare class DataGridComponent implements ControlValueAccessor, Validator {
79
78
  removeRow(element: any): void;
80
79
  propagateChange: (value: any) => void;
81
80
  onTouched: () => void;
81
+ /**
82
+ * Model → view only. Renders the incoming value (row objects or 2D arrays,
83
+ * which are converted via the column definitions) into the table. Never
84
+ * propagates back to the model — programmatic writes (setValue/patchValue/
85
+ * reset) and rebinds must not change the control's value or dirty state.
86
+ */
82
87
  writeValue(obj: any): void;
83
88
  registerOnChange(fn: any): void;
84
89
  registerOnTouched(fn: any): void;
85
90
  setDisabledState?(isDisabled: boolean): void;
86
- onValueChange(e: any): void;
87
91
  validate(control: ObjectFormControl): null;
88
92
  onHostFocusOut(ev: FocusEvent): void;
89
93
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DataGridComponent, never>;
@@ -430,7 +434,9 @@ declare class OrganizationSetComponent extends AbstractMatFormField<string | str
430
434
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<OrganizationSetComponent, "yuv-organization-set", never, { "situation": { "alias": "situation"; "required": false; "isSignal": true; }; "multiselect": { "alias": "multiselect"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "withMetadata": { "alias": "withMetadata"; "required": false; "isSignal": true; }; "autocompleteMinLength": { "alias": "autocompleteMinLength"; "required": false; "isSignal": true; }; "classifications": { "alias": "classifications"; "required": false; "isSignal": true; }; "types": { "alias": "types"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
431
435
  }
432
436
 
433
- type OrganizationNode = OrganizationSetEntry & {
437
+ type OrganizationNode = Omit<OrganizationSetEntry, 'type'> & {
438
+ /** `text` marks a value typed by the user rather than resolved against IDM. */
439
+ type: 'user' | 'role' | 'text';
434
440
  notFound?: boolean;
435
441
  };
436
442
  type FormControlValue = string | {
@@ -441,21 +447,28 @@ type FormControlValue = string | {
441
447
  * Creates form input for organization values.
442
448
  *
443
449
  * @example
444
- * <yuv-organization [multiselect]="true"></yuv-organization>
450
+ * <yuv-organization [multiselect]="true" />
445
451
  */
446
452
  declare class OrganizationComponent extends AbstractMatFormField<FormControlValue | FormControlValue[] | undefined> implements ControlValueAccessor, OnInit, OnDestroy {
447
453
  #private;
448
454
  readonly translate: TranslateService;
449
455
  minLength: number;
450
456
  busy: _angular_core.WritableSignal<boolean>;
457
+ /**
458
+ * ENTER only — organization titles contain commas (`Lastname, Firstname (username)`),
459
+ * so committing free text on COMMA would split a typed name into two chips.
460
+ */
461
+ readonly separatorKeys: number[];
451
462
  acFormControl: FormControl<AutocompleteItem<unknown> | AutocompleteItem<unknown>[] | null | undefined>;
452
463
  ngControl: _angular_forms.NgControl | null;
453
464
  _innerValue: OrganizationNode[];
454
- set innerValue(iv: OrganizationNode[]);
465
+ set innerValue(iValue: OrganizationNode[]);
455
466
  get innerValue(): OrganizationNode[];
456
467
  autocompleteRes: AutocompleteItem[];
457
468
  /**
458
- * 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.
469
+ * Possibles values are `EDIT` (default),`SEARCH`,`CREATE`.
470
+ * In search situation validation of the form element will be turned off,
471
+ * so you are able to enter search terms that do not meet the elements validators.
459
472
  */
460
473
  situation: _angular_core.InputSignal<string | undefined>;
461
474
  /**
@@ -476,18 +489,25 @@ declare class OrganizationComponent extends AbstractMatFormField<FormControlValu
476
489
  * or, if set to false only the ID
477
490
  */
478
491
  withMetadata: _angular_core.InputSignal<boolean>;
492
+ /**
493
+ * Whether or not values that the autocomplete cannot resolve may be entered as free
494
+ * text (default: false). Can also be enabled per field through the `freeText` option
495
+ * of the organization classification, e.g. `id:organization[freeText]`.
496
+ */
497
+ allowFreeText: _angular_core.InputSignal<boolean>;
498
+ freeText: _angular_core.Signal<boolean>;
479
499
  propagateChange: (_: any) => void;
480
500
  writeValue(value: string | string[]): void;
481
501
  registerOnChange(fn: any): void;
482
502
  registerOnTouched(fn: any): void;
483
- private propagate;
484
503
  setDisabledState?(isDisabled: boolean): void;
485
504
  resolveFn(value: string[]): void;
486
505
  autocompleteFn(query: string): void;
487
506
  ngOnInit(): void;
488
507
  ngOnDestroy(): void;
508
+ private propagate;
489
509
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<OrganizationComponent, never>;
490
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<OrganizationComponent, "yuv-organization", never, { "situation": { "alias": "situation"; "required": false; "isSignal": true; }; "multiselect": { "alias": "multiselect"; "required": false; "isSignal": true; }; "classifications": { "alias": "classifications"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "excludeMe": { "alias": "excludeMe"; "required": false; "isSignal": true; }; "withMetadata": { "alias": "withMetadata"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
510
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<OrganizationComponent, "yuv-organization", never, { "situation": { "alias": "situation"; "required": false; "isSignal": true; }; "multiselect": { "alias": "multiselect"; "required": false; "isSignal": true; }; "classifications": { "alias": "classifications"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "excludeMe": { "alias": "excludeMe"; "required": false; "isSignal": true; }; "withMetadata": { "alias": "withMetadata"; "required": false; "isSignal": true; }; "allowFreeText": { "alias": "allowFreeText"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
491
511
  }
492
512
 
493
513
  interface RangeSelectDateValue {
@@ -61,6 +61,11 @@ declare class ObjectRelationshipComponent {
61
61
  * viewed but not added or removed.
62
62
  */
63
63
  readonly: _angular_core.InputSignal<boolean>;
64
+ /**
65
+ * Number of relations to load per request. Defaults to the search
66
+ * service's default query size when not set.
67
+ */
68
+ pageSize: _angular_core.InputSignal<number | undefined>;
64
69
  originObject: _angular_core.WritableSignal<DmsObject | null>;
65
70
  supportedRelationships: _angular_core.Signal<Relationship[]>;
66
71
  busy: _angular_core.WritableSignal<boolean>;
@@ -68,7 +73,7 @@ declare class ObjectRelationshipComponent {
68
73
  toggleMode(): void;
69
74
  addRelationship(): void;
70
75
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ObjectRelationshipComponent, never>;
71
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ObjectRelationshipComponent, "yuv-object-relationship", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "objectId": { "alias": "objectId"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "relationActions": { "alias": "relationActions"; "required": false; "isSignal": true; }; }, { "mode": "modeChange"; }, never, never, true, never>;
76
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ObjectRelationshipComponent, "yuv-object-relationship", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "objectId": { "alias": "objectId"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "pageSize": { "alias": "pageSize"; "required": false; "isSignal": true; }; "relationActions": { "alias": "relationActions"; "required": false; "isSignal": true; }; }, { "mode": "modeChange"; }, never, never, true, never>;
72
77
  }
73
78
 
74
79
  declare class YuvObjectRelationshipModule {
@@ -721,6 +721,11 @@ declare class PropertySelectComponent {
721
721
  filteredObjectTypeFields: _angular_core.Signal<TypeProperty[]>;
722
722
  objectTypesEffect: _angular_core.EffectRef;
723
723
  selectedProperty: _angular_core.InputSignal<ObjectConfigProperty | undefined>;
724
+ /**
725
+ * Whether the selected property may be removed from the slot. Mandatory
726
+ * slots (title) disable this so the slot can never be emptied.
727
+ */
728
+ allowRemove: _angular_core.InputSignal<boolean>;
724
729
  propertySelect: _angular_core.OutputEmitterRef<TypeProperty | undefined>;
725
730
  selectProperty(field: TypeProperty): void;
726
731
  selectPropertyOnKeydown(event: Event, field: TypeProperty): void;
@@ -729,7 +734,7 @@ declare class PropertySelectComponent {
729
734
  private getObjectTypeFields;
730
735
  private _getLabel;
731
736
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PropertySelectComponent, never>;
732
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PropertySelectComponent, "yuv-tile-property-select", never, { "objectType": { "alias": "objectType"; "required": false; "isSignal": true; }; "excludeProperties": { "alias": "excludeProperties"; "required": false; "isSignal": true; }; "selectedProperty": { "alias": "selectedProperty"; "required": false; "isSignal": true; }; }, { "propertySelect": "propertySelect"; }, never, never, true, never>;
737
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PropertySelectComponent, "yuv-tile-property-select", never, { "objectType": { "alias": "objectType"; "required": false; "isSignal": true; }; "excludeProperties": { "alias": "excludeProperties"; "required": false; "isSignal": true; }; "selectedProperty": { "alias": "selectedProperty"; "required": false; "isSignal": true; }; "allowRemove": { "alias": "allowRemove"; "required": false; "isSignal": true; }; }, { "propertySelect": "propertySelect"; }, never, never, true, never>;
733
738
  }
734
739
 
735
740
  declare class TileConfigTriggerComponent {
@@ -771,7 +776,13 @@ declare class TileConfigComponent {
771
776
  */
772
777
  excludeProperties: _angular_core.InputSignal<string[]>;
773
778
  get configChanged(): boolean;
774
- get isConfigEmpty(): boolean;
779
+ /**
780
+ * The title slot is mandatory. Edited configs without a title block the
781
+ * save. Entries set to `undefined` mark the stored config for deletion and
782
+ * are always valid.
783
+ */
784
+ get titleMissing(): boolean;
785
+ get titleMissingTypeLabels(): string;
775
786
  types: Signal<InnerType[]>;
776
787
  save: _angular_core.OutputEmitterRef<void>;
777
788
  canceled: _angular_core.OutputEmitterRef<void>;