@mintplayer/ng-spark 0.0.1 → 0.0.5

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,7 +1,7 @@
1
1
  {
2
2
  "name": "@mintplayer/ng-spark",
3
3
  "private": false,
4
- "version": "0.0.1",
4
+ "version": "0.0.5",
5
5
  "description": "Angular component library for MintPlayer.Spark CRUD applications",
6
6
  "repository": {
7
7
  "type": "git",
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken, TemplateRef, QueryList, PipeTransform, Provider } from '@angular/core';
2
+ import { InjectionToken, Type, TemplateRef, PipeTransform, InputSignal, Provider } from '@angular/core';
3
3
  import { Color } from '@mintplayer/ng-bootstrap';
4
4
  import { DatatableSettings } from '@mintplayer/ng-bootstrap/datatable';
5
5
  import { PaginationResponse } from '@mintplayer/pagination';
@@ -53,6 +53,11 @@ interface PersistentObjectAttribute {
53
53
  showedOn?: ShowedOn | string;
54
54
  isValueChanged?: boolean;
55
55
  rules: ValidationRule[];
56
+ group?: string;
57
+ /** Renderer component name for custom display in detail/list views */
58
+ renderer?: string;
59
+ /** Options passed to the renderer component */
60
+ rendererOptions?: Record<string, any>;
56
61
  }
57
62
 
58
63
  interface PersistentObject {
@@ -90,6 +95,30 @@ interface EntityAttributeDefinition {
90
95
  */
91
96
  showedOn?: ShowedOn | string;
92
97
  rules: ValidationRule[];
98
+ /** References an AttributeGroup.id to assign this attribute to a group */
99
+ group?: string;
100
+ /** Number of grid columns this attribute spans within a tab's column layout */
101
+ columnSpan?: number;
102
+ /** Renderer component name for custom display in detail/list views */
103
+ renderer?: string;
104
+ /** Options passed to the renderer component */
105
+ rendererOptions?: Record<string, any>;
106
+ }
107
+ interface AttributeTab {
108
+ id: string;
109
+ name: string;
110
+ label?: TranslatedString;
111
+ order: number;
112
+ /** Number of columns for the grid layout within this tab */
113
+ columnCount?: number;
114
+ }
115
+ interface AttributeGroup {
116
+ id: string;
117
+ name: string;
118
+ label?: TranslatedString;
119
+ /** References an AttributeTab.id to assign this group to a tab */
120
+ tab?: string;
121
+ order: number;
93
122
  }
94
123
  interface EntityType {
95
124
  id: string;
@@ -106,6 +135,8 @@ interface EntityType {
106
135
  * (Fallback) Single attribute name to use as display value when displayFormat is not specified.
107
136
  */
108
137
  displayAttribute?: string;
138
+ tabs?: AttributeTab[];
139
+ groups?: AttributeGroup[];
109
140
  attributes: EntityAttributeDefinition[];
110
141
  }
111
142
 
@@ -274,31 +305,15 @@ declare class RetryActionService {
274
305
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<RetryActionService>;
275
306
  }
276
307
 
277
- interface SparkFieldTemplateContext {
278
- $implicit: EntityAttributeDefinition;
279
- formData: Record<string, any>;
280
- value: any;
281
- hasError: boolean;
282
- errorMessage: TranslatedString | null;
283
- }
284
- declare class SparkFieldTemplateDirective {
285
- template: TemplateRef<SparkFieldTemplateContext>;
286
- name: _angular_core.InputSignal<string>;
287
- constructor(template: TemplateRef<SparkFieldTemplateContext>);
288
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SparkFieldTemplateDirective, never>;
289
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SparkFieldTemplateDirective, "[sparkFieldTemplate]", never, { "name": { "alias": "sparkFieldTemplate"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
290
- }
291
-
292
308
  declare class SparkPoFormComponent {
293
309
  private readonly sparkService;
294
310
  private readonly translations;
295
- fieldTemplates: QueryList<SparkFieldTemplateDirective>;
311
+ private readonly rendererRegistry;
296
312
  entityType: _angular_core.InputSignal<EntityType>;
297
313
  formData: _angular_core.ModelSignal<Record<string, any>>;
298
314
  validationErrors: _angular_core.InputSignal<ValidationError[]>;
299
315
  showButtons: _angular_core.InputSignal<boolean>;
300
316
  isSaving: _angular_core.InputSignal<boolean>;
301
- externalFieldTemplates: _angular_core.InputSignal<SparkFieldTemplateDirective[]>;
302
317
  save: _angular_core.OutputEmitterRef<void>;
303
318
  cancel: _angular_core.OutputEmitterRef<void>;
304
319
  colors: typeof Color;
@@ -324,10 +339,13 @@ declare class SparkPoFormComponent {
324
339
  lookupSearchTerm: _angular_core.WritableSignal<string>;
325
340
  ELookupDisplayType: typeof ELookupDisplayType;
326
341
  editableAttributes: _angular_core.Signal<EntityAttributeDefinition[]>;
342
+ private static readonly DEFAULT_TAB;
343
+ ungroupedAttributes: _angular_core.Signal<EntityAttributeDefinition[]>;
344
+ resolvedTabs: _angular_core.Signal<AttributeTab[]>;
345
+ groupsForTab(tab: AttributeTab): AttributeGroup[];
346
+ attrsForGroup(group: AttributeGroup): EntityAttributeDefinition[];
327
347
  referenceVisibleAttributes: _angular_core.Signal<EntityAttributeDefinition[]>;
328
348
  filteredLookupItems: _angular_core.Signal<LookupReferenceValue[]>;
329
- getFieldTemplate(attr: EntityAttributeDefinition): TemplateRef<SparkFieldTemplateContext> | null;
330
- getFieldTemplateContext(attr: EntityAttributeDefinition): SparkFieldTemplateContext;
331
349
  constructor();
332
350
  private toRecord;
333
351
  loadReferenceOptions(): Promise<void>;
@@ -338,6 +356,8 @@ declare class SparkPoFormComponent {
338
356
  openLookupSelector(attr: EntityAttributeDefinition): void;
339
357
  selectLookupItem(item: LookupReferenceValue): void;
340
358
  closeLookupModal(): void;
359
+ getEditRendererComponent(attr: EntityAttributeDefinition): Type<any> | null;
360
+ getEditRendererInputs(attr: EntityAttributeDefinition): Record<string, any>;
341
361
  hasError(attrName: string): boolean;
342
362
  onFieldChange(): void;
343
363
  onSave(): void;
@@ -356,14 +376,13 @@ declare class SparkPoFormComponent {
356
376
  selectReferenceItem(item: PersistentObject): void;
357
377
  closeReferenceModal(): void;
358
378
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SparkPoFormComponent, never>;
359
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkPoFormComponent, "spark-po-form", never, { "entityType": { "alias": "entityType"; "required": false; "isSignal": true; }; "formData": { "alias": "formData"; "required": false; "isSignal": true; }; "validationErrors": { "alias": "validationErrors"; "required": false; "isSignal": true; }; "showButtons": { "alias": "showButtons"; "required": false; "isSignal": true; }; "isSaving": { "alias": "isSaving"; "required": false; "isSignal": true; }; "externalFieldTemplates": { "alias": "externalFieldTemplates"; "required": false; "isSignal": true; }; }, { "formData": "formDataChange"; "save": "save"; "cancel": "cancel"; }, ["fieldTemplates"], never, true, never>;
379
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkPoFormComponent, "spark-po-form", never, { "entityType": { "alias": "entityType"; "required": false; "isSignal": true; }; "formData": { "alias": "formData"; "required": false; "isSignal": true; }; "validationErrors": { "alias": "validationErrors"; "required": false; "isSignal": true; }; "showButtons": { "alias": "showButtons"; "required": false; "isSignal": true; }; "isSaving": { "alias": "isSaving"; "required": false; "isSignal": true; }; }, { "formData": "formDataChange"; "save": "save"; "cancel": "cancel"; }, never, never, true, never>;
360
380
  }
361
381
 
362
382
  declare class SparkPoCreateComponent {
363
383
  private readonly route;
364
384
  private readonly router;
365
385
  private readonly sparkService;
366
- fieldTemplates: QueryList<SparkFieldTemplateDirective>;
367
386
  saved: _angular_core.OutputEmitterRef<PersistentObject>;
368
387
  cancelled: _angular_core.OutputEmitterRef<void>;
369
388
  colors: typeof Color;
@@ -380,14 +399,13 @@ declare class SparkPoCreateComponent {
380
399
  onSave(): Promise<void>;
381
400
  onCancel(): void;
382
401
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SparkPoCreateComponent, never>;
383
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkPoCreateComponent, "spark-po-create", never, {}, { "saved": "saved"; "cancelled": "cancelled"; }, ["fieldTemplates"], never, true, never>;
402
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkPoCreateComponent, "spark-po-create", never, {}, { "saved": "saved"; "cancelled": "cancelled"; }, never, never, true, never>;
384
403
  }
385
404
 
386
405
  declare class SparkPoEditComponent {
387
406
  private readonly route;
388
407
  private readonly router;
389
408
  private readonly sparkService;
390
- fieldTemplates: QueryList<SparkFieldTemplateDirective>;
391
409
  saved: _angular_core.OutputEmitterRef<PersistentObject>;
392
410
  cancelled: _angular_core.OutputEmitterRef<void>;
393
411
  colors: typeof Color;
@@ -406,20 +424,7 @@ declare class SparkPoEditComponent {
406
424
  onSave(): Promise<void>;
407
425
  onCancel(): void;
408
426
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SparkPoEditComponent, never>;
409
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkPoEditComponent, "spark-po-edit", never, {}, { "saved": "saved"; "cancelled": "cancelled"; }, ["fieldTemplates"], never, true, never>;
410
- }
411
-
412
- interface SparkDetailFieldTemplateContext {
413
- $implicit: EntityAttributeDefinition;
414
- item: PersistentObject;
415
- value: any;
416
- }
417
- declare class SparkDetailFieldTemplateDirective {
418
- template: TemplateRef<SparkDetailFieldTemplateContext>;
419
- name: _angular_core.InputSignal<string>;
420
- constructor(template: TemplateRef<SparkDetailFieldTemplateContext>);
421
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SparkDetailFieldTemplateDirective, never>;
422
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SparkDetailFieldTemplateDirective, "[sparkDetailFieldTemplate]", never, { "name": { "alias": "sparkDetailFieldTemplate"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
427
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkPoEditComponent, "spark-po-edit", never, {}, { "saved": "saved"; "cancelled": "cancelled"; }, never, never, true, never>;
423
428
  }
424
429
 
425
430
  declare class SparkPoDetailComponent {
@@ -427,7 +432,7 @@ declare class SparkPoDetailComponent {
427
432
  private readonly router;
428
433
  private readonly sparkService;
429
434
  private readonly lang;
430
- detailFieldTemplates: QueryList<SparkDetailFieldTemplateDirective>;
435
+ private readonly rendererRegistry;
431
436
  showCustomActions: _angular_core.InputSignal<boolean>;
432
437
  extraActionsTemplate: _angular_core.InputSignal<TemplateRef<void>>;
433
438
  extraContentTemplate: _angular_core.InputSignal<TemplateRef<{
@@ -456,8 +461,13 @@ declare class SparkPoDetailComponent {
456
461
  constructor();
457
462
  private onParamsChange;
458
463
  visibleAttributes: _angular_core.Signal<EntityAttributeDefinition[]>;
459
- getDetailFieldTemplate(attr: EntityAttributeDefinition): TemplateRef<SparkDetailFieldTemplateContext> | null;
460
- getDetailFieldContext(attr: EntityAttributeDefinition, item: PersistentObject): SparkDetailFieldTemplateContext;
464
+ private static readonly DEFAULT_TAB;
465
+ ungroupedAttributes: _angular_core.Signal<EntityAttributeDefinition[]>;
466
+ resolvedTabs: _angular_core.Signal<AttributeTab[]>;
467
+ groupsForTab(tab: AttributeTab): AttributeGroup[];
468
+ attrsForGroup(group: AttributeGroup): EntityAttributeDefinition[];
469
+ getDetailRendererComponent(attr: EntityAttributeDefinition): Type<any> | null;
470
+ getDetailRendererInputs(attr: EntityAttributeDefinition, item: PersistentObject): Record<string, any>;
461
471
  private loadLookupReferenceOptions;
462
472
  private loadAsDetailTypes;
463
473
  onCustomAction(action: CustomActionDefinition): Promise<void>;
@@ -465,27 +475,14 @@ declare class SparkPoDetailComponent {
465
475
  onDelete(): Promise<void>;
466
476
  onBack(): void;
467
477
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SparkPoDetailComponent, never>;
468
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkPoDetailComponent, "spark-po-detail", never, { "showCustomActions": { "alias": "showCustomActions"; "required": false; "isSignal": true; }; "extraActionsTemplate": { "alias": "extraActionsTemplate"; "required": false; "isSignal": true; }; "extraContentTemplate": { "alias": "extraContentTemplate"; "required": false; "isSignal": true; }; }, { "edited": "edited"; "deleted": "deleted"; "customActionExecuted": "customActionExecuted"; }, ["detailFieldTemplates"], never, true, never>;
469
- }
470
-
471
- interface SparkColumnTemplateContext {
472
- $implicit: PersistentObject;
473
- attr: EntityAttributeDefinition;
474
- value: any;
475
- }
476
- declare class SparkColumnTemplateDirective {
477
- template: TemplateRef<SparkColumnTemplateContext>;
478
- name: _angular_core.InputSignal<string>;
479
- constructor(template: TemplateRef<SparkColumnTemplateContext>);
480
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<SparkColumnTemplateDirective, never>;
481
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SparkColumnTemplateDirective, "[sparkColumnTemplate]", never, { "name": { "alias": "sparkColumnTemplate"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
478
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkPoDetailComponent, "spark-po-detail", never, { "showCustomActions": { "alias": "showCustomActions"; "required": false; "isSignal": true; }; "extraActionsTemplate": { "alias": "extraActionsTemplate"; "required": false; "isSignal": true; }; "extraContentTemplate": { "alias": "extraContentTemplate"; "required": false; "isSignal": true; }; }, { "edited": "edited"; "deleted": "deleted"; "customActionExecuted": "customActionExecuted"; }, never, never, true, never>;
482
479
  }
483
480
 
484
481
  declare class SparkQueryListComponent {
485
482
  private readonly route;
486
483
  private readonly router;
487
484
  private readonly sparkService;
488
- columnTemplates: QueryList<SparkColumnTemplateDirective>;
485
+ private readonly rendererRegistry;
489
486
  extraActionsTemplate: _angular_core.InputSignal<TemplateRef<void>>;
490
487
  rowClicked: _angular_core.OutputEmitterRef<PersistentObject>;
491
488
  createClicked: _angular_core.OutputEmitterRef<void>;
@@ -512,13 +509,13 @@ declare class SparkQueryListComponent {
512
509
  applyFilter(): void;
513
510
  clearSearch(): void;
514
511
  visibleAttributes: _angular_core.Signal<EntityAttributeDefinition[]>;
515
- getColumnTemplate(attr: EntityAttributeDefinition): TemplateRef<SparkColumnTemplateContext> | null;
516
- getColumnTemplateContext(item: PersistentObject, attr: EntityAttributeDefinition): SparkColumnTemplateContext;
512
+ getColumnRendererComponent(attr: EntityAttributeDefinition): Type<any> | null;
513
+ getColumnRendererInputs(item: PersistentObject, attr: EntityAttributeDefinition): Record<string, any>;
517
514
  private loadLookupReferenceOptions;
518
515
  onRowClick(item: PersistentObject): void;
519
516
  onCreate(): void;
520
517
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SparkQueryListComponent, never>;
521
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkQueryListComponent, "spark-query-list", never, { "extraActionsTemplate": { "alias": "extraActionsTemplate"; "required": false; "isSignal": true; }; }, { "rowClicked": "rowClicked"; "createClicked": "createClicked"; }, ["columnTemplates"], never, true, never>;
518
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SparkQueryListComponent, "spark-query-list", never, { "extraActionsTemplate": { "alias": "extraActionsTemplate"; "required": false; "isSignal": true; }; }, { "rowClicked": "rowClicked"; "createClicked": "createClicked"; }, never, never, true, never>;
522
519
  }
523
520
 
524
521
  declare class SparkRetryActionModalComponent {
@@ -688,6 +685,69 @@ declare class ArrayValuePipe implements PipeTransform {
688
685
  static ɵpipe: _angular_core.ɵɵPipeDeclaration<ArrayValuePipe, "arrayValue", true>;
689
686
  }
690
687
 
688
+ /**
689
+ * Contract for detail-page renderers (spark-po-detail).
690
+ * Displays a single attribute value in the PO detail view.
691
+ */
692
+ interface SparkAttributeDetailRenderer {
693
+ /** The current attribute value */
694
+ value: InputSignal<any>;
695
+ /** The attribute definition metadata */
696
+ attribute: InputSignal<EntityAttributeDefinition | undefined>;
697
+ /** Renderer-specific options from rendererOptions */
698
+ options: InputSignal<Record<string, any> | undefined>;
699
+ /** The full form data (for cross-field dependencies) */
700
+ formData: InputSignal<Record<string, any>>;
701
+ }
702
+ /**
703
+ * Contract for query-list column renderers (spark-query-list).
704
+ * Displays a compact cell value in the list/grid view.
705
+ */
706
+ interface SparkAttributeColumnRenderer {
707
+ /** The current attribute value */
708
+ value: InputSignal<any>;
709
+ /** The attribute definition metadata */
710
+ attribute: InputSignal<EntityAttributeDefinition | undefined>;
711
+ /** Renderer-specific options from rendererOptions */
712
+ options: InputSignal<Record<string, any> | undefined>;
713
+ }
714
+ /**
715
+ * Contract for edit-form renderers (spark-po-form on create/edit pages).
716
+ * Replaces the default <input> for this attribute.
717
+ */
718
+ interface SparkAttributeEditRenderer {
719
+ /** The current attribute value */
720
+ value: InputSignal<any>;
721
+ /** The attribute definition metadata */
722
+ attribute: InputSignal<EntityAttributeDefinition | undefined>;
723
+ /** Renderer-specific options from rendererOptions */
724
+ options: InputSignal<Record<string, any> | undefined>;
725
+ /** Callback to notify parent form of value changes (since NgComponentOutlet doesn't support outputs) */
726
+ valueChange: InputSignal<(value: any) => void>;
727
+ }
728
+
729
+ interface SparkAttributeRendererRegistration {
730
+ /** The renderer name (must match attr.renderer in model JSON) */
731
+ name: string;
732
+ /** Component for the PO detail page. Must implement SparkAttributeDetailRenderer. */
733
+ detailComponent: Type<any>;
734
+ /** Component for query-list column cells. Must implement SparkAttributeColumnRenderer. */
735
+ columnComponent: Type<any>;
736
+ /** Optional component for create/edit forms. Must implement SparkAttributeEditRenderer. When omitted, the default input is used. */
737
+ editComponent?: Type<any>;
738
+ }
739
+ declare const SPARK_ATTRIBUTE_RENDERERS: InjectionToken<SparkAttributeRendererRegistration[]>;
740
+ /**
741
+ * Register custom attribute renderers globally.
742
+ *
743
+ * @example
744
+ * provideSparkAttributeRenderers([
745
+ * { name: 'video-player', detailComponent: VideoDetailComponent, columnComponent: VideoColumnComponent },
746
+ * { name: 'color-swatch', detailComponent: ColorDetailComponent, columnComponent: ColorColumnComponent },
747
+ * ])
748
+ */
749
+ declare function provideSparkAttributeRenderers(renderers: SparkAttributeRendererRegistration[]): Provider;
750
+
691
751
  interface SparkRouteConfig {
692
752
  queryList?: Route['loadComponent'];
693
753
  poCreate?: Route['loadComponent'];
@@ -698,5 +758,5 @@ declare function sparkRoutes(config?: SparkRouteConfig): Routes;
698
758
 
699
759
  declare function provideSpark(config?: Partial<SparkConfig>): Provider[];
700
760
 
701
- export { ArrayValuePipe, AsDetailCellValuePipe, AsDetailColumnsPipe, AsDetailDisplayValuePipe, AsDetailTypePipe, AttributeValuePipe, CanCreateDetailRowPipe, CanDeleteDetailRowPipe, ELookupDisplayType, ErrorForAttributePipe, IconNamePipe, InlineRefOptionsPipe, InputTypePipe, LookupDisplayTypePipe, LookupDisplayValuePipe, LookupOptionsPipe, RawAttributeValuePipe, ReferenceAttrValuePipe, ReferenceDisplayValuePipe, ReferenceLinkRoutePipe, ResolveTranslationPipe, RetryActionService, RouterLinkPipe, SPARK_CONFIG, ShowedOn, SparkColumnTemplateDirective, SparkDetailFieldTemplateDirective, SparkFieldTemplateDirective, SparkIconComponent, SparkIconRegistry, SparkLanguageService, SparkPoCreateComponent, SparkPoDetailComponent, SparkPoEditComponent, SparkPoFormComponent, SparkQueryListComponent, SparkRetryActionModalComponent, SparkService, TranslateKeyPipe, defaultSparkConfig, hasShowedOnFlag, provideSpark, resolveTranslation, sparkRoutes };
702
- export type { CustomActionDefinition, EntityAttributeDefinition, EntityPermissions, EntityType, LookupReference, LookupReferenceListItem, LookupReferenceValue, PersistentObject, PersistentObjectAttribute, ProgramUnit, ProgramUnitGroup, ProgramUnitsConfiguration, RetryActionPayload, RetryActionResult, SparkColumnTemplateContext, SparkConfig, SparkDetailFieldTemplateContext, SparkFieldTemplateContext, SparkQuery, SparkRouteConfig, TranslatedString, ValidationError, ValidationRule };
761
+ export { ArrayValuePipe, AsDetailCellValuePipe, AsDetailColumnsPipe, AsDetailDisplayValuePipe, AsDetailTypePipe, AttributeValuePipe, CanCreateDetailRowPipe, CanDeleteDetailRowPipe, ELookupDisplayType, ErrorForAttributePipe, IconNamePipe, InlineRefOptionsPipe, InputTypePipe, LookupDisplayTypePipe, LookupDisplayValuePipe, LookupOptionsPipe, RawAttributeValuePipe, ReferenceAttrValuePipe, ReferenceDisplayValuePipe, ReferenceLinkRoutePipe, ResolveTranslationPipe, RetryActionService, RouterLinkPipe, SPARK_ATTRIBUTE_RENDERERS, SPARK_CONFIG, ShowedOn, SparkIconComponent, SparkIconRegistry, SparkLanguageService, SparkPoCreateComponent, SparkPoDetailComponent, SparkPoEditComponent, SparkPoFormComponent, SparkQueryListComponent, SparkRetryActionModalComponent, SparkService, TranslateKeyPipe, defaultSparkConfig, hasShowedOnFlag, provideSpark, provideSparkAttributeRenderers, resolveTranslation, sparkRoutes };
762
+ export type { AttributeGroup, AttributeTab, CustomActionDefinition, EntityAttributeDefinition, EntityPermissions, EntityType, LookupReference, LookupReferenceListItem, LookupReferenceValue, PersistentObject, PersistentObjectAttribute, ProgramUnit, ProgramUnitGroup, ProgramUnitsConfiguration, RetryActionPayload, RetryActionResult, SparkAttributeColumnRenderer, SparkAttributeDetailRenderer, SparkAttributeEditRenderer, SparkAttributeRendererRegistration, SparkConfig, SparkQuery, SparkRouteConfig, TranslatedString, ValidationError, ValidationRule };