@praxisui/page-builder 9.0.66 → 9.0.68-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@praxisui/page-builder",
3
- "version": "9.0.66",
3
+ "version": "9.0.68-rc.0",
4
4
  "description": "Page and widget builder utilities for Praxis UI (grid, dynamic widgets, editors).",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^21.0.0",
@@ -8,9 +8,9 @@
8
8
  "@angular/forms": "^21.0.0",
9
9
  "@angular/cdk": "^21.0.0",
10
10
  "@angular/material": "^21.0.0",
11
- "@praxisui/ai": "^9.0.66",
12
- "@praxisui/core": "^9.0.66",
13
- "@praxisui/settings-panel": "^9.0.66",
11
+ "@praxisui/ai": "^9.0.68-rc.0",
12
+ "@praxisui/core": "^9.0.68-rc.0",
13
+ "@praxisui/settings-panel": "^9.0.68-rc.0",
14
14
  "rxjs": "~7.8.0"
15
15
  },
16
16
  "dependencies": {
@@ -2,10 +2,10 @@ 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, ComponentMetadataRegistry, PraxisI18nService, WidgetShellConfig, WidgetPageAuthoringCapabilities, WidgetShellAction, EndpointRef, ComponentPortPathSegment, LinkIntent, CompositionLink, WidgetPageDefinition, TransformKind, SurfaceOpenPayload, WidgetPageDeviceKind, SettingsValueProvider as SettingsValueProvider$1, WidgetPageGroupingDefinition, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, PageIdentity, WidgetStateNode, WidgetDerivedStateNode, AiCapability, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, WidgetPageCanvasLayout, 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, WidgetPageGroupingDefinition, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, PageIdentity, WidgetStateNode, WidgetDerivedStateNode, AiCapability, AiCapabilityCategory, AiCapabilityCatalog, AiValueKind, WidgetPageCanvasLayout, 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';
6
6
  import * as rxjs from 'rxjs';
7
7
  import { BehaviorSubject, Observable } from 'rxjs';
8
- import { FormGroup, FormControl, FormArray } from '@angular/forms';
8
+ import { FormGroup, FormControl, FormArray, AbstractControl } from '@angular/forms';
9
9
  import { SettingsValueProvider } from '@praxisui/settings-panel';
10
10
  import { AgenticAuthoringAttachmentSummaryContract, AgenticAuthoringCandidateContract, AiJsonValue, AgenticAuthoringComponentCapabilitiesResultContract, AgenticAuthoringComponentCapabilityCatalogContract, AgenticAuthoringComponentCapabilityContract, AgenticAuthoringComponentFieldAliasContract, AgenticAuthoringComponentCapabilityExampleContract, AgenticAuthoringConversationMessageContract, AgenticAuthoringIntentResolutionRequestContract, AiJsonObject, AgenticAuthoringQuickReplyContract, AgenticAuthoringPendingClarificationContract, AiContextHintsContract, AgenticAuthoringSemanticDecisionContract, AgenticAuthoringPlanRequestContract, AgenticAuthoringResourceCandidatesRequestContract, AgenticAuthoringResourceCandidatesResultContract, AgenticAuthoringTurnStreamContextHintsContract, AgenticAuthoringTurnStreamEnvelopeContract, AgenticAuthoringTurnStreamStartResponseContract, PraxisAssistantVoiceInputMode, PraxisAssistantShellMessage, PraxisAssistantShellQuickReply, PraxisAssistantShellAttachment, PraxisAssistantShellLayout, PraxisAssistantSessionSnapshot, PraxisAssistantShellLabels, PraxisAssistantRecommendedIntent, PraxisAssistantShellAction, PraxisAssistantShellState, PraxisAssistantShellContextItem } from '@praxisui/ai';
11
11
  import * as _praxisui_page_builder from '@praxisui/page-builder';
@@ -70,6 +70,7 @@ interface ComponentPaletteSelection {
70
70
  componentId: string;
71
71
  presetId?: string;
72
72
  inputs?: Record<string, unknown>;
73
+ shell?: WidgetShellConfig;
73
74
  }
74
75
  interface ComponentPaletteData {
75
76
  title?: string;
@@ -88,6 +89,7 @@ interface ComponentPaletteEntry {
88
89
  badges: ComponentPaletteBadge[];
89
90
  searchText: string;
90
91
  inputs?: Record<string, unknown>;
92
+ shell?: WidgetShellConfig;
91
93
  }
92
94
  interface ComponentPaletteBadge {
93
95
  label: string;
@@ -127,6 +129,9 @@ declare class ComponentPaletteDialogComponent implements OnInit {
127
129
  }
128
130
 
129
131
  type ShellInputs = {
132
+ /** Canonical page links supplied only for inspection; never persisted by this editor. */
133
+ compositionLinks?: readonly CompositionLink[];
134
+ getActionAvailability?: (action: WidgetShellAction) => Pick<WidgetShellAction, 'disabled' | 'tooltip'> | undefined;
130
135
  shell?: WidgetShellConfig | null;
131
136
  widgetKey?: string;
132
137
  widgetType?: string;
@@ -161,18 +166,47 @@ type SetInputPreset = {
161
166
  icon?: string;
162
167
  values: SetInputValueOption[];
163
168
  };
169
+ type ShellPresetOption = {
170
+ id: string;
171
+ label: PraxisTextValue;
172
+ description: PraxisTextValue;
173
+ category: WidgetShellPresetCategory | 'custom';
174
+ appearance?: WidgetShellConfig['appearance'];
175
+ };
164
176
  declare class WidgetShellEditorComponent implements SettingsValueProvider {
165
177
  private registry?;
178
+ readonly sectionsHosted: boolean;
179
+ readonly topicPanelId: string;
180
+ readonly selectedTopic: _angular_core.WritableSignal<string>;
181
+ editorTopics(): Array<{
182
+ id: string;
183
+ label: string;
184
+ }>;
185
+ currentTopic(): string;
186
+ getSettingsSections(): readonly SettingsEditorSection[];
187
+ selectSettingsSection(id: string): void;
188
+ endpointLabel(endpoint: EndpointRef): string;
189
+ currentTopicLabel(): string;
166
190
  private readonly i18n;
191
+ menuPlacementLabel(): string;
192
+ shellText(key: string): string;
193
+ pagePresetLabel(): string;
194
+ hasAppearanceErrors(): boolean;
167
195
  appearanceError(): string;
196
+ stickyHeaderLabel(): string;
168
197
  form: FormGroup<{
169
198
  kind: FormControl<"none" | "dashboard-card">;
170
199
  preset: FormControl<string>;
171
200
  applyToAll: FormControl<boolean>;
172
201
  title: FormControl<string>;
173
202
  subtitle: FormControl<string>;
203
+ avatarEnabled: FormControl<boolean>;
204
+ avatarImage: FormControl<string>;
205
+ avatarName: FormControl<string>;
206
+ avatarInitials: FormControl<string>;
174
207
  icon: FormControl<string>;
175
208
  showHeader: FormControl<"auto" | "true" | "false">;
209
+ stickyHeader: FormControl<boolean>;
176
210
  collapsible: FormControl<boolean>;
177
211
  cardBg: FormControl<string>;
178
212
  cardBorder: FormControl<string>;
@@ -202,35 +236,42 @@ declare class WidgetShellEditorComponent implements SettingsValueProvider {
202
236
  private initialTitle;
203
237
  private initialSubtitle;
204
238
  private readonly actionCopySources;
205
- presetOptions: Array<{
206
- id: string;
207
- label: string;
208
- }>;
239
+ presetOptions: ShellPresetOption[];
209
240
  private presets;
210
241
  availableActions: AvailableShellAction[];
242
+ readonly compositionLinks: readonly CompositionLink[];
243
+ private readonly getActionAvailability?;
211
244
  actionQuery: FormControl<string>;
212
245
  showScopeShell: boolean;
213
246
  showScopeAny: boolean;
214
247
  showScopeToolbar: boolean;
248
+ showNotificationActions: boolean;
215
249
  showScopeContext: boolean;
216
250
  setInputPresets: SetInputPreset[];
217
251
  setInputTarget: FormControl<string>;
218
252
  setInputValue: FormControl<any>;
219
- previewCollapsed: boolean;
220
- previewExpanded: boolean;
221
253
  pagePreset: string | null;
222
254
  private readonly authoringCapabilities;
223
255
  constructor(data?: ShellInputs | null, registry?: (ComponentMetadataRegistry | null) | undefined);
224
256
  get actions(): FormArray<FormGroup>;
257
+ selectPreset(id: string): void;
258
+ presetLabel(preset: ShellPresetOption): string;
259
+ presetDescription(preset: ShellPresetOption): string;
260
+ presetTitle(): string;
261
+ noPresetLabel(): string;
262
+ noPresetDescription(): string;
225
263
  get hasAvailableActions(): boolean;
226
264
  canEditShellIdentity(): boolean;
227
265
  canEditShellAppearance(): boolean;
228
266
  canEditShellActions(): boolean;
229
267
  canPromotePagePreset(): boolean;
268
+ actionIdIssue(group: AbstractControl): 'required' | 'duplicate' | 'reserved' | null;
269
+ private validateActionIds;
230
270
  addAction(seed?: Partial<WidgetShellAction>): void;
231
271
  removeAction(index: number): void;
232
272
  getSettingsValue(): ShellEditorResult;
233
273
  onSave(): ShellEditorResult;
274
+ acceptAppliedValue(value: unknown): void;
234
275
  reset(): void;
235
276
  private applyShell;
236
277
  private loadAvailableActions;
@@ -240,23 +281,22 @@ declare class WidgetShellEditorComponent implements SettingsValueProvider {
240
281
  private buildAppearance;
241
282
  private cloneAppearance;
242
283
  private isShellCapabilityEnabled;
243
- previewVars(): Record<string, string | null>;
244
- previewShowHeader(): boolean;
245
- previewTitle(): string;
246
- previewSubtitle(): string;
247
- private buildPreviewAppearance;
284
+ private readonly appearanceControls;
285
+ appearanceOverrideCount(): number;
286
+ clearAppearanceOverrides(): void;
287
+ private previewCacheKey;
288
+ private previewCache?;
289
+ previewShell(): WidgetShellConfig;
248
290
  private mergeAppearance;
249
- togglePreviewCollapse(): void;
250
- togglePreviewExpand(): void;
251
- previewHeaderActions(): WidgetShellAction[];
252
- previewOverflowCount(): number;
253
- previewWindowActions(): WidgetShellAction[];
254
291
  private normalizeAction;
255
292
  private editableText;
256
293
  private preserveTextDescriptor;
257
294
  private tryParsePayload;
258
295
  private snapshotValue;
296
+ enabledActionScopeCount(): number;
259
297
  filteredAvailableActions(): AvailableShellAction[];
298
+ actionUnavailable(action: AvailableShellAction): boolean;
299
+ actionAvailabilityText(action: AvailableShellAction): string;
260
300
  isActionSelected(action: AvailableShellAction): boolean;
261
301
  toggleAvailableAction(action: AvailableShellAction): void;
262
302
  scopeLabel(scope?: string): string;
@@ -267,7 +307,6 @@ declare class WidgetShellEditorComponent implements SettingsValueProvider {
267
307
  currentSetInputValues(): SetInputValueOption[];
268
308
  addSetInputAction(): void;
269
309
  private findActionIndex;
270
- private previewActions;
271
310
  private loadSetInputPresets;
272
311
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<WidgetShellEditorComponent, [{ optional: true; }, { optional: true; }]>;
273
312
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<WidgetShellEditorComponent, "praxis-widget-shell-editor", never, {}, {}, never, never, true, never>;
@@ -280,6 +319,8 @@ interface ConnectionEditorPort {
280
319
  label: string;
281
320
  kind: ConnectionEditorPortKind;
282
321
  endpoint: EndpointRef;
322
+ /** Transient registry evidence; never serialized into a composition endpoint. */
323
+ contract?: PortContract;
283
324
  nestedPath?: ComponentPortPathSegment[];
284
325
  }
285
326
  interface ConnectionEditorNode {
@@ -347,6 +388,41 @@ interface ConnectionEditorTraceStep {
347
388
  blocked: boolean;
348
389
  }
349
390
 
391
+ interface ConnectionEditorPoint {
392
+ x: number;
393
+ y: number;
394
+ }
395
+ interface ConnectionEditorSegmentGeometry {
396
+ port: ConnectionEditorPort;
397
+ path: string;
398
+ anchor: ConnectionEditorPoint;
399
+ label: ConnectionEditorPoint;
400
+ icon: ConnectionEditorPoint;
401
+ normalAngle: number;
402
+ color: string;
403
+ }
404
+
405
+ type CaptionSide = 'top' | 'right' | 'bottom' | 'left';
406
+ interface ConnectionEditorCaption {
407
+ side: CaptionSide;
408
+ x: number;
409
+ y: number;
410
+ width: number;
411
+ height: number;
412
+ }
413
+
414
+ interface ConnectionEditorWireRoute {
415
+ path: string;
416
+ source: ConnectionEditorPoint;
417
+ sourceStub: ConnectionEditorPoint;
418
+ sourceControl: ConnectionEditorPoint;
419
+ targetControl: ConnectionEditorPoint;
420
+ targetStub: ConnectionEditorPoint;
421
+ target: ConnectionEditorPoint;
422
+ midpoint: ConnectionEditorPoint;
423
+ offset: number;
424
+ }
425
+
350
426
  interface ConnectionsViewerNode {
351
427
  widgetId: string;
352
428
  componentType: string;
@@ -384,20 +460,6 @@ interface ConnectionsViewerModel {
384
460
  diagnosticLinks: number;
385
461
  }
386
462
 
387
- interface ConnectionEditorPoint {
388
- x: number;
389
- y: number;
390
- }
391
- interface ConnectionEditorSegmentGeometry {
392
- port: ConnectionEditorPort;
393
- path: string;
394
- anchor: ConnectionEditorPoint;
395
- label: ConnectionEditorPoint;
396
- icon: ConnectionEditorPoint;
397
- normalAngle: number;
398
- color: string;
399
- }
400
-
401
463
  type ConnectionEditorPortOrderState = Record<string, string[]>;
402
464
 
403
465
  type ConnectionsEditorFilter = 'all' | 'condition' | 'transform' | 'policy' | 'diagnostic';
@@ -472,9 +534,12 @@ interface ConnectionEditorDockTabDefinition {
472
534
  }
473
535
  declare class ConnectionEditorComponent {
474
536
  readonly stateNodeId = "__page_state__";
537
+ protected readonly minZoom = 0.2;
538
+ protected readonly maxZoom = 1.8;
475
539
  readonly nodeViewBox = "0 0 168 168";
476
540
  readonly canvasViewBox = "0 0 900 540";
477
541
  readonly nodeHaloPaths: string[];
542
+ private readonly injector;
478
543
  private readonly i18n;
479
544
  private readonly hostElement;
480
545
  private readonly globalActionCatalog;
@@ -501,6 +566,7 @@ declare class ConnectionEditorComponent {
501
566
  readonly draftTargets: _angular_core.Signal<ConnectionEditorPort[]>;
502
567
  readonly draftDiagnostics: _angular_core.Signal<_praxisui_core.DiagnosticRecord[]>;
503
568
  readonly draftDuplicate: _angular_core.Signal<boolean>;
569
+ readonly draftExistingRoute: _angular_core.Signal<ConnectionEditorConnection | null>;
504
570
  readonly canApplyDraft: _angular_core.Signal<boolean>;
505
571
  readonly activeMode: _angular_core.WritableSignal<ConnectionEditorFlowMode>;
506
572
  readonly activeFilter: _angular_core.WritableSignal<ConnectionsEditorFilter>;
@@ -512,12 +578,18 @@ declare class ConnectionEditorComponent {
512
578
  readonly expandedNodeId: _angular_core.WritableSignal<string | null>;
513
579
  readonly activeDockTab: _angular_core.WritableSignal<ConnectionEditorDockTab>;
514
580
  readonly dockCollapsed: _angular_core.WritableSignal<boolean>;
581
+ readonly inspectorOpen: _angular_core.WritableSignal<boolean>;
582
+ readonly connectionIntents: _angular_core.Signal<_praxisui_core.LinkIntent[]>;
515
583
  readonly traceEnabled: _angular_core.WritableSignal<boolean>;
516
584
  readonly traceStepIndex: _angular_core.WritableSignal<number>;
517
585
  readonly traceSourceNodeId: _angular_core.WritableSignal<string | null>;
586
+ readonly traceSourceEndpoint: _angular_core.WritableSignal<EndpointRef | null>;
518
587
  readonly selectedPort: _angular_core.WritableSignal<ConnectionEditorPort | null>;
519
588
  readonly hoveredNodeId: _angular_core.WritableSignal<string | null>;
520
589
  readonly visualDensity: _angular_core.WritableSignal<ConnectionEditorVisualDensity>;
590
+ private readonly invalidSurfaceDrafts;
591
+ readonly surfaceDraftInvalid: _angular_core.WritableSignal<boolean>;
592
+ onSurfaceDraftValidity(source: SurfaceOpenActionEditorComponent, connection: ConnectionEditorConnection, valid: boolean): void;
521
593
  readonly globalActionPayloadError: _angular_core.WritableSignal<string | null>;
522
594
  readonly pendingSegmentState: _angular_core.WritableSignal<PendingSegmentState | null>;
523
595
  readonly dragState: _angular_core.WritableSignal<DragState | null>;
@@ -526,6 +598,7 @@ declare class ConnectionEditorComponent {
526
598
  readonly panState: _angular_core.WritableSignal<PanState | null>;
527
599
  readonly minimapPanState: _angular_core.WritableSignal<MinimapPanState | null>;
528
600
  readonly rotationState: _angular_core.WritableSignal<RotationState | null>;
601
+ readonly captionLayoutScale: _angular_core.WritableSignal<number>;
529
602
  readonly viewport: _angular_core.WritableSignal<ViewportState>;
530
603
  readonly portOrder: _angular_core.WritableSignal<ConnectionEditorPortOrderState>;
531
604
  readonly nodeRotations: _angular_core.WritableSignal<Record<string, number>>;
@@ -600,9 +673,14 @@ declare class ConnectionEditorComponent {
600
673
  readonly connectedNodeIds: _angular_core.Signal<Set<string>>;
601
674
  readonly connectedPortIds: _angular_core.Signal<Set<string>>;
602
675
  readonly editorNodes: _angular_core.Signal<ConnectionEditorNode[]>;
676
+ readonly nodeCaptions: _angular_core.Signal<Map<string, ConnectionEditorCaption>>;
677
+ protected readonly captionRenderRatio: _angular_core.Signal<number>;
678
+ protected readonly renderedNodeCaptions: _angular_core.Signal<Map<string, ConnectionEditorCaption>>;
679
+ readonly wireRoutes: _angular_core.Signal<Map<string, ConnectionEditorWireRoute | null>>;
603
680
  readonly navigationBounds: _angular_core.Signal<ConnectionEditorBounds>;
604
681
  readonly minimapViewBox: _angular_core.Signal<string>;
605
682
  readonly editorConnections: _angular_core.Signal<ConnectionEditorConnection[]>;
683
+ readonly dockConnections: _angular_core.Signal<ConnectionEditorConnection[]>;
606
684
  readonly canvasEditorConnections: _angular_core.Signal<ConnectionEditorConnection[]>;
607
685
  readonly visibleEditorConnections: _angular_core.Signal<ConnectionEditorConnection[]>;
608
686
  readonly modeMatchedConnectionIds: _angular_core.Signal<Set<string>>;
@@ -611,14 +689,38 @@ declare class ConnectionEditorComponent {
611
689
  readonly smartSuggestions: _angular_core.Signal<ConnectionEditorSuggestion[]>;
612
690
  readonly recommendedMasterDetailSuggestion: _angular_core.Signal<ConnectionEditorSuggestion | null>;
613
691
  readonly masterDetailReadinessDiagnostic: _angular_core.Signal<string | null>;
692
+ readonly compactStage: _angular_core.WritableSignal<boolean>;
614
693
  readonly traceSteps: _angular_core.Signal<ConnectionEditorTraceStep[]>;
694
+ readonly traceConnectionSteps: _angular_core.Signal<{
695
+ order: number;
696
+ id: string;
697
+ connectionId: string;
698
+ phase: ConnectionEditorTracePhase;
699
+ fromLabel: string;
700
+ toLabel: string;
701
+ intent: string;
702
+ blocked: boolean;
703
+ }[]>;
704
+ readonly activeTraceOperations: _angular_core.Signal<ConnectionEditorTraceStep[]>;
705
+ readonly activeTraceSummary: _angular_core.Signal<string>;
615
706
  readonly activeTraceStepIndex: _angular_core.Signal<number>;
616
- readonly traceActiveStep: _angular_core.Signal<ConnectionEditorTraceStep>;
707
+ readonly traceActiveStep: _angular_core.Signal<{
708
+ order: number;
709
+ id: string;
710
+ connectionId: string;
711
+ phase: ConnectionEditorTracePhase;
712
+ fromLabel: string;
713
+ toLabel: string;
714
+ intent: string;
715
+ blocked: boolean;
716
+ }>;
617
717
  readonly tracedConnectionIds: _angular_core.Signal<Set<string>>;
618
718
  readonly traceProgressPercent: _angular_core.Signal<number>;
619
719
  readonly traceProgressLabel: _angular_core.Signal<string>;
620
720
  readonly traceSourceNodeIds: _angular_core.Signal<Set<string>>;
621
721
  readonly traceReactingNodeIds: _angular_core.Signal<Set<string>>;
722
+ private readonly syncTracePresentation;
723
+ private revealInScrollRegion;
622
724
  readonly focusedConnectionNodeIds: _angular_core.Signal<Set<string>>;
623
725
  readonly focusedConnectionPortIds: _angular_core.Signal<Set<string>>;
624
726
  readonly diagnosticConnectionIds: _angular_core.Signal<Set<string>>;
@@ -629,6 +731,7 @@ declare class ConnectionEditorComponent {
629
731
  readonly canvasInteractionActive: _angular_core.Signal<boolean>;
630
732
  readonly visibleConnectionTooltip: _angular_core.Signal<ConnectionEditorConnection | null>;
631
733
  readonly visibleExpandedNodeId: _angular_core.Signal<string | null>;
734
+ readonly expandedEditorNode: _angular_core.Signal<ConnectionEditorNode | null>;
632
735
  readonly canUndo: _angular_core.Signal<boolean>;
633
736
  readonly canRedo: _angular_core.Signal<boolean>;
634
737
  readonly hasVisualPortOrder: _angular_core.Signal<boolean>;
@@ -657,11 +760,19 @@ declare class ConnectionEditorComponent {
657
760
  width: number;
658
761
  height: number;
659
762
  }>;
660
- selectNode(nodeId: string): void;
763
+ private inspectorInvoker;
764
+ private portInvoker;
765
+ private inspectorPortContext;
766
+ selectNode(nodeId: string, event?: Event): void;
661
767
  selectSegment(port: ConnectionEditorPort, event: MouseEvent): void;
662
768
  selectWidget(node: ConnectionsViewerNode): void;
663
769
  selectLink(edge: ConnectionsViewerEdge): void;
664
- selectConnection(connection: ConnectionEditorConnection): void;
770
+ inspectPortConnection(connection: ConnectionEditorConnection, event: Event): void;
771
+ protected toggleInspector(event: Event): void;
772
+ private rememberInspectorPortContext;
773
+ closeInspector(): void;
774
+ selectConnection(connection: ConnectionEditorConnection, event?: Event): void;
775
+ private focusInspectorAfterRender;
665
776
  jumpToConnection(connection: ConnectionEditorConnection, event: Event): void;
666
777
  previewConnection(connection: ConnectionEditorConnection): void;
667
778
  clearPreviewConnection(connection: ConnectionEditorConnection): void;
@@ -674,6 +785,7 @@ declare class ConnectionEditorComponent {
674
785
  setDockTab(tab: ConnectionEditorDockTab): void;
675
786
  handleDockTabKeydown(event: KeyboardEvent, tab: ConnectionEditorDockTab): void;
676
787
  toggleDock(): void;
788
+ followConnectionPath(connection: ConnectionEditorConnection, event: Event): void;
677
789
  toggleTrace(event: Event): void;
678
790
  selectTraceSource(nodeId: string | null, event: Event): void;
679
791
  moveTraceStep(delta: -1 | 1, event: Event): void;
@@ -720,6 +832,8 @@ declare class ConnectionEditorComponent {
720
832
  enableTransform(connection: ConnectionEditorConnection, event: Event): void;
721
833
  addTransformStep(connection: ConnectionEditorConnection, kind: TransformKind, event: Event): void;
722
834
  removeTransformStep(connection: ConnectionEditorConnection, index: number, event: Event): void;
835
+ formatStepOption(step: TransformPipeline['steps'][number], key: string): string;
836
+ updateFormatStep(connection: ConnectionEditorConnection, index: number, key: string, value: string): void;
723
837
  clearTransform(connection: ConnectionEditorConnection, event: Event): void;
724
838
  applyConditionPreset(connection: ConnectionEditorConnection, preset: ConnectionEditorConditionPreset, event: Event): void;
725
839
  clearCondition(connection: ConnectionEditorConnection, event: Event): void;
@@ -734,6 +848,9 @@ declare class ConnectionEditorComponent {
734
848
  nestedPortPathText(port: ConnectionEditorPort): string;
735
849
  portDescription(port: ConnectionEditorPort): string;
736
850
  segmentKindGlyph(kind: ConnectionEditorPortKind): string;
851
+ nodeHue(id: string): number;
852
+ compactConnections(nodeId: string): ConnectionEditorConnection[];
853
+ connectionsForPort(port: ConnectionEditorPort): ConnectionEditorConnection[];
737
854
  nodeIcon(node: ConnectionEditorNode): string;
738
855
  dockTabLabel(tab: ConnectionEditorDockTabDefinition): string;
739
856
  dockTabId(tab: ConnectionEditorDockTab): string;
@@ -753,6 +870,15 @@ declare class ConnectionEditorComponent {
753
870
  isModeDimmedPort(port: ConnectionEditorPort): boolean;
754
871
  isGuidedQuietNode(node: ConnectionEditorNode): boolean;
755
872
  areNodePortsVisible(node: ConnectionEditorNode): boolean;
873
+ closePortDetails(): void;
874
+ private focusInvoker;
875
+ private restoreInspectionFocus;
876
+ private isRestorableInspectionTarget;
877
+ beginConnectionFromPort(port: ConnectionEditorPort, event: Event): void;
878
+ wireTerminalPath(connection: ConnectionEditorConnection): string;
879
+ portPanelWidth(): number;
880
+ portPanelHeight(): number;
881
+ portPanelPosition(node: ConnectionEditorNode): ConnectionEditorPoint;
756
882
  isGuidedPortVisible(port: ConnectionEditorPort): boolean;
757
883
  isGuidedSegmentLabelVisible(port: ConnectionEditorPort): boolean;
758
884
  clearHoveredNode(nodeId: string): void;
@@ -779,7 +905,13 @@ declare class ConnectionEditorComponent {
779
905
  connectionCreatedFeedback(connection: ConnectionEditorConnection): string;
780
906
  portAriaLabel(node: ConnectionEditorNode, port: ConnectionEditorPort, role: 'input' | 'output' | 'state'): string;
781
907
  transformKindText(kind: TransformKind): string;
782
- private readableEndpointLabel;
908
+ businessPortLabel(port: ConnectionEditorPort): string;
909
+ authoredStateName(port: ConnectionEditorPort): string;
910
+ stateNamingPorts(connection: ConnectionEditorConnection): ConnectionEditorPort[];
911
+ applyStateName(port: ConnectionEditorPort, name: string): void;
912
+ businessPortDescription(port: ConnectionEditorPort | null | undefined): string;
913
+ private editorialPort;
914
+ readableEndpointLabel(connection: ConnectionEditorConnection, side: 'from' | 'to'): string;
783
915
  private isSelectionToDetailConnection;
784
916
  private isSuggestedMasterDetail;
785
917
  private isCanonicalSelectionToDetailConnection;
@@ -804,6 +936,7 @@ declare class ConnectionEditorComponent {
804
936
  } | null;
805
937
  wireLabelTransform(connection: ConnectionEditorConnection, endpoint: 'source' | 'target'): string;
806
938
  minimapWirePath(connection: ConnectionEditorConnection): string;
939
+ connectionTooltipWidth(): number;
807
940
  connectionTooltipPosition(connection: ConnectionEditorConnection): ConnectionEditorTooltipPosition;
808
941
  connectionTooltipCalloutX(connection: ConnectionEditorConnection): number;
809
942
  connectionTooltipKind(connection: ConnectionEditorConnection): string;
@@ -835,6 +968,7 @@ declare class ConnectionEditorComponent {
835
968
  cancelDraft(): void;
836
969
  private clearDraft;
837
970
  closeEditor(): void;
971
+ nodeCaptionHeight(): number;
838
972
  nodeCaptionWidth(): number;
839
973
  togglePresentation(): void;
840
974
  tx(key: string, fallback: string): string;
@@ -883,6 +1017,7 @@ declare class ConnectionEditorComponent {
883
1017
  private fitViewportState;
884
1018
  private clampViewport;
885
1019
  private connectionEditorNavigationBounds;
1020
+ private needsCompactStage;
886
1021
  private stageClientSize;
887
1022
  private stageRect;
888
1023
  private shouldIgnorePanTarget;
@@ -948,6 +1083,7 @@ type DeviceVariantForm = FormGroup<{
948
1083
  columns: FormControl<number | null>;
949
1084
  rowUnit: FormControl<string>;
950
1085
  gap: FormControl<string>;
1086
+ paddingInline: FormControl<string>;
951
1087
  autoRows: FormControl<'fixed' | 'content' | ''>;
952
1088
  groupingOverrides: FormControl<string>;
953
1089
  widgetOverrides: FormControl<string>;
@@ -983,14 +1119,12 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
983
1119
  pageChange: EventEmitter<WidgetPageDefinition>;
984
1120
  readonly layoutPresetEntries: LayoutPresetEntry[];
985
1121
  readonly themePresetEntries: ThemePresetEntry[];
986
- readonly shellPresetEntries: {
987
- id: string;
988
- label: string;
989
- }[];
1122
+ readonly shellPresetEntries: readonly WidgetShellPresetDefinition[];
990
1123
  readonly deviceKeys: DeviceKey[];
991
1124
  readonly deviceLabels: Record<DeviceKey, string>;
992
1125
  readonly canvasColumnsControl: FormControl<number>;
993
1126
  readonly canvasRowUnitControl: FormControl<string>;
1127
+ readonly paddingInlineControl: FormControl<string>;
994
1128
  readonly canvasGapControl: FormControl<string>;
995
1129
  readonly canvasAutoRowsControl: FormControl<"content" | "fixed">;
996
1130
  readonly layoutPresetControl: FormControl<string>;
@@ -1016,9 +1150,12 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
1016
1150
  isErrorState: (control: FormControl | null) => boolean;
1017
1151
  };
1018
1152
  private readonly injectedData;
1153
+ readonly isHostedInSettingsPanel: boolean;
1019
1154
  private readonly i18n;
1020
1155
  private pageInput;
1021
1156
  private snapshot;
1157
+ readonly stackedDevices: Set<DeviceKey>;
1158
+ readonly activeDevice: WritableSignal<DeviceKey>;
1022
1159
  private hydrating;
1023
1160
  private renderedCandidate;
1024
1161
  private renderedValidationFingerprint;
@@ -1030,6 +1167,8 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
1030
1167
  get hasPendingChanges(): boolean;
1031
1168
  get validationStateLabel(): string;
1032
1169
  get dirtyStateLabel(): string;
1170
+ get nonLimitError(): string | null;
1171
+ get limitsSummaryError(): string | null;
1033
1172
  get selectedLayoutPresetLabel(): string;
1034
1173
  get selectedThemePresetLabel(): string;
1035
1174
  get selectedLayoutPresetEntry(): LayoutPresetEntry | null;
@@ -1041,6 +1180,9 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
1041
1180
  onSave(): WidgetPageDefinition | null;
1042
1181
  reset(): void;
1043
1182
  pinRecommendedThemePreset(): void;
1183
+ get hasCanvasWidgets(): boolean;
1184
+ stackDevice(device: DeviceKey): void;
1185
+ private stackedCanvas;
1044
1186
  addGroupingNode(seed?: WidgetPageGroupingDefinition): void;
1045
1187
  removeGroupingNode(index: number): void;
1046
1188
  layoutPresetSummary(preset: LayoutPresetEntry): string;
@@ -1050,6 +1192,7 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
1050
1192
  inheritedThemeHelp(theme: ThemePresetEntry): string;
1051
1193
  groupLabel(index: number): string;
1052
1194
  tx(key: string, fallback: string): string;
1195
+ shellPresetLabel(preset: WidgetShellPresetDefinition): string;
1053
1196
  limitsTargetLabel(index: number): string;
1054
1197
  limitFieldError(control: FormControl<number | null>): string;
1055
1198
  private draftFingerprint;
@@ -1064,6 +1207,8 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
1064
1207
  private replaceGroupingNodes;
1065
1208
  private buildCurrentPage;
1066
1209
  private buildGrouping;
1210
+ /** A grid must place every existing widget before replacing the flow layout. */
1211
+ private completeCanvasItems;
1067
1212
  private buildDeviceLayouts;
1068
1213
  private invalidate;
1069
1214
  private refreshPanelState;
@@ -1174,6 +1319,7 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
1174
1319
  rowHeight: FormControl<number | null>;
1175
1320
  gap: FormControl<number | null>;
1176
1321
  }>;
1322
+ readonly paddingInlineControl: FormControl<string>;
1177
1323
  readonly contextControl: FormControl<string>;
1178
1324
  readonly shellPresetControl: FormControl<string>;
1179
1325
  readonly layoutPresetControl: FormControl<string>;
@@ -1188,6 +1334,7 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
1188
1334
  orientation: FormControl<string>;
1189
1335
  columns: FormControl<number | null>;
1190
1336
  gap: FormControl<string>;
1337
+ paddingInline: FormControl<string>;
1191
1338
  breakpointsJson: FormControl<string>;
1192
1339
  groupingOverridesJson: FormControl<string>;
1193
1340
  widgetOverridesJson: FormControl<string>;
@@ -1196,6 +1343,7 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
1196
1343
  orientation: FormControl<string>;
1197
1344
  columns: FormControl<number | null>;
1198
1345
  gap: FormControl<string>;
1346
+ paddingInline: FormControl<string>;
1199
1347
  breakpointsJson: FormControl<string>;
1200
1348
  groupingOverridesJson: FormControl<string>;
1201
1349
  widgetOverridesJson: FormControl<string>;
@@ -1204,6 +1352,7 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
1204
1352
  orientation: FormControl<string>;
1205
1353
  columns: FormControl<number | null>;
1206
1354
  gap: FormControl<string>;
1355
+ paddingInline: FormControl<string>;
1207
1356
  breakpointsJson: FormControl<string>;
1208
1357
  groupingOverridesJson: FormControl<string>;
1209
1358
  widgetOverridesJson: FormControl<string>;
@@ -1212,10 +1361,7 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
1212
1361
  readonly layoutError: _angular_core.WritableSignal<string | null>;
1213
1362
  readonly stateError: _angular_core.WritableSignal<string | null>;
1214
1363
  readonly activeTab: _angular_core.WritableSignal<EditorTabId>;
1215
- readonly shellPresetEntries: Array<{
1216
- id: string;
1217
- label: string;
1218
- }>;
1364
+ readonly shellPresetEntries: readonly WidgetShellPresetDefinition[];
1219
1365
  private lastContext;
1220
1366
  private lastGrouping;
1221
1367
  private lastDeviceLayouts;
@@ -1253,6 +1399,7 @@ declare class PageConfigEditorComponent implements SettingsValueProvider$1 {
1253
1399
  protected get transformerOptionsHint(): string;
1254
1400
  constructor();
1255
1401
  protected tx(key: string, fallback: string): string;
1402
+ shellPresetLabel(preset: WidgetShellPresetDefinition | undefined): string;
1256
1403
  addSchemaNode(seed?: {
1257
1404
  path?: string;
1258
1405
  config?: WidgetStateNode;
@@ -1976,7 +2123,13 @@ declare function preflightUiCompositionPlanResources(plan: UiCompositionPlan, re
1976
2123
  declare class UiCompositionResourcePreflightService {
1977
2124
  private readonly registry;
1978
2125
  private readonly discovery;
2126
+ private readonly pageSchemas;
1979
2127
  preflight(plan: UiCompositionPlan, registry?: ComponentMetadataRegistry): Promise<UiCompositionPlanPreflightResult>;
2128
+ /** Revalidates an authored page without reconstructing or trusting its original plan. */
2129
+ preflightPage(page: WidgetPageDefinition, registry?: ComponentMetadataRegistry, options?: {
2130
+ refreshSchemas?: boolean;
2131
+ }): Promise<UiCompositionPlanPreflightResult>;
2132
+ private resolvePageSchema;
1980
2133
  private resolveSchema;
1981
2134
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<UiCompositionResourcePreflightService, never>;
1982
2135
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<UiCompositionResourcePreflightService>;