@praxisui/page-builder 10.0.0-rc.4 → 10.0.0-rc.40
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/README.md +140 -3
- package/ai/component-registry.json +112 -62
- package/fesm2022/praxisui-page-builder.mjs +14835 -8041
- package/package.json +4 -4
- package/types/praxisui-page-builder.d.ts +816 -30
|
@@ -2,7 +2,7 @@ import { MatDialogRef, MatDialog } from '@angular/material/dialog';
|
|
|
2
2
|
import * as _angular_core from '@angular/core';
|
|
3
3
|
import { EventEmitter, OnInit, WritableSignal, InjectionToken, Provider, OnChanges, OnDestroy, Type, SimpleChanges } from '@angular/core';
|
|
4
4
|
import * as _praxisui_core from '@praxisui/core';
|
|
5
|
-
import { ComponentDocMeta, WidgetShellConfig, ComponentMetadataRegistry, PraxisI18nService, SettingsEditorSection, EndpointRef, PraxisTextValue, WidgetShellPresetCategory, CompositionLink, WidgetShellAction, WidgetPageAuthoringCapabilities, PortContract, ComponentPortPathSegment, LinkIntent, WidgetPageDefinition, SurfaceOpenActionEditorComponent, TransformKind, TransformPipeline, SurfaceOpenPayload, WidgetPageDeviceKind, SettingsValueProvider as SettingsValueProvider$1, WidgetShellPresetDefinition, WidgetPageCanvasLayout, WidgetPageGroupingDefinition, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, PageIdentity, WidgetStateNode, WidgetDerivedStateNode, AiCapability, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, WidgetPageDeviceLayouts, WidgetPageSlotAssignments, WidgetPageStateInput, WidgetInstance, TransformOutputHint, TransformSemanticKind, ConfigAuthoringSource, DomainKnowledgeChangeSetRequest, DomainKnowledgeChangeSet, DomainKnowledgeChangeSetTimelineResponse, DomainKnowledgeChangeSetFilters, DomainKnowledgeValidationResponse, DomainKnowledgeStatusTransitionRequest, DomainRuleIntakeRequest, DomainRuleIntakeResponse, DomainRuleDefinitionRequest, DomainRuleDefinition, DomainRuleSimulationRequest, DomainRuleSimulationResponse, DomainRuleStatusTransitionRequest, DomainRulePublicationRequest, DomainRulePublicationResponse, DomainRuleMaterializationFilters, DomainRuleMaterialization, DomainRuleTimelineResponse, PraxisRuntimeComponentObservationEnvelope, ComponentContextPack, ComponentAuthoringManifest, DiagnosticRecord, NestedPortCatalogRegistry, CompositionValidatorService, ApiUrlEntry, DynamicWidgetPageComponent, ConfigDocument, WidgetEventEnvelope, ObservabilityAgenticTurnMetrics, SettingsPanelBridge, ObservabilityAgenticTurnMetricBucket, RichTimelineItem } from '@praxisui/core';
|
|
5
|
+
import { ComponentDocMeta, WidgetShellConfig, ComponentMetadataRegistry, PraxisI18nService, SettingsEditorSection, EndpointRef, PraxisTextValue, WidgetShellPresetCategory, CompositionLink, WidgetShellAction, WidgetPageAuthoringCapabilities, PortContract, ComponentPortPathSegment, LinkIntent, WidgetPageDefinition, SurfaceOpenActionEditorComponent, TransformKind, TransformPipeline, SurfaceOpenPayload, WidgetPageDeviceKind, SettingsValueProvider as SettingsValueProvider$1, WidgetShellPresetDefinition, WidgetPageCanvasLayout, DiscoveredResourceOption, FieldDefinition, WidgetPageGroupingDefinition, WidgetPageDataSourceDefinition, WidgetPageDataSourceKind, WidgetPageDataSourceMethod, WidgetPageDataSourceErrorPolicy, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, PageIdentity, WidgetStateNode, WidgetDerivedStateNode, AiCapability, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, WidgetPageDeviceLayouts, WidgetPageSlotAssignments, WidgetPageStateInput, WidgetInstance, TransformOutputHint, TransformSemanticKind, ConfigAuthoringSource, DomainKnowledgeChangeSetRequest, DomainKnowledgeChangeSet, DomainKnowledgeChangeSetTimelineResponse, DomainKnowledgeChangeSetFilters, DomainKnowledgeValidationResponse, DomainKnowledgeStatusTransitionRequest, DomainRuleIntakeRequest, DomainRuleIntakeResponse, DomainRuleDefinitionRequest, DomainRuleDefinition, DomainRuleSimulationRequest, DomainRuleSimulationResponse, DomainRuleStatusTransitionRequest, DomainRulePublicationRequest, DomainRulePublicationResponse, DomainRuleMaterializationFilters, DomainRuleMaterialization, DomainRuleTimelineResponse, PraxisRuntimeComponentObservationEnvelope, ComponentContextPack, ComponentAuthoringManifest, DiagnosticRecord, NestedPortCatalogRegistry, CompositionValidatorService, ApiUrlEntry, DynamicWidgetPageComponent, ConfigDocument, WidgetPagePersistenceState, WidgetEventEnvelope, ObservabilityAgenticTurnMetrics, SettingsPanelBridge, ObservabilityAgenticTurnMetricBucket, RichTimelineItem, PageAuthoringDocument, UiLayoutLayerClass, UiLayoutAssignmentSelector, PageDocumentDiagnostic, PageSourceReference, UiLayoutPageChildSource, UiLayoutTarget, PageCatalogEntry, NavigationGroupsAuthoringDocument, RuntimeNavigationMenuNode, PageCreationCommand, UiLayoutLifecycleHttpReceipt, PageCreationReceipt, PageCatalogReadOptions, PageCatalogResponse, UiLayoutLifecycleNotModifiedReceipt, PublishedPageReadResponse, UiLayoutDraftReceipt, UiLayoutDraftWorkspaceReceipt, UiLayoutReleaseReviewReceipt, UiLayoutReleaseHeadReceipt, UiLayoutRevisionCommand, UiLayoutRevisionCommandResult, UiLayoutAssignmentCommand, UiLayoutAssignmentCommandResult, UiLayoutFreezeReleaseCommand, UiLayoutFreezeReleaseCommandResult, UiLayoutReasonCommand, UiLayoutHeadWriteCondition, UiLayoutReleaseReferenceCommand, GovernedPagePreviewMaterialization, PageChildDocumentValidators, GovernedPagePreviewWidgetAdapters, UiLayoutLifecycleService, NavigationGroupAuthoringEntry, EffectiveUiLayoutService, PageNavigationBinding, PageNavigationBindingUpdateOptions } from '@praxisui/core';
|
|
6
6
|
import * as rxjs from 'rxjs';
|
|
7
7
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
8
8
|
import { FormGroup, FormControl, FormArray, AbstractControl } from '@angular/forms';
|
|
@@ -66,23 +66,58 @@ declare class FloatingToolbarComponent {
|
|
|
66
66
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<FloatingToolbarComponent, "praxis-floating-toolbar", never, { "visible": { "alias": "visible"; "required": false; }; "canUndo": { "alias": "canUndo"; "required": false; }; "canRedo": { "alias": "canRedo"; "required": false; }; "showSave": { "alias": "showSave"; "required": false; }; "showPreview": { "alias": "showPreview"; "required": false; }; "showAdd": { "alias": "showAdd"; "required": false; }; "showSettings": { "alias": "showSettings"; "required": false; }; "editingEnabled": { "alias": "editingEnabled"; "required": false; }; "previewActive": { "alias": "previewActive"; "required": false; }; "connectionMode": { "alias": "connectionMode"; "required": false; }; "modeLabel": { "alias": "modeLabel"; "required": false; }; "addLabel": { "alias": "addLabel"; "required": false; }; "saveLabel": { "alias": "saveLabel"; "required": false; }; "undoLabel": { "alias": "undoLabel"; "required": false; }; "redoLabel": { "alias": "redoLabel"; "required": false; }; "settingsLabel": { "alias": "settingsLabel"; "required": false; }; "previewLabel": { "alias": "previewLabel"; "required": false; }; "exitPreviewLabel": { "alias": "exitPreviewLabel"; "required": false; }; }, { "add": "add"; "undo": "undo"; "redo": "redo"; "settings": "settings"; "preview": "preview"; "save": "save"; }, never, ["[pdx-toolbar-extra]"], true, never>;
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Canonical payload emitted when a component or preset is selected from the Page Builder palette.
|
|
71
|
+
*/
|
|
69
72
|
interface ComponentPaletteSelection {
|
|
70
73
|
componentId: string;
|
|
71
74
|
presetId?: string;
|
|
72
75
|
inputs?: Record<string, unknown>;
|
|
73
76
|
shell?: WidgetShellConfig;
|
|
77
|
+
colSpan?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Staged item inside the batch composition tray with live grid coordinate simulation.
|
|
81
|
+
*/
|
|
82
|
+
interface QueuedPaletteItem {
|
|
83
|
+
queueId: string;
|
|
84
|
+
entryKey: string;
|
|
85
|
+
title: string;
|
|
86
|
+
icon: string;
|
|
87
|
+
selection: ComponentPaletteSelection;
|
|
88
|
+
effectiveCols: number;
|
|
89
|
+
effectiveRows: number;
|
|
90
|
+
rowPreview: number;
|
|
91
|
+
colStartPreview: number;
|
|
92
|
+
colEndPreview: number;
|
|
93
|
+
}
|
|
94
|
+
interface PaletteExistingCanvasItem {
|
|
95
|
+
row: number;
|
|
96
|
+
col: number;
|
|
97
|
+
colSpan: number;
|
|
98
|
+
rowSpan: number;
|
|
74
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Dialog input contract for `ComponentPaletteDialogComponent`.
|
|
102
|
+
* Supports single insertion, continuous (`keepOpen`) insertion, and atomic batch (`onInsertBatch`) composition.
|
|
103
|
+
*/
|
|
75
104
|
interface ComponentPaletteData {
|
|
76
105
|
title?: string;
|
|
77
106
|
allowedWidgetIds?: string[];
|
|
78
107
|
allowedWidgetTags?: string[];
|
|
79
108
|
allowedPresetIds?: string[];
|
|
80
109
|
predicate?: (m: ComponentDocMeta) => boolean;
|
|
110
|
+
canvasColumns?: number;
|
|
111
|
+
existingCanvasItems?: PaletteExistingCanvasItem[];
|
|
112
|
+
onInsert?: (selection: ComponentPaletteSelection) => void;
|
|
113
|
+
onInsertBatch?: (selections: ComponentPaletteSelection[]) => void;
|
|
81
114
|
}
|
|
115
|
+
type PaletteCategory = 'all' | 'widget' | 'preset' | 'field';
|
|
82
116
|
interface ComponentPaletteEntry {
|
|
83
117
|
key: string;
|
|
84
118
|
componentId: string;
|
|
85
119
|
presetId?: string;
|
|
120
|
+
category: Exclude<PaletteCategory, 'all'>;
|
|
86
121
|
title: string;
|
|
87
122
|
description: string;
|
|
88
123
|
icon: string;
|
|
@@ -97,21 +132,67 @@ interface ComponentPaletteBadge {
|
|
|
97
132
|
tone: 'ready' | 'info' | 'warning' | 'neutral';
|
|
98
133
|
description: string;
|
|
99
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* Studio Component Palette Dialog for the Praxis Page Builder.
|
|
137
|
+
*
|
|
138
|
+
* Provides three enterprise authoring modes:
|
|
139
|
+
* 1. **Single Insertion**: Immediate selection and dialog dismissal (`Enter` or card click).
|
|
140
|
+
* 2. **Continuous Multi-Insert (`keepOpen`)**: Inserts directly onto the canvas without closing the dialog.
|
|
141
|
+
* 3. **Batch Staging (`batchMode`)**: Stages multiple components with live grid coordinate preview (`L·C`)
|
|
142
|
+
* and commits them atomically via `onInsertBatch`.
|
|
143
|
+
*
|
|
144
|
+
* Automatically prioritizes governed page-level widgets and presets ahead of primitive form field controls
|
|
145
|
+
* and exposes quick category filter pills for large enterprise catalogs.
|
|
146
|
+
*/
|
|
100
147
|
declare class ComponentPaletteDialogComponent implements OnInit {
|
|
101
148
|
private dialogRef;
|
|
102
149
|
private registry;
|
|
103
150
|
private i18n;
|
|
104
151
|
data?: ComponentPaletteData | undefined;
|
|
105
152
|
private readonly hostElement;
|
|
153
|
+
private queueSeq;
|
|
106
154
|
query: _angular_core.WritableSignal<string>;
|
|
155
|
+
readonly selectedCategory: _angular_core.WritableSignal<PaletteCategory>;
|
|
156
|
+
readonly selectedColSpan: _angular_core.WritableSignal<number | undefined>;
|
|
157
|
+
readonly batchMode: _angular_core.WritableSignal<boolean>;
|
|
158
|
+
readonly keepOpen: _angular_core.WritableSignal<boolean>;
|
|
159
|
+
readonly insertedCount: _angular_core.WritableSignal<number>;
|
|
160
|
+
readonly queuedItems: _angular_core.WritableSignal<QueuedPaletteItem[]>;
|
|
161
|
+
readonly canvasColumns: _angular_core.Signal<number>;
|
|
162
|
+
readonly stagedRowCount: _angular_core.Signal<number>;
|
|
163
|
+
readonly spanOptions: _angular_core.Signal<readonly {
|
|
164
|
+
label: string;
|
|
165
|
+
value: number | undefined;
|
|
166
|
+
}[]>;
|
|
167
|
+
private readonly cycleSpans;
|
|
107
168
|
private all;
|
|
169
|
+
private allowedCatalog;
|
|
170
|
+
readonly categoryOptions: _angular_core.Signal<readonly {
|
|
171
|
+
id: PaletteCategory;
|
|
172
|
+
label: string;
|
|
173
|
+
count: number;
|
|
174
|
+
}[]>;
|
|
175
|
+
readonly hasMultipleCategories: _angular_core.Signal<boolean>;
|
|
108
176
|
filtered: _angular_core.Signal<ComponentPaletteEntry[]>;
|
|
109
177
|
density: _angular_core.Signal<"roomy" | "dense" | "normal">;
|
|
110
178
|
constructor(dialogRef: MatDialogRef<ComponentPaletteDialogComponent, ComponentPaletteSelection>, registry: ComponentMetadataRegistry, i18n: PraxisI18nService, data?: ComponentPaletteData | undefined);
|
|
111
179
|
ngOnInit(): void;
|
|
180
|
+
toggleBatchMode(): void;
|
|
181
|
+
toggleKeepOpen(): void;
|
|
182
|
+
private buildPayload;
|
|
183
|
+
private resolveEffectiveCols;
|
|
184
|
+
private resolveEffectiveRows;
|
|
185
|
+
private recomputeQueueCoordinates;
|
|
186
|
+
enqueue(entry: ComponentPaletteEntry, event?: Event): void;
|
|
187
|
+
cycleQueuedItemColSpan(queueId: string): void;
|
|
188
|
+
removeQueuedItem(queueId: string): void;
|
|
189
|
+
clearQueue(): void;
|
|
190
|
+
commitBatch(): void;
|
|
112
191
|
select(entry: ComponentPaletteEntry): void;
|
|
113
192
|
handleSearchKeydown(event: KeyboardEvent): void;
|
|
114
|
-
|
|
193
|
+
clearSearch(): void;
|
|
194
|
+
resetFilters(): void;
|
|
195
|
+
handleCardKeydown(event: KeyboardEvent, index: number, entry?: ComponentPaletteEntry): void;
|
|
115
196
|
trackById: (_: number, entry: ComponentPaletteEntry) => string;
|
|
116
197
|
getPreview(entry: ComponentPaletteEntry): string;
|
|
117
198
|
tx(key: string, fallback: string): string;
|
|
@@ -119,7 +200,9 @@ declare class ComponentPaletteDialogComponent implements OnInit {
|
|
|
119
200
|
private paletteCards;
|
|
120
201
|
private searchInput;
|
|
121
202
|
private _adjustSizeEffect;
|
|
203
|
+
private applyStructuralConstraints;
|
|
122
204
|
private applyFilters;
|
|
205
|
+
private isFieldMetadata;
|
|
123
206
|
private buildEntries;
|
|
124
207
|
private buildBadges;
|
|
125
208
|
private buildBadgeSearchText;
|
|
@@ -214,6 +297,7 @@ declare class WidgetShellEditorComponent implements SettingsValueProvider {
|
|
|
214
297
|
cardBorderStyle: FormControl<string>;
|
|
215
298
|
cardRadius: FormControl<string>;
|
|
216
299
|
cardShadow: FormControl<string>;
|
|
300
|
+
interactionHighlight: FormControl<"" | "standard" | "gradient">;
|
|
217
301
|
cardFilter: FormControl<string>;
|
|
218
302
|
cardFallbackBg: FormControl<string>;
|
|
219
303
|
headerBg: FormControl<string>;
|
|
@@ -344,7 +428,7 @@ interface ConnectionEditorNode {
|
|
|
344
428
|
states: ConnectionEditorPort[];
|
|
345
429
|
}
|
|
346
430
|
type ConnectionEditorDiagnosticSeverity = 'error' | 'warning';
|
|
347
|
-
type ConnectionEditorDiagnosticCode = 'endpoint-widget-missing' | 'endpoint-unresolved' | 'endpoint-not-declared' | 'nested-path-terminal-missing' | 'nested-path-not-declared' | 'state-path-not-declared' | 'feedback-cycle-unguarded' | 'feedback-cycle-guarded';
|
|
431
|
+
type ConnectionEditorDiagnosticCode = 'endpoint-widget-missing' | 'endpoint-unresolved' | 'endpoint-not-declared' | 'nested-path-terminal-missing' | 'nested-path-not-declared' | 'state-path-not-declared' | 'feedback-cycle-unguarded' | 'feedback-cycle-guarded' | 'competing-query-owner';
|
|
348
432
|
interface ConnectionEditorDiagnostic {
|
|
349
433
|
code: ConnectionEditorDiagnosticCode;
|
|
350
434
|
severity: ConnectionEditorDiagnosticSeverity;
|
|
@@ -1091,8 +1175,68 @@ declare class CanvasConstraintEditorModel {
|
|
|
1091
1175
|
width: number;
|
|
1092
1176
|
height: number;
|
|
1093
1177
|
};
|
|
1178
|
+
private resolveFriendlyWidgetTitle;
|
|
1179
|
+
}
|
|
1180
|
+
/**
|
|
1181
|
+
* Canonical presentation model for identifying a widget instance across authoring surfaces
|
|
1182
|
+
* (State/Measure Binder, Quick Geometry, Arrangement Review, Canvas Limits, and Filter Ownership).
|
|
1183
|
+
*/
|
|
1184
|
+
interface WidgetEditorPresentation {
|
|
1185
|
+
/** Unique technical key of the widget instance in the page draft. */
|
|
1186
|
+
key: string;
|
|
1187
|
+
/** Human-readable title resolved from authored shell, inputs, rich-content AST, or disambiguated type. */
|
|
1188
|
+
title: string;
|
|
1189
|
+
/** Contextual subtitle, structural summary, resource path, or component type label. */
|
|
1190
|
+
description: string;
|
|
1191
|
+
/** Material icon identifier representing the widget instance or its component family. */
|
|
1192
|
+
icon: string;
|
|
1193
|
+
/** Localized or friendly label of the widget's component type. */
|
|
1194
|
+
typeLabel: string;
|
|
1195
|
+
/** Canonical component identifier (e.g. `praxis-rich-content`, `praxis-table`). */
|
|
1196
|
+
componentId: string;
|
|
1094
1197
|
}
|
|
1095
1198
|
|
|
1199
|
+
interface GuidedDataSourceQueryConfig {
|
|
1200
|
+
mode: 'group-by' | 'timeseries' | 'collection';
|
|
1201
|
+
groupByField?: string;
|
|
1202
|
+
metricField?: string;
|
|
1203
|
+
metricOp?: 'count' | 'sum' | 'avg' | 'min' | 'max';
|
|
1204
|
+
period?: 'day' | 'week' | 'month' | 'year';
|
|
1205
|
+
pageSize?: number;
|
|
1206
|
+
}
|
|
1207
|
+
interface GuidedDataSourceTransformConfig {
|
|
1208
|
+
kind: 'group-by-map' | 'timeseries-last' | 'path';
|
|
1209
|
+
path?: string;
|
|
1210
|
+
mappingsText?: string;
|
|
1211
|
+
totalField?: string;
|
|
1212
|
+
weightedAverageField?: string;
|
|
1213
|
+
weightedAverageDecimals?: number;
|
|
1214
|
+
ratioTargetField?: string;
|
|
1215
|
+
ratioNumeratorField?: string;
|
|
1216
|
+
ratioDenominatorField?: string;
|
|
1217
|
+
ratioScale?: number;
|
|
1218
|
+
ratioDecimals?: number;
|
|
1219
|
+
}
|
|
1220
|
+
interface GuidedDerivedMeasureConfig {
|
|
1221
|
+
targetPath: string;
|
|
1222
|
+
kind: 'ratio-percent' | 'weighted-average' | 'format-value' | 'template';
|
|
1223
|
+
numeratorPath?: string;
|
|
1224
|
+
denominatorPath?: string;
|
|
1225
|
+
sourcePath?: string;
|
|
1226
|
+
decimals?: number;
|
|
1227
|
+
format?: 'percent' | 'number' | 'currency';
|
|
1228
|
+
templateExpression?: string;
|
|
1229
|
+
}
|
|
1230
|
+
interface CollectionScreenComposerConfig {
|
|
1231
|
+
resourcePath: string;
|
|
1232
|
+
title: string;
|
|
1233
|
+
groupByField: string;
|
|
1234
|
+
includeHeader: boolean;
|
|
1235
|
+
includeIndicators: boolean;
|
|
1236
|
+
filterMode: 'table-integrated' | 'external-filter-bar';
|
|
1237
|
+
collectionKind: 'table' | 'list';
|
|
1238
|
+
detailSurface: 'none' | 'drawer' | 'modal';
|
|
1239
|
+
}
|
|
1096
1240
|
type EditorTabId$1 = 'canvas' | 'grouping' | 'devices' | 'context' | 'state' | 'limits';
|
|
1097
1241
|
type DeviceKey = 'desktop' | 'tablet' | 'mobile';
|
|
1098
1242
|
type GroupingNodeGroup$1 = FormGroup<{
|
|
@@ -1105,6 +1249,21 @@ type GroupingNodeGroup$1 = FormGroup<{
|
|
|
1105
1249
|
side: FormControl<string>;
|
|
1106
1250
|
tabsJson: FormControl<string>;
|
|
1107
1251
|
}>;
|
|
1252
|
+
type DataSourceNodeGroup$1 = FormGroup<{
|
|
1253
|
+
id: FormControl<string>;
|
|
1254
|
+
kind: FormControl<string>;
|
|
1255
|
+
resourcePath: FormControl<string>;
|
|
1256
|
+
endpointKey: FormControl<string>;
|
|
1257
|
+
method: FormControl<string>;
|
|
1258
|
+
targetStatePath: FormControl<string>;
|
|
1259
|
+
errorPolicy: FormControl<string>;
|
|
1260
|
+
refreshIntervalMs: FormControl<number | null>;
|
|
1261
|
+
autoFetch: FormControl<string>;
|
|
1262
|
+
description: FormControl<string>;
|
|
1263
|
+
queryJson: FormControl<string>;
|
|
1264
|
+
transformJson: FormControl<string>;
|
|
1265
|
+
fallbackJson: FormControl<string>;
|
|
1266
|
+
}>;
|
|
1108
1267
|
type DeviceVariantForm = FormGroup<{
|
|
1109
1268
|
columns: FormControl<number | null>;
|
|
1110
1269
|
rowUnit: FormControl<string>;
|
|
@@ -1186,6 +1345,7 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
|
|
|
1186
1345
|
key: string;
|
|
1187
1346
|
number: number;
|
|
1188
1347
|
label: string;
|
|
1348
|
+
widgetKey?: string;
|
|
1189
1349
|
col: number;
|
|
1190
1350
|
row: number;
|
|
1191
1351
|
colSpan: number;
|
|
@@ -1228,6 +1388,8 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
|
|
|
1228
1388
|
readonly shellPresetControl: FormControl<string>;
|
|
1229
1389
|
readonly contextControl: FormControl<string>;
|
|
1230
1390
|
readonly stateControl: FormControl<string>;
|
|
1391
|
+
readonly dataSourcesControl: FormControl<string>;
|
|
1392
|
+
readonly dataSourceNodes: FormArray<DataSourceNodeGroup$1>;
|
|
1231
1393
|
readonly groupingNodes: FormArray<GroupingNodeGroup$1>;
|
|
1232
1394
|
readonly deviceForms: Record<DeviceKey, DeviceVariantForm>;
|
|
1233
1395
|
readonly isDirty$: BehaviorSubject<boolean>;
|
|
@@ -1242,22 +1404,63 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
|
|
|
1242
1404
|
readonly canvasLimits: CanvasConstraintEditorModel;
|
|
1243
1405
|
readonly limitsTargetControl: FormControl<number>;
|
|
1244
1406
|
readonly limitsError: WritableSignal<string | null>;
|
|
1407
|
+
readonly previousAdjustableHeights: WritableSignal<{
|
|
1408
|
+
key: string;
|
|
1409
|
+
title: string;
|
|
1410
|
+
scope: string;
|
|
1411
|
+
scopeLabel: string;
|
|
1412
|
+
heightPx: number;
|
|
1413
|
+
}[]>;
|
|
1245
1414
|
readonly limitsErrorMatcher: {
|
|
1246
1415
|
isErrorState: (control: FormControl | null) => boolean;
|
|
1247
1416
|
};
|
|
1248
1417
|
private readonly injectedData;
|
|
1249
1418
|
readonly isHostedInSettingsPanel: boolean;
|
|
1419
|
+
private readonly destroyRef;
|
|
1250
1420
|
private readonly i18n;
|
|
1421
|
+
private readonly componentRegistry;
|
|
1422
|
+
private readonly resourceDiscovery;
|
|
1423
|
+
private readonly dataSourceRuntime;
|
|
1424
|
+
private readonly stateRuntime;
|
|
1251
1425
|
private pageInput;
|
|
1252
1426
|
private snapshot;
|
|
1253
1427
|
readonly stackedDevices: Set<DeviceKey>;
|
|
1254
1428
|
readonly activeDevice: WritableSignal<DeviceKey>;
|
|
1255
1429
|
private hydrating;
|
|
1430
|
+
private syncingDataSources;
|
|
1431
|
+
private guidedDataSourcesInvalid;
|
|
1256
1432
|
private renderedCandidate;
|
|
1257
1433
|
private renderedValidationFingerprint;
|
|
1434
|
+
private stagedWidgets;
|
|
1435
|
+
private stagedComposition;
|
|
1436
|
+
readonly composerResourcePathControl: FormControl<string>;
|
|
1437
|
+
readonly composerTitleControl: FormControl<string>;
|
|
1438
|
+
readonly composerGroupFieldControl: FormControl<string>;
|
|
1439
|
+
readonly composerIncludeHeaderControl: FormControl<boolean>;
|
|
1440
|
+
readonly composerIncludeIndicatorsControl: FormControl<boolean>;
|
|
1441
|
+
readonly composerFilterModeControl: FormControl<"table-integrated" | "external-filter-bar">;
|
|
1442
|
+
readonly composerCollectionKindControl: FormControl<"table" | "list">;
|
|
1443
|
+
readonly composerDetailSurfaceControl: FormControl<"none" | "modal" | "drawer">;
|
|
1444
|
+
readonly composerMessage: WritableSignal<string>;
|
|
1445
|
+
readonly composerSelectedResource: WritableSignal<DiscoveredResourceOption | null>;
|
|
1446
|
+
readonly composerSchemaFields: WritableSignal<FieldDefinition[]>;
|
|
1447
|
+
private composerSchemaPath;
|
|
1448
|
+
private composerSchemaSub?;
|
|
1449
|
+
private lastAutoComposerTitle;
|
|
1450
|
+
readonly binderTokenControl: FormControl<string>;
|
|
1451
|
+
readonly binderWidgetControl: FormControl<string>;
|
|
1452
|
+
readonly binderInputPathControl: FormControl<string>;
|
|
1453
|
+
readonly binderMessage: WritableSignal<string>;
|
|
1454
|
+
readonly derivedPathControl: FormControl<string>;
|
|
1455
|
+
readonly derivedKindControl: FormControl<"template" | "format-value" | "ratio-percent" | "weighted-average">;
|
|
1456
|
+
readonly derivedNumeratorControl: FormControl<string>;
|
|
1457
|
+
readonly derivedDenominatorControl: FormControl<string>;
|
|
1458
|
+
readonly derivedFormatControl: FormControl<"number" | "boolean" | "integer" | "percent" | "currency">;
|
|
1459
|
+
readonly derivedDecimalsControl: FormControl<number>;
|
|
1258
1460
|
private readonly tabOrder;
|
|
1259
1461
|
constructor();
|
|
1260
1462
|
ngOnInit(): void;
|
|
1463
|
+
ngOnDestroy(): void;
|
|
1261
1464
|
get selectedTabIndex(): number;
|
|
1262
1465
|
get isConfigurationValid(): boolean;
|
|
1263
1466
|
get hasPendingChanges(): boolean;
|
|
@@ -1265,6 +1468,17 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
|
|
|
1265
1468
|
get dirtyStateLabel(): string;
|
|
1266
1469
|
get nonLimitError(): string | null;
|
|
1267
1470
|
get limitsSummaryError(): string | null;
|
|
1471
|
+
get blockedGeometryWidgets(): Array<{
|
|
1472
|
+
targetIndex: number;
|
|
1473
|
+
key: string;
|
|
1474
|
+
title: string;
|
|
1475
|
+
scope: string;
|
|
1476
|
+
scopeLabel: string;
|
|
1477
|
+
heightPx: number | null;
|
|
1478
|
+
message: string;
|
|
1479
|
+
}>;
|
|
1480
|
+
navigateToBlockedLimit(targetIndex?: number): void;
|
|
1481
|
+
switchBlockedWidgetsToAutoHeight(): void;
|
|
1268
1482
|
get selectedLayoutPresetLabel(): string;
|
|
1269
1483
|
get selectedThemePresetLabel(): string;
|
|
1270
1484
|
get selectedLayoutPresetEntry(): LayoutPresetEntry | null;
|
|
@@ -1285,6 +1499,112 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
|
|
|
1285
1499
|
private stackedCanvas;
|
|
1286
1500
|
addGroupingNode(seed?: WidgetPageGroupingDefinition): void;
|
|
1287
1501
|
removeGroupingNode(index: number): void;
|
|
1502
|
+
private readonly groupingSelectedKeysCache;
|
|
1503
|
+
groupingSelectedWidgetKeys(index: number): string[];
|
|
1504
|
+
groupingSelectedWidgetsLabel(index: number): string;
|
|
1505
|
+
groupingSelectedWidgetIcon(index: number): string;
|
|
1506
|
+
onGroupingWidgetSelectionChange(index: number, selectedKeys: readonly string[]): void;
|
|
1507
|
+
addDataSourceNode(seed?: Partial<WidgetPageDataSourceDefinition>): void;
|
|
1508
|
+
removeDataSourceNode(index: number): void;
|
|
1509
|
+
dataSourceLabel(index: number): string;
|
|
1510
|
+
applyGuidedDataSourceQuery(index: number, config: GuidedDataSourceQueryConfig): void;
|
|
1511
|
+
applyGuidedDataSourceTransform(index: number, config: GuidedDataSourceTransformConfig): void;
|
|
1512
|
+
getDataSourcePreview(index: number): {
|
|
1513
|
+
status: 'ok' | 'error';
|
|
1514
|
+
sourceKind: 'live' | 'sample';
|
|
1515
|
+
value?: unknown;
|
|
1516
|
+
formattedJson?: string;
|
|
1517
|
+
error?: string;
|
|
1518
|
+
tokens: string[];
|
|
1519
|
+
};
|
|
1520
|
+
resolveEndpointKey(rawKey?: string | null): any;
|
|
1521
|
+
addGuidedDerivedMeasure(config?: Partial<GuidedDerivedMeasureConfig>): boolean;
|
|
1522
|
+
getDerivedStatePreview(): {
|
|
1523
|
+
entries: Array<{
|
|
1524
|
+
key: string;
|
|
1525
|
+
value: unknown;
|
|
1526
|
+
formattedValue: string;
|
|
1527
|
+
token: string;
|
|
1528
|
+
}>;
|
|
1529
|
+
diagnostics: string[];
|
|
1530
|
+
};
|
|
1531
|
+
availableStateBindingTokens(): string[];
|
|
1532
|
+
bindablePageWidgets(): WidgetEditorPresentation[];
|
|
1533
|
+
selectedBinderWidget(): WidgetEditorPresentation | null;
|
|
1534
|
+
selectedBinderWidgetInputSuggestions(): string[];
|
|
1535
|
+
readonly binderDeclarativePipes: readonly ["| number", "| round:1", "| percent:1", "| currency:\"BRL\"", "| currencyCompact:\"BRL\"", "| dateTime", "| default:0", "| uppercase"];
|
|
1536
|
+
private static readonly ALLOWED_DECLARATIVE_PIPES;
|
|
1537
|
+
selectBinderInputPathSuggestion(path: string): void;
|
|
1538
|
+
selectBinderTokenSuggestion(token: string): void;
|
|
1539
|
+
appendBinderTokenPipe(pipeSegment: string): void;
|
|
1540
|
+
hasInvalidDeclarativePipe(rawExpression?: string | null): boolean;
|
|
1541
|
+
binderTokenPipeError(): string | null;
|
|
1542
|
+
binderTokenLivePreview(): string | null;
|
|
1543
|
+
invalidWidgetStateBindingPipes(): Array<{
|
|
1544
|
+
widgetKey: string;
|
|
1545
|
+
widgetTitle: string;
|
|
1546
|
+
inputPath: string;
|
|
1547
|
+
expression: string;
|
|
1548
|
+
}>;
|
|
1549
|
+
loadStateBindingIntoForm(binding: {
|
|
1550
|
+
widgetKey: string;
|
|
1551
|
+
inputPath: string;
|
|
1552
|
+
token?: string;
|
|
1553
|
+
expression?: string;
|
|
1554
|
+
}): void;
|
|
1555
|
+
widgetIconForKey(widgetKey: string): string;
|
|
1556
|
+
bindStateTokenToWidget(widgetKey?: string, inputPath?: string, stateToken?: string): boolean;
|
|
1557
|
+
currentWidgetStateBindings(): Array<{
|
|
1558
|
+
widgetKey: string;
|
|
1559
|
+
widgetTitle: string;
|
|
1560
|
+
inputPath: string;
|
|
1561
|
+
token: string;
|
|
1562
|
+
}>;
|
|
1563
|
+
resolveStateTokenPreview(rawToken: string): string | null;
|
|
1564
|
+
private resolveStateTokenMatch;
|
|
1565
|
+
unboundWidgetStatePlaceholders(): Array<{
|
|
1566
|
+
widgetKey: string;
|
|
1567
|
+
widgetTitle: string;
|
|
1568
|
+
placeholder: string;
|
|
1569
|
+
suggestedInputPath: string;
|
|
1570
|
+
}>;
|
|
1571
|
+
selectUnboundPlaceholder(item: {
|
|
1572
|
+
widgetKey: string;
|
|
1573
|
+
placeholder: string;
|
|
1574
|
+
suggestedInputPath: string;
|
|
1575
|
+
}): void;
|
|
1576
|
+
unbindStateTokenFromWidget(widgetKey: string, inputPath: string): boolean;
|
|
1577
|
+
autoBindWidgetStatePlaceholders(): number;
|
|
1578
|
+
onComposerResourceSelected(entry: DiscoveredResourceOption | null): void;
|
|
1579
|
+
private syncDefaultComposerGroupField;
|
|
1580
|
+
filteredComposerGroupFieldOptions(): FieldDefinition[];
|
|
1581
|
+
getComposerFieldTypeBadge(field: FieldDefinition | null | undefined): string;
|
|
1582
|
+
getComposerFieldDescription(field: FieldDefinition | null | undefined): string;
|
|
1583
|
+
private loadComposerSchemaFields;
|
|
1584
|
+
private resolveGroupByMappings;
|
|
1585
|
+
composeCollectionScreen(overrides?: Partial<CollectionScreenComposerConfig>): WidgetPageDefinition | null;
|
|
1586
|
+
quickCanvasWidgets(): Array<{
|
|
1587
|
+
key: string;
|
|
1588
|
+
label: string;
|
|
1589
|
+
icon: string;
|
|
1590
|
+
description: string;
|
|
1591
|
+
col: number;
|
|
1592
|
+
row: number;
|
|
1593
|
+
colSpan: number;
|
|
1594
|
+
rowSpan: number;
|
|
1595
|
+
}>;
|
|
1596
|
+
setWidgetCanvasSpan(widgetKey: string, colSpan: number, rowSpan?: number): void;
|
|
1597
|
+
duplicateFilterOwners(): Array<{
|
|
1598
|
+
tableKey: string;
|
|
1599
|
+
tableTitle: string;
|
|
1600
|
+
externalSourceKeys: string[];
|
|
1601
|
+
externalSourceLabels: string[];
|
|
1602
|
+
linkIds: string[];
|
|
1603
|
+
}>;
|
|
1604
|
+
consolidateFilterOwnership(tableKey: string, mode: 'keep-table-toolbar' | 'keep-external-link'): void;
|
|
1605
|
+
private resolveWidgetPresentation;
|
|
1606
|
+
private resolveWidgetTitle;
|
|
1607
|
+
private isFilterLinkTargetingWidget;
|
|
1288
1608
|
layoutPresetSummary(preset: LayoutPresetEntry): string;
|
|
1289
1609
|
slotsSummary(preset: LayoutPresetEntry): string;
|
|
1290
1610
|
requiredSlotsSummary(preset: LayoutPresetEntry): string;
|
|
@@ -1294,6 +1614,7 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
|
|
|
1294
1614
|
tx(key: string, fallback: string): string;
|
|
1295
1615
|
shellPresetLabel(preset: WidgetShellPresetDefinition): string;
|
|
1296
1616
|
limitsTargetLabel(index: number): string;
|
|
1617
|
+
limitsTargetIcon(index: number): string;
|
|
1297
1618
|
limitFieldError(control: FormControl<number | null>): string;
|
|
1298
1619
|
private draftFingerprint;
|
|
1299
1620
|
limitsGeometryLabel(): string;
|
|
@@ -1304,6 +1625,14 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
|
|
|
1304
1625
|
protected refreshRenderedValidation(): void;
|
|
1305
1626
|
private createDeviceVariantForm;
|
|
1306
1627
|
private createGroupingNodeGroup;
|
|
1628
|
+
private createDataSourceNodeGroup;
|
|
1629
|
+
private replaceDataSourceNodes;
|
|
1630
|
+
private buildDataSourcesFromNodes;
|
|
1631
|
+
syncStateValuesFromDataSources(): number;
|
|
1632
|
+
private ensureDataSourceTargetPathsInStateValues;
|
|
1633
|
+
private syncDataSourcesJsonFromNodes;
|
|
1634
|
+
private syncDataSourceNodesFromJson;
|
|
1635
|
+
private inferPageResourcePath;
|
|
1307
1636
|
private hydrate;
|
|
1308
1637
|
private replaceGroupingNodes;
|
|
1309
1638
|
private buildCurrentPage;
|
|
@@ -1316,13 +1645,20 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
|
|
|
1316
1645
|
private invalidate;
|
|
1317
1646
|
private refreshPanelState;
|
|
1318
1647
|
get layoutPresetOptions(): WidgetPageDefinition['layoutPresetOptions'];
|
|
1648
|
+
private effectivePageInput;
|
|
1649
|
+
private readEffectiveWidgets;
|
|
1319
1650
|
private currentPageInput;
|
|
1320
1651
|
private parsePage;
|
|
1321
1652
|
private parseJson;
|
|
1322
1653
|
private parseRecordJson;
|
|
1654
|
+
private parseDataSourcesJson;
|
|
1655
|
+
private isValidDataSourceTransform;
|
|
1656
|
+
private validateDataSourceEntry;
|
|
1657
|
+
private isValidDataSourcesPayload;
|
|
1323
1658
|
private parseGroupingTabs;
|
|
1324
1659
|
private parseGroupingOverrides;
|
|
1325
1660
|
private parseWidgetOverrides;
|
|
1661
|
+
private validateWidgetOverrides;
|
|
1326
1662
|
private isGroupingTab;
|
|
1327
1663
|
private isGroupingOverride;
|
|
1328
1664
|
private isWidgetOverride;
|
|
@@ -1337,6 +1673,17 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
|
|
|
1337
1673
|
private applyShellPresetToContext;
|
|
1338
1674
|
private lookupPresetLabel;
|
|
1339
1675
|
private defaultCanvas;
|
|
1676
|
+
private parseKeyValuePairs;
|
|
1677
|
+
private buildSamplePayloadForDataSource;
|
|
1678
|
+
private collectStateTokensForValue;
|
|
1679
|
+
private assignNestedValue;
|
|
1680
|
+
private readNestedValue;
|
|
1681
|
+
private deleteNestedValue;
|
|
1682
|
+
private isPlaceholderBoundInContext;
|
|
1683
|
+
private collectTemplatePlaceholdersRecursive;
|
|
1684
|
+
private collectWidgetBindingsRecursive;
|
|
1685
|
+
private collectInvalidWidgetPipesRecursive;
|
|
1686
|
+
private humanizeResourceTitle;
|
|
1340
1687
|
private clone;
|
|
1341
1688
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicPageConfigEditorComponent, never>;
|
|
1342
1689
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicPageConfigEditorComponent, "praxis-dynamic-page-config-editor", never, { "page": { "alias": "page"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "presets": { "alias": "presets"; "required": false; }; "pagePreset": { "alias": "pagePreset"; "required": false; }; }, { "pageChange": "pageChange"; }, never, never, true, never>;
|
|
@@ -1408,11 +1755,29 @@ type GroupingNodeGroup = FormGroup<{
|
|
|
1408
1755
|
side: FormControl<string>;
|
|
1409
1756
|
tabsJson: FormControl<string>;
|
|
1410
1757
|
}>;
|
|
1758
|
+
type DataSourceNodeGroup = FormGroup<{
|
|
1759
|
+
id: FormControl<string>;
|
|
1760
|
+
kind: FormControl<string>;
|
|
1761
|
+
resourcePath: FormControl<string>;
|
|
1762
|
+
endpointKey: FormControl<string>;
|
|
1763
|
+
method: FormControl<string>;
|
|
1764
|
+
targetStatePath: FormControl<string>;
|
|
1765
|
+
errorPolicy: FormControl<string>;
|
|
1766
|
+
refreshIntervalMs: FormControl<number | null>;
|
|
1767
|
+
autoFetch: FormControl<string>;
|
|
1768
|
+
queryJson: FormControl<string>;
|
|
1769
|
+
transformJson: FormControl<string>;
|
|
1770
|
+
fallbackJson: FormControl<string>;
|
|
1771
|
+
description: FormControl<string>;
|
|
1772
|
+
}>;
|
|
1411
1773
|
declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
|
|
1412
1774
|
protected readonly derivedOperators: readonly ["merge-objects", "pick", "omit"];
|
|
1413
1775
|
protected readonly mergeStrategies: readonly ["replace", "merge", "append", "remove-keys"];
|
|
1414
1776
|
protected readonly valueModes: readonly ["json", "string", "number", "boolean", "null"];
|
|
1415
1777
|
protected readonly groupingKinds: readonly ["section", "tabs", "hero", "rail"];
|
|
1778
|
+
protected readonly dataSourceKinds: WidgetPageDataSourceKind[];
|
|
1779
|
+
protected readonly dataSourceMethods: WidgetPageDataSourceMethod[];
|
|
1780
|
+
protected readonly dataSourceErrorPolicies: WidgetPageDataSourceErrorPolicy[];
|
|
1416
1781
|
protected readonly layoutPresetEntries: Array<(typeof BUILTIN_PAGE_LAYOUT_PRESETS)[string]>;
|
|
1417
1782
|
protected readonly themePresetEntries: Array<(typeof BUILTIN_PAGE_THEME_PRESETS)[string]>;
|
|
1418
1783
|
readonly page: _angular_core.InputSignal<string | PageDefinition | null>;
|
|
@@ -1432,9 +1797,11 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
|
|
|
1432
1797
|
readonly groupingControl: FormControl<string>;
|
|
1433
1798
|
readonly deviceLayoutsControl: FormControl<string>;
|
|
1434
1799
|
readonly stateValuesControl: FormControl<string>;
|
|
1800
|
+
readonly dataSourcesControl: FormControl<string>;
|
|
1435
1801
|
readonly groupingNodes: FormArray<GroupingNodeGroup>;
|
|
1436
1802
|
readonly schemaNodes: FormArray<SchemaNodeGroup>;
|
|
1437
1803
|
readonly derivedNodes: FormArray<DerivedNodeGroup>;
|
|
1804
|
+
readonly dataSourceNodes: FormArray<DataSourceNodeGroup>;
|
|
1438
1805
|
readonly deviceDesktopForm: FormGroup<{
|
|
1439
1806
|
orientation: FormControl<string>;
|
|
1440
1807
|
columns: FormControl<number | null>;
|
|
@@ -1471,6 +1838,8 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
|
|
|
1471
1838
|
private lastGrouping;
|
|
1472
1839
|
private lastDeviceLayouts;
|
|
1473
1840
|
private lastStateValues;
|
|
1841
|
+
private lastDataSources;
|
|
1842
|
+
private dataSourcesEditSource;
|
|
1474
1843
|
private readonly dirtySubject;
|
|
1475
1844
|
private readonly validSubject;
|
|
1476
1845
|
private readonly busySubject;
|
|
@@ -1492,6 +1861,7 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
|
|
|
1492
1861
|
protected get selectedShellPresetLabel(): string;
|
|
1493
1862
|
protected get contextExample(): string;
|
|
1494
1863
|
protected get stateValuesExample(): string;
|
|
1864
|
+
protected get dataSourcesExample(): string;
|
|
1495
1865
|
protected get layoutPresetHint(): string;
|
|
1496
1866
|
protected get themePresetHint(): string;
|
|
1497
1867
|
protected get shellPresetHint(): string;
|
|
@@ -1515,6 +1885,8 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
|
|
|
1515
1885
|
config?: WidgetDerivedStateNode;
|
|
1516
1886
|
}): void;
|
|
1517
1887
|
removeDerivedNode(index: number): void;
|
|
1888
|
+
addDataSourceNode(seed?: WidgetPageDataSourceDefinition): void;
|
|
1889
|
+
removeDataSourceNode(index: number): void;
|
|
1518
1890
|
addGroupingNode(seed?: WidgetPageGroupingDefinition): void;
|
|
1519
1891
|
removeGroupingNode(index: number): void;
|
|
1520
1892
|
setActiveTab(tab: EditorTabId): void;
|
|
@@ -1526,11 +1898,24 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
|
|
|
1526
1898
|
private stringifyGroupingWidgetKeys;
|
|
1527
1899
|
private buildGrouping;
|
|
1528
1900
|
private hydrateDeviceLayoutControls;
|
|
1901
|
+
private deviceOverridesError;
|
|
1529
1902
|
private buildDeviceLayouts;
|
|
1530
1903
|
private createDeviceLayoutForm;
|
|
1531
1904
|
private patchDeviceLayoutForm;
|
|
1532
1905
|
private buildDeviceLayoutVariant;
|
|
1533
1906
|
private hydrateStateEditor;
|
|
1907
|
+
private hydrateDataSourcesEditor;
|
|
1908
|
+
private normalizeDataSourcesArray;
|
|
1909
|
+
private replaceDataSourceNodes;
|
|
1910
|
+
private createDataSourceNodeGroup;
|
|
1911
|
+
private syncDataSourceNodesFromControl;
|
|
1912
|
+
private syncDataSourcesControlFromNodes;
|
|
1913
|
+
private isPlainRecord;
|
|
1914
|
+
private isValidDataSourceTransform;
|
|
1915
|
+
private validateDataSourceEntry;
|
|
1916
|
+
private isValidDataSourcesPayload;
|
|
1917
|
+
private buildDataSourcesFromNodes;
|
|
1918
|
+
private buildDataSources;
|
|
1534
1919
|
private replaceSchemaNodes;
|
|
1535
1920
|
private replaceDerivedNodes;
|
|
1536
1921
|
private createSchemaNodeGroup;
|
|
@@ -2153,7 +2538,7 @@ type BuilderCanvasLayout = {
|
|
|
2153
2538
|
rowUnit?: string;
|
|
2154
2539
|
gap?: string;
|
|
2155
2540
|
autoRows?: 'fixed' | 'content';
|
|
2156
|
-
collisionPolicy?: 'block' | 'swap';
|
|
2541
|
+
collisionPolicy?: 'block' | 'swap' | 'push-down';
|
|
2157
2542
|
items: Record<string, BuilderCanvasItem>;
|
|
2158
2543
|
};
|
|
2159
2544
|
type BuilderPageDefinition = Omit<WidgetPageDefinition, 'widgets'> & {
|
|
@@ -2267,20 +2652,6 @@ interface AgenticAuthoringQuickReply extends PraxisAssistantShellQuickReply {
|
|
|
2267
2652
|
kind: string;
|
|
2268
2653
|
}
|
|
2269
2654
|
type AgenticAuthoringPanelLayout = PraxisAssistantShellLayout;
|
|
2270
|
-
type PageBuilderPremiumReadinessSeverity = 'info' | 'warning' | 'error';
|
|
2271
|
-
type PageBuilderPremiumReadinessActionKind = 'open-page-settings' | 'open-connections' | 'open-widget-config' | 'focus-widget';
|
|
2272
|
-
interface PageBuilderPremiumReadinessAction {
|
|
2273
|
-
kind: PageBuilderPremiumReadinessActionKind;
|
|
2274
|
-
label: string;
|
|
2275
|
-
widgetKey?: string;
|
|
2276
|
-
}
|
|
2277
|
-
interface PageBuilderPremiumReadinessIssue {
|
|
2278
|
-
id: string;
|
|
2279
|
-
severity: PageBuilderPremiumReadinessSeverity;
|
|
2280
|
-
title: string;
|
|
2281
|
-
description: string;
|
|
2282
|
-
action?: PageBuilderPremiumReadinessAction;
|
|
2283
|
-
}
|
|
2284
2655
|
type SharedRuleCockpitAction = 'definition' | 'simulation' | 'approve' | 'activate' | 'publication' | 'materializations' | 'timeline' | 'enforcement';
|
|
2285
2656
|
type ProjectKnowledgeCockpitAction = 'change-set' | 'validate' | 'approve' | 'reject' | 'apply' | 'readback';
|
|
2286
2657
|
interface SharedRuleEnforcementSummary {
|
|
@@ -2333,14 +2704,18 @@ declare class DynamicPageBuilderComponent implements OnChanges, OnDestroy {
|
|
|
2333
2704
|
private readonly observabilityDashboard;
|
|
2334
2705
|
private readonly runtimeObservationRegistry;
|
|
2335
2706
|
private readonly agenticAuthoringOptions;
|
|
2707
|
+
private readonly customizationMode;
|
|
2336
2708
|
runtime?: DynamicWidgetPageComponent;
|
|
2337
2709
|
page?: WidgetPageDefinition | string;
|
|
2338
2710
|
context?: Record<string, unknown> | null;
|
|
2339
2711
|
strictValidation: boolean;
|
|
2712
|
+
/** Opt in to Core persistence; hosts managing their own documents leave this disabled. */
|
|
2340
2713
|
autoPersist: boolean;
|
|
2341
2714
|
enableCustomization: boolean;
|
|
2342
2715
|
authoringCapabilities?: PageBuilderAuthoringCapabilities | null;
|
|
2343
2716
|
showSettingsButton: boolean;
|
|
2717
|
+
showGovernanceToolbar: boolean;
|
|
2718
|
+
governanceToolbarTitle?: string;
|
|
2344
2719
|
pageIdentity?: PageIdentity;
|
|
2345
2720
|
componentInstanceId?: string;
|
|
2346
2721
|
pageEditorComponent: Type<any> | undefined;
|
|
@@ -2364,6 +2739,8 @@ declare class DynamicPageBuilderComponent implements OnChanges, OnDestroy {
|
|
|
2364
2739
|
canDeleteSavedPage: boolean;
|
|
2365
2740
|
pageLifecycleBusy: boolean;
|
|
2366
2741
|
pageLifecycleResetRevision: number | string | null;
|
|
2742
|
+
readonly persistenceChange: _angular_core.OutputEmitterRef<WidgetPagePersistenceState>;
|
|
2743
|
+
private runtimePersistenceStatus;
|
|
2367
2744
|
pageChange: EventEmitter<WidgetPageDefinition>;
|
|
2368
2745
|
/** Emits only explicit visual authoring operations, never runtime state changes. */
|
|
2369
2746
|
readonly pageAuthoringChange: _angular_core.OutputEmitterRef<WidgetPageDefinition>;
|
|
@@ -2373,10 +2750,16 @@ declare class DynamicPageBuilderComponent implements OnChanges, OnDestroy {
|
|
|
2373
2750
|
agenticAuthoringSharedRuleHandoff: EventEmitter<PageBuilderAgenticAuthoringSharedRuleHandoff>;
|
|
2374
2751
|
pageRestart: EventEmitter<void>;
|
|
2375
2752
|
savedPageDeleteRequested: EventEmitter<void>;
|
|
2753
|
+
customizationChange: EventEmitter<boolean>;
|
|
2376
2754
|
readonly currentPage: _angular_core.WritableSignal<WidgetPageDefinition>;
|
|
2755
|
+
readonly isCustomizing: _angular_core.WritableSignal<boolean>;
|
|
2756
|
+
readonly governancePersistence: _angular_core.WritableSignal<WidgetPagePersistenceState>;
|
|
2757
|
+
readonly isLayoutCustomized: _angular_core.Signal<boolean>;
|
|
2758
|
+
readonly isGovernanceBusy: _angular_core.Signal<boolean>;
|
|
2759
|
+
readonly governancePersistenceLabel: _angular_core.Signal<string>;
|
|
2760
|
+
readonly governanceLastSavedAt: _angular_core.Signal<string | null>;
|
|
2377
2761
|
readonly hasPageWidgets: _angular_core.Signal<boolean>;
|
|
2378
2762
|
readonly hasRecommendedConnectionSuggestion: _angular_core.Signal<boolean>;
|
|
2379
|
-
readonly premiumReadinessIssues: _angular_core.Signal<PageBuilderPremiumReadinessIssue[]>;
|
|
2380
2763
|
readonly connectionsViewerOpen: _angular_core.WritableSignal<boolean>;
|
|
2381
2764
|
readonly agenticAuthoringOpen: _angular_core.WritableSignal<boolean>;
|
|
2382
2765
|
readonly agenticAuthoringPrompt: _angular_core.WritableSignal<string>;
|
|
@@ -2439,19 +2822,28 @@ declare class DynamicPageBuilderComponent implements OnChanges, OnDestroy {
|
|
|
2439
2822
|
constructor(dialog: MatDialog, settingsPanel: SettingsPanelBridge | null);
|
|
2440
2823
|
ngOnChanges(changes: SimpleChanges): void;
|
|
2441
2824
|
ngOnDestroy(): void;
|
|
2825
|
+
toggleGovernanceCustomization(): void;
|
|
2826
|
+
isCustomizationEnabled(): boolean;
|
|
2442
2827
|
showSettings(): boolean;
|
|
2443
2828
|
canInsertWidgets(): boolean;
|
|
2444
2829
|
canOpenPageSettings(): boolean;
|
|
2445
2830
|
canEditConnections(): boolean;
|
|
2446
2831
|
canPreviewPage(): boolean;
|
|
2447
2832
|
canUseAgenticAuthoring(): boolean;
|
|
2448
|
-
canRunPremiumReadinessAction(action: PageBuilderPremiumReadinessAction): boolean;
|
|
2449
2833
|
canUsePageLifecycle(): boolean;
|
|
2450
2834
|
private isAuthoringCapabilityEnabled;
|
|
2451
2835
|
isPreviewMode(): boolean;
|
|
2452
2836
|
runtimePage(): WidgetPageDefinition;
|
|
2453
2837
|
runtimeAuthoringCapabilities(): PageBuilderAuthoringCapabilities;
|
|
2454
2838
|
builderModeLabel(): string;
|
|
2839
|
+
/** Governed documents and agentic previews retain their explicit host/apply lifecycle. */
|
|
2840
|
+
runtimeAutoPersist(): boolean;
|
|
2841
|
+
/** Explicitly discard the local draft and reload the current identity's saved page. */
|
|
2842
|
+
reloadPersistedPage(defaultPage?: WidgetPageDefinition): void;
|
|
2843
|
+
/** Clear the current identity's saved document after storage acknowledgement. */
|
|
2844
|
+
resetPersistedPage(defaultPage?: WidgetPageDefinition): void;
|
|
2845
|
+
onRuntimePersistenceChange(state: WidgetPagePersistenceState): void;
|
|
2846
|
+
private syncShellPageGovernance;
|
|
2455
2847
|
onRuntimePageChange(next: WidgetPageDefinition): void;
|
|
2456
2848
|
onRuntimePageAuthoringChange(next: WidgetPageDefinition): void;
|
|
2457
2849
|
onRuntimeWidgetEvent(event: WidgetEventEnvelope): void;
|
|
@@ -2474,17 +2866,14 @@ declare class DynamicPageBuilderComponent implements OnChanges, OnDestroy {
|
|
|
2474
2866
|
connectionsToggleLabel(): string;
|
|
2475
2867
|
onAddComponent(): void;
|
|
2476
2868
|
addWidget(selection: string | ComponentPaletteSelection): void;
|
|
2869
|
+
addWidgets(selections: ReadonlyArray<string | ComponentPaletteSelection>): string[];
|
|
2870
|
+
private appendWidgetToDraft;
|
|
2477
2871
|
private layoutHintsFor;
|
|
2478
2872
|
openPageSettings(): void;
|
|
2873
|
+
/** Retries the current persisted draft, including an intentionally empty page. */
|
|
2874
|
+
retryPersistedPage(): void;
|
|
2479
2875
|
saveCurrentPage(): void;
|
|
2480
2876
|
canSaveCurrentPage(): boolean;
|
|
2481
|
-
private evaluatePremiumReadiness;
|
|
2482
|
-
runPremiumReadinessAction(issue: PageBuilderPremiumReadinessIssue): void;
|
|
2483
|
-
private isPremiumReadinessCandidate;
|
|
2484
|
-
private hasDisconnectedOperationalWidgets;
|
|
2485
|
-
private latePrimaryChartKey;
|
|
2486
|
-
private usesLocalAnalyticData;
|
|
2487
|
-
private isAnalyticWidget;
|
|
2488
2877
|
applyConfigFromAdapter(config: PageBuilderConfig): void;
|
|
2489
2878
|
private createAdapterHost;
|
|
2490
2879
|
toggleAgenticAuthoring(): void;
|
|
@@ -2718,7 +3107,7 @@ declare class DynamicPageBuilderComponent implements OnChanges, OnDestroy {
|
|
|
2718
3107
|
authoringSourceDiagnosticText(diagnostic: UiCompositionAuthoringSourceDiagnostic): string;
|
|
2719
3108
|
tx(key: string, fallback: string): string;
|
|
2720
3109
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DynamicPageBuilderComponent, [null, { optional: true; }]>;
|
|
2721
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicPageBuilderComponent, "praxis-dynamic-page-builder", never, { "page": { "alias": "page"; "required": false; }; "context": { "alias": "context"; "required": false; }; "strictValidation": { "alias": "strictValidation"; "required": false; }; "autoPersist": { "alias": "autoPersist"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "authoringCapabilities": { "alias": "authoringCapabilities"; "required": false; }; "showSettingsButton": { "alias": "showSettingsButton"; "required": false; }; "pageIdentity": { "alias": "pageIdentity"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "pageEditorComponent": { "alias": "pageEditorComponent"; "required": false; }; "componentPaletteAllowedWidgetIds": { "alias": "componentPaletteAllowedWidgetIds"; "required": false; }; "componentPaletteAllowedWidgetTags": { "alias": "componentPaletteAllowedWidgetTags"; "required": false; }; "componentPaletteAllowedPresetIds": { "alias": "componentPaletteAllowedPresetIds"; "required": false; }; "enableAgenticAuthoring": { "alias": "enableAgenticAuthoring"; "required": false; }; "agenticAuthoringProvider": { "alias": "agenticAuthoringProvider"; "required": false; }; "agenticAuthoringModel": { "alias": "agenticAuthoringModel"; "required": false; }; "agenticAuthoringApiKey": { "alias": "agenticAuthoringApiKey"; "required": false; }; "agenticAuthoringComponentId": { "alias": "agenticAuthoringComponentId"; "required": false; }; "agenticAuthoringScope": { "alias": "agenticAuthoringScope"; "required": false; }; "agenticAuthoringEtag": { "alias": "agenticAuthoringEtag"; "required": false; }; "agenticAuthoringIncludeLlmDiagnostics": { "alias": "agenticAuthoringIncludeLlmDiagnostics"; "required": false; }; "agenticAuthoringEnableStreaming": { "alias": "agenticAuthoringEnableStreaming"; "required": false; }; "agenticAuthoringVoiceInputMode": { "alias": "agenticAuthoringVoiceInputMode"; "required": false; }; "agenticAuthoringContextHints": { "alias": "agenticAuthoringContextHints"; "required": false; }; "authoringDocument": { "alias": "authoringDocument"; "required": false; }; "showPageLifecycleActions": { "alias": "showPageLifecycleActions"; "required": false; }; "canDeleteSavedPage": { "alias": "canDeleteSavedPage"; "required": false; }; "pageLifecycleBusy": { "alias": "pageLifecycleBusy"; "required": false; }; "pageLifecycleResetRevision": { "alias": "pageLifecycleResetRevision"; "required": false; }; }, { "pageChange": "pageChange"; "pageAuthoringChange": "pageAuthoringChange"; "widgetEvent": "widgetEvent"; "pageSaveRequested": "pageSaveRequested"; "agenticAuthoringApplied": "agenticAuthoringApplied"; "agenticAuthoringSharedRuleHandoff": "agenticAuthoringSharedRuleHandoff"; "pageRestart": "pageRestart"; "savedPageDeleteRequested": "savedPageDeleteRequested"; }, never, never, true, never>;
|
|
3110
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DynamicPageBuilderComponent, "praxis-dynamic-page-builder", never, { "page": { "alias": "page"; "required": false; }; "context": { "alias": "context"; "required": false; }; "strictValidation": { "alias": "strictValidation"; "required": false; }; "autoPersist": { "alias": "autoPersist"; "required": false; }; "enableCustomization": { "alias": "enableCustomization"; "required": false; }; "authoringCapabilities": { "alias": "authoringCapabilities"; "required": false; }; "showSettingsButton": { "alias": "showSettingsButton"; "required": false; }; "showGovernanceToolbar": { "alias": "showGovernanceToolbar"; "required": false; }; "governanceToolbarTitle": { "alias": "governanceToolbarTitle"; "required": false; }; "pageIdentity": { "alias": "pageIdentity"; "required": false; }; "componentInstanceId": { "alias": "componentInstanceId"; "required": false; }; "pageEditorComponent": { "alias": "pageEditorComponent"; "required": false; }; "componentPaletteAllowedWidgetIds": { "alias": "componentPaletteAllowedWidgetIds"; "required": false; }; "componentPaletteAllowedWidgetTags": { "alias": "componentPaletteAllowedWidgetTags"; "required": false; }; "componentPaletteAllowedPresetIds": { "alias": "componentPaletteAllowedPresetIds"; "required": false; }; "enableAgenticAuthoring": { "alias": "enableAgenticAuthoring"; "required": false; }; "agenticAuthoringProvider": { "alias": "agenticAuthoringProvider"; "required": false; }; "agenticAuthoringModel": { "alias": "agenticAuthoringModel"; "required": false; }; "agenticAuthoringApiKey": { "alias": "agenticAuthoringApiKey"; "required": false; }; "agenticAuthoringComponentId": { "alias": "agenticAuthoringComponentId"; "required": false; }; "agenticAuthoringScope": { "alias": "agenticAuthoringScope"; "required": false; }; "agenticAuthoringEtag": { "alias": "agenticAuthoringEtag"; "required": false; }; "agenticAuthoringIncludeLlmDiagnostics": { "alias": "agenticAuthoringIncludeLlmDiagnostics"; "required": false; }; "agenticAuthoringEnableStreaming": { "alias": "agenticAuthoringEnableStreaming"; "required": false; }; "agenticAuthoringVoiceInputMode": { "alias": "agenticAuthoringVoiceInputMode"; "required": false; }; "agenticAuthoringContextHints": { "alias": "agenticAuthoringContextHints"; "required": false; }; "authoringDocument": { "alias": "authoringDocument"; "required": false; }; "showPageLifecycleActions": { "alias": "showPageLifecycleActions"; "required": false; }; "canDeleteSavedPage": { "alias": "canDeleteSavedPage"; "required": false; }; "pageLifecycleBusy": { "alias": "pageLifecycleBusy"; "required": false; }; "pageLifecycleResetRevision": { "alias": "pageLifecycleResetRevision"; "required": false; }; }, { "persistenceChange": "persistenceChange"; "pageChange": "pageChange"; "pageAuthoringChange": "pageAuthoringChange"; "widgetEvent": "widgetEvent"; "pageSaveRequested": "pageSaveRequested"; "agenticAuthoringApplied": "agenticAuthoringApplied"; "agenticAuthoringSharedRuleHandoff": "agenticAuthoringSharedRuleHandoff"; "pageRestart": "pageRestart"; "savedPageDeleteRequested": "savedPageDeleteRequested"; "customizationChange": "customizationChange"; }, never, never, true, never>;
|
|
2722
3111
|
}
|
|
2723
3112
|
|
|
2724
3113
|
/** Metadata for Praxis Page Builder component */
|
|
@@ -2726,5 +3115,402 @@ declare const PRAXIS_PAGE_BUILDER_COMPONENT_METADATA: ComponentDocMeta;
|
|
|
2726
3115
|
/** Provider para auto-registrar metadados do componente Page Builder. */
|
|
2727
3116
|
declare function providePraxisPageBuilderMetadata(): Provider;
|
|
2728
3117
|
|
|
2729
|
-
|
|
2730
|
-
|
|
3118
|
+
/**
|
|
3119
|
+
* Type guard that verifies if an item is a canonical ComponentDocMeta.
|
|
3120
|
+
*/
|
|
3121
|
+
declare function isComponentDocMeta(value: unknown): value is ComponentDocMeta;
|
|
3122
|
+
/**
|
|
3123
|
+
* Convenient provider factory for registering widgets in the Page Builder host.
|
|
3124
|
+
*
|
|
3125
|
+
* Accepts a list of either Angular `Provider` entries (such as `providePraxisListMetadata()`)
|
|
3126
|
+
* or direct `ComponentDocMeta` definitions (such as `PRAXIS_LIST_COMPONENT_METADATA`).
|
|
3127
|
+
* Any `ComponentDocMeta` passed will be automatically registered with the
|
|
3128
|
+
* `ComponentMetadataRegistry` during environment initialization.
|
|
3129
|
+
*/
|
|
3130
|
+
declare function providePraxisPageBuilderWidgets(widgets?: Array<Provider | ComponentDocMeta>): Provider[];
|
|
3131
|
+
|
|
3132
|
+
/** Transient UI intent, not the Config POST /pages DTO or a publication document. */
|
|
3133
|
+
interface PageSaveAsRequest {
|
|
3134
|
+
readonly creationKey: string;
|
|
3135
|
+
readonly definition: WidgetPageDefinition;
|
|
3136
|
+
readonly presentation: PageAuthoringDocument['config']['presentation'];
|
|
3137
|
+
readonly menuLabel: string;
|
|
3138
|
+
}
|
|
3139
|
+
/** Returned only after the adapter confirms the page/menu and an openable host route. */
|
|
3140
|
+
interface PageSaveAsResult {
|
|
3141
|
+
readonly pageId: string;
|
|
3142
|
+
readonly routePath: string;
|
|
3143
|
+
}
|
|
3144
|
+
/** No default storage. The adapter owns admission, identity allocation, persistence and routing. */
|
|
3145
|
+
interface PageSaveAsAdapter {
|
|
3146
|
+
save(request: PageSaveAsRequest): Promise<PageSaveAsResult>;
|
|
3147
|
+
}
|
|
3148
|
+
|
|
3149
|
+
/** Reusable save-as journey. Feed save() only from the builder's pageSaveRequested event. */
|
|
3150
|
+
declare class PraxisPageSaveAsComponent {
|
|
3151
|
+
readonly adapter: _angular_core.InputSignal<PageSaveAsAdapter>;
|
|
3152
|
+
/** Monotonic host view/session identity; UI invalidation only, never an authorization grant. */
|
|
3153
|
+
readonly contextKey: _angular_core.InputSignal<string>;
|
|
3154
|
+
readonly canSave: _angular_core.InputSignal<boolean>;
|
|
3155
|
+
readonly initialTitle: _angular_core.InputSignal<string>;
|
|
3156
|
+
readonly initialMenuLabel: _angular_core.InputSignal<string>;
|
|
3157
|
+
readonly initialIcon: _angular_core.InputSignal<string>;
|
|
3158
|
+
readonly titleMaxLength: _angular_core.InputSignal<number>;
|
|
3159
|
+
readonly menuMaxLength: _angular_core.InputSignal<number>;
|
|
3160
|
+
readonly saveRequested: _angular_core.OutputEmitterRef<void>;
|
|
3161
|
+
readonly saved: _angular_core.OutputEmitterRef<PageSaveAsResult>;
|
|
3162
|
+
readonly saveFailed: _angular_core.OutputEmitterRef<unknown>;
|
|
3163
|
+
readonly busy: _angular_core.WritableSignal<boolean>;
|
|
3164
|
+
readonly choosingIcon: _angular_core.WritableSignal<boolean>;
|
|
3165
|
+
readonly result: _angular_core.WritableSignal<PageSaveAsResult | null>;
|
|
3166
|
+
readonly error: _angular_core.WritableSignal<boolean>;
|
|
3167
|
+
readonly iconError: _angular_core.WritableSignal<boolean>;
|
|
3168
|
+
readonly title: FormControl<string>;
|
|
3169
|
+
readonly menu: FormControl<string>;
|
|
3170
|
+
readonly icon: _angular_core.WritableSignal<string>;
|
|
3171
|
+
private readonly i18n;
|
|
3172
|
+
private readonly picker;
|
|
3173
|
+
private generation;
|
|
3174
|
+
private attempt?;
|
|
3175
|
+
private destroyed;
|
|
3176
|
+
constructor();
|
|
3177
|
+
text(key: string): string;
|
|
3178
|
+
destination(): {
|
|
3179
|
+
label: string;
|
|
3180
|
+
icon: string;
|
|
3181
|
+
};
|
|
3182
|
+
clearResult(): void;
|
|
3183
|
+
requestSave(): void;
|
|
3184
|
+
chooseIcon(): Promise<void>;
|
|
3185
|
+
save(definition: WidgetPageDefinition): Promise<void>;
|
|
3186
|
+
private available;
|
|
3187
|
+
private current;
|
|
3188
|
+
private limit;
|
|
3189
|
+
private validIcon;
|
|
3190
|
+
private localRoute;
|
|
3191
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PraxisPageSaveAsComponent, never>;
|
|
3192
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PraxisPageSaveAsComponent, "praxis-page-save-as", never, { "adapter": { "alias": "adapter"; "required": true; "isSignal": true; }; "contextKey": { "alias": "contextKey"; "required": true; "isSignal": true; }; "canSave": { "alias": "canSave"; "required": false; "isSignal": true; }; "initialTitle": { "alias": "initialTitle"; "required": false; "isSignal": true; }; "initialMenuLabel": { "alias": "initialMenuLabel"; "required": false; "isSignal": true; }; "initialIcon": { "alias": "initialIcon"; "required": false; "isSignal": true; }; "titleMaxLength": { "alias": "titleMaxLength"; "required": false; "isSignal": true; }; "menuMaxLength": { "alias": "menuMaxLength"; "required": false; "isSignal": true; }; }, { "saveRequested": "saveRequested"; "saved": "saved"; "saveFailed": "saveFailed"; }, never, never, true, never>;
|
|
3193
|
+
}
|
|
3194
|
+
|
|
3195
|
+
/** Copies the current local authoring snapshot. Allocation/provenance belongs to the destination adapter. */
|
|
3196
|
+
declare class PraxisPageCopyActionComponent {
|
|
3197
|
+
readonly page: _angular_core.InputSignal<WidgetPageDefinition | undefined>;
|
|
3198
|
+
readonly canCopy: _angular_core.InputSignal<boolean>;
|
|
3199
|
+
readonly copyRequested: _angular_core.OutputEmitterRef<WidgetPageDefinition>;
|
|
3200
|
+
readonly error: _angular_core.WritableSignal<boolean>;
|
|
3201
|
+
private readonly i18n;
|
|
3202
|
+
text(key: string): string;
|
|
3203
|
+
copy(): void;
|
|
3204
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<PraxisPageCopyActionComponent, never>;
|
|
3205
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<PraxisPageCopyActionComponent, "praxis-page-copy-action", never, { "page": { "alias": "page"; "required": false; "isSignal": true; }; "canCopy": { "alias": "canCopy"; "required": false; "isSignal": true; }; }, { "copyRequested": "copyRequested"; }, never, never, true, never>;
|
|
3206
|
+
}
|
|
3207
|
+
|
|
3208
|
+
interface GovernedPageCapabilities {
|
|
3209
|
+
readonly canAuthorPages: boolean;
|
|
3210
|
+
readonly canSubmitForReview: boolean;
|
|
3211
|
+
readonly canApproveReleases: boolean;
|
|
3212
|
+
readonly canPublishReleases: boolean;
|
|
3213
|
+
readonly canManageNavigationGroups: boolean;
|
|
3214
|
+
}
|
|
3215
|
+
declare const GOVERNED_PAGE_CAPABILITY_KEYS: Readonly<{
|
|
3216
|
+
authorPages: "praxis.config.pages.author";
|
|
3217
|
+
submitForReview: "praxis.config.pages.submit";
|
|
3218
|
+
approveReleases: "praxis.config.pages.approve";
|
|
3219
|
+
publishReleases: "praxis.config.pages.publish";
|
|
3220
|
+
manageNavigationGroups: "praxis.config.navigation.manage";
|
|
3221
|
+
}>;
|
|
3222
|
+
/**
|
|
3223
|
+
* Derives governed page capabilities from canonical server-issued capability keys.
|
|
3224
|
+
* Never fabricates approval or publication authority when a capability is absent.
|
|
3225
|
+
*/
|
|
3226
|
+
declare function deriveGovernedPageCapabilities(grantedCapabilities: Iterable<string> | null | undefined): GovernedPageCapabilities;
|
|
3227
|
+
type GovernedPageReadResult<T> = UiLayoutLifecycleHttpReceipt<T> | UiLayoutLifecycleNotModifiedReceipt;
|
|
3228
|
+
interface GovernedPagePersistenceAdapter {
|
|
3229
|
+
readonly mode: 'corporate';
|
|
3230
|
+
createPage(command: PageCreationCommand): Promise<UiLayoutLifecycleHttpReceipt<PageCreationReceipt>>;
|
|
3231
|
+
readPageByCreationKey(creationKey: string): Promise<UiLayoutLifecycleHttpReceipt<PageCreationReceipt>>;
|
|
3232
|
+
readPageCatalog(options?: PageCatalogReadOptions): Promise<PageCatalogResponse>;
|
|
3233
|
+
readPublishedPage(pageId: string, ifNoneMatch?: string): Promise<GovernedPageReadResult<PublishedPageReadResponse>>;
|
|
3234
|
+
readDraftByCreationKey(target: UiLayoutTarget, creationKey: string): Promise<UiLayoutLifecycleHttpReceipt<UiLayoutDraftReceipt>>;
|
|
3235
|
+
readDraft(target: UiLayoutTarget, draftId: string, ifNoneMatch?: string): Promise<GovernedPageReadResult<UiLayoutDraftWorkspaceReceipt>>;
|
|
3236
|
+
readReview(target: UiLayoutTarget, releaseId: string, ifNoneMatch?: string): Promise<GovernedPageReadResult<UiLayoutReleaseReviewReceipt>>;
|
|
3237
|
+
readHead(target: UiLayoutTarget, ifNoneMatch?: string): Promise<GovernedPageReadResult<UiLayoutReleaseHeadReceipt>>;
|
|
3238
|
+
createDraft(target: UiLayoutTarget, idempotencyKey: string): Promise<UiLayoutLifecycleHttpReceipt<UiLayoutDraftWorkspaceReceipt>>;
|
|
3239
|
+
createRevision(target: UiLayoutTarget, draftId: string, draftEtag: string, command: UiLayoutRevisionCommand): Promise<UiLayoutLifecycleHttpReceipt<UiLayoutRevisionCommandResult>>;
|
|
3240
|
+
createAssignment(target: UiLayoutTarget, draftId: string, draftEtag: string, command: UiLayoutAssignmentCommand): Promise<UiLayoutLifecycleHttpReceipt<UiLayoutAssignmentCommandResult>>;
|
|
3241
|
+
freezeRelease(target: UiLayoutTarget, draftId: string, draftEtag: string, command: UiLayoutFreezeReleaseCommand): Promise<UiLayoutLifecycleHttpReceipt<UiLayoutFreezeReleaseCommandResult>>;
|
|
3242
|
+
submit(target: UiLayoutTarget, releaseId: string, reviewEtag: string): Promise<UiLayoutLifecycleHttpReceipt<UiLayoutReleaseReviewReceipt>>;
|
|
3243
|
+
approve(target: UiLayoutTarget, releaseId: string, reviewEtag: string, command: UiLayoutReasonCommand): Promise<UiLayoutLifecycleHttpReceipt<UiLayoutReleaseReviewReceipt>>;
|
|
3244
|
+
publish(target: UiLayoutTarget, condition: UiLayoutHeadWriteCondition, command: UiLayoutReleaseReferenceCommand): Promise<UiLayoutLifecycleHttpReceipt<UiLayoutReleaseHeadReceipt>>;
|
|
3245
|
+
}
|
|
3246
|
+
declare function createCorporateGovernedPagePersistenceAdapter(lifecycle: Pick<UiLayoutLifecycleService, 'createPage' | 'readPageByCreationKey' | 'readPageCatalog' | 'readPublishedPage' | 'readDraftByCreationKey' | 'readDraft' | 'readReview' | 'readHead' | 'createDraft' | 'createRevision' | 'createAssignment' | 'freezeRelease' | 'submit' | 'approve' | 'publish'>): GovernedPagePersistenceAdapter;
|
|
3247
|
+
/**
|
|
3248
|
+
* Explicit local/sandbox Save-As adapter contract.
|
|
3249
|
+
* Never simulates corporate review/approval/release states in the browser.
|
|
3250
|
+
*/
|
|
3251
|
+
interface GovernedPageLocalSaveAdapter extends PageSaveAsAdapter {
|
|
3252
|
+
readonly mode: 'local';
|
|
3253
|
+
}
|
|
3254
|
+
declare function createLocalPageSaveAsAdapter(handler: (request: PageSaveAsRequest) => Promise<PageSaveAsResult>): GovernedPageLocalSaveAdapter;
|
|
3255
|
+
type GovernedPageOperationKind = 'create-page' | 'import-legacy-page' | 'save-revision' | 'assign-scope' | 'freeze-release' | 'submit-review' | 'approve-release' | 'publish-release';
|
|
3256
|
+
declare const LEGACY_PUBLISHED_PAGE_STORAGE_PREFIX: "published-page:";
|
|
3257
|
+
interface GovernedPageLegacyExportArtifact {
|
|
3258
|
+
readonly schemaVersion: '1.0.0';
|
|
3259
|
+
readonly kind: 'legacy-published-page-export';
|
|
3260
|
+
readonly storageKey: string;
|
|
3261
|
+
readonly pageId: string;
|
|
3262
|
+
readonly routePath: `/pages/${string}`;
|
|
3263
|
+
readonly compatible: boolean;
|
|
3264
|
+
readonly diagnostics: readonly PageDocumentDiagnostic[];
|
|
3265
|
+
readonly rawPayload: unknown;
|
|
3266
|
+
}
|
|
3267
|
+
interface GovernedPageLegacyInspectionResult {
|
|
3268
|
+
readonly storageKey: string;
|
|
3269
|
+
readonly pageId: string;
|
|
3270
|
+
readonly routePath: `/pages/${string}`;
|
|
3271
|
+
readonly target: UiLayoutTarget;
|
|
3272
|
+
readonly compatible: boolean;
|
|
3273
|
+
readonly source: PageSourceReference | null;
|
|
3274
|
+
readonly childSources: readonly UiLayoutPageChildSource[];
|
|
3275
|
+
readonly authoringDocument: PageAuthoringDocument | null;
|
|
3276
|
+
readonly diagnostics: readonly PageDocumentDiagnostic[];
|
|
3277
|
+
readonly exportableArtifact: GovernedPageLegacyExportArtifact;
|
|
3278
|
+
}
|
|
3279
|
+
interface GovernedPageLegacyImportRequest {
|
|
3280
|
+
readonly pageId: string;
|
|
3281
|
+
readonly rawPayload: unknown;
|
|
3282
|
+
readonly source?: PageSourceReference;
|
|
3283
|
+
readonly childSources?: readonly UiLayoutPageChildSource[];
|
|
3284
|
+
readonly reason?: string;
|
|
3285
|
+
readonly idempotencyKey?: string;
|
|
3286
|
+
}
|
|
3287
|
+
interface GovernedPageUncertainOperation {
|
|
3288
|
+
readonly operation: GovernedPageOperationKind;
|
|
3289
|
+
readonly attemptKey: string;
|
|
3290
|
+
readonly creationKey?: string;
|
|
3291
|
+
readonly commandRef?: string;
|
|
3292
|
+
readonly draftId?: string;
|
|
3293
|
+
readonly releaseId?: string;
|
|
3294
|
+
readonly source?: PageSourceReference | null;
|
|
3295
|
+
readonly childSources?: readonly UiLayoutPageChildSource[];
|
|
3296
|
+
readonly occurredAt: string;
|
|
3297
|
+
}
|
|
3298
|
+
interface GovernedPageWorkflowError {
|
|
3299
|
+
readonly code: 'CAPABILITY_DENIED' | 'CONTEXT_OBSOLETE' | 'COMMAND_OUTCOME_UNCERTAIN' | 'OPERATION_FENCED' | 'PRECONDITION_FAILED' | 'CONFLICT' | 'VALIDATION_FAILED' | 'PREVIEW_UNCERTIFIED' | 'ETAG_NOT_PROGRESSED' | 'DRAFT_NOT_LOADED' | 'RELEASE_NOT_FROZEN' | 'TRANSPORT_ERROR';
|
|
3300
|
+
readonly message: string;
|
|
3301
|
+
readonly diagnostics?: readonly PageDocumentDiagnostic[];
|
|
3302
|
+
readonly status?: number;
|
|
3303
|
+
}
|
|
3304
|
+
interface GovernedPageWorkflowSnapshot {
|
|
3305
|
+
readonly contextGeneration: number;
|
|
3306
|
+
readonly contextKey: string;
|
|
3307
|
+
readonly pageId: string | null;
|
|
3308
|
+
readonly rootTarget: UiLayoutTarget | null;
|
|
3309
|
+
readonly source: PageSourceReference | null;
|
|
3310
|
+
readonly draftWorkspace: UiLayoutDraftWorkspaceReceipt | null;
|
|
3311
|
+
readonly draftEtag: string | null;
|
|
3312
|
+
readonly workingDocument: PageAuthoringDocument | null;
|
|
3313
|
+
readonly baselineDocument: PageAuthoringDocument | null;
|
|
3314
|
+
readonly publishedSnapshot: PublishedPageReadResponse | null;
|
|
3315
|
+
readonly publishedEtag: string | null;
|
|
3316
|
+
readonly childSources: readonly UiLayoutPageChildSource[];
|
|
3317
|
+
readonly reviewReceipt: UiLayoutReleaseReviewReceipt | null;
|
|
3318
|
+
readonly reviewEtag: string | null;
|
|
3319
|
+
readonly headReceipt: UiLayoutReleaseHeadReceipt | null;
|
|
3320
|
+
readonly headEtag: string | null;
|
|
3321
|
+
readonly preview: GovernedPagePreviewMaterialization | null;
|
|
3322
|
+
readonly dirty: boolean;
|
|
3323
|
+
readonly busy: boolean;
|
|
3324
|
+
readonly capabilities: GovernedPageCapabilities;
|
|
3325
|
+
readonly fencedOperations: Readonly<Record<string, GovernedPageUncertainOperation>>;
|
|
3326
|
+
readonly lastError: GovernedPageWorkflowError | null;
|
|
3327
|
+
}
|
|
3328
|
+
interface GovernedPageWorkflowControllerConfig {
|
|
3329
|
+
readonly persistence: GovernedPagePersistenceAdapter;
|
|
3330
|
+
readonly childValidators?: PageChildDocumentValidators;
|
|
3331
|
+
readonly previewAdapters?: GovernedPagePreviewWidgetAdapters;
|
|
3332
|
+
readonly initialCapabilities?: GovernedPageCapabilities;
|
|
3333
|
+
readonly initialContextKey?: string;
|
|
3334
|
+
readonly idGenerator?: () => string;
|
|
3335
|
+
}
|
|
3336
|
+
interface GovernedPageCreateNativeRequest {
|
|
3337
|
+
readonly creationKey?: string;
|
|
3338
|
+
readonly title: string;
|
|
3339
|
+
readonly sourceId: string;
|
|
3340
|
+
readonly revision: string;
|
|
3341
|
+
}
|
|
3342
|
+
interface GovernedPageCopyPublishedRequest {
|
|
3343
|
+
readonly creationKey?: string;
|
|
3344
|
+
readonly title: string;
|
|
3345
|
+
readonly sourcePageId: string;
|
|
3346
|
+
}
|
|
3347
|
+
interface GovernedPageAssignmentInput {
|
|
3348
|
+
readonly layerClass: UiLayoutLayerClass;
|
|
3349
|
+
readonly selector: UiLayoutAssignmentSelector;
|
|
3350
|
+
readonly priority?: number;
|
|
3351
|
+
readonly contributionKey?: string;
|
|
3352
|
+
}
|
|
3353
|
+
interface GovernedPageSubmitOptions {
|
|
3354
|
+
readonly reason?: string;
|
|
3355
|
+
readonly assignment?: GovernedPageAssignmentInput;
|
|
3356
|
+
}
|
|
3357
|
+
interface GovernedPageNavigationSnapshot {
|
|
3358
|
+
readonly epoch: number;
|
|
3359
|
+
readonly contextKey: string;
|
|
3360
|
+
readonly catalogEntries: readonly PageCatalogEntry[];
|
|
3361
|
+
readonly groupsDocument: NavigationGroupsAuthoringDocument;
|
|
3362
|
+
readonly menuNodes: readonly RuntimeNavigationMenuNode[];
|
|
3363
|
+
readonly expandedGroupIds: readonly string[];
|
|
3364
|
+
readonly loading: boolean;
|
|
3365
|
+
readonly diagnostics: readonly PageDocumentDiagnostic[];
|
|
3366
|
+
readonly fencedAttempts: Readonly<Record<string, string>>;
|
|
3367
|
+
readonly lastError: string | null;
|
|
3368
|
+
}
|
|
3369
|
+
|
|
3370
|
+
declare const DEFAULT_CORPORATE_NAVIGATION_GROUPS_TARGET: UiLayoutTarget;
|
|
3371
|
+
interface GovernedPageNavigationControllerConfig {
|
|
3372
|
+
readonly persistence: GovernedPagePersistenceAdapter;
|
|
3373
|
+
readonly effectiveLayoutService?: Pick<EffectiveUiLayoutService, 'resolve'> | null;
|
|
3374
|
+
readonly observeTargetDocument?: (target: UiLayoutTarget) => Observable<Record<string, unknown> | null>;
|
|
3375
|
+
readonly navigationGroupsTarget?: UiLayoutTarget;
|
|
3376
|
+
readonly registeredNamespace?: string;
|
|
3377
|
+
readonly allowedIcons?: Iterable<string>;
|
|
3378
|
+
readonly pageSize?: number;
|
|
3379
|
+
readonly maxItemsPerLevel?: number;
|
|
3380
|
+
readonly initialContextKey?: string;
|
|
3381
|
+
readonly idGenerator?: () => string;
|
|
3382
|
+
}
|
|
3383
|
+
interface GovernedNavigationGroupPublishInput {
|
|
3384
|
+
readonly entry: NavigationGroupAuthoringEntry;
|
|
3385
|
+
readonly draftCreationKey?: string;
|
|
3386
|
+
readonly revisionCommandRef?: string;
|
|
3387
|
+
readonly assignmentCommandRef?: string;
|
|
3388
|
+
readonly freezeCommandRef?: string;
|
|
3389
|
+
readonly reason?: string;
|
|
3390
|
+
readonly layerClass?: UiLayoutLayerClass;
|
|
3391
|
+
readonly selector: UiLayoutAssignmentSelector;
|
|
3392
|
+
readonly priority?: number;
|
|
3393
|
+
readonly contributionKey?: string;
|
|
3394
|
+
}
|
|
3395
|
+
declare class GovernedPageNavigationController {
|
|
3396
|
+
private readonly persistence;
|
|
3397
|
+
private readonly observeTargetDoc?;
|
|
3398
|
+
private readonly navigationGroupsTarget;
|
|
3399
|
+
private readonly registeredNamespace;
|
|
3400
|
+
private readonly allowedIcons;
|
|
3401
|
+
private readonly pageSize;
|
|
3402
|
+
private readonly maxItemsPerLevel;
|
|
3403
|
+
private readonly idGenerator;
|
|
3404
|
+
private epoch;
|
|
3405
|
+
private contextKey;
|
|
3406
|
+
private groupsSub;
|
|
3407
|
+
private readonly pageSubs;
|
|
3408
|
+
private readonly pageDocuments;
|
|
3409
|
+
private readonly expandedGroups;
|
|
3410
|
+
private readonly fencedAttempts;
|
|
3411
|
+
private latestGroupsDoc;
|
|
3412
|
+
private latestCatalogEntries;
|
|
3413
|
+
private readonly stateSubject;
|
|
3414
|
+
readonly snapshot$: Observable<GovernedPageNavigationSnapshot>;
|
|
3415
|
+
constructor(config: GovernedPageNavigationControllerConfig);
|
|
3416
|
+
get snapshot(): GovernedPageNavigationSnapshot;
|
|
3417
|
+
setContextKey(nextContextKey: string): void;
|
|
3418
|
+
invalidate(): void;
|
|
3419
|
+
destroy(): void;
|
|
3420
|
+
refresh(): Promise<GovernedPageNavigationSnapshot>;
|
|
3421
|
+
toggleGroupExpanded(groupId: string): void;
|
|
3422
|
+
clearFencedAttempt(attemptKey: string): void;
|
|
3423
|
+
upsertAndPublishNavigationGroup(input: GovernedNavigationGroupPublishInput): Promise<NavigationGroupsAuthoringDocument>;
|
|
3424
|
+
private readAllCatalogEntries;
|
|
3425
|
+
private hydrateCatalogPages;
|
|
3426
|
+
private bindGroupsObservation;
|
|
3427
|
+
private bindPageObservation;
|
|
3428
|
+
private reobserveGroupChildren;
|
|
3429
|
+
private recomputeProjection;
|
|
3430
|
+
private isStale;
|
|
3431
|
+
private teardownSubscriptions;
|
|
3432
|
+
private publishSnapshot;
|
|
3433
|
+
}
|
|
3434
|
+
|
|
3435
|
+
declare const DEFAULT_GOVERNED_PAGE_CHILD_VALIDATORS: PageChildDocumentValidators;
|
|
3436
|
+
declare const DEFAULT_GOVERNED_PAGE_PREVIEW_ADAPTERS: GovernedPagePreviewWidgetAdapters;
|
|
3437
|
+
/**
|
|
3438
|
+
* Inspects a legacy `published-page:<uuid>` payload against the closed P0 governed page profile.
|
|
3439
|
+
* Validates page source, authoring document structure, and child widget sources while preserving
|
|
3440
|
+
* an exportable artifact for incompatible legacy records.
|
|
3441
|
+
*/
|
|
3442
|
+
declare function inspectLegacyPublishedPagePayload(request: GovernedPageLegacyImportRequest, childValidators?: PageChildDocumentValidators): GovernedPageLegacyInspectionResult;
|
|
3443
|
+
declare class GovernedPageWorkflowController {
|
|
3444
|
+
private readonly persistence;
|
|
3445
|
+
private readonly childValidators;
|
|
3446
|
+
private readonly previewAdapters;
|
|
3447
|
+
private readonly idGenerator;
|
|
3448
|
+
private contextGeneration;
|
|
3449
|
+
private contextKey;
|
|
3450
|
+
private readonly fencedOperations;
|
|
3451
|
+
private readonly childSourcesByWidgetId;
|
|
3452
|
+
private readonly stateSubject;
|
|
3453
|
+
readonly snapshot$: Observable<GovernedPageWorkflowSnapshot>;
|
|
3454
|
+
constructor(config: GovernedPageWorkflowControllerConfig);
|
|
3455
|
+
get snapshot(): GovernedPageWorkflowSnapshot;
|
|
3456
|
+
setCapabilities(capabilities: GovernedPageCapabilities): void;
|
|
3457
|
+
/**
|
|
3458
|
+
* Advances monotonic context generation on context switch (including A -> B -> A),
|
|
3459
|
+
* invalidating any in-flight callbacks from previous generations.
|
|
3460
|
+
*/
|
|
3461
|
+
setContextKey(nextContextKey: string): void;
|
|
3462
|
+
destroy(): void;
|
|
3463
|
+
createNativePage(request: GovernedPageCreateNativeRequest): Promise<PageCreationReceipt>;
|
|
3464
|
+
copyPublishedPage(request: GovernedPageCopyPublishedRequest): Promise<PageCreationReceipt>;
|
|
3465
|
+
/**
|
|
3466
|
+
* Explicitly imports a compatible legacy `published-page:<uuid>` record into a governed draft
|
|
3467
|
+
* preserving the `/pages/<uuid>` address (`{ componentType: 'praxis-dynamic-page', componentId: pageId }`).
|
|
3468
|
+
* Never fabricates approval or publication state and never deletes legacy storage keys.
|
|
3469
|
+
*/
|
|
3470
|
+
importLegacyPublishedPage(request: GovernedPageLegacyImportRequest): Promise<GovernedPageWorkflowSnapshot>;
|
|
3471
|
+
openDraftWorkspace(pageId: string, draftId: string, options?: {
|
|
3472
|
+
source?: PageSourceReference | null;
|
|
3473
|
+
}): Promise<GovernedPageWorkflowSnapshot>;
|
|
3474
|
+
updateWorkingDocument(nextDocument: PageAuthoringDocument): PageAuthoringDocument;
|
|
3475
|
+
updatePresentation(presentation: PageAuthoringDocument['config']['presentation']): PageAuthoringDocument;
|
|
3476
|
+
upsertNavigationBinding(binding: PageNavigationBinding, options?: PageNavigationBindingUpdateOptions): PageAuthoringDocument;
|
|
3477
|
+
/**
|
|
3478
|
+
* Updates a child widget's inputs inside the page's authoring document and
|
|
3479
|
+
* records its governed child source so child widgets remain under page authorship.
|
|
3480
|
+
*/
|
|
3481
|
+
updateChildWidgetInputs(widgetKey: string, inputs: Record<string, unknown>, childSource?: UiLayoutPageChildSource): PageAuthoringDocument;
|
|
3482
|
+
buildInteractivePreview(baseContext?: Record<string, unknown>): GovernedPagePreviewMaterialization;
|
|
3483
|
+
saveDraftRevision(reason?: string): Promise<GovernedPageWorkflowSnapshot>;
|
|
3484
|
+
assignScope(input: GovernedPageAssignmentInput): Promise<GovernedPageWorkflowSnapshot>;
|
|
3485
|
+
saveAndSubmitForReview(options?: GovernedPageSubmitOptions): Promise<GovernedPageWorkflowSnapshot>;
|
|
3486
|
+
approveRelease(reason?: string): Promise<GovernedPageWorkflowSnapshot>;
|
|
3487
|
+
publishRelease(reason?: string): Promise<GovernedPageWorkflowSnapshot>;
|
|
3488
|
+
approveAndPublish(reason?: string): Promise<GovernedPageWorkflowSnapshot>;
|
|
3489
|
+
/**
|
|
3490
|
+
* Reconciles a fenced operation after an ambiguous network failure (`COMMAND_OUTCOME_UNCERTAIN`)
|
|
3491
|
+
* using the canonical read endpoints before unlocking retries.
|
|
3492
|
+
*/
|
|
3493
|
+
reconcileUncertainOperation(attemptKey: string): Promise<GovernedPageWorkflowSnapshot>;
|
|
3494
|
+
/**
|
|
3495
|
+
* Reloads server state after a 409 Conflict or 412 Precondition Failed response.
|
|
3496
|
+
*/
|
|
3497
|
+
reloadAfterConflict(): Promise<GovernedPageWorkflowSnapshot>;
|
|
3498
|
+
private executePageCreation;
|
|
3499
|
+
private applyDraftWorkspaceReceipt;
|
|
3500
|
+
private refreshPublishedAndLifecycleMetadata;
|
|
3501
|
+
private requireCapability;
|
|
3502
|
+
private requireWorkingDocument;
|
|
3503
|
+
private requireLoadedDraft;
|
|
3504
|
+
private assertNotFenced;
|
|
3505
|
+
private isStale;
|
|
3506
|
+
private assertActiveContext;
|
|
3507
|
+
private handleOperationError;
|
|
3508
|
+
private fail;
|
|
3509
|
+
private isLifecycleContractErrorLike;
|
|
3510
|
+
private isWorkflowError;
|
|
3511
|
+
private setBusy;
|
|
3512
|
+
private publishSnapshot;
|
|
3513
|
+
}
|
|
3514
|
+
|
|
3515
|
+
export { ComponentPaletteDialogComponent, ConfirmDialogComponent, ConnectionEditorComponent, DEFAULT_CORPORATE_NAVIGATION_GROUPS_TARGET, DEFAULT_GOVERNED_PAGE_CHILD_VALIDATORS, DEFAULT_GOVERNED_PAGE_PREVIEW_ADAPTERS, DynamicPageBuilderComponent, DynamicPageConfigEditorComponent, FloatingToolbarComponent, GOVERNED_PAGE_CAPABILITY_KEYS, GovernedPageNavigationController, GovernedPageWorkflowController, LEGACY_PUBLISHED_PAGE_STORAGE_PREFIX, PAGE_BUILDER_AGENTIC_AUTHORING_OPTIONS, PAGE_BUILDER_AI_CAPABILITIES, PAGE_BUILDER_COMPONENT_CONTEXT_PACK, PAGE_BUILDER_WIDGET_AI_CATALOGS, PLACEHOLDER, PRAXIS_PAGE_BUILDER_AUTHORING_MANIFEST, PRAXIS_PAGE_BUILDER_COMPONENT_METADATA, PageBuilderAgenticAuthoringService, PageConfigEditorComponent, PraxisPageCopyActionComponent, PraxisPageSaveAsComponent, TileToolbarComponent, UiCompositionResourcePreflightService, WidgetShellEditorComponent, clearWidgetAiCatalogs, compileUiCompositionPlan, createCorporateGovernedPagePersistenceAdapter, createLocalPageSaveAsAdapter, deriveGovernedPageCapabilities, getPageAiCatalog, getWidgetAiCapabilities, inspectLegacyPublishedPagePayload, isComponentDocMeta, preflightUiCompositionPlan, preflightUiCompositionPlanResources, providePageBuilderWidgetAiCatalogs, providePraxisPageBuilderMetadata, providePraxisPageBuilderWidgets, registerWidgetAiCatalog, registerWidgetAiCatalogs, resolveUiCompositionPlanTemplate, validateUiCompositionPlan, verifyUiCompositionAuthoringSource };
|
|
3516
|
+
export type { Capability, CapabilityCatalog, CapabilityCategory, CollectionScreenComposerConfig, ComponentPaletteData, ComponentPaletteSelection, ConfirmDialogData, GovernedNavigationGroupPublishInput, GovernedPageAssignmentInput, GovernedPageCapabilities, GovernedPageCopyPublishedRequest, GovernedPageCreateNativeRequest, GovernedPageLegacyExportArtifact, GovernedPageLegacyImportRequest, GovernedPageLegacyInspectionResult, GovernedPageLocalSaveAdapter, GovernedPageNavigationControllerConfig, GovernedPageNavigationSnapshot, GovernedPageOperationKind, GovernedPagePersistenceAdapter, GovernedPageReadResult, GovernedPageSubmitOptions, GovernedPageUncertainOperation, GovernedPageWorkflowControllerConfig, GovernedPageWorkflowError, GovernedPageWorkflowSnapshot, GuidedDataSourceQueryConfig, GuidedDataSourceTransformConfig, GuidedDerivedMeasureConfig, PageBuilderAgenticAuthoringAttachmentSummary, PageBuilderAgenticAuthoringCandidate, PageBuilderAgenticAuthoringComponentCapabilitiesResult, PageBuilderAgenticAuthoringComponentCapability, PageBuilderAgenticAuthoringComponentCapabilityCatalog, PageBuilderAgenticAuthoringComponentCapabilityExample, PageBuilderAgenticAuthoringComponentFieldAlias, PageBuilderAgenticAuthoringConversationMessage, PageBuilderAgenticAuthoringGateResult, PageBuilderAgenticAuthoringIntentResolutionRequest, PageBuilderAgenticAuthoringIntentResolutionResult, PageBuilderAgenticAuthoringOptions, PageBuilderAgenticAuthoringPendingClarification, PageBuilderAgenticAuthoringPromptRequest, PageBuilderAgenticAuthoringProvider, PageBuilderAgenticAuthoringQuickReply, PageBuilderAgenticAuthoringResourceCandidatesRequest, PageBuilderAgenticAuthoringResourceCandidatesResult, PageBuilderAgenticAuthoringSharedRuleHandoff, PageBuilderAgenticAuthoringTarget, PageBuilderAgenticAuthoringTurnStreamConnectionError, PageBuilderAgenticAuthoringTurnStreamEvent, PageBuilderAgenticAuthoringTurnStreamRequest, PageBuilderAgenticAuthoringTurnStreamStartResponse, PageBuilderApplyRequest, PageBuilderApplyResult, PageBuilderAuthoringCapabilities, PageBuilderCompiledFormPatch, PageBuilderMinimalFormPlanResult, PageBuilderPreviewDiagnostics, PageBuilderPreviewResult, PageBuilderProjectKnowledgeAudit, PageSaveAsAdapter, PageSaveAsRequest, PageSaveAsResult, PaletteCategory, PaletteExistingCanvasItem, QueuedPaletteItem, UiCompositionAuthoringSourceDiagnostic, UiCompositionAuthoringSourceDiagnosticCode, UiCompositionAuthoringSourceVerification, UiCompositionAuthoringSourceVerificationContext, UiCompositionPlan, UiCompositionPlanAuthoringInput, UiCompositionPlanAuthoringSource, UiCompositionPlanBinding, UiCompositionPlanCompileResult, UiCompositionPlanComponentPortEndpoint, UiCompositionPlanContextScope, UiCompositionPlanContextScopeTarget, UiCompositionPlanContextValue, UiCompositionPlanDiagnostic, UiCompositionPlanEndpoint, UiCompositionPlanGlobalActionEndpoint, UiCompositionPlanGlobalActionSourceEndpoint, UiCompositionPlanInputSource, UiCompositionPlanPreflightResult, UiCompositionPlanSelectCase, UiCompositionPlanSelectionSync, UiCompositionPlanSelectionSyncMapping, UiCompositionPlanSourceEndpoint, UiCompositionPlanStateEndpoint, UiCompositionPlanTargetEndpoint, UiCompositionPlanTemplateMaterialization, UiCompositionPlanTemplateRef, UiCompositionPlanTemplateReference, UiCompositionPlanTemplateResolutionResult, UiCompositionPlanTemplateRevision, UiCompositionPlanTransform, UiCompositionPlanTransformOutput, UiCompositionPlanWidget, UiCompositionResourceSchemaRequest, UiCompositionResourceSchemaResolution, UiCompositionResourceSchemaResolver, ValueKind };
|