@yuuvis/client-framework 3.19.0 → 3.20.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuuvis/client-framework",
3
- "version": "3.19.0",
3
+ "version": "3.20.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.19.0",
12
- "@yuuvis/client-shell-core": "^3.19.0",
13
- "@yuuvis/client-components": "^3.19.0",
11
+ "@yuuvis/client-core": "^3.20.0",
12
+ "@yuuvis/client-shell-core": "^3.20.0",
13
+ "@yuuvis/client-components": "^3.20.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.19.0",
20
+ "@yuuvis/material": "^3.20.0",
21
21
  "@yuuvis/media-viewer": "^4.0.0",
22
22
  "angular-split": "^20.0.0",
23
23
  "vis-network": "^10.0.2",
@@ -25,6 +25,12 @@ interface ObjectFormOptions {
25
25
  */
26
26
  data: Record<string, unknown>;
27
27
  objectId?: string;
28
+ /**
29
+ * ID of the object type (or secondary object type) the form model belongs to. Used to
30
+ * enrich form elements from the schema in the context of that type — a type may bind a
31
+ * shared property to its own dynamic catalog. Falls back to the form model's own id.
32
+ */
33
+ objectTypeId?: string;
28
34
  /**
29
35
  * whether or not to disable the complete form
30
36
  */
@@ -1,7 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { ComponentRef, Type } from '@angular/core';
3
3
  import { AuditEntry, SchemaResponseFieldDefinition, TranslateService, ResolvedObjectConfigItem, RendererType } from '@yuuvis/client-core';
4
- import * as dist_libs_yuuvis_client_core_types_yuuvis_client_core from 'dist/libs/yuuvis/client-core/types/yuuvis-client-core';
5
4
 
6
5
  /**
7
6
  * Abstract class to be extended by audit-entry renderers. The renderer controls the
@@ -71,9 +70,15 @@ declare abstract class AbstractRendererComponent<T = string, U = null> {
71
70
  propertyName: i0.InputSignal<string>;
72
71
  value: i0.InputSignal<T | null>;
73
72
  meta: i0.InputSignal<U | Record<string, unknown> | undefined>;
73
+ /**
74
+ * ID of the object type (or secondary object type) the property is rendered for, when known.
75
+ * Some schema attributes — most notably the dynamic `catalog` a property is bound to — may be
76
+ * overridden per type, and can only be resolved with that context.
77
+ */
78
+ objectTypeId: i0.InputSignal<string | undefined>;
74
79
  protected getProperty(): SchemaResponseFieldDefinition | undefined;
75
80
  static ɵfac: i0.ɵɵFactoryDeclaration<AbstractRendererComponent<any, any>, never>;
76
- static ɵcmp: i0.ɵɵComponentDeclaration<AbstractRendererComponent<any, any>, "yuv-abstract-renderer", never, { "propertyName": { "alias": "propertyName"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "meta": { "alias": "meta"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
81
+ static ɵcmp: i0.ɵɵComponentDeclaration<AbstractRendererComponent<any, any>, "yuv-abstract-renderer", never, { "propertyName": { "alias": "propertyName"; "required": true; "isSignal": true; }; "value": { "alias": "value"; "required": true; "isSignal": true; }; "meta": { "alias": "meta"; "required": false; "isSignal": true; }; "objectTypeId": { "alias": "objectTypeId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
77
82
  }
78
83
 
79
84
  declare class BooleanRendererComponent extends AbstractRendererComponent {
@@ -184,7 +189,15 @@ declare class UnknownRendererComponent extends AbstractRendererComponent<any> {
184
189
  }
185
190
 
186
191
  type RendererComponent = IntegerRendererComponent | DecimalRendererComponent | DateTimeRendererComponent | IconRendererComponent | StringRendererComponent | BooleanRendererComponent | TableRendererComponent | I18nCatalogRendererComponent | DynamicCatalogRendererComponent;
187
- type RendererDirectiveInput = ResolvedObjectConfigItem;
192
+ /**
193
+ * Input of the `yuvRenderer` directive. `objectTypeId` is optional type context: a type may bind
194
+ * a shared property to its own dynamic catalog, and that override can only be resolved when the
195
+ * type (or secondary object type) the property is rendered for is known. Without it the renderer
196
+ * falls back to the global property definition.
197
+ */
198
+ type RendererDirectiveInput = ResolvedObjectConfigItem & {
199
+ objectTypeId?: string;
200
+ };
188
201
 
189
202
  /**
190
203
  * Service for managing property type renderers. Renderers are components that will render certain
@@ -223,7 +236,7 @@ declare class RendererService {
223
236
  declare class RendererDirective {
224
237
  #private;
225
238
  component: ComponentRef<RendererComponent>;
226
- yuvRenderer: i0.InputSignal<dist_libs_yuuvis_client_core_types_yuuvis_client_core.ResolvedObjectConfigItem | undefined>;
239
+ yuvRenderer: i0.InputSignal<RendererDirectiveInput | undefined>;
227
240
  static ɵfac: i0.ɵɵFactoryDeclaration<RendererDirective, never>;
228
241
  static ɵdir: i0.ɵɵDirectiveDeclaration<RendererDirective, "[yuvRenderer]", never, { "yuvRenderer": { "alias": "yuvRenderer"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
229
242
  }
@@ -247,7 +247,13 @@ declare class SmartSearchEditController {
247
247
  */
248
248
  activeFields: _angular_core.Signal<SuggestionItem[]>;
249
249
  suggestions: _angular_core.Signal<SuggestionItem[]>;
250
- /** Number of top-level query units: the full-text unit (when it has a term) plus each block. */
250
+ /**
251
+ * Whether the full-text unit contributes to the query — a term, a type restriction, or both.
252
+ * Drives its own muted styling and the joiner below it, so what reads as active matches what
253
+ * is actually queried (see {@link isFulltextActive}).
254
+ */
255
+ fulltextActive: _angular_core.Signal<boolean>;
256
+ /** Number of top-level query units: the full-text unit (when it contributes one) plus each block. */
251
257
  unitCount: _angular_core.Signal<number>;
252
258
  showCombinator: _angular_core.Signal<boolean>;
253
259
  cmisQuery: _angular_core.Signal<string>;
@@ -397,14 +403,30 @@ declare function isConditionUnset(cond: FieldCondition): boolean;
397
403
  declare function buildNodeClause(node: ConditionNode): string;
398
404
  /**
399
405
  * Build the whole-object full-text clause: a single `CONTAINS('term')` predicate, optionally scoped
400
- * to a column and AND-ed with a type restriction. Returns `''` when the term is blank.
406
+ * to a column and AND-ed with a type restriction.
407
+ *
408
+ * A type restriction on its own — types picked in the full-text bar's type filter with nothing
409
+ * typed — is a query in its own right ("show me everything of this type"), exactly like a type
410
+ * block carrying no conditions. So the picked types are returned alone in that case; only a unit
411
+ * with neither a term nor a picked type contributes nothing and yields `''`.
401
412
  *
402
413
  * @param fulltext The full-text unit. An empty `types` list means "all types".
403
- * @param scopeTypes The types the search is scoped to (the host's `types` allow-list). When
404
- * the unit picks no concrete type, "all types" means *any of these* — so the restriction is
405
- * still emitted. Pass an empty list for an unscoped search: then "all types" restricts nothing.
414
+ * @param scopeTypes The types the search is scoped to (the host's `types` allow-list). When the
415
+ * unit picks no concrete type, "all types" means *any of these* — so the restriction is still
416
+ * emitted. Pass an empty list for an unscoped search: then "all types" restricts nothing.
417
+ *
418
+ * The scope deliberately only narrows a *term* search. With nothing typed and no type picked the
419
+ * panel is simply untouched, and falling back to the scope there would turn it into a standing
420
+ * "everything in scope" query the moment it opens.
406
421
  */
407
422
  declare function buildFulltextClause(fulltext: FulltextSearch, scopeTypes?: SearchBlockType[]): string;
423
+ /**
424
+ * Whether the full-text unit contributes a clause to the query — a term, a type restriction, or
425
+ * both. Lives next to {@link buildFulltextClause} so the UI's notion of "this unit is active"
426
+ * (its muted styling, the joiner to the blocks below it, the unit count behind the AND/OR toggle)
427
+ * cannot drift from what actually ends up in the query.
428
+ */
429
+ declare function isFulltextActive(fulltext: FulltextSearch): boolean;
408
430
  /**
409
431
  * Assemble the full CMIS statement from the search state. Each unit — the
410
432
  * full-text clause plus every type block (type restriction `AND`-ed with its
@@ -581,6 +603,7 @@ declare class SmartSearchComponent {
581
603
  readonly showCombinator: _angular_core.Signal<boolean>;
582
604
  readonly suggestions: _angular_core.Signal<SuggestionItem[]>;
583
605
  readonly fulltext: _angular_core.WritableSignal<_yuuvis_client_framework_smart_search.FulltextSearch>;
606
+ readonly fulltextActive: _angular_core.Signal<boolean>;
584
607
  readonly objectTypes: _angular_core.Signal<_yuuvis_client_core.GenericObjectType[]>;
585
608
  readonly activeBlockFields: _angular_core.Signal<SuggestionItem[]>;
586
609
  readonly formMode: _angular_core.WritableSignal<boolean>;
@@ -774,5 +797,5 @@ declare class YuvSmartSearchModule {
774
797
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<YuvSmartSearchModule>;
775
798
  }
776
799
 
777
- export { SmartSearchComponent, YuvSmartSearchModule, buildCmisQuery, buildFulltextClause, buildNodeClause, isConditionGroup, isFieldCondition, isTableCondition };
800
+ export { SmartSearchComponent, YuvSmartSearchModule, buildCmisQuery, buildFulltextClause, buildNodeClause, isConditionGroup, isFieldCondition, isFulltextActive, isTableCondition };
778
801
  export type { BuildStep, Combinator, ConditionContainer, ConditionGroup, ConditionNode, FieldCondition, FulltextScope, FulltextSearch, SearchBlock, SearchBlockType, SmartSearchState, SuggestionItem, TableCondition };