@yuuvis/client-framework 3.8.0 → 3.8.2

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.
@@ -4,7 +4,8 @@
4
4
  "yuv.pwa.update.message": "Eine neue Version der Anwendung ist verfügbar. Jetzt neu laden, um zu aktualisieren?",
5
5
  "yuv.pwa.update.title": "Update verfügbar",
6
6
  "yuv.pwa.update.unrecoverable.message": "Die Anwendung muss neu geladen werden, um fortzufahren.",
7
- "yuv.session.expires.message": "Ihre Sitzung läuft in einer Minute ab.",
7
+ "yuv.session.expires.message": "Ihre Sitzung läuft in {{seconds}} Sekunden ab.",
8
+ "yuv.session.expires.title": "Sitzung läuft ab",
8
9
  "yuv.session.extend.action": "Sitzung verlängern",
9
10
  "yuv.action-menu.action.copy.dms.object.description": "",
10
11
  "yuv.action-menu.action.copy.dms.object.label": "Kopieren",
@@ -70,32 +71,10 @@
70
71
  "yuv.form.element.range-select-filesize.option.verylarge": "Sehr groß (>100 MB)",
71
72
  "yuv.object-metadata.button.save": "Speichern",
72
73
  "yuv.audit.fetch.error": "Historieneinträge konnten nicht geladen werden",
73
- "yuv.audit.label.create.metadata": "Objekt wurde erstellt",
74
- "yuv.audit.label.create.metadata.withcontent": "Objekt wurde mit Dokumentdatei erstellt",
75
- "yuv.audit.label.create.tag": "Tag wurde erstellt",
76
- "yuv.audit.label.delete": "Objekt wurde gelöscht",
77
- "yuv.audit.label.delete.content": "Dokumentdatei wurde gelöscht",
78
- "yuv.audit.label.delete.marked": "Objekt wurde zur Löschung vorgesehen",
79
- "yuv.audit.label.delete.tag": "Tag wurde gelöscht",
80
- "yuv.audit.label.delete.version": "Dokumentversion wurde gelöscht",
81
- "yuv.audit.label.get.content": "Dokumentdatei wurde gelesen",
82
- "yuv.audit.label.get.custom": "Alle sonstigen Ereignisse",
83
- "yuv.audit.label.get.metadata": "Metadaten wurden gelesen",
84
- "yuv.audit.label.get.rendition.pdf": "PDF-Rendition wurde angefordert",
85
- "yuv.audit.label.get.rendition.text": "Text-Rendition wurde angefordert",
86
- "yuv.audit.label.get.rendition.thumbnail": "Miniaturansicht wurde angefordert",
87
74
  "yuv.audit.label.paging": "Seitennavigation",
88
75
  "yuv.audit.label.paging.current": "Seite {{page}}",
89
76
  "yuv.audit.label.paging.next": "zur nächsten Seite",
90
77
  "yuv.audit.label.paging.prev": "zur vorherigen Seite",
91
- "yuv.audit.label.update.content": "Dokumentdatei wurde geändert",
92
- "yuv.audit.label.update.metadata": "Metadaten wurden geändert",
93
- "yuv.audit.label.update.metadata.withcontent": "Metadaten und Dokumentdatei wurden geändert",
94
- "yuv.audit.label.update.move": "Objekt wurde verschoben",
95
- "yuv.audit.label.update.move.content": "Dokumentdatei wurde verschoben",
96
- "yuv.audit.label.update.restore": "Alte Version wurde wiederhergestellt",
97
- "yuv.audit.label.update.restore.more": "Wiederhergestellt aus Version {{version}}",
98
- "yuv.audit.label.update.tag": "Tag wurde geändert",
99
78
  "yuv.audit.label.version": "Version {{version}}",
100
79
  "yuv.audit.result.empty": "Es wurden keine Historieneinträge gefunden",
101
80
  "yuv.audit.timeline": "Historienzeitleiste",
@@ -153,6 +132,28 @@
153
132
  "yuv.object-versions.list.version": "Version {{version}}",
154
133
  "yuv.object-versions.tabs.content.title": "Inhalt",
155
134
  "yuv.object-versions.tabs.indexdata.title": "Metadaten",
135
+ "yuv.audit.label.create.metadata": "Objekt wurde erstellt",
136
+ "yuv.audit.label.create.metadata.withcontent": "Objekt wurde mit Dokumentdatei erstellt",
137
+ "yuv.audit.label.create.tag": "Tag wurde erstellt",
138
+ "yuv.audit.label.delete": "Objekt wurde gelöscht",
139
+ "yuv.audit.label.delete.content": "Dokumentdatei wurde gelöscht",
140
+ "yuv.audit.label.delete.marked": "Objekt wurde zur Löschung vorgesehen",
141
+ "yuv.audit.label.delete.tag": "Tag wurde gelöscht",
142
+ "yuv.audit.label.delete.version": "Dokumentversion wurde gelöscht",
143
+ "yuv.audit.label.get.content": "Dokumentdatei wurde gelesen",
144
+ "yuv.audit.label.get.custom": "Alle sonstigen Ereignisse",
145
+ "yuv.audit.label.get.metadata": "Metadaten wurden gelesen",
146
+ "yuv.audit.label.get.rendition.pdf": "PDF-Rendition wurde angefordert",
147
+ "yuv.audit.label.get.rendition.text": "Text-Rendition wurde angefordert",
148
+ "yuv.audit.label.get.rendition.thumbnail": "Miniaturansicht wurde angefordert",
149
+ "yuv.audit.label.update.content": "Dokumentdatei wurde geändert",
150
+ "yuv.audit.label.update.metadata": "Metadaten wurden geändert",
151
+ "yuv.audit.label.update.metadata.withcontent": "Metadaten und Dokumentdatei wurden geändert",
152
+ "yuv.audit.label.update.move": "Objekt wurde verschoben",
153
+ "yuv.audit.label.update.move.content": "Dokumentdatei wurde verschoben",
154
+ "yuv.audit.label.update.restore": "Alte Version wurde wiederhergestellt",
155
+ "yuv.audit.label.update.restore.more": "Wiederhergestellt aus Version {{version}}",
156
+ "yuv.audit.label.update.tag": "Tag wurde geändert",
156
157
  "yuv.table.renderer.moreEntries": "Es werden nur die ersten 10 Einträge angezeigt. Insgesamt: {{ count }}",
157
158
  "yuv.sequence-list.form.nextAssignee": "Empfänger",
158
159
  "yuv.sequence-list.form.task": "Aufgabe",
@@ -167,8 +168,15 @@
167
168
  "yuv.smart-search.combinator.or": "ODER",
168
169
  "yuv.smart-search.combinator.as-well-as": "sowie",
169
170
  "yuv.smart-search.condition.edit-aria": "Bedingung bearbeiten: {{label}}",
171
+ "yuv.smart-search.condition.mark-dynamic": "Als auszufüllendes Feld festlegen",
170
172
  "yuv.smart-search.condition.remove": "Bedingung entfernen",
173
+ "yuv.smart-search.condition.unmark-dynamic": "Aus auszufüllenden Feldern entfernen",
174
+ "yuv.smart-search.condition.unset-value": "Wert fehlt",
171
175
  "yuv.smart-search.confirm": "Bestätigen",
176
+ "yuv.smart-search.mode.empty": "Keine auszufüllenden Felder. Markiere Bedingungen mit dem Blitz-Symbol, um sie hier hinzuzufügen.",
177
+ "yuv.smart-search.mode.essentials": "Wesentliches",
178
+ "yuv.smart-search.mode.full": "Vollständige Suche",
179
+ "yuv.smart-search.mode.label": "Suchmodus",
172
180
  "yuv.smart-search.date-preset.this-month": "Dieser Monat",
173
181
  "yuv.smart-search.date-preset.this-week": "Diese Woche",
174
182
  "yuv.smart-search.date-preset.this-year": "Dieses Jahr",
@@ -183,7 +191,6 @@
183
191
  "yuv.smart-search.fulltext.types.all": "Alle Typen",
184
192
  "yuv.smart-search.fulltext.types.label": "Auf Typen einschränken",
185
193
  "yuv.smart-search.operator.change": "Operator ändern",
186
- "yuv.smart-search.operator.contains": "enthält",
187
194
  "yuv.smart-search.operator.empty": "ist leer",
188
195
  "yuv.smart-search.operator.eq-false": "= falsch",
189
196
  "yuv.smart-search.operator.eq-true": "= wahr",
@@ -4,7 +4,8 @@
4
4
  "yuv.pwa.update.message": "A new version of the application is available. Reload now to update?",
5
5
  "yuv.pwa.update.title": "Update available",
6
6
  "yuv.pwa.update.unrecoverable.message": "The application needs to be reloaded to continue.",
7
- "yuv.session.expires.message": "Your session will expire in one minute.",
7
+ "yuv.session.expires.message": "Your session will expire in {{seconds}} seconds.",
8
+ "yuv.session.expires.title": "Session expiring",
8
9
  "yuv.session.extend.action": "Extend session",
9
10
  "yuv.action-menu.action.copy.dms.object.description": "",
10
11
  "yuv.action-menu.action.copy.dms.object.label": "Copy",
@@ -70,32 +71,10 @@
70
71
  "yuv.form.element.range-select-filesize.option.verylarge": "Very large (>100 MB)",
71
72
  "yuv.object-metadata.button.save": "Save",
72
73
  "yuv.audit.fetch.error": "Unable to load history entries",
73
- "yuv.audit.label.create.metadata": "Object was created",
74
- "yuv.audit.label.create.metadata.withcontent": "Object was created with document file",
75
- "yuv.audit.label.create.tag": "Tag was created",
76
- "yuv.audit.label.delete": "Object was deleted",
77
- "yuv.audit.label.delete.content": "Document file was deleted",
78
- "yuv.audit.label.delete.marked": "Object was marked for deletion",
79
- "yuv.audit.label.delete.tag": "Tag was deleted",
80
- "yuv.audit.label.delete.version": "Document version was deleted",
81
- "yuv.audit.label.get.content": "Document file was read",
82
- "yuv.audit.label.get.custom": "All other events",
83
- "yuv.audit.label.get.metadata": "Metadata was read",
84
- "yuv.audit.label.get.rendition.pdf": "PDF rendition was requested",
85
- "yuv.audit.label.get.rendition.text": "Text rendition was requested",
86
- "yuv.audit.label.get.rendition.thumbnail": "Thumbnail view was requested",
87
74
  "yuv.audit.label.paging": "Pagination",
88
75
  "yuv.audit.label.paging.current": "Page {{page}}",
89
76
  "yuv.audit.label.paging.next": "jump to next page",
90
77
  "yuv.audit.label.paging.prev": "jump to previous page",
91
- "yuv.audit.label.update.content": "Document file was changed",
92
- "yuv.audit.label.update.metadata": "Metadata was changed",
93
- "yuv.audit.label.update.metadata.withcontent": "Metadata and document file were changed",
94
- "yuv.audit.label.update.move": "Object was moved",
95
- "yuv.audit.label.update.move.content": "Document file was moved",
96
- "yuv.audit.label.update.restore": "An old version was restored",
97
- "yuv.audit.label.update.restore.more": "Restored from version {{version}}",
98
- "yuv.audit.label.update.tag": "Tag was changed",
99
78
  "yuv.audit.label.version": "Version {{version}}",
100
79
  "yuv.audit.result.empty": "No history entries were found",
101
80
  "yuv.audit.timeline": "History timeline",
@@ -153,6 +132,28 @@
153
132
  "yuv.object-versions.list.version": "Version {{version}}",
154
133
  "yuv.object-versions.tabs.content.title": "Content",
155
134
  "yuv.object-versions.tabs.indexdata.title": "Metadata",
135
+ "yuv.audit.label.create.metadata": "Object was created",
136
+ "yuv.audit.label.create.metadata.withcontent": "Object was created with document file",
137
+ "yuv.audit.label.create.tag": "Tag was created",
138
+ "yuv.audit.label.delete": "Object was deleted",
139
+ "yuv.audit.label.delete.content": "Document file was deleted",
140
+ "yuv.audit.label.delete.marked": "Object was marked for deletion",
141
+ "yuv.audit.label.delete.tag": "Tag was deleted",
142
+ "yuv.audit.label.delete.version": "Document version was deleted",
143
+ "yuv.audit.label.get.content": "Document file was read",
144
+ "yuv.audit.label.get.custom": "All other events",
145
+ "yuv.audit.label.get.metadata": "Metadata was read",
146
+ "yuv.audit.label.get.rendition.pdf": "PDF rendition was requested",
147
+ "yuv.audit.label.get.rendition.text": "Text rendition was requested",
148
+ "yuv.audit.label.get.rendition.thumbnail": "Thumbnail view was requested",
149
+ "yuv.audit.label.update.content": "Document file was changed",
150
+ "yuv.audit.label.update.metadata": "Metadata was changed",
151
+ "yuv.audit.label.update.metadata.withcontent": "Metadata and document file were changed",
152
+ "yuv.audit.label.update.move": "Object was moved",
153
+ "yuv.audit.label.update.move.content": "Document file was moved",
154
+ "yuv.audit.label.update.restore": "An old version was restored",
155
+ "yuv.audit.label.update.restore.more": "Restored from version {{version}}",
156
+ "yuv.audit.label.update.tag": "Tag was changed",
156
157
  "yuv.table.renderer.moreEntries": "Only the first ten entries are shown. Total: {{ count }}",
157
158
  "yuv.sequence-list.form.nextAssignee": "Recipient",
158
159
  "yuv.sequence-list.form.task": "Task",
@@ -167,8 +168,15 @@
167
168
  "yuv.smart-search.combinator.or": "OR",
168
169
  "yuv.smart-search.combinator.as-well-as": "as well as",
169
170
  "yuv.smart-search.condition.edit-aria": "Edit condition: {{label}}",
171
+ "yuv.smart-search.condition.mark-dynamic": "Make this a fill-out field",
170
172
  "yuv.smart-search.condition.remove": "Remove condition",
173
+ "yuv.smart-search.condition.unmark-dynamic": "Remove from fill-out fields",
174
+ "yuv.smart-search.condition.unset-value": "value missing",
171
175
  "yuv.smart-search.confirm": "Confirm",
176
+ "yuv.smart-search.mode.empty": "No fill-out fields. Mark conditions with the bolt icon to add them here.",
177
+ "yuv.smart-search.mode.essentials": "Essentials",
178
+ "yuv.smart-search.mode.full": "Full Form",
179
+ "yuv.smart-search.mode.label": "Search mode",
172
180
  "yuv.smart-search.date-preset.this-month": "This month",
173
181
  "yuv.smart-search.date-preset.this-week": "This week",
174
182
  "yuv.smart-search.date-preset.this-year": "This year",
@@ -183,7 +191,6 @@
183
191
  "yuv.smart-search.fulltext.types.all": "All types",
184
192
  "yuv.smart-search.fulltext.types.label": "Limit to types",
185
193
  "yuv.smart-search.operator.change": "Change operator",
186
- "yuv.smart-search.operator.contains": "contains",
187
194
  "yuv.smart-search.operator.empty": "is empty",
188
195
  "yuv.smart-search.operator.eq-false": "= false",
189
196
  "yuv.smart-search.operator.eq-true": "= true",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuuvis/client-framework",
3
- "version": "3.8.0",
3
+ "version": "3.8.2",
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.9",
9
9
  "@angular/core": "^21.2.9",
10
10
  "angular-gridster2": "^21.0.1",
11
- "@yuuvis/client-core": "^3.8.0",
12
- "@yuuvis/client-shell-core": "^3.8.0",
13
- "@yuuvis/client-components": "^3.8.0",
11
+ "@yuuvis/client-core": "^3.8.2",
12
+ "@yuuvis/client-shell-core": "^3.8.2",
13
+ "@yuuvis/client-components": "^3.8.2",
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.7",
19
19
  "@ngrx/signals": "^21.1.0",
20
- "@yuuvis/material": "^3.8.0",
20
+ "@yuuvis/material": "^3.8.2",
21
21
  "@yuuvis/media-viewer": "^3.0.4",
22
22
  "angular-split": "^20.0.0",
23
23
  "vis-network": "^10.0.2",
@@ -1,8 +1,8 @@
1
- import * as _yuuvis_client_core from '@yuuvis/client-core';
2
- import { GenericObjectType, ObjectTypeField } from '@yuuvis/client-core';
3
- import * as _yuuvis_client_framework_smart_search from '@yuuvis/client-framework/smart-search';
4
1
  import * as _angular_core from '@angular/core';
5
2
  import { FormControl } from '@angular/forms';
3
+ import * as _yuuvis_client_core from '@yuuvis/client-core';
4
+ import { ObjectTypeField, GenericObjectType } from '@yuuvis/client-core';
5
+ import * as _yuuvis_client_framework_smart_search from '@yuuvis/client-framework/smart-search';
6
6
  import { MatAutocomplete, MatAutocompleteTrigger, MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
7
7
  import { RendererDirectiveInput } from '@yuuvis/client-framework/renderer';
8
8
 
@@ -27,6 +27,13 @@ interface FieldCondition {
27
27
  value: string | string[];
28
28
  /** Full human-readable label for the chip (`"Name like foo"`). */
29
29
  conditionLabel: string;
30
+ /**
31
+ * Marked by the user as a *dynamic* condition: it is surfaced in the generated
32
+ * fill-out form (see form mode) so its value can be supplied/overridden at run time
33
+ * without rebuilding the query. Purely a builder annotation — it does not affect the
34
+ * emitted query on its own.
35
+ */
36
+ dynamic?: boolean;
30
37
  }
31
38
  /**
32
39
  * A parenthesized sub-expression with its own AND/OR combinator. Groups can
@@ -117,6 +124,26 @@ interface SmartSearchState {
117
124
  fulltext?: FulltextSearch;
118
125
  }
119
126
 
127
+ /**
128
+ * A single row of the generated fill-out form: the dynamic condition it edits, its
129
+ * resolved value-editor field definition (or `null` to fall back to a plain text input)
130
+ * and the `FormControl` bound to the value widget.
131
+ */
132
+ interface DynamicFormField {
133
+ condition: FieldCondition;
134
+ def: ObjectTypeField | null;
135
+ control: FormControl;
136
+ }
137
+ /**
138
+ * A block's worth of dynamic form rows. The generated fill-out form mirrors the builder's
139
+ * block layout: each block contributes a muted header listing its target types, followed by
140
+ * the dynamic conditions ({@link DynamicFormField}s) collected from anywhere within that block.
141
+ * Blocks with no dynamic conditions are omitted.
142
+ */
143
+ interface DynamicFormBlock {
144
+ block: SearchBlock;
145
+ fields: DynamicFormField[];
146
+ }
120
147
  /**
121
148
  * State + mutators for SmartSearch, shared between the host component and the
122
149
  * recursive `SmartSearchGroupComponent`. Provided at the host component level
@@ -160,6 +187,25 @@ declare class SmartSearchEditController {
160
187
  inputTerm: _angular_core.WritableSignal<string>;
161
188
  /** The whole-object full-text search unit (independent of the condition blocks). */
162
189
  fulltext: _angular_core.WritableSignal<FulltextSearch>;
190
+ /** Whether the dynamic-conditions feature is enabled (mirrors the host `supportDynamicConditions` input). */
191
+ supportDynamic: _angular_core.WritableSignal<boolean>;
192
+ /**
193
+ * Form mode: replace the builder with a generated form of the user-marked dynamic
194
+ * conditions. View state only — the template ({@link blocks}) is never mutated; the
195
+ * form's values are overlaid onto the dynamic conditions to drive {@link cmisQuery},
196
+ * so the template stays reusable.
197
+ */
198
+ formMode: _angular_core.WritableSignal<boolean>;
199
+ /** The dynamic conditions surfaced as form rows; rebuilt on each {@link enterFormMode}. */
200
+ formFields: _angular_core.WritableSignal<DynamicFormField[]>;
201
+ /**
202
+ * The dynamic form rows grouped by their owning block (each carrying a muted header of
203
+ * target types); rebuilt on each {@link enterFormMode}. Blocks combine with `OR`
204
+ * ("as well as"), matching the builder.
205
+ */
206
+ formBlocks: _angular_core.WritableSignal<DynamicFormBlock[]>;
207
+ /** Whether any condition is marked dynamic (gates the form-mode toggle). */
208
+ hasDynamicConditions: _angular_core.Signal<boolean>;
163
209
  objectTypes: _angular_core.Signal<GenericObjectType[]>;
164
210
  /** Fields for the active top-level block, used by the field-step suggestions. */
165
211
  activeBlockFields: _angular_core.Signal<SuggestionItem[]>;
@@ -187,6 +233,20 @@ declare class SmartSearchEditController {
187
233
  loadState(state: SmartSearchState): void;
188
234
  /** Reset all search state back to its initial empty values. */
189
235
  reset(): void;
236
+ /** Mark or unmark a condition as dynamic (immutably replaces the node in its container). */
237
+ setConditionDynamic(container: ConditionContainer, condition: FieldCondition, dynamic: boolean): void;
238
+ /**
239
+ * Enter form mode: collect every dynamic condition, resolve its value editor and seed a
240
+ * `FormControl` with its current value. The blocks themselves are left untouched — the
241
+ * form's edits are overlaid via {@link setFormValue} / {@link cmisQuery}.
242
+ */
243
+ enterFormMode(): void;
244
+ /** Leave form mode and discard the transient form state (the template is untouched). */
245
+ exitFormMode(): void;
246
+ /** Toggle form mode (rebuilds the form rows on each entry). */
247
+ toggleFormMode(): void;
248
+ /** Record a value entered in the form for a dynamic condition (drives the overlaid {@link cmisQuery}). */
249
+ setFormValue(condition: FieldCondition, raw: unknown): void;
190
250
  /** Set the full-text search term. */
191
251
  setFulltextTerm(term: string): void;
192
252
  /** Set the full-text search scope (`all` / `metadata` / `content`). */
@@ -244,7 +304,11 @@ declare class SmartSearchEditController {
244
304
  * original verbatim at its original index.
245
305
  */
246
306
  restoreEditingSnapshot(): void;
247
- /** Whether the in-progress condition has all parts needed to be committed. */
307
+ /**
308
+ * Whether the in-progress condition has all parts needed to be committed. A value
309
+ * is *not* required: a field + operator with a blank value commits as an unset
310
+ * placeholder (see {@link isConditionUnset}).
311
+ */
248
312
  isConditionComplete(): boolean;
249
313
  /** The operators available for a field's internal type, as autocomplete items. */
250
314
  operatorsForField(field: SuggestionItem): SuggestionItem[];
@@ -262,6 +326,20 @@ declare class SmartSearchEditController {
262
326
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SmartSearchEditController>;
263
327
  }
264
328
 
329
+ /**
330
+ * Operators that carry their own meaning and need no value step: date presets,
331
+ * the boolean `= true/false` shortcuts, and the null checks (`empty`/`not_empty`).
332
+ * The build flow commits these immediately instead of advancing to the value editor.
333
+ */
334
+ declare function isValuelessOperator(operator: string): boolean;
335
+ /**
336
+ * Whether a condition is an *unset placeholder*: it uses a value-requiring operator
337
+ * (eq / like / gt / …) but carries no value yet. Such conditions are kept in the tree
338
+ * — so a saved query can act as a fill-in template — but contribute nothing to the
339
+ * emitted CMIS query. An empty value is unambiguously "unset" here because null-checks
340
+ * have their own `empty` / `not_empty` operators (offered on every queryable type).
341
+ */
342
+ declare function isConditionUnset(cond: FieldCondition): boolean;
265
343
  /**
266
344
  * Recursively render a condition node. Groups produce parenthesized
267
345
  * sub-expressions; empty groups contribute nothing; single-child groups
@@ -350,6 +428,13 @@ declare class SmartSearchComponent {
350
428
  * table columns alike.
351
429
  */
352
430
  skipProperties: _angular_core.InputSignal<string[]>;
431
+ /**
432
+ * Enables the **dynamic conditions** feature. When `true`, each committed condition can
433
+ * be marked dynamic and a form-mode toggle appears that swaps the builder for a generated
434
+ * fill-out form of those conditions. Off by default — the builder then behaves exactly as
435
+ * it does without the feature.
436
+ */
437
+ supportDynamicConditions: _angular_core.InputSignal<boolean>;
353
438
  /**
354
439
  * Emits the current CMIS query string whenever the search changes. An empty
355
440
  * string is emitted for an empty search (including the initial seed), so
@@ -402,6 +487,18 @@ declare class SmartSearchComponent {
402
487
  readonly fulltext: _angular_core.WritableSignal<_yuuvis_client_framework_smart_search.FulltextSearch>;
403
488
  readonly objectTypes: _angular_core.Signal<_yuuvis_client_core.GenericObjectType[]>;
404
489
  readonly activeBlockFields: _angular_core.Signal<SuggestionItem[]>;
490
+ readonly formMode: _angular_core.WritableSignal<boolean>;
491
+ readonly formFields: _angular_core.WritableSignal<DynamicFormField[]>;
492
+ readonly formBlocks: _angular_core.WritableSignal<DynamicFormBlock[]>;
493
+ readonly hasDynamicConditions: _angular_core.Signal<boolean>;
494
+ /** Whether a committed condition is an unset placeholder (drives the chip's "fill me" affordance). */
495
+ isUnset: typeof isConditionUnset;
496
+ /**
497
+ * Whether an operator carries its own meaning and has no value input (`is empty`,
498
+ * `is not empty`, date presets). Such conditions can't be made dynamic — there is
499
+ * nothing to fill out in the form.
500
+ */
501
+ isValueless: typeof isValuelessOperator;
405
502
  /**
406
503
  * Selected ids for the type multi-select. Falls back to the `ALL_TYPES`
407
504
  * sentinel when no concrete type is picked (empty selection = no restriction).
@@ -430,6 +527,18 @@ declare class SmartSearchComponent {
430
527
  loadState(state: SmartSearchState): void;
431
528
  /** Clear the whole search: discard all blocks, conditions and the full-text term. */
432
529
  clear(): void;
530
+ /**
531
+ * Toggle form mode: swap the builder for a generated fill-out form of the user-marked
532
+ * dynamic conditions. The template is left intact — the form's values are overlaid onto
533
+ * the query. No-op unless {@link supportDynamicConditions} is set.
534
+ */
535
+ toggleFormMode(): void;
536
+ /** Enter form mode ("Essentials") — generated fill-out form of the dynamic conditions. */
537
+ enterFormMode(): void;
538
+ /** Leave form mode ("Full Form") — back to the full builder search. */
539
+ exitFormMode(): void;
540
+ /** Mark/unmark a committed condition as dynamic (surfaced in the fill-out form). */
541
+ toggleDynamic(container: ConditionContainer, condition: FieldCondition): void;
433
542
  /**
434
543
  * Set the top-level combinator joining the query units (the full-text unit and
435
544
  * the type blocks). Kept for state round-tripping; the UI currently always
@@ -530,7 +639,7 @@ declare class SmartSearchComponent {
530
639
  */
531
640
  getObjectTypeField(item: SuggestionItem | null): ObjectTypeField | null;
532
641
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SmartSearchComponent, never>;
533
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartSearchComponent, "yuv-smart-search", never, { "types": { "alias": "types"; "required": false; "isSignal": true; }; "skipProperties": { "alias": "skipProperties"; "required": false; "isSignal": true; }; }, { "queryChange": "queryChange"; }, never, never, true, never>;
642
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartSearchComponent, "yuv-smart-search", never, { "types": { "alias": "types"; "required": false; "isSignal": true; }; "skipProperties": { "alias": "skipProperties"; "required": false; "isSignal": true; }; "supportDynamicConditions": { "alias": "supportDynamicConditions"; "required": false; "isSignal": true; }; }, { "queryChange": "queryChange"; }, never, never, true, never>;
534
643
  }
535
644
 
536
645
  declare class YuvSmartSearchModule {
@@ -898,7 +898,7 @@ declare class PwaUpdateService {
898
898
  * - Automatically listens to BackendService HTTP activity (debounced) to extend sessions
899
899
  * - Extends backend session by calling `/api-web/api/idm/whoami` endpoint` (skipped when triggered by HTTP activity)
900
900
  * - User activity (mouse, keyboard, scroll) inside a defined window will auto-extend the session
901
- * - Displays a snack popup shortly before expiry; user can extend from the popup
901
+ * - Displays a blocking countdown dialog shortly before expiry; user can extend from the dialog
902
902
  * - Broadcasts `SessionExtended` / `SessionLogout` to keep tabs in sync
903
903
  *
904
904
  * Setup options
@@ -943,7 +943,6 @@ declare class PwaUpdateService {
943
943
  */
944
944
  declare class SessionService {
945
945
  #private;
946
- private translate;
947
946
  /**
948
947
  * Initializes cross-tab listeners and activity hooks.
949
948
  *
@@ -1008,7 +1007,6 @@ declare class SessionService {
1008
1007
  private setupHttpDebounce;
1009
1008
  private setupUserActivityTracking;
1010
1009
  private resetAllTimers;
1011
- private getExpiresAt;
1012
1010
  private setExpiresAt;
1013
1011
  private clearTimers;
1014
1012
  static ɵfac: i0.ɵɵFactoryDeclaration<SessionService, never>;