@acorex/platform 20.8.9 → 20.8.10
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/fesm2022/acorex-platform-auth.mjs +125 -27
- package/fesm2022/acorex-platform-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-common-common-settings.provider-DVvuLUfF.mjs → acorex-platform-common-common-settings.provider-Bi1RYif5.mjs} +30 -32
- package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +1 -0
- package/fesm2022/acorex-platform-common.mjs +711 -205
- package/fesm2022/acorex-platform-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-core.mjs +420 -127
- package/fesm2022/acorex-platform-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-domain.mjs +557 -826
- package/fesm2022/acorex-platform-domain.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-builder.mjs +634 -114
- package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs → acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs} +9 -9
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-components.mjs +3365 -880
- package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-designer.mjs +456 -204
- package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-entity.mjs +18667 -14048
- package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-views.mjs +413 -171
- package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-layout-widget-core.mjs +507 -441
- package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs → acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs} +10 -10
- package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs → acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs} +21 -76
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
- package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs +116 -0
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs} +5 -5
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs} +4 -4
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +1 -0
- package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs} +6 -6
- package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
- package/fesm2022/acorex-platform-layout-widgets.mjs +6578 -4314
- package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-native.mjs +8 -7
- package/fesm2022/acorex-platform-native.mjs.map +1 -1
- package/fesm2022/acorex-platform-runtime.mjs +391 -166
- package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs +160 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs +120 -0
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs → acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs} +16 -23
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-401.component-53VB-PS_.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-default-error-404.component-DVF9soT5.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
- package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
- package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-default.mjs +1784 -61
- package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
- package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs} +24 -25
- package/fesm2022/acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +86 -0
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
- package/fesm2022/acorex-platform-themes-shared.mjs +408 -305
- package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-workflow.mjs +359 -100
- package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
- package/fesm2022/acorex-platform.mjs.map +1 -1
- package/package.json +31 -31
- package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +14 -2
- package/{common/index.d.ts → types/acorex-platform-common.d.ts} +302 -30
- package/{core/index.d.ts → types/acorex-platform-core.d.ts} +188 -44
- package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
- package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +160 -38
- package/{layout/components/index.d.ts → types/acorex-platform-layout-components.d.ts} +854 -125
- package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
- package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +848 -63
- package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +80 -47
- package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +274 -197
- package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +608 -122
- package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
- package/types/acorex-platform-runtime.d.ts +571 -0
- package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +113 -4
- package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +5 -4
- package/{workflow/index.d.ts → types/acorex-platform-workflow.d.ts} +162 -81
- package/fesm2022/acorex-platform-common-common-settings.provider-DVvuLUfF.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CSxCnzwU.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-CPBzE96V.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-Dtv6U3df.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-QxJfswhK.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-CVdssZBD.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs +0 -111
- package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BCxE0RTB.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DVaZN9QN.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DPGHgXa6.mjs.map +0 -1
- package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-CdiNW691.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs +0 -160
- package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D4hU2SCE.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D2CtNrSn.mjs +0 -1716
- package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-D2CtNrSn.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs +0 -120
- package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BVTklnzs.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-rGsMVAZj.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-401.component-53VB-PS_.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-404.component-DVF9soT5.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs +0 -19
- package/fesm2022/acorex-platform-themes-default-error-offline.component-CwNNHzZn.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-TJ9PWHMY.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BHcKkIx0.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs +0 -65
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-BUPs84MI.mjs.map +0 -1
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs +0 -64
- package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-BotknoHn.mjs.map +0 -1
- package/runtime/index.d.ts +0 -307
- /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnDestroy, OnInit, QueryList, OnChanges, EventEmitter, WritableSignal } from '@angular/core';
|
|
3
|
-
import { AXPActivityLog, AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPContextData, AXPFilterDefinition, AXPFilterQuery, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery, AXPActionMenuItem, AXPExecuteCommand, AXPExecuteCommandResult } from '@acorex/platform/core';
|
|
2
|
+
import { Signal, InjectionToken, InputSignal, TemplateRef, ElementRef, OnDestroy, OnInit, Type, QueryList, OnChanges, EventEmitter, WritableSignal } from '@angular/core';
|
|
3
|
+
import { AXPActivityLog, AXPSystemActionType, AXPCategoryEntity, AXPColumnQuery, AXPContextData, AXPFilterClause, AXPFilterDefinition, AXPFilterQuery, AXPContextChangeEvent, AXPSortDefinition, AXPSortQuery, AXPMetaData, AXPViewQuery, AXPMultiLanguageString, AXPActionMenuItem, AXPExecuteCommand, AXPExecuteCommandResult, containsHtmlMarkup } from '@acorex/platform/core';
|
|
4
4
|
import { AXPMenuItem } from '@acorex/platform/common';
|
|
5
|
-
import { AXValueChangedEvent, AXClickEvent, AXDataSource, AXDataSourceFilterOption, AXHtmlEvent, AXEvent, AXRange } from '@acorex/cdk/common';
|
|
5
|
+
import { AXValueChangedEvent, AXClickEvent, AXDataSource, AXDataSourceFilterOption, AXDataSourceOperator, AXFilterLogic, AXHtmlEvent, AXEvent, AXRange } from '@acorex/cdk/common';
|
|
6
6
|
import { AXTreeViewLegacyComponent, AXTreeItemClickBaseEventLegacy } from '@acorex/components/tree-view-legacy';
|
|
7
|
-
import { AXTranslationService } from '@acorex/core/translation';
|
|
8
7
|
import { AXPopoverComponent } from '@acorex/components/popover';
|
|
9
8
|
import { CdkDragDrop } from '@angular/cdk/drag-drop';
|
|
10
9
|
import * as _acorex_platform_layout_widget_core from '@acorex/platform/layout/widget-core';
|
|
11
|
-
import { AXPWidgetNode, AXPWidgetRendererDirective,
|
|
10
|
+
import { AXPWidgetNode, AXPWidgetRendererDirective, AXPWidgetProperty, AXPWidgetConfig } from '@acorex/platform/layout/widget-core';
|
|
12
11
|
import { AXDataTableComponent, AXDataTableRowDbClick, AXDataTableRowClick } from '@acorex/components/data-table';
|
|
13
12
|
import { AXBasePageComponent } from '@acorex/components/page';
|
|
14
13
|
import { AXDropListDroppedEvent } from '@acorex/cdk/drag-drop';
|
|
15
14
|
import { AXTagBoxComponent } from '@acorex/components/tag-box';
|
|
16
15
|
import { AXCalendarService } from '@acorex/core/date-time';
|
|
16
|
+
import * as _acorex_core_translation from '@acorex/core/translation';
|
|
17
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
17
18
|
import { AXFormComponent } from '@acorex/components/form';
|
|
18
19
|
import { AXTreeViewNode, AXTreeViewDragBehavior, AXTreeViewDragArea, AXTreeViewComponent, AXTreeViewBeforeDropEvent, AXTreeViewDropEvent } from '@acorex/components/tree-view';
|
|
19
20
|
import { AXTabStripChangedEvent, AXTabsComponent } from '@acorex/components/tabs';
|
|
21
|
+
import { AXValidationSummary } from '@acorex/core/validation';
|
|
20
22
|
import { AXPopupSizeType, AXPopupService } from '@acorex/components/popup';
|
|
21
23
|
import { Observable, Subject } from 'rxjs';
|
|
22
24
|
import { AXSelectBoxComponent } from '@acorex/components/select-box';
|
|
23
25
|
import { AXContextMenuOpeningEvent, AXContextMenuItemsClickEvent } from '@acorex/components/menu';
|
|
24
26
|
import { AXSchedulerComponent, AXSchedulerView, AXSchedulerResource, AXSchedulerAppointment, AXSchedulerDateRange } from '@acorex/components/scheduler';
|
|
27
|
+
import * as _acorex_platform_layout_components from '@acorex/platform/layout/components';
|
|
25
28
|
|
|
26
29
|
declare class AXPActivityLogComponent {
|
|
27
30
|
private readonly translateService;
|
|
@@ -252,7 +255,8 @@ interface AXPCategoryTreeDataSource {
|
|
|
252
255
|
}
|
|
253
256
|
|
|
254
257
|
declare class AXPCategoryTreeComponent {
|
|
255
|
-
|
|
258
|
+
/** i18n key for the synthetic root row; resolved in the template with the translate pipe. */
|
|
259
|
+
protected readonly categoryTreeRootTitleI18nKey = "@general:terms.interface.selection.all-items";
|
|
256
260
|
dataSource: _angular_core.InputSignal<AXPCategoryTreeDataSource>;
|
|
257
261
|
config: _angular_core.InputSignal<AXPCategoryTreeConfig>;
|
|
258
262
|
actions: _angular_core.InputSignal<AXPCategoryTreeActions>;
|
|
@@ -433,6 +437,7 @@ declare class AXPCompareViewComponent implements OnInit, OnDestroy {
|
|
|
433
437
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPCompareViewComponent, "axp-compare-view", never, { "inputs": { "alias": "inputs"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
434
438
|
}
|
|
435
439
|
|
|
440
|
+
type AXPDataSelectorAllowCreate = 'none' | 'full' | 'quick';
|
|
436
441
|
interface AXPDataSelectorColumn {
|
|
437
442
|
name: string;
|
|
438
443
|
title: string;
|
|
@@ -455,7 +460,8 @@ interface AXPDataSelectorConfig {
|
|
|
455
460
|
}[];
|
|
456
461
|
initialSearchTerm?: string;
|
|
457
462
|
parentField?: string;
|
|
458
|
-
allowCreate?:
|
|
463
|
+
allowCreate?: AXPDataSelectorAllowCreate;
|
|
464
|
+
onCreate?: (mode: 'full' | 'quick') => Promise<any | null>;
|
|
459
465
|
filters?: AXDataSourceFilterOption;
|
|
460
466
|
selectedItemIds?: string[] | number[];
|
|
461
467
|
categoryFilter?: {
|
|
@@ -511,7 +517,7 @@ declare class AXPDataSelectorComponent extends AXBasePageComponent {
|
|
|
511
517
|
protected handleRowClick(e: AXDataTableRowClick): void;
|
|
512
518
|
protected handleSelectedRowsChange(rows: unknown[]): Promise<void>;
|
|
513
519
|
protected handleChangeSearchValue(e: AXValueChangedEvent): void;
|
|
514
|
-
protected handleCreateNewClick(): Promise<void>;
|
|
520
|
+
protected handleCreateNewClick(mode: 'full' | 'quick'): Promise<void>;
|
|
515
521
|
protected handleCloseClick(): void;
|
|
516
522
|
protected handleSelectClick(): void;
|
|
517
523
|
protected handleExpandRow(row: any): Promise<void>;
|
|
@@ -560,6 +566,102 @@ declare class AXPDataSelectorService {
|
|
|
560
566
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPDataSelectorService>;
|
|
561
567
|
}
|
|
562
568
|
|
|
569
|
+
/**
|
|
570
|
+
* Definition for a page component that can be registered and loaded dynamically
|
|
571
|
+
*/
|
|
572
|
+
interface AXPPageComponentDefinition {
|
|
573
|
+
/**
|
|
574
|
+
* Unique key to identify the component
|
|
575
|
+
*/
|
|
576
|
+
key: string;
|
|
577
|
+
/**
|
|
578
|
+
* Loader function that returns the component type (supports lazy loading)
|
|
579
|
+
*/
|
|
580
|
+
loader: () => Type<any> | Promise<Type<any>>;
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* Provider interface for registering page components
|
|
584
|
+
* Similar to AXPDataSourceDefinitionProvider pattern
|
|
585
|
+
*/
|
|
586
|
+
interface AXPPageComponentProvider {
|
|
587
|
+
/**
|
|
588
|
+
* Returns all component definitions provided by this provider
|
|
589
|
+
*/
|
|
590
|
+
components(): Promise<AXPPageComponentDefinition[]>;
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/**
|
|
594
|
+
* Service for managing page components from multiple providers
|
|
595
|
+
* Similar to AXPDataSourceDefinitionProviderService pattern
|
|
596
|
+
*
|
|
597
|
+
* @example
|
|
598
|
+
* ```typescript
|
|
599
|
+
* // In a module providers array:
|
|
600
|
+
* {
|
|
601
|
+
* provide: AXP_PAGE_COMPONENT_PROVIDER,
|
|
602
|
+
* useClass: MyPageComponentProvider,
|
|
603
|
+
* multi: true,
|
|
604
|
+
* }
|
|
605
|
+
*
|
|
606
|
+
* // Example provider implementation:
|
|
607
|
+
* export class MyPageComponentProvider implements AXPPageComponentProvider {
|
|
608
|
+
* async components(): Promise<AXPPageComponentDefinition[]> {
|
|
609
|
+
* return [
|
|
610
|
+
* {
|
|
611
|
+
* key: 'my-custom-page',
|
|
612
|
+
* loader: () => import('./my-page.component').then(m => m.MyPageComponent),
|
|
613
|
+
* },
|
|
614
|
+
* ];
|
|
615
|
+
* }
|
|
616
|
+
* }
|
|
617
|
+
*
|
|
618
|
+
* // Later, get the component loader:
|
|
619
|
+
* const loader = await pageComponentService.find('my-custom-page');
|
|
620
|
+
* if (loader) {
|
|
621
|
+
* const ComponentType = await loader();
|
|
622
|
+
* // Use ComponentType
|
|
623
|
+
* }
|
|
624
|
+
* ```
|
|
625
|
+
*/
|
|
626
|
+
declare class AXPPageComponentRegistryService {
|
|
627
|
+
private providers;
|
|
628
|
+
/**
|
|
629
|
+
* Get all component definitions from all providers
|
|
630
|
+
*/
|
|
631
|
+
components(): Promise<AXPPageComponentDefinition[]>;
|
|
632
|
+
/**
|
|
633
|
+
* Find a component loader by key
|
|
634
|
+
*/
|
|
635
|
+
find(key: string): Promise<(() => Type<any> | Promise<Type<any>>) | undefined>;
|
|
636
|
+
/**
|
|
637
|
+
* Check if a component exists by key
|
|
638
|
+
*/
|
|
639
|
+
exists(key: string): Promise<boolean>;
|
|
640
|
+
/**
|
|
641
|
+
* Get all registered component keys
|
|
642
|
+
*/
|
|
643
|
+
getAll(): Promise<string[]>;
|
|
644
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPageComponentRegistryService, never>;
|
|
645
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPageComponentRegistryService>;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
/**
|
|
649
|
+
* Injection token for page component providers
|
|
650
|
+
* Use with multi: true to register multiple providers
|
|
651
|
+
*
|
|
652
|
+
* @example
|
|
653
|
+
* ```typescript
|
|
654
|
+
* providers: [
|
|
655
|
+
* {
|
|
656
|
+
* provide: AXP_PAGE_COMPONENT_PROVIDER,
|
|
657
|
+
* useClass: MyPageComponentProvider,
|
|
658
|
+
* multi: true,
|
|
659
|
+
* }
|
|
660
|
+
* ]
|
|
661
|
+
* ```
|
|
662
|
+
*/
|
|
663
|
+
declare const AXP_PAGE_COMPONENT_PROVIDER: InjectionToken<AXPPageComponentProvider[]>;
|
|
664
|
+
|
|
563
665
|
interface AXPDragDropListItem {
|
|
564
666
|
id: string;
|
|
565
667
|
content: string;
|
|
@@ -595,12 +697,202 @@ declare class AXPDragDropListComponent {
|
|
|
595
697
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPDragDropListComponent, "axp-drag-drop-list", never, { "items": { "alias": "items"; "required": false; "isSignal": true; }; "listId": { "alias": "listId"; "required": false; "isSignal": true; }; "dropListGroup": { "alias": "dropListGroup"; "required": false; "isSignal": true; }; "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "emptyMessage": { "alias": "emptyMessage"; "required": false; "isSignal": true; }; "disable": { "alias": "disable"; "required": false; "isSignal": true; }; }, { "items": "itemsChange"; "itemClick": "itemClick"; "dropListDropped": "dropListDropped"; }, never, never, true, never>;
|
|
596
698
|
}
|
|
597
699
|
|
|
700
|
+
/**
|
|
701
|
+
* Shared types for expression builders (expression-builder, sort-builder, group-builder, etc.)
|
|
702
|
+
*/
|
|
703
|
+
/** Unique identifier for expression nodes */
|
|
704
|
+
type AXPExpressionNodeId = string;
|
|
705
|
+
/** Logical operator type (AND, OR, etc.) */
|
|
706
|
+
type AXPExpressionLogicType = 'and' | 'or' | 'not';
|
|
707
|
+
/** Operation type (add, multiply, equal, etc.) */
|
|
708
|
+
type AXPExpressionOperationType = string;
|
|
709
|
+
/** Value source type (literal, field, parameter, etc.) */
|
|
710
|
+
type AXPExpressionValueSourceType = 'literal' | 'field' | 'parameter';
|
|
711
|
+
/** Field definition for value selectors */
|
|
712
|
+
interface AXPExpressionFieldDefinition {
|
|
713
|
+
id: string;
|
|
714
|
+
title: string;
|
|
715
|
+
dataType?: string;
|
|
716
|
+
path?: string;
|
|
717
|
+
/** Optional: for nested/related fields */
|
|
718
|
+
children?: AXPExpressionFieldDefinition[];
|
|
719
|
+
}
|
|
720
|
+
/** Value operand in an expression */
|
|
721
|
+
interface AXPExpressionValueOperand {
|
|
722
|
+
sourceType: AXPExpressionValueSourceType;
|
|
723
|
+
/** For field: field id; for literal: the value; for parameter: param key */
|
|
724
|
+
value?: unknown;
|
|
725
|
+
fieldId?: string;
|
|
726
|
+
}
|
|
727
|
+
/** Single operation node (leftOperand operator rightOperand) */
|
|
728
|
+
interface AXPExpressionOperationNode {
|
|
729
|
+
id: AXPExpressionNodeId;
|
|
730
|
+
type: 'operation';
|
|
731
|
+
operator: AXPExpressionOperationType;
|
|
732
|
+
leftOperand: AXPExpressionValueOperand;
|
|
733
|
+
rightOperand: AXPExpressionValueOperand;
|
|
734
|
+
order?: number;
|
|
735
|
+
}
|
|
736
|
+
/** Group of operations with logical connective */
|
|
737
|
+
interface AXPExpressionGroupNode {
|
|
738
|
+
id: AXPExpressionNodeId;
|
|
739
|
+
type: 'group';
|
|
740
|
+
logic: AXPExpressionLogicType;
|
|
741
|
+
children: AXPExpressionNode[];
|
|
742
|
+
order?: number;
|
|
743
|
+
}
|
|
744
|
+
/** Union of expression node types */
|
|
745
|
+
type AXPExpressionNode = AXPExpressionOperationNode | AXPExpressionGroupNode;
|
|
746
|
+
/** Root expression tree */
|
|
747
|
+
interface AXPExpressionTree {
|
|
748
|
+
id: AXPExpressionNodeId;
|
|
749
|
+
logic: AXPExpressionLogicType;
|
|
750
|
+
children: AXPExpressionNode[];
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
/**
|
|
754
|
+
* Field definitions for expression builders.
|
|
755
|
+
* Used by expression-builder, sort-builder, group-builder for value/field selection.
|
|
756
|
+
*/
|
|
757
|
+
|
|
758
|
+
/** Registry of available field definitions per context */
|
|
759
|
+
declare const AXPExpressionFieldDefinitions: Record<string, AXPExpressionFieldDefinition[]>;
|
|
760
|
+
/** Add field definitions for a given context */
|
|
761
|
+
declare function registerFieldDefinitions(context: string, fields: AXPExpressionFieldDefinition[]): void;
|
|
762
|
+
/** Get field definitions for a context */
|
|
763
|
+
declare function getFieldDefinitions(context: string): AXPExpressionFieldDefinition[];
|
|
764
|
+
|
|
765
|
+
/**
|
|
766
|
+
* Logic operator definitions (AND, OR, NOT) for expression groups.
|
|
767
|
+
*/
|
|
768
|
+
|
|
769
|
+
interface AXPExpressionLogicDefinition {
|
|
770
|
+
value: AXPExpressionLogicType;
|
|
771
|
+
text: string;
|
|
772
|
+
/** Optional icon/key for UI */
|
|
773
|
+
icon?: string;
|
|
774
|
+
}
|
|
775
|
+
declare const AXP_EXPRESSION_LOGIC_DEFINITIONS: AXPExpressionLogicDefinition[];
|
|
776
|
+
declare function getLogicDefinition(logic: AXPExpressionLogicType): AXPExpressionLogicDefinition | undefined;
|
|
777
|
+
|
|
778
|
+
/**
|
|
779
|
+
* Operation definitions (arithmetic, comparison, logical) for expression builder.
|
|
780
|
+
*/
|
|
781
|
+
|
|
782
|
+
interface AXPExpressionOperationDefinition {
|
|
783
|
+
value: AXPExpressionOperationType;
|
|
784
|
+
text: string;
|
|
785
|
+
/** Optional icon/symbol for UI */
|
|
786
|
+
symbol?: string;
|
|
787
|
+
/** Category for grouping in UI */
|
|
788
|
+
category?: 'arithmetic' | 'comparison' | 'logical' | 'string';
|
|
789
|
+
}
|
|
790
|
+
declare const AXP_EXPRESSION_OPERATION_DEFINITIONS: AXPExpressionOperationDefinition[];
|
|
791
|
+
declare function getOperationDefinition(operation: AXPExpressionOperationType): AXPExpressionOperationDefinition | undefined;
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* Selected field data emitted when condition changes
|
|
795
|
+
*/
|
|
796
|
+
type ConditionBuilderSelectedField = {
|
|
797
|
+
id: string;
|
|
798
|
+
field: string;
|
|
799
|
+
operator: AXDataSourceOperator['type'];
|
|
800
|
+
value: unknown;
|
|
801
|
+
isParametric?: boolean;
|
|
802
|
+
};
|
|
803
|
+
declare class AXPConditionBuilderConditionComponent implements OnInit {
|
|
804
|
+
item: _angular_core.InputSignal<AXPFilterClause>;
|
|
805
|
+
filterDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
|
|
806
|
+
onResolveWidget: _angular_core.InputSignal<((fieldId: string) => string) | undefined>;
|
|
807
|
+
showFillByUser: _angular_core.InputSignal<boolean>;
|
|
808
|
+
itemChange: _angular_core.OutputEmitterRef<ConditionBuilderSelectedField>;
|
|
809
|
+
removeItem: _angular_core.OutputEmitterRef<string>;
|
|
810
|
+
protected selectedField: _angular_core.WritableSignal<ConditionBuilderSelectedField | null>;
|
|
811
|
+
protected filterNode: _angular_core.WritableSignal<AXPWidgetNode>;
|
|
812
|
+
protected context: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
813
|
+
protected readonly availableFields: _angular_core.Signal<{
|
|
814
|
+
value: string | undefined;
|
|
815
|
+
text: string;
|
|
816
|
+
definition: AXPFilterDefinition;
|
|
817
|
+
}[]>;
|
|
818
|
+
protected readonly currentFilterDefinition: _angular_core.Signal<AXPFilterDefinition | undefined>;
|
|
819
|
+
protected readonly selectedFieldValue: _angular_core.Signal<string>;
|
|
820
|
+
ngOnInit(): void;
|
|
821
|
+
constructor();
|
|
822
|
+
private updateFilterWidgetNode;
|
|
823
|
+
private updateContext;
|
|
824
|
+
onFieldChange(event: AXValueChangedEvent): void;
|
|
825
|
+
onContextChange(event: {
|
|
826
|
+
data?: {
|
|
827
|
+
filter?: {
|
|
828
|
+
value?: unknown;
|
|
829
|
+
operation?: {
|
|
830
|
+
type?: string;
|
|
831
|
+
};
|
|
832
|
+
};
|
|
833
|
+
};
|
|
834
|
+
}): void;
|
|
835
|
+
onFillByUserChange(checked: boolean): void;
|
|
836
|
+
onRemoveClick(): void;
|
|
837
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPConditionBuilderConditionComponent, never>;
|
|
838
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPConditionBuilderConditionComponent, "axp-condition-builder-condition", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "filterDefinitions": { "alias": "filterDefinitions"; "required": false; "isSignal": true; }; "onResolveWidget": { "alias": "onResolveWidget"; "required": false; "isSignal": true; }; "showFillByUser": { "alias": "showFillByUser"; "required": false; "isSignal": true; }; }, { "itemChange": "itemChange"; "removeItem": "removeItem"; }, never, never, true, never>;
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
/**
|
|
842
|
+
* Generic condition builder component.
|
|
843
|
+
* Builds AXPFilterClause (logic/filters, field/operator/value) for use in outcome rules,
|
|
844
|
+
* outcome actions, query builders, etc.
|
|
845
|
+
*
|
|
846
|
+
* Same structure as axp-where-builder: groups, AND/OR logic, add condition/group, drag-drop, move/remove.
|
|
847
|
+
*/
|
|
848
|
+
declare class AXPConditionBuilderComponent {
|
|
849
|
+
private readonly widgetRegistry;
|
|
850
|
+
private readonly elementRef;
|
|
851
|
+
private readonly destroyRef;
|
|
852
|
+
private readonly platformId;
|
|
853
|
+
private readonly isBrowser;
|
|
854
|
+
value: _angular_core.InputSignal<AXPFilterClause>;
|
|
855
|
+
filterDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
|
|
856
|
+
/** When true, show "Fill by user" checkbox on each condition (e.g. for query parameters) */
|
|
857
|
+
showFillByUser: _angular_core.InputSignal<boolean>;
|
|
858
|
+
valueChange: _angular_core.OutputEmitterRef<AXPFilterClause>;
|
|
859
|
+
protected queryData: _angular_core.WritableSignal<AXPFilterClause>;
|
|
860
|
+
protected readonly logicalOperatorsItems: {
|
|
861
|
+
value: AXFilterLogic;
|
|
862
|
+
text: string;
|
|
863
|
+
}[];
|
|
864
|
+
protected getLogicDisplayText(logic: AXFilterLogic | undefined): string;
|
|
865
|
+
private connectorLayoutRafId;
|
|
866
|
+
private connectorResizeObserver;
|
|
867
|
+
private initConnectorAutoLayout;
|
|
868
|
+
private scheduleConnectorLayoutUpdate;
|
|
869
|
+
private updateConnectorCssVars;
|
|
870
|
+
constructor();
|
|
871
|
+
private generateId;
|
|
872
|
+
private updateValue;
|
|
873
|
+
private normalizeOrder;
|
|
874
|
+
protected getSortedFilters(filters: AXPFilterClause[]): AXPFilterClause[];
|
|
875
|
+
private findGroupById;
|
|
876
|
+
protected getFilterDefinition(fieldId: string): AXPFilterDefinition | undefined;
|
|
877
|
+
resolveDefaultFilterWidget(fieldId: string): string;
|
|
878
|
+
addConditionToGroup(groupId: string): void;
|
|
879
|
+
addGroupToGroup(parentGroupId: string): void;
|
|
880
|
+
removeItem(id: string): void;
|
|
881
|
+
updateCondition(condition: ConditionBuilderSelectedField): void;
|
|
882
|
+
updateGroupLogicalOperator(groupId: string, operator: AXFilterLogic): void;
|
|
883
|
+
reorderGroupItemsEvent(groupId: string, event: AXDropListDroppedEvent): void;
|
|
884
|
+
reorderGroupItems(groupId: string, previousIndex: number, currentIndex: number): void;
|
|
885
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPConditionBuilderComponent, never>;
|
|
886
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPConditionBuilderComponent, "axp-condition-builder", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "filterDefinitions": { "alias": "filterDefinitions"; "required": false; "isSignal": true; }; "showFillByUser": { "alias": "showFillByUser"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
887
|
+
}
|
|
888
|
+
|
|
598
889
|
declare class AXPQueryFiltersComponent {
|
|
599
890
|
#private;
|
|
600
891
|
protected translate: AXTranslationService;
|
|
601
892
|
protected calendarService: AXCalendarService;
|
|
602
893
|
private filterOperatorMiddleware;
|
|
603
894
|
private settingsService;
|
|
895
|
+
private readonly expressionEvaluator;
|
|
604
896
|
filtersDefinitions: _angular_core.InputSignal<AXPFilterDefinition[]>;
|
|
605
897
|
initialFilters: _angular_core.InputSignal<AXPFilterQuery[]>;
|
|
606
898
|
onFiltersChanged: _angular_core.OutputEmitterRef<AXPFilterQuery[]>;
|
|
@@ -616,6 +908,11 @@ declare class AXPQueryFiltersComponent {
|
|
|
616
908
|
protected asyncTags: _angular_core.WritableSignal<any[]>;
|
|
617
909
|
protected popover: _angular_core.Signal<AXPopoverComponent | undefined>;
|
|
618
910
|
inputValue: _angular_core.WritableSignal<string>;
|
|
911
|
+
protected readonly disabledByField: _angular_core.WritableSignal<Record<string, boolean>>;
|
|
912
|
+
/** Emits when a filter context entry changes (aligned with `widget-renderer` `events.context`). */
|
|
913
|
+
private readonly filterContextPath$;
|
|
914
|
+
private filterContextPathSnapshotReady;
|
|
915
|
+
private previousFilterContextSnapshot;
|
|
619
916
|
inlineFilters: () => AXPFilterDefinition[];
|
|
620
917
|
protected getDisplayValue: (filter: AXPFilterDefinition, val: any) => Promise<any>;
|
|
621
918
|
protected convertIfISOStringDate: (val: string) => string;
|
|
@@ -625,7 +922,7 @@ declare class AXPQueryFiltersComponent {
|
|
|
625
922
|
ngOnInit(): void;
|
|
626
923
|
handleSelectField(field: AXPFilterDefinition): void;
|
|
627
924
|
handleFieldKeyDown(e: KeyboardEvent, field: AXPFilterDefinition): void;
|
|
628
|
-
onContextChanged(e:
|
|
925
|
+
onContextChanged(e: AXPContextChangeEvent): void;
|
|
629
926
|
handleApplyFilter(): void;
|
|
630
927
|
handleButtonKeyDown(e: Event): void;
|
|
631
928
|
handleKeyDown(e: AXHtmlEvent<KeyboardEvent>): void;
|
|
@@ -640,6 +937,13 @@ declare class AXPQueryFiltersComponent {
|
|
|
640
937
|
handlePopoverClosed(e: AXEvent): void;
|
|
641
938
|
protected onPopoverOpened(e: AXEvent): void;
|
|
642
939
|
protected deactivateAllListItems(): void;
|
|
940
|
+
protected isFilterDisabled(definition: AXPFilterDefinition): boolean;
|
|
941
|
+
private createExpressionScope;
|
|
942
|
+
private isObservableLike;
|
|
943
|
+
private buildFilterTriggerScope;
|
|
944
|
+
private getFilterEventScope;
|
|
945
|
+
private getFilterWidgetScopeForDefinition;
|
|
946
|
+
private removeFilterFieldByName;
|
|
643
947
|
protected handleKeyboardEvent(event: KeyboardEvent): Promise<void>;
|
|
644
948
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPQueryFiltersComponent, never>;
|
|
645
949
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPQueryFiltersComponent, "axp-query-filters", never, { "filtersDefinitions": { "alias": "filtersDefinitions"; "required": false; "isSignal": true; }; "initialFilters": { "alias": "initialFilters"; "required": false; "isSignal": true; }; }, { "onFiltersChanged": "onFiltersChanged"; }, never, never, true, never>;
|
|
@@ -672,7 +976,7 @@ declare class AXPPreloadFiltersComponent {
|
|
|
672
976
|
/**
|
|
673
977
|
* On context changed
|
|
674
978
|
*/
|
|
675
|
-
onContextChanged(event:
|
|
979
|
+
onContextChanged(event: AXPContextChangeEvent): void;
|
|
676
980
|
/**
|
|
677
981
|
* Handle apply filters
|
|
678
982
|
*/
|
|
@@ -742,6 +1046,57 @@ declare class AXPLogoComponent implements OnInit, OnChanges {
|
|
|
742
1046
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPLogoComponent, "axp-logo", never, { "source": { "alias": "source"; "required": false; }; }, {}, never, never, true, never>;
|
|
743
1047
|
}
|
|
744
1048
|
|
|
1049
|
+
type MarkdownSegmentType = 'markdown' | 'code';
|
|
1050
|
+
interface MarkdownSegmentBase {
|
|
1051
|
+
type: MarkdownSegmentType;
|
|
1052
|
+
}
|
|
1053
|
+
interface MarkdownContentSegment extends MarkdownSegmentBase {
|
|
1054
|
+
type: 'markdown';
|
|
1055
|
+
html: string;
|
|
1056
|
+
}
|
|
1057
|
+
interface MarkdownCodeSegment extends MarkdownSegmentBase {
|
|
1058
|
+
type: 'code';
|
|
1059
|
+
language: string;
|
|
1060
|
+
code: string;
|
|
1061
|
+
}
|
|
1062
|
+
type MarkdownSegment = MarkdownContentSegment | MarkdownCodeSegment;
|
|
1063
|
+
type MarkdownTemplateType = 'markdown' | 'code';
|
|
1064
|
+
interface MarkdownTemplateContext {
|
|
1065
|
+
$implicit: MarkdownSegment;
|
|
1066
|
+
segment: MarkdownSegment;
|
|
1067
|
+
}
|
|
1068
|
+
declare class AXPMarkdownTemplateDirective {
|
|
1069
|
+
readonly template: TemplateRef<MarkdownTemplateContext>;
|
|
1070
|
+
/** Indicates which segment type this template customizes. */
|
|
1071
|
+
readonly type: _angular_core.InputSignal<MarkdownTemplateType>;
|
|
1072
|
+
constructor(template: TemplateRef<MarkdownTemplateContext>);
|
|
1073
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMarkdownTemplateDirective, never>;
|
|
1074
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AXPMarkdownTemplateDirective, "ng-template[axpMarkdownTemplate]", never, { "type": { "alias": "axpMarkdownTemplate"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1075
|
+
}
|
|
1076
|
+
declare class AXPMarkdownViewerComponent {
|
|
1077
|
+
/** Raw markdown content to render. */
|
|
1078
|
+
readonly markdown: _angular_core.InputSignal<string>;
|
|
1079
|
+
/** Optional templates for overriding markdown and code segments. */
|
|
1080
|
+
private readonly templates;
|
|
1081
|
+
protected readonly markdownTemplate: _angular_core.Signal<TemplateRef<MarkdownTemplateContext> | undefined>;
|
|
1082
|
+
protected readonly codeTemplate: _angular_core.Signal<TemplateRef<MarkdownTemplateContext> | undefined>;
|
|
1083
|
+
protected readonly segments: _angular_core.Signal<MarkdownSegment[]>;
|
|
1084
|
+
private readonly markdownCompiler;
|
|
1085
|
+
constructor();
|
|
1086
|
+
/**
|
|
1087
|
+
* Splits markdown into text/code segments, compiles markdown text to HTML with micromark,
|
|
1088
|
+
* and keeps fenced code blocks available for custom Angular rendering.
|
|
1089
|
+
*/
|
|
1090
|
+
private parseMarkdown;
|
|
1091
|
+
private addMarkdownSegment;
|
|
1092
|
+
private loadMicromarkCompiler;
|
|
1093
|
+
private loadMicromarkModules;
|
|
1094
|
+
private importModule;
|
|
1095
|
+
private escapeHtml;
|
|
1096
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPMarkdownViewerComponent, never>;
|
|
1097
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPMarkdownViewerComponent, "axp-markdown-viewer", never, { "markdown": { "alias": "markdown"; "required": false; "isSignal": true; }; }, {}, ["templates"], never, true, never>;
|
|
1098
|
+
}
|
|
1099
|
+
|
|
745
1100
|
/**
|
|
746
1101
|
* Menu item type definitions.
|
|
747
1102
|
* - 'menu': Standard navigable menu item
|
|
@@ -1107,8 +1462,20 @@ interface AXPPropertyViewerChangedEvent {
|
|
|
1107
1462
|
values: any;
|
|
1108
1463
|
mode: 'init' | 'update';
|
|
1109
1464
|
}
|
|
1465
|
+
/** Payload when the property viewer popup closes after Apply. */
|
|
1466
|
+
type AXPPropertyViewerResult = AXPPropertyViewerChangedEvent;
|
|
1467
|
+
/**
|
|
1468
|
+
* Dialog-style ref passed to property viewer `onAction` (same shape as the layout dialog `AXPDialogRef`).
|
|
1469
|
+
*/
|
|
1470
|
+
interface AXPPropertyViewerActionRef {
|
|
1471
|
+
close(): void;
|
|
1472
|
+
context(): any;
|
|
1473
|
+
action(): string | undefined;
|
|
1474
|
+
setLoading(loading: boolean): void;
|
|
1475
|
+
}
|
|
1110
1476
|
|
|
1111
1477
|
declare class AXPPropertyViewerComponent {
|
|
1478
|
+
private readonly defaultMultiLanguageConfig;
|
|
1112
1479
|
/**
|
|
1113
1480
|
* List of tabs that should be rendered inside the property viewer.
|
|
1114
1481
|
*/
|
|
@@ -1117,6 +1484,11 @@ declare class AXPPropertyViewerComponent {
|
|
|
1117
1484
|
* Determines rendering mode.
|
|
1118
1485
|
*/
|
|
1119
1486
|
mode: _angular_core.InputSignal<"simple" | "advanced">;
|
|
1487
|
+
/**
|
|
1488
|
+
* When a property uses binding expressions, controls how the expression is edited:
|
|
1489
|
+
* `inline` — code editor in the panel (default); `popup` — button that opens the dialog editor.
|
|
1490
|
+
*/
|
|
1491
|
+
bindingExpressionEditorMode: _angular_core.InputSignal<"inline" | "popup">;
|
|
1120
1492
|
/**
|
|
1121
1493
|
* Emits when property context changes.
|
|
1122
1494
|
*/
|
|
@@ -1130,9 +1502,15 @@ declare class AXPPropertyViewerComponent {
|
|
|
1130
1502
|
* Updated when user toggles the ax-switch; otherwise derived from isExpression(valueAtPath).
|
|
1131
1503
|
*/
|
|
1132
1504
|
protected expressionModeState: WritableSignal<Record<string, boolean>>;
|
|
1505
|
+
/**
|
|
1506
|
+
* Evaluated visibility for properties whose {@link AXPWidgetProperty.visible} is a `{{ }}` expression.
|
|
1507
|
+
* Keys match {@link AXPPropertyViewerComponent.propertyVisibilityKey}.
|
|
1508
|
+
*/
|
|
1509
|
+
private propertyVisibility;
|
|
1133
1510
|
protected groupCollapsedStates: Map<string, boolean>;
|
|
1134
1511
|
private readonly expressionEvaluator;
|
|
1135
1512
|
private readonly popupService;
|
|
1513
|
+
private readonly form;
|
|
1136
1514
|
constructor();
|
|
1137
1515
|
/**
|
|
1138
1516
|
* Replaces the current context with the provided value and emits an init event.
|
|
@@ -1142,10 +1520,24 @@ declare class AXPPropertyViewerComponent {
|
|
|
1142
1520
|
* Merges the provided value into the current context and emits an update event.
|
|
1143
1521
|
*/
|
|
1144
1522
|
update(value: any): void;
|
|
1523
|
+
/**
|
|
1524
|
+
* Runs registered validation rules on fields inside this viewer (requires {@link AXFormModule} host).
|
|
1525
|
+
*/
|
|
1526
|
+
validate(): Promise<AXValidationSummary>;
|
|
1527
|
+
/**
|
|
1528
|
+
* Stable key for visibility map entries (avoids collisions when the same `name` appears twice).
|
|
1529
|
+
*/
|
|
1530
|
+
protected propertyVisibilityKey(prop: AXPWidgetProperty): string;
|
|
1531
|
+
/**
|
|
1532
|
+
* Whether a property row should render. Booleans are static; `{{ }}` strings are evaluated against
|
|
1533
|
+
* {@link context} with `context.eval(path)` like {@link AXPWidgetRendererDirective.updateVisibility}.
|
|
1534
|
+
*/
|
|
1535
|
+
protected isPropertyVisible(prop: AXPWidgetProperty): boolean;
|
|
1536
|
+
private recomputePropertyVisibility;
|
|
1145
1537
|
/**
|
|
1146
1538
|
* Handles context changes produced by rendered widgets.
|
|
1147
1539
|
*/
|
|
1148
|
-
protected handleContextChange(event:
|
|
1540
|
+
protected handleContextChange(event: AXPContextChangeEvent): void;
|
|
1149
1541
|
/**
|
|
1150
1542
|
* Handles tab selection changes.
|
|
1151
1543
|
*/
|
|
@@ -1160,7 +1552,8 @@ declare class AXPPropertyViewerComponent {
|
|
|
1160
1552
|
protected getExpressionPath(prop: AXPWidgetProperty): string;
|
|
1161
1553
|
/**
|
|
1162
1554
|
* True when the property is in "expression" mode: show only the expression editor button, not the widget.
|
|
1163
|
-
* Uses expressionModeState when set; otherwise derives from
|
|
1555
|
+
* Uses expressionModeState when set; otherwise derives from template `{{ }}` expressions and, when
|
|
1556
|
+
* {@link AXPWidgetProperty.binding} is enabled, bare scripts persisted without wrappers.
|
|
1164
1557
|
*/
|
|
1165
1558
|
protected isExpressionMode(prop: AXPWidgetProperty): boolean;
|
|
1166
1559
|
/**
|
|
@@ -1173,55 +1566,156 @@ declare class AXPPropertyViewerComponent {
|
|
|
1173
1566
|
* Updates the expression/value toggle state for a binding-enabled property.
|
|
1174
1567
|
* When switching to value: resets the value at path to a type-appropriate default so the
|
|
1175
1568
|
* widget renderer does not receive the expression string (e.g. checkbox gets false, not a string).
|
|
1176
|
-
* When switching to expression: sets the value at path to
|
|
1177
|
-
*
|
|
1569
|
+
* When switching to expression: sets the value at path to an empty string so the editor starts
|
|
1570
|
+
* blank instead of keeping the previous literal (e.g. true/false).
|
|
1178
1571
|
*/
|
|
1179
1572
|
protected setExpressionMode(prop: AXPWidgetProperty, useExpression: boolean): void;
|
|
1573
|
+
/**
|
|
1574
|
+
* Current binding expression string at the property path (for inline editor ngModel).
|
|
1575
|
+
*/
|
|
1576
|
+
protected getBindingExpressionValue(prop: AXPWidgetProperty): string;
|
|
1577
|
+
/**
|
|
1578
|
+
* Persists inline code editor changes into context.
|
|
1579
|
+
*/
|
|
1580
|
+
protected setBindingExpressionValue(prop: AXPWidgetProperty, value: string): void;
|
|
1180
1581
|
/**
|
|
1181
1582
|
* Opens the binding/expression code editor for a property with binding.enabled.
|
|
1182
1583
|
* Ensures the value passed to the popup is always a string to avoid code-editor crashes.
|
|
1183
1584
|
*/
|
|
1184
1585
|
protected openBindingEditor(prop: AXPWidgetProperty): Promise<void>;
|
|
1185
1586
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerComponent, never>;
|
|
1186
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPropertyViewerComponent, "axp-property-viewer", never, { "tabsInput": { "alias": "tabsInput"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
|
|
1587
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPropertyViewerComponent, "axp-property-viewer", never, { "tabsInput": { "alias": "tabsInput"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "bindingExpressionEditorMode": { "alias": "bindingExpressionEditorMode"; "required": false; "isSignal": true; }; }, { "onChanged": "onChanged"; }, never, never, true, never>;
|
|
1187
1588
|
}
|
|
1188
1589
|
|
|
1590
|
+
/**
|
|
1591
|
+
* Whether a binding-enabled property should show expression UI (toggle to code + open editor)
|
|
1592
|
+
* instead of the literal widget.
|
|
1593
|
+
*
|
|
1594
|
+
* - Values already wrapped in `{{ ... }}` are expressions (see `AXPExpressionEvaluatorService.isExpression`).
|
|
1595
|
+
* - Persisted domain data often stores **bare** scripts; for `dataType: 'boolean'` (typical toggle + binding),
|
|
1596
|
+
* any non-empty string that is not a boolean literal is treated as an expression.
|
|
1597
|
+
* - For `number`, strings that are not plain numeric literals are treated as expressions.
|
|
1598
|
+
* - For other types, `isLikelyBareBindingScript` reduces false positives for plain text.
|
|
1599
|
+
*/
|
|
1600
|
+
declare function isPropertyBindingExpressionFormValue(property: AXPWidgetProperty, value: unknown, isTemplateExpression: (s: string) => boolean): boolean;
|
|
1601
|
+
|
|
1189
1602
|
declare class AXPPropertyViewerPopupComponent extends AXBasePageComponent {
|
|
1603
|
+
private readonly toastService;
|
|
1604
|
+
private readonly translationService;
|
|
1190
1605
|
tabs: _angular_core.InputSignal<AXPPropertyViewerTab[]>;
|
|
1191
1606
|
mode: _angular_core.InputSignal<"simple" | "advanced">;
|
|
1192
1607
|
context: _angular_core.InputSignal<any>;
|
|
1608
|
+
/**
|
|
1609
|
+
* Optional hook from `data.onApply`. Throw or reject to keep the popup open.
|
|
1610
|
+
* Return a value (not `undefined`) to use as the `close()` payload; otherwise `{ values, mode }` is used.
|
|
1611
|
+
*/
|
|
1612
|
+
onApply?: (result: AXPPropertyViewerResult) => void | Promise<unknown>;
|
|
1193
1613
|
protected readonly propertyViewer: _angular_core.Signal<AXPPropertyViewerComponent | undefined>;
|
|
1194
|
-
protected readonly currentValues: _angular_core.WritableSignal<
|
|
1614
|
+
protected readonly currentValues: _angular_core.WritableSignal<Record<string, unknown>>;
|
|
1615
|
+
protected readonly isApplying: _angular_core.WritableSignal<boolean>;
|
|
1195
1616
|
protected currentMode: 'init' | 'update';
|
|
1196
1617
|
constructor();
|
|
1197
1618
|
protected handlePropertyChanged(event: AXPPropertyViewerChangedEvent): void;
|
|
1198
1619
|
protected handleCloseClick(): void;
|
|
1199
|
-
protected handleApplyClick(): void
|
|
1620
|
+
protected handleApplyClick(): Promise<void>;
|
|
1621
|
+
private showValidationErrorToast;
|
|
1200
1622
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerPopupComponent, never>;
|
|
1201
1623
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPPropertyViewerPopupComponent, "axp-property-viewer-popup", never, { "tabs": { "alias": "tabs"; "required": true; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "context": { "alias": "context"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1202
1624
|
}
|
|
1203
1625
|
|
|
1626
|
+
interface IAXPPropertyViewerRoot {
|
|
1627
|
+
dialog<T = unknown>(delegate: (container: IAXPPropertyViewerDialogBuilder<T>) => void): IAXPPropertyViewerDialogBuilder<T>;
|
|
1628
|
+
}
|
|
1629
|
+
interface IAXPPropertyViewerDialogBuilder<T = unknown> {
|
|
1630
|
+
setTitle(title: string): IAXPPropertyViewerDialogBuilder<T>;
|
|
1631
|
+
setSize(size: AXPopupSizeType): IAXPPropertyViewerDialogBuilder<T>;
|
|
1632
|
+
setCloseButton(closeButton: boolean): IAXPPropertyViewerDialogBuilder<T>;
|
|
1633
|
+
setContext(context: any): IAXPPropertyViewerDialogBuilder<T>;
|
|
1634
|
+
setTabs(tabs: AXPPropertyViewerTab[]): IAXPPropertyViewerDialogBuilder<T>;
|
|
1635
|
+
setMode(mode: 'simple' | 'advanced'): IAXPPropertyViewerDialogBuilder<T>;
|
|
1636
|
+
/**
|
|
1637
|
+
* Runs on Save. Throw or reject to keep the popup open (same idea as layout dialog `onAction`).
|
|
1638
|
+
* Return a value to resolve `show()`; omit return (or return void) to resolve with `{ values, mode }`.
|
|
1639
|
+
*/
|
|
1640
|
+
onAction(handler: (dialogRef: AXPPropertyViewerActionRef) => T | Promise<T> | void | Promise<void>): IAXPPropertyViewerDialogBuilder<T>;
|
|
1641
|
+
show(): Promise<T | AXPPropertyViewerResult | null>;
|
|
1642
|
+
}
|
|
1204
1643
|
interface AXPPropertyViewerConfig {
|
|
1205
1644
|
title: string;
|
|
1206
1645
|
tabs: AXPPropertyViewerTab[];
|
|
1207
1646
|
context?: any;
|
|
1208
1647
|
mode?: 'simple' | 'advanced';
|
|
1209
|
-
size?:
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1648
|
+
size?: AXPopupSizeType;
|
|
1649
|
+
/**
|
|
1650
|
+
* When set, runs before close on Save. Throw or reject to keep the popup open.
|
|
1651
|
+
*/
|
|
1652
|
+
onApply?: (result: AXPPropertyViewerResult) => void | Promise<void>;
|
|
1214
1653
|
}
|
|
1215
1654
|
declare class AXPPropertyViewerService {
|
|
1216
1655
|
private readonly popupService;
|
|
1656
|
+
private readonly defaultMultiLanguageConfig;
|
|
1657
|
+
/**
|
|
1658
|
+
* Same entry shape as `layoutBuilder.create()` — use `.dialog((d) => { ... }).show()`.
|
|
1659
|
+
*/
|
|
1660
|
+
create(): IAXPPropertyViewerRoot;
|
|
1217
1661
|
/**
|
|
1218
|
-
*
|
|
1662
|
+
* Opens the property viewer popup in one call (delegates to {@link #create} `.dialog().show()`).
|
|
1219
1663
|
*/
|
|
1220
1664
|
open(config: AXPPropertyViewerConfig): Promise<AXPPropertyViewerResult | null>;
|
|
1221
1665
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPPropertyViewerService, never>;
|
|
1222
1666
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPPropertyViewerService>;
|
|
1223
1667
|
}
|
|
1224
1668
|
|
|
1669
|
+
/**
|
|
1670
|
+
* Copies {@link AXPWidgetProperty.validations} onto `schema.interface.options` so the property
|
|
1671
|
+
* viewer binds a stable widget node.
|
|
1672
|
+
*/
|
|
1673
|
+
declare function withValidationsOnEditorNode(prop: AXPWidgetProperty): AXPWidgetProperty;
|
|
1674
|
+
declare function preparePropertyForViewer(prop: AXPWidgetProperty, applyDefaultMultiLanguage: boolean): AXPWidgetProperty;
|
|
1675
|
+
/**
|
|
1676
|
+
* Deep-clone-safe: mutates cloned tab trees only when caller passes a fresh clone.
|
|
1677
|
+
* Applies the same widget-property pipeline as {@link AXPPropertyViewerComponent}.
|
|
1678
|
+
*/
|
|
1679
|
+
declare function preparePropertyViewerTabs(tabs: AXPPropertyViewerTab[], applyDefaultMultiLanguage: boolean): AXPPropertyViewerTab[];
|
|
1680
|
+
/**
|
|
1681
|
+
* Builds a single "General" tab for {@link AXPPropertyViewerService} from {@link AXPWidgetProperty} rows
|
|
1682
|
+
* (schema shape is shared with widget metadata; the edited payload is arbitrary context, not an {@link AXPWidgetNode}).
|
|
1683
|
+
*/
|
|
1684
|
+
declare function buildPropertyViewerTabsFromProperties(properties: AXPWidgetProperty[]): AXPPropertyViewerTab[];
|
|
1685
|
+
/**
|
|
1686
|
+
* Initial {@link AXPPropertyViewerService#setContext} value: property default paths merged with the current saved values.
|
|
1687
|
+
*/
|
|
1688
|
+
declare function buildPropertyViewerInitialContextFromProperties(properties: AXPWidgetProperty[], existing: Record<string, unknown>): Record<string, unknown>;
|
|
1689
|
+
|
|
1690
|
+
/**
|
|
1691
|
+
* Presentational layout for indexed rows: optional drag-and-drop, remove controls,
|
|
1692
|
+
* empty state, and add action. Row body is provided via {@link rowTemplate}.
|
|
1693
|
+
*/
|
|
1694
|
+
declare class AXPRepeaterRowsLayoutComponent {
|
|
1695
|
+
count: _angular_core.InputSignal<number>;
|
|
1696
|
+
disabled: _angular_core.InputSignal<boolean>;
|
|
1697
|
+
hasControls: _angular_core.InputSignal<boolean>;
|
|
1698
|
+
allowReorder: _angular_core.InputSignal<boolean>;
|
|
1699
|
+
rowTemplate: _angular_core.InputSignal<TemplateRef<{
|
|
1700
|
+
index: number;
|
|
1701
|
+
}>>;
|
|
1702
|
+
/** i18n keys (e.g. `@general:...`) for labels; override per usage. */
|
|
1703
|
+
addItemLabelKey: _angular_core.InputSignal<string>;
|
|
1704
|
+
emptyTitleKey: _angular_core.InputSignal<string>;
|
|
1705
|
+
emptyDescriptionKey: _angular_core.InputSignal<string>;
|
|
1706
|
+
addFirstItemLabelKey: _angular_core.InputSignal<string>;
|
|
1707
|
+
addClick: _angular_core.OutputEmitterRef<void>;
|
|
1708
|
+
removeClick: _angular_core.OutputEmitterRef<number>;
|
|
1709
|
+
drop: _angular_core.OutputEmitterRef<AXDropListDroppedEvent>;
|
|
1710
|
+
protected readonly rowIndices: _angular_core.Signal<number[]>;
|
|
1711
|
+
protected readonly rowRowClass: _angular_core.Signal<string>;
|
|
1712
|
+
protected onDrop(e: AXDropListDroppedEvent): void;
|
|
1713
|
+
protected onAddClick(): void;
|
|
1714
|
+
protected onRemoveClick(index: number): void;
|
|
1715
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPRepeaterRowsLayoutComponent, never>;
|
|
1716
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPRepeaterRowsLayoutComponent, "axp-repeater-rows-layout", never, { "count": { "alias": "count"; "required": true; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "hasControls": { "alias": "hasControls"; "required": false; "isSignal": true; }; "allowReorder": { "alias": "allowReorder"; "required": false; "isSignal": true; }; "rowTemplate": { "alias": "rowTemplate"; "required": true; "isSignal": true; }; "addItemLabelKey": { "alias": "addItemLabelKey"; "required": false; "isSignal": true; }; "emptyTitleKey": { "alias": "emptyTitleKey"; "required": false; "isSignal": true; }; "emptyDescriptionKey": { "alias": "emptyDescriptionKey"; "required": false; "isSignal": true; }; "addFirstItemLabelKey": { "alias": "addFirstItemLabelKey"; "required": false; "isSignal": true; }; }, { "addClick": "addClick"; "removeClick": "removeClick"; "drop": "drop"; }, never, never, true, never>;
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1225
1719
|
declare class AXPQuerySortsComponent {
|
|
1226
1720
|
sortDefinitions: _angular_core.ModelSignal<AXPSortDefinition[]>;
|
|
1227
1721
|
sortQueries: _angular_core.WritableSignal<AXPSortQuery[]>;
|
|
@@ -1525,12 +2019,12 @@ declare class AXPSpreadsheetComponent {
|
|
|
1525
2019
|
* Handle cell value change from widget
|
|
1526
2020
|
* The widget sets the value at path like rows[index].column.path
|
|
1527
2021
|
*/
|
|
1528
|
-
protected handleCellValueChange(rowIndex: number, columnName: string, event:
|
|
2022
|
+
protected handleCellValueChange(rowIndex: number, columnName: string, event: AXPContextChangeEvent): void;
|
|
1529
2023
|
/**
|
|
1530
2024
|
* Handle spreadsheet context change from widgets-container
|
|
1531
2025
|
* This is called when any widget in the spreadsheet changes
|
|
1532
2026
|
*/
|
|
1533
|
-
protected handleSpreadsheetContextChange(event:
|
|
2027
|
+
protected handleSpreadsheetContextChange(event: AXPContextChangeEvent): void;
|
|
1534
2028
|
/**
|
|
1535
2029
|
* Handle blur event to stop editing (when user clicks away from cell)
|
|
1536
2030
|
*/
|
|
@@ -1577,9 +2071,9 @@ declare class AXPStateMessageComponent {
|
|
|
1577
2071
|
icon: _angular_core.InputSignal<string>;
|
|
1578
2072
|
title: _angular_core.InputSignal<string>;
|
|
1579
2073
|
description: _angular_core.InputSignal<string>;
|
|
1580
|
-
|
|
2074
|
+
look: _angular_core.InputSignal<"default" | "compact" | "minimal">;
|
|
1581
2075
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPStateMessageComponent, never>;
|
|
1582
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStateMessageComponent, "axp-state-message", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "
|
|
2076
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStateMessageComponent, "axp-state-message", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "look": { "alias": "look"; "required": false; "isSignal": true; }; }, {}, never, ["[slot=actions]"], true, never>;
|
|
1583
2077
|
}
|
|
1584
2078
|
|
|
1585
2079
|
declare class AXPStopwatchComponent implements OnDestroy {
|
|
@@ -1728,7 +2222,7 @@ declare class AXPTemplateViewerComponent extends AXBasePageComponent {
|
|
|
1728
2222
|
protected readonly currentPage: _angular_core.Signal<AXPWidgetNode>;
|
|
1729
2223
|
protected ngOnInit(): Promise<void>;
|
|
1730
2224
|
private loadTemplate;
|
|
1731
|
-
protected handleContextChanged(e:
|
|
2225
|
+
protected handleContextChanged(e: AXPContextChangeEvent): void;
|
|
1732
2226
|
protected handleSubmit(form: AXFormComponent): Promise<void>;
|
|
1733
2227
|
protected handleCancel(): void;
|
|
1734
2228
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPTemplateViewerComponent, never>;
|
|
@@ -1753,6 +2247,37 @@ declare class AXPTemplateViewerService {
|
|
|
1753
2247
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPTemplateViewerService>;
|
|
1754
2248
|
}
|
|
1755
2249
|
|
|
2250
|
+
/**
|
|
2251
|
+
* Generic avatar renderer with image and initials fallback.
|
|
2252
|
+
*/
|
|
2253
|
+
declare class AXPAvatarComponent {
|
|
2254
|
+
/** Avatar size in pixels. */
|
|
2255
|
+
readonly size: _angular_core.InputSignal<number>;
|
|
2256
|
+
/** Optional image source for the avatar. */
|
|
2257
|
+
readonly src: _angular_core.InputSignal<string | undefined>;
|
|
2258
|
+
/** Display name used for title and initials fallback. */
|
|
2259
|
+
readonly fullName: _angular_core.InputSignal<string | undefined>;
|
|
2260
|
+
/** Optional override for fallback text shown when image is not available. */
|
|
2261
|
+
readonly fallbackText: _angular_core.InputSignal<string | undefined>;
|
|
2262
|
+
/** Forces placeholder mode and '?' fallback. */
|
|
2263
|
+
readonly placeholder: _angular_core.InputSignal<boolean>;
|
|
2264
|
+
protected readonly isAvatarLoaded: _angular_core.WritableSignal<boolean>;
|
|
2265
|
+
protected readonly normalizedName: _angular_core.Signal<string>;
|
|
2266
|
+
protected readonly resolvedSrc: _angular_core.Signal<string>;
|
|
2267
|
+
protected readonly hasAvatar: _angular_core.Signal<boolean>;
|
|
2268
|
+
protected readonly isLoading: _angular_core.Signal<boolean>;
|
|
2269
|
+
protected readonly avatarText: _angular_core.Signal<string>;
|
|
2270
|
+
protected readonly avatarColor: _angular_core.Signal<string>;
|
|
2271
|
+
protected readonly title: _angular_core.Signal<string>;
|
|
2272
|
+
protected onImageError(event: AXHtmlEvent<ErrorEvent>): void;
|
|
2273
|
+
protected onImageLoad(event: AXHtmlEvent<Event>): void;
|
|
2274
|
+
private computeInitials;
|
|
2275
|
+
private hashString;
|
|
2276
|
+
private pickColor;
|
|
2277
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPAvatarComponent, never>;
|
|
2278
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPAvatarComponent, "axp-avatar", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "src": { "alias": "src"; "required": false; "isSignal": true; }; "fullName": { "alias": "fullName"; "required": false; "isSignal": true; }; "fallbackText": { "alias": "fallbackText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
2279
|
+
}
|
|
2280
|
+
|
|
1756
2281
|
type AXPUserAvatarSize = 'small' | 'medium' | 'large';
|
|
1757
2282
|
type AXPUserAvatarStatus = 'online' | 'offline';
|
|
1758
2283
|
type AXPUserAvatarData = {
|
|
@@ -1821,13 +2346,6 @@ declare class AXPUserAvatarComponent implements OnInit, OnDestroy {
|
|
|
1821
2346
|
lastName: _angular_core.Signal<string>;
|
|
1822
2347
|
title: _angular_core.Signal<string>;
|
|
1823
2348
|
isOnline: _angular_core.Signal<boolean>;
|
|
1824
|
-
avatarText: _angular_core.Signal<string>;
|
|
1825
|
-
avatarColor: _angular_core.Signal<string>;
|
|
1826
|
-
protected hasAvatar: _angular_core.Signal<boolean>;
|
|
1827
|
-
protected isAvatarLoaded: _angular_core.WritableSignal<boolean>;
|
|
1828
|
-
protected isLoading: _angular_core.Signal<boolean>;
|
|
1829
|
-
protected onImageError(event: AXHtmlEvent<ErrorEvent>): void;
|
|
1830
|
-
protected onImageLoad(event: AXHtmlEvent<Event>): void;
|
|
1831
2349
|
ngOnInit(): void;
|
|
1832
2350
|
ngOnDestroy(): void;
|
|
1833
2351
|
private loadUserData;
|
|
@@ -1836,12 +2354,6 @@ declare class AXPUserAvatarComponent implements OnInit, OnDestroy {
|
|
|
1836
2354
|
* This is a placeholder - implement based on your actual requirements
|
|
1837
2355
|
*/
|
|
1838
2356
|
private generateAvatarSrc;
|
|
1839
|
-
/**
|
|
1840
|
-
* Get initials from first and last name
|
|
1841
|
-
*/
|
|
1842
|
-
private getInitials;
|
|
1843
|
-
private hashString;
|
|
1844
|
-
private pickColor;
|
|
1845
2357
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPUserAvatarComponent, never>;
|
|
1846
2358
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPUserAvatarComponent, "axp-user-avatar", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "userId": { "alias": "userId"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1847
2359
|
}
|
|
@@ -1862,99 +2374,90 @@ declare class AXPQueryViewsComponent {
|
|
|
1862
2374
|
}
|
|
1863
2375
|
|
|
1864
2376
|
/**
|
|
1865
|
-
*
|
|
1866
|
-
*
|
|
2377
|
+
* One selectable entry for {@link AXPItemConfiguratorComponent}.
|
|
2378
|
+
* Parents map external data into this shape. {@link propertyDefinitions} drive {@link AXPPropertyViewerService} tabs.
|
|
1867
2379
|
*/
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
2380
|
+
interface ItemConfiguratorListItem {
|
|
2381
|
+
id: string;
|
|
2382
|
+
/** Shown in the list and in the configure dialog title; plain string, i18n key, or locale map. */
|
|
2383
|
+
title: AXPMultiLanguageString;
|
|
2384
|
+
icon?: string;
|
|
2385
|
+
description?: AXPMultiLanguageString;
|
|
2386
|
+
propertyDefinitions?: AXPWidgetProperty[];
|
|
2387
|
+
}
|
|
2388
|
+
interface ItemConfiguratorSelectRow {
|
|
2389
|
+
value: string;
|
|
2390
|
+
text: string;
|
|
2391
|
+
icon?: string;
|
|
2392
|
+
description?: string;
|
|
2393
|
+
}
|
|
2394
|
+
/**
|
|
2395
|
+
* Select an item from a list and edit its settings via {@link AXPPropertyViewerService}.
|
|
2396
|
+
* Bound state: {@link selectedItemId} and {@link values} (context returned from the viewer). Not tied to {@link AXPWidgetNode}.
|
|
2397
|
+
*/
|
|
2398
|
+
declare class AXPItemConfiguratorComponent {
|
|
2399
|
+
/** Selected list entry id ({@link ItemConfiguratorListItem.id}). */
|
|
2400
|
+
selectedItemId: _angular_core.ModelSignal<string>;
|
|
2401
|
+
/** Values edited in the property viewer (merged from dialog result). */
|
|
2402
|
+
values: _angular_core.ModelSignal<Record<string, unknown>>;
|
|
1876
2403
|
label: _angular_core.InputSignal<string>;
|
|
1877
|
-
/**
|
|
1878
|
-
* Field name (technical identifier, used for form field path)
|
|
1879
|
-
*/
|
|
1880
|
-
fieldName: _angular_core.InputSignal<string>;
|
|
1881
|
-
/**
|
|
1882
|
-
* Field title (display name, used in UI labels and titles)
|
|
1883
|
-
*/
|
|
1884
|
-
fieldTitle: _angular_core.InputSignal<string>;
|
|
1885
|
-
/**
|
|
1886
|
-
* Readonly mode
|
|
1887
|
-
*/
|
|
1888
2404
|
readonly: _angular_core.InputSignal<boolean>;
|
|
1889
|
-
|
|
1890
|
-
|
|
2405
|
+
items: _angular_core.InputSignal<ItemConfiguratorListItem[]>;
|
|
2406
|
+
headerActions: _angular_core.InputSignal<AXPActionMenuItem[]>;
|
|
2407
|
+
private readonly propertyViewerService;
|
|
1891
2408
|
private readonly translationService;
|
|
1892
|
-
private readonly
|
|
1893
|
-
|
|
1894
|
-
* Currently selected widget type
|
|
1895
|
-
*/
|
|
1896
|
-
protected selectedWidgetType: _angular_core.WritableSignal<string>;
|
|
1897
|
-
/**
|
|
1898
|
-
* Whether the component is in edit mode (showing select box)
|
|
1899
|
-
*/
|
|
2409
|
+
private readonly workflow;
|
|
2410
|
+
private readonly commandExecutor;
|
|
1900
2411
|
protected isEditMode: _angular_core.WritableSignal<boolean>;
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
protected
|
|
1905
|
-
value: string;
|
|
1906
|
-
text: string;
|
|
1907
|
-
icon: string | undefined;
|
|
1908
|
-
description: string | undefined;
|
|
1909
|
-
}[]>;
|
|
1910
|
-
/**
|
|
1911
|
-
* Current widget configuration details
|
|
1912
|
-
*/
|
|
1913
|
-
protected currentWidgetConfig: _angular_core.Signal<{
|
|
2412
|
+
protected availableItems: _angular_core.Signal<ItemConfiguratorSelectRow[]>;
|
|
2413
|
+
protected selectedListItem: _angular_core.Signal<ItemConfiguratorListItem | null>;
|
|
2414
|
+
protected resolvedPropertyDefinitions: _angular_core.Signal<AXPWidgetProperty[]>;
|
|
2415
|
+
protected currentItemConfig: _angular_core.Signal<{
|
|
1914
2416
|
title: string;
|
|
1915
|
-
description:
|
|
2417
|
+
description: _acorex_core_translation.AXMultiLanguageString | undefined;
|
|
1916
2418
|
icon: string | undefined;
|
|
1917
|
-
hasProperties: boolean
|
|
2419
|
+
hasProperties: boolean;
|
|
1918
2420
|
} | null>;
|
|
1919
|
-
/**
|
|
1920
|
-
* Whether configure button should be enabled
|
|
1921
|
-
*/
|
|
1922
2421
|
protected canConfigure: _angular_core.Signal<boolean>;
|
|
1923
|
-
/**
|
|
1924
|
-
* Whether widget has been configured (has options)
|
|
1925
|
-
*/
|
|
1926
2422
|
protected isConfigured: _angular_core.Signal<boolean>;
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
*/
|
|
1930
|
-
protected canPreview: _angular_core.Signal<boolean>;
|
|
1931
|
-
/**
|
|
1932
|
-
* Reference to the widget type select box (used to open dropdown when entering edit mode)
|
|
1933
|
-
*/
|
|
1934
|
-
protected widgetSelectBox: _angular_core.Signal<AXSelectBoxComponent | undefined>;
|
|
1935
|
-
/**
|
|
1936
|
-
* Enter edit mode (show select box)
|
|
1937
|
-
*/
|
|
2423
|
+
protected visibleHeaderActions: _angular_core.Signal<AXPActionMenuItem[]>;
|
|
2424
|
+
protected itemSelectBox: _angular_core.Signal<AXSelectBoxComponent | undefined>;
|
|
1938
2425
|
protected enterEditMode(): void;
|
|
1939
|
-
/**
|
|
1940
|
-
* Exit edit mode when dropdown is closed (return to view mode)
|
|
1941
|
-
*/
|
|
1942
2426
|
protected exitEditMode(): void;
|
|
1943
2427
|
constructor();
|
|
2428
|
+
protected onSelectionChange(event: {
|
|
2429
|
+
value?: string | null;
|
|
2430
|
+
}): Promise<void>;
|
|
2431
|
+
protected openConfigureDialog(): Promise<void>;
|
|
2432
|
+
protected onHeaderActionClick(action: AXPActionMenuItem): void;
|
|
2433
|
+
protected isHeaderActionDisabled(action: AXPActionMenuItem): boolean;
|
|
2434
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPItemConfiguratorComponent, never>;
|
|
2435
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPItemConfiguratorComponent, "axp-item-configurator", never, { "selectedItemId": { "alias": "selectedItemId"; "required": false; "isSignal": true; }; "values": { "alias": "values"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": false; "isSignal": true; }; "headerActions": { "alias": "headerActions"; "required": false; "isSignal": true; }; }, { "selectedItemId": "selectedItemIdChange"; "values": "valuesChange"; }, never, never, true, never>;
|
|
2436
|
+
}
|
|
2437
|
+
|
|
2438
|
+
/**
|
|
2439
|
+
* Widget field configurator for entity forms: composes {@link AXPItemConfiguratorComponent} with
|
|
2440
|
+
* {@link AXPWidgetRegistryService} list items and widget preview.
|
|
2441
|
+
*/
|
|
2442
|
+
declare class AXPWidgetFieldConfiguratorComponent {
|
|
2443
|
+
widget: _angular_core.ModelSignal<AXPWidgetNode>;
|
|
2444
|
+
label: _angular_core.InputSignal<string>;
|
|
2445
|
+
fieldName: _angular_core.InputSignal<string>;
|
|
2446
|
+
fieldTitle: _angular_core.InputSignal<_acorex_core_translation.AXMultiLanguageString>;
|
|
2447
|
+
readonly: _angular_core.InputSignal<boolean>;
|
|
2448
|
+
private readonly widgetRegistry;
|
|
2449
|
+
private readonly translation;
|
|
2450
|
+
protected selectedItemIdModel: _angular_core.ModelSignal<string>;
|
|
2451
|
+
protected valuesModel: _angular_core.ModelSignal<Record<string, unknown>>;
|
|
1944
2452
|
/**
|
|
1945
|
-
*
|
|
1946
|
-
|
|
1947
|
-
protected onWidgetTypeChange(event: any): Promise<void>;
|
|
1948
|
-
/**
|
|
1949
|
-
* Open widget property viewer
|
|
1950
|
-
*/
|
|
1951
|
-
protected openPropertyViewer(): Promise<void>;
|
|
1952
|
-
/**
|
|
1953
|
-
* Open widget preview with actual rendered widget
|
|
2453
|
+
* List entries from {@link AXPWidgetRegistryService} (form editors), with
|
|
2454
|
+
* {@link ItemConfiguratorListItem.propertyDefinitions} from each registered config.
|
|
1954
2455
|
*/
|
|
1955
|
-
protected
|
|
2456
|
+
protected configuratorItems: _angular_core.Signal<ItemConfiguratorListItem[]>;
|
|
2457
|
+
protected previewHeaderActions: _angular_core.Signal<AXPActionMenuItem[]>;
|
|
2458
|
+
constructor();
|
|
1956
2459
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetFieldConfiguratorComponent, never>;
|
|
1957
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetFieldConfiguratorComponent, "axp-widget-field-configurator", never, { "widget": { "alias": "widget"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "fieldName": { "alias": "fieldName"; "required": false; "isSignal": true; }; "fieldTitle": { "alias": "fieldTitle"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "widget": "widgetChange"; }, never, never, true, never>;
|
|
2460
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPWidgetFieldConfiguratorComponent, "axp-widget-field-configurator", never, { "widget": { "alias": "widget"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "fieldName": { "alias": "fieldName"; "required": false; "isSignal": true; }; "fieldTitle": { "alias": "fieldTitle"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "selectedItemIdModel": { "alias": "selectedItemIdModel"; "required": false; "isSignal": true; }; "valuesModel": { "alias": "valuesModel"; "required": false; "isSignal": true; }; }, { "widget": "widgetChange"; "selectedItemIdModel": "selectedItemIdModelChange"; "valuesModel": "valuesModelChange"; }, never, never, true, never>;
|
|
1958
2461
|
}
|
|
1959
2462
|
|
|
1960
2463
|
/**
|
|
@@ -1962,9 +2465,9 @@ declare class AXPWidgetFieldConfiguratorComponent {
|
|
|
1962
2465
|
*/
|
|
1963
2466
|
interface AXPWidgetItemData {
|
|
1964
2467
|
/** Display title of the widget */
|
|
1965
|
-
title:
|
|
2468
|
+
title: AXPMultiLanguageString;
|
|
1966
2469
|
/** Description text for the widget */
|
|
1967
|
-
description?:
|
|
2470
|
+
description?: AXPMultiLanguageString;
|
|
1968
2471
|
/** Icon class (e.g., FontAwesome classes) */
|
|
1969
2472
|
icon?: string;
|
|
1970
2473
|
/** Whether the widget is pinned/favorited */
|
|
@@ -1989,6 +2492,10 @@ interface AXPWidgetItemClickEvent<T = unknown> {
|
|
|
1989
2492
|
* Can be used across different modules for consistent widget display and interaction.
|
|
1990
2493
|
*/
|
|
1991
2494
|
declare class AXPWidgetItemComponent {
|
|
2495
|
+
protected readonly i18n: {
|
|
2496
|
+
readonly pin: "@general:widgets.widget-item.pin";
|
|
2497
|
+
readonly unpin: "@general:widgets.widget-item.unpin";
|
|
2498
|
+
};
|
|
1992
2499
|
/** The widget data to display */
|
|
1993
2500
|
widget: _angular_core.InputSignal<AXPWidgetItemData>;
|
|
1994
2501
|
/** Whether this widget is currently selected */
|
|
@@ -2074,6 +2581,7 @@ interface AXPWidgetPropertyViewerConfig {
|
|
|
2074
2581
|
title: string;
|
|
2075
2582
|
widget: AXPWidgetNode;
|
|
2076
2583
|
mode?: 'simple' | 'advanced';
|
|
2584
|
+
onApply?: (result: AXPWidgetPropertyViewerResult) => void | Promise<void>;
|
|
2077
2585
|
/**
|
|
2078
2586
|
* Property names to exclude from the viewer.
|
|
2079
2587
|
*/
|
|
@@ -2104,19 +2612,46 @@ interface AXPWidgetPropertyViewerConfig {
|
|
|
2104
2612
|
};
|
|
2105
2613
|
};
|
|
2106
2614
|
}
|
|
2615
|
+
/** Emitted when the dialog applies; `values` is the updated viewer context (merge into {@link AXPWidgetNode} as needed). */
|
|
2107
2616
|
interface AXPWidgetPropertyViewerResult {
|
|
2108
2617
|
values: any;
|
|
2109
2618
|
mode: 'init' | 'update';
|
|
2110
2619
|
}
|
|
2620
|
+
interface IAXPWidgetPropertyViewerRoot {
|
|
2621
|
+
dialog(delegate: (container: IAXPWidgetPropertyViewerDialogBuilder) => void): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2622
|
+
}
|
|
2623
|
+
interface IAXPWidgetPropertyViewerDialogBuilder {
|
|
2624
|
+
setTitle(title: string): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2625
|
+
/**
|
|
2626
|
+
* Initial widget state shown in the viewer (type, options, name/path, …). Call before {@link show}.
|
|
2627
|
+
*/
|
|
2628
|
+
setWidget(widget: AXPWidgetNode): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2629
|
+
setMode(mode: 'simple' | 'advanced'): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2630
|
+
setExclude(exclude: string[]): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2631
|
+
setCustom(custom: AXPWidgetPropertyViewerConfig['custom']): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2632
|
+
/**
|
|
2633
|
+
* When set to a non-empty array, builds tabs from these properties and skips registry lookup for {@link setWidget}'s type.
|
|
2634
|
+
* Omit or clear to resolve widget config from {@link AXPWidgetRegistryService} as usual.
|
|
2635
|
+
*/
|
|
2636
|
+
setPropertyDefinitions(properties: AXPWidgetProperty[] | null): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2637
|
+
onAction(handler: (dialogRef: AXPPropertyViewerActionRef) => void | Promise<void> | unknown | Promise<unknown>): IAXPWidgetPropertyViewerDialogBuilder;
|
|
2638
|
+
/**
|
|
2639
|
+
* Applies edits and returns updated context; merge {@link AXPWidgetPropertyViewerResult.values} into your widget node
|
|
2640
|
+
* (typically `options` and any top-level fields the viewer exposes).
|
|
2641
|
+
*/
|
|
2642
|
+
show(): Promise<AXPWidgetPropertyViewerResult | null>;
|
|
2643
|
+
}
|
|
2111
2644
|
declare class AXPWidgetPropertyViewerService {
|
|
2112
2645
|
private readonly widgetRegistryService;
|
|
2113
2646
|
private readonly propertyViewerService;
|
|
2114
2647
|
/**
|
|
2115
|
-
*
|
|
2648
|
+
* Same shape as `AXPPropertyViewerService.create()` — use `.dialog((d) => { ... }).show()`.
|
|
2649
|
+
*/
|
|
2650
|
+
create(): IAXPWidgetPropertyViewerRoot;
|
|
2651
|
+
/**
|
|
2652
|
+
* One-shot open (delegates to {@link #create} `.dialog().show()`).
|
|
2116
2653
|
*/
|
|
2117
2654
|
open(config: AXPWidgetPropertyViewerConfig): Promise<AXPWidgetPropertyViewerResult | null>;
|
|
2118
|
-
private buildTabs;
|
|
2119
|
-
private buildInitialContext;
|
|
2120
2655
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPWidgetPropertyViewerService, never>;
|
|
2121
2656
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPWidgetPropertyViewerService>;
|
|
2122
2657
|
}
|
|
@@ -2134,6 +2669,7 @@ declare class AXPResourceAppointmentComponent implements OnInit {
|
|
|
2134
2669
|
providerName: _angular_core.InputSignal<string | undefined>;
|
|
2135
2670
|
private readonly resourceAppointmentService;
|
|
2136
2671
|
private readonly formatService;
|
|
2672
|
+
private readonly translateService;
|
|
2137
2673
|
private readonly contextMenu;
|
|
2138
2674
|
protected readonly schedulerRef: _angular_core.Signal<AXSchedulerComponent | undefined>;
|
|
2139
2675
|
protected readonly isReady: _angular_core.WritableSignal<boolean>;
|
|
@@ -2246,5 +2782,198 @@ declare class AXPResourceAppointmentService {
|
|
|
2246
2782
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<AXPResourceAppointmentService>;
|
|
2247
2783
|
}
|
|
2248
2784
|
|
|
2249
|
-
|
|
2250
|
-
|
|
2785
|
+
/**
|
|
2786
|
+
* Host-owned item row. Required keys are stable; additional keys are persisted by the host mapper.
|
|
2787
|
+
*/
|
|
2788
|
+
interface AXPBuilderItem {
|
|
2789
|
+
id: string;
|
|
2790
|
+
order: number;
|
|
2791
|
+
[key: string]: unknown;
|
|
2792
|
+
}
|
|
2793
|
+
/**
|
|
2794
|
+
* Host-owned section. Items live under `items` (not nested host-specific names).
|
|
2795
|
+
*/
|
|
2796
|
+
interface AXPBuilderSection {
|
|
2797
|
+
id: string;
|
|
2798
|
+
order: number;
|
|
2799
|
+
items: AXPBuilderItem[];
|
|
2800
|
+
[key: string]: unknown;
|
|
2801
|
+
}
|
|
2802
|
+
interface AXPBuilderValue {
|
|
2803
|
+
sections: AXPBuilderSection[];
|
|
2804
|
+
}
|
|
2805
|
+
type AXPBuilderBadgeVariant = 'neutral' | 'accent' | 'warning' | 'danger' | 'success';
|
|
2806
|
+
interface AXPBuilderBadge {
|
|
2807
|
+
/** Translation key (e.g. `@general:...`) or plain text. */
|
|
2808
|
+
text: string;
|
|
2809
|
+
variant?: AXPBuilderBadgeVariant;
|
|
2810
|
+
}
|
|
2811
|
+
type AXPBuilderItemIconTone = 'default' | 'easy' | 'medium' | 'hard';
|
|
2812
|
+
/**
|
|
2813
|
+
* View model for one item row (icons, labels, badges). Built by {@link AXPBuilderDefinition.mapItemToView}.
|
|
2814
|
+
*/
|
|
2815
|
+
interface AXPBuilderItemViewModel {
|
|
2816
|
+
icon: string;
|
|
2817
|
+
iconTone?: AXPBuilderItemIconTone;
|
|
2818
|
+
title: string;
|
|
2819
|
+
name?: string;
|
|
2820
|
+
description?: string;
|
|
2821
|
+
badges: AXPBuilderBadge[];
|
|
2822
|
+
}
|
|
2823
|
+
interface AXPBuilderTexts {
|
|
2824
|
+
addSection: string;
|
|
2825
|
+
addItem: string;
|
|
2826
|
+
emptySectionsTitle: string;
|
|
2827
|
+
emptySectionsDescription: string;
|
|
2828
|
+
emptyItemsTitle: string;
|
|
2829
|
+
emptyItemsDescription: string;
|
|
2830
|
+
/** Shown when {@link AXPBuilderDefinition.isDefaultSection} is true */
|
|
2831
|
+
defaultSectionBadge?: string;
|
|
2832
|
+
}
|
|
2833
|
+
/**
|
|
2834
|
+
* Declarative configuration for {@link AXPSectionItemsBuilderComponent}.
|
|
2835
|
+
* Prompts return domain slices; the builder assigns `id` / `order` / `items` where needed.
|
|
2836
|
+
*/
|
|
2837
|
+
interface AXPBuilderDefinition {
|
|
2838
|
+
texts: AXPBuilderTexts;
|
|
2839
|
+
mapItemToView: (item: AXPBuilderItem, section: AXPBuilderSection) => AXPBuilderItemViewModel;
|
|
2840
|
+
/** When true, renders section technical `name` next to the title (parentheses). */
|
|
2841
|
+
showSectionTechnicalName?: boolean;
|
|
2842
|
+
isDefaultSection?(section: AXPBuilderSection): boolean;
|
|
2843
|
+
/** Minimum number of sections (default 1). */
|
|
2844
|
+
minSectionCount?: number;
|
|
2845
|
+
promptAddSection?(value: AXPBuilderValue): Promise<Record<string, unknown> | null>;
|
|
2846
|
+
promptEditSection?(section: AXPBuilderSection, value: AXPBuilderValue): Promise<Record<string, unknown> | null>;
|
|
2847
|
+
promptAddItems?(sectionId: string, value: AXPBuilderValue): Promise<AXPBuilderItem[] | null>;
|
|
2848
|
+
promptEditItem?(item: AXPBuilderItem, sectionId: string, value: AXPBuilderValue): Promise<AXPBuilderItem | null>;
|
|
2849
|
+
confirmRemoveSection?(section: AXPBuilderSection): Promise<boolean>;
|
|
2850
|
+
confirmRemoveItem?(item: AXPBuilderItem, sectionId: string): Promise<boolean>;
|
|
2851
|
+
}
|
|
2852
|
+
|
|
2853
|
+
declare class AXPSectionItemsBuilderComponent {
|
|
2854
|
+
/** Used in template to branch between escaped text and sanitized HTML. */
|
|
2855
|
+
protected readonly containsHtmlMarkup: typeof containsHtmlMarkup;
|
|
2856
|
+
readonly value: _angular_core.InputSignal<AXPBuilderValue>;
|
|
2857
|
+
readonly definition: _angular_core.InputSignal<AXPBuilderDefinition>;
|
|
2858
|
+
readonly readonlyMode: _angular_core.InputSignal<boolean>;
|
|
2859
|
+
readonly valueChange: _angular_core.OutputEmitterRef<AXPBuilderValue>;
|
|
2860
|
+
private readonly vm;
|
|
2861
|
+
protected readonly sectionsModel: _angular_core.Signal<AXPBuilderValue>;
|
|
2862
|
+
protected readonly sectionRows: _angular_core.Signal<{
|
|
2863
|
+
section: AXPBuilderSection;
|
|
2864
|
+
itemRows: {
|
|
2865
|
+
item: AXPBuilderItem;
|
|
2866
|
+
view: _acorex_platform_layout_components.AXPBuilderItemViewModel;
|
|
2867
|
+
}[];
|
|
2868
|
+
}[]>;
|
|
2869
|
+
protected readonly itemDropListIds: _angular_core.Signal<string[]>;
|
|
2870
|
+
protected readonly canRemoveSection: _angular_core.Signal<boolean>;
|
|
2871
|
+
constructor();
|
|
2872
|
+
/**
|
|
2873
|
+
* Opens add-section flow (same as primary "Add section" control). For page commands / ViewChild.
|
|
2874
|
+
*/
|
|
2875
|
+
addSection(): Promise<void>;
|
|
2876
|
+
protected onAddSectionClick(): Promise<void>;
|
|
2877
|
+
protected onEditSection(section: AXPBuilderSection): Promise<void>;
|
|
2878
|
+
protected onRemoveSection(section: AXPBuilderSection): Promise<void>;
|
|
2879
|
+
protected onAddItems(section: AXPBuilderSection): Promise<void>;
|
|
2880
|
+
protected onEditItem(item: AXPBuilderItem, sectionId: string): Promise<void>;
|
|
2881
|
+
protected onRemoveItem(item: AXPBuilderItem, sectionId: string): Promise<void>;
|
|
2882
|
+
protected onSectionDrop(event: CdkDragDrop<AXPBuilderSection[]>): void;
|
|
2883
|
+
protected onItemDrop(event: CdkDragDrop<AXPBuilderItem[]>, targetSectionId: string): void;
|
|
2884
|
+
protected sectionItemsListId(sectionId: string): string;
|
|
2885
|
+
protected parseSectionIdFromDropListId(listId: string): string | null;
|
|
2886
|
+
protected isDefaultSection(section: AXPBuilderSection): boolean;
|
|
2887
|
+
protected isTranslationKey(text: string): boolean;
|
|
2888
|
+
/** Tooltip for rich HTML rows: plain text, no tags. */
|
|
2889
|
+
protected tooltipPlainTextForHtml(html: string): string;
|
|
2890
|
+
/**
|
|
2891
|
+
* Prefer raw section fields for display so {@link AXPMultiLanguageString} maps are not
|
|
2892
|
+
* lost when {@link AXPBuilderDefinition#mapItemToView} stringifies them on items.
|
|
2893
|
+
*/
|
|
2894
|
+
protected sectionTitleValue(section: AXPBuilderSection): AXPMultiLanguageString | string;
|
|
2895
|
+
protected sectionNameValue(section: AXPBuilderSection): AXPMultiLanguageString | string | undefined;
|
|
2896
|
+
protected sectionDescriptionValue(section: AXPBuilderSection): AXPMultiLanguageString | string | undefined;
|
|
2897
|
+
/**
|
|
2898
|
+
* Resolves item title/name/description for display: use raw item values when present
|
|
2899
|
+
* (including ML maps); fall back to {@link AXPBuilderItemViewModel} only when needed.
|
|
2900
|
+
*/
|
|
2901
|
+
protected itemMultilingualField(item: AXPBuilderItem, field: 'title' | 'name' | 'description', viewFallback?: string | null): AXPMultiLanguageString | string;
|
|
2902
|
+
private commit;
|
|
2903
|
+
private normalizeValue;
|
|
2904
|
+
private reindexSections;
|
|
2905
|
+
private reindexItems;
|
|
2906
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPSectionItemsBuilderComponent, never>;
|
|
2907
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPSectionItemsBuilderComponent, "axp-section-items-builder", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "definition": { "alias": "definition"; "required": true; "isSignal": true; }; "readonlyMode": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
2908
|
+
}
|
|
2909
|
+
|
|
2910
|
+
/**
|
|
2911
|
+
* Host configuration for {@link AXPStandardSectionItemsBuilderComponent}.
|
|
2912
|
+
* Section add/edit UI (identity, content, visibility) and delete prompts are standardized;
|
|
2913
|
+
* item flows stay host-specific.
|
|
2914
|
+
*/
|
|
2915
|
+
interface AXPStandardSectionItemsBuilderConfig {
|
|
2916
|
+
mapItemToView: AXPBuilderDefinition['mapItemToView'];
|
|
2917
|
+
/** When set, used instead of the built-in section add dialog. */
|
|
2918
|
+
promptAddSection?: AXPBuilderDefinition['promptAddSection'];
|
|
2919
|
+
/** When set, used instead of the built-in section edit dialog. */
|
|
2920
|
+
promptEditSection?: AXPBuilderDefinition['promptEditSection'];
|
|
2921
|
+
promptAddItems?: AXPBuilderDefinition['promptAddItems'];
|
|
2922
|
+
promptEditItem?: AXPBuilderDefinition['promptEditItem'];
|
|
2923
|
+
/** Merged over built-in empty-state / action labels */
|
|
2924
|
+
texts?: Partial<AXPBuilderTexts>;
|
|
2925
|
+
showSectionTechnicalName?: boolean;
|
|
2926
|
+
isDefaultSection?: AXPBuilderDefinition['isDefaultSection'];
|
|
2927
|
+
minSectionCount?: number;
|
|
2928
|
+
/**
|
|
2929
|
+
* Property viewer tabs for section add/edit.
|
|
2930
|
+
* Default: {@link STANDARD_SECTION_ITEMS_SECTION_TABS}.
|
|
2931
|
+
*/
|
|
2932
|
+
sectionEditTabs?: AXPPropertyViewerTab[];
|
|
2933
|
+
/** Override default delete-section confirmation. */
|
|
2934
|
+
confirmRemoveSection?: AXPBuilderDefinition['confirmRemoveSection'];
|
|
2935
|
+
/** Override default delete-item confirmation. */
|
|
2936
|
+
confirmRemoveItem?: AXPBuilderDefinition['confirmRemoveItem'];
|
|
2937
|
+
}
|
|
2938
|
+
/** Context shape bound to the default section property viewer (paths match keys). */
|
|
2939
|
+
interface AXPStandardSectionFormContext {
|
|
2940
|
+
/** Unique technical name (section `name` in the builder model). */
|
|
2941
|
+
name?: string;
|
|
2942
|
+
tags?: unknown;
|
|
2943
|
+
title?: string | AXPMultiLanguageString;
|
|
2944
|
+
description?: string | AXPMultiLanguageString;
|
|
2945
|
+
isVisible?: boolean;
|
|
2946
|
+
}
|
|
2947
|
+
|
|
2948
|
+
/**
|
|
2949
|
+
* Default section editor: Identity (name, tags), Content (title, description), Visibility.
|
|
2950
|
+
*/
|
|
2951
|
+
declare const STANDARD_SECTION_ITEMS_SECTION_TABS: AXPPropertyViewerTab[];
|
|
2952
|
+
|
|
2953
|
+
declare class AXPStandardSectionItemsBuilderComponent {
|
|
2954
|
+
readonly value: _angular_core.InputSignal<AXPBuilderValue>;
|
|
2955
|
+
readonly config: _angular_core.InputSignal<AXPStandardSectionItemsBuilderConfig>;
|
|
2956
|
+
readonly readonlyMode: _angular_core.InputSignal<boolean>;
|
|
2957
|
+
readonly valueChange: _angular_core.OutputEmitterRef<AXPBuilderValue>;
|
|
2958
|
+
private readonly inner;
|
|
2959
|
+
private readonly dialogService;
|
|
2960
|
+
private readonly translationService;
|
|
2961
|
+
private readonly propertyViewerService;
|
|
2962
|
+
protected readonly mergedDefinition: _angular_core.Signal<AXPBuilderDefinition>;
|
|
2963
|
+
/** Same entry as page commands / toolbar: open standardized add-section dialog. */
|
|
2964
|
+
addSection(): Promise<void>;
|
|
2965
|
+
private isDuplicateSectionName;
|
|
2966
|
+
/**
|
|
2967
|
+
* `AXPBuilderSection` uses `[key: string]: unknown`; cast to form-bound type without resolving ML.
|
|
2968
|
+
*/
|
|
2969
|
+
private sectionFieldForForm;
|
|
2970
|
+
private buildSectionContext;
|
|
2971
|
+
private openSectionDialog;
|
|
2972
|
+
private defaultConfirmRemoveSection;
|
|
2973
|
+
private defaultConfirmRemoveItem;
|
|
2974
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AXPStandardSectionItemsBuilderComponent, never>;
|
|
2975
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AXPStandardSectionItemsBuilderComponent, "axp-standard-section-items-builder", never, { "value": { "alias": "value"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "readonlyMode": { "alias": "readonly"; "required": false; "isSignal": true; }; }, { "valueChange": "valueChange"; }, never, never, true, never>;
|
|
2976
|
+
}
|
|
2977
|
+
|
|
2978
|
+
export { AXPActivityLogComponent, AXPAvatarComponent, AXPCategoryTreeComponent, AXPColorPalettePickerComponent, AXPColumnItemListComponent, AXPCompareViewComponent, AXPConditionBuilderComponent, AXPConditionBuilderConditionComponent, AXPDataSelectorComponent, AXPDataSelectorService, AXPDragDropListComponent, AXPExpressionFieldDefinitions, AXPImageEditorPopupComponent, AXPImageEditorService, AXPItemConfiguratorComponent, AXPLogoComponent, AXPMarkdownTemplateDirective, AXPMarkdownViewerComponent, AXPMenuBadgeHelper, AXPMenuCustomizerComponent, AXPMenuCustomizerService, AXPPageComponentRegistryService, AXPPreloadFiltersComponent, AXPPropertyViewerComponent, AXPPropertyViewerPopupComponent, AXPPropertyViewerService, AXPQueryColumnsComponent, AXPQueryFiltersComponent, AXPQuerySortsComponent, AXPQueryViewsComponent, AXPRepeaterRowsLayoutComponent, AXPResourceAppointmentBoardProvider, AXPResourceAppointmentComponent, AXPResourceAppointmentService, AXPSectionItemsBuilderComponent, AXPSpreadsheetComponent, AXPStandardSectionItemsBuilderComponent, AXPStateMessageComponent, AXPStopwatchComponent, AXPTableColumnsEditorComponent, AXPTableColumnsEditorPopupComponent, AXPTableColumnsEditorService, AXPTableDataEditorComponent, AXPTableDataEditorPopupComponent, AXPTableDataEditorService, AXPTaskBadgeDirective, AXPTaskBadgeProvider, AXPTaskBadgeService, AXPTemplateViewerComponent, AXPTemplateViewerService, AXPThemeLayoutActionsComponent, AXPThemeLayoutBlockComponent, AXPThemeLayoutContainerComponent, AXPThemeLayoutEndSideComponent, AXPThemeLayoutFooterComponent, AXPThemeLayoutHeaderComponent, AXPThemeLayoutListComponent, AXPThemeLayoutListItemComponent, AXPThemeLayoutListItemsGroupComponent, AXPThemeLayoutPageHeaderComponent, AXPThemeLayoutPagePrimaryActionsComponent, AXPThemeLayoutPageSecondaryActionsComponent, AXPThemeLayoutSectionComponent, AXPThemeLayoutStartSideComponent, AXPThemeLayoutToolbarComponent, AXPUserAvatarComponent, AXPUserAvatarService, AXPWidgetFieldConfiguratorComponent, AXPWidgetItemComponent, AXPWidgetPropertyViewerComponent, AXPWidgetPropertyViewerPopupComponent, AXPWidgetPropertyViewerService, AXP_EXPRESSION_LOGIC_DEFINITIONS, AXP_EXPRESSION_OPERATION_DEFINITIONS, AXP_MENU_CUSTOMIZER_SERVICE, AXP_PAGE_COMPONENT_PROVIDER, AXP_RESOURCE_APPOINTMENT_PROVIDER, AXP_TASK_BADGE_PROVIDERS, AXP_USER_AVATAR_PROVIDER, STANDARD_SECTION_ITEMS_SECTION_TABS, buildPropertyViewerInitialContextFromProperties, buildPropertyViewerTabsFromProperties, buildTableColumnsEditorLayout, getFieldDefinitions, getLogicDefinition, getOperationDefinition, isPropertyBindingExpressionFormValue, preparePropertyForViewer, preparePropertyViewerTabs, registerFieldDefinitions, withValidationsOnEditorNode };
|
|
2979
|
+
export type { AXPBuilderBadge, AXPBuilderBadgeVariant, AXPBuilderDefinition, AXPBuilderItem, AXPBuilderItemIconTone, AXPBuilderItemViewModel, AXPBuilderSection, AXPBuilderTexts, AXPBuilderValue, AXPCategoryTreeActions, AXPCategoryTreeConfig, AXPCategoryTreeDataSource, AXPCategoryTreeEvents, AXPCategoryTreeNode, AXPColumnItemListItem, AXPCompareViewField, AXPCompareViewInputs, AXPCompareViewMode, AXPCompareViewObject, AXPDataSelectorAllowCreate, AXPDataSelectorColumn, AXPDataSelectorConfig, AXPDragDropListConfig, AXPDragDropListDropEvent, AXPDragDropListItem, AXPExpressionFieldDefinition, AXPExpressionGroupNode, AXPExpressionLogicDefinition, AXPExpressionLogicType, AXPExpressionNode, AXPExpressionNodeId, AXPExpressionOperationDefinition, AXPExpressionOperationNode, AXPExpressionOperationType, AXPExpressionTree, AXPExpressionValueOperand, AXPExpressionValueSourceType, AXPImageEditorOpenOptions, AXPMenuCustomizerAction, AXPMenuCustomizerItem, AXPMenuCustomizerItemType, AXPMenuCustomizerNodeData, AXPMenuCustomizerNodeMetadata, AXPMenuCustomizerState, AXPPageComponentDefinition, AXPPageComponentProvider, AXPPreloadFiltersApplyEvent, AXPPropertyViewerActionRef, AXPPropertyViewerChangedEvent, AXPPropertyViewerConfig, AXPPropertyViewerGroup, AXPPropertyViewerResult, AXPPropertyViewerTab, AXPResourceAppointmentActionMenuItem, AXPResourceAppointmentBoardFilter, AXPResourceAppointmentItem, AXPResourceAppointmentResource, AXPResourceAppointmentStatus, AXPSpreadsheetCellChangeEvent, AXPSpreadsheetCellValue, AXPSpreadsheetColumn, AXPSpreadsheetConfig, AXPSpreadsheetData, AXPSpreadsheetItem, AXPSpreadsheetRowChangeEvent, AXPSpreadsheetRowMode, AXPStandardSectionFormContext, AXPStandardSectionItemsBuilderConfig, AXPTableColumnDefinition, AXPTableColumnsEditorOpenOptions, AXPTableDataEditorOpenOptions, AXPTemplateViewerConfig, AXPTemplateViewerResult, AXPUserAvatarData, AXPUserAvatarProvider, AXPUserAvatarSize, AXPUserAvatarStatus, AXPWidgetItemClickEvent, AXPWidgetItemData, AXPWidgetPropertiesChangedEvent, AXPWidgetPropertyInjection, AXPWidgetPropertyViewerConfig, AXPWidgetPropertyViewerResult, ConditionBuilderSelectedField, IAXPPropertyViewerDialogBuilder, IAXPPropertyViewerRoot, IAXPWidgetPropertyViewerDialogBuilder, IAXPWidgetPropertyViewerRoot, ItemConfiguratorListItem, StateMode };
|