@praxisui/page-builder 9.0.65 → 9.0.66

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.65",
3
+ "version": "9.0.66",
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.65",
12
- "@praxisui/core": "^9.0.65",
13
- "@praxisui/settings-panel": "^9.0.65",
11
+ "@praxisui/ai": "^9.0.66",
12
+ "@praxisui/core": "^9.0.66",
13
+ "@praxisui/settings-panel": "^9.0.66",
14
14
  "rxjs": "~7.8.0"
15
15
  },
16
16
  "dependencies": {
@@ -1,7 +1,8 @@
1
1
  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
- import { ComponentDocMeta, ComponentMetadataRegistry, PraxisI18nService, WidgetShellConfig, WidgetPageAuthoringCapabilities, WidgetShellAction, EndpointRef, ComponentPortPathSegment, LinkIntent, CompositionLink, WidgetPageDefinition, TransformKind, SurfaceOpenPayload, 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';
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
6
  import * as rxjs from 'rxjs';
6
7
  import { BehaviorSubject, Observable } from 'rxjs';
7
8
  import { FormGroup, FormControl, FormArray } from '@angular/forms';
@@ -162,6 +163,8 @@ type SetInputPreset = {
162
163
  };
163
164
  declare class WidgetShellEditorComponent implements SettingsValueProvider {
164
165
  private registry?;
166
+ private readonly i18n;
167
+ appearanceError(): string;
165
168
  form: FormGroup<{
166
169
  kind: FormControl<"none" | "dashboard-card">;
167
170
  preset: FormControl<string>;
@@ -481,6 +484,24 @@ declare class ConnectionEditorComponent {
481
484
  readonly focusWidget: _angular_core.OutputEmitterRef<string>;
482
485
  readonly openPageSettings: _angular_core.OutputEmitterRef<void>;
483
486
  readonly close: _angular_core.OutputEmitterRef<void>;
487
+ private readonly componentRegistry;
488
+ private readonly compositionValidator;
489
+ readonly draftBase: _angular_core.WritableSignal<WidgetPageDefinition | null>;
490
+ readonly draftPage: _angular_core.WritableSignal<WidgetPageDefinition | null>;
491
+ readonly workingPage: _angular_core.Signal<WidgetPageDefinition | null | undefined>;
492
+ readonly draftSourceId: _angular_core.WritableSignal<string>;
493
+ readonly draftTargetId: _angular_core.WritableSignal<string>;
494
+ readonly draftLinkId: _angular_core.WritableSignal<string | null>;
495
+ readonly draftIsNew: _angular_core.WritableSignal<boolean>;
496
+ private draftSelectionBefore;
497
+ readonly presentationMode: _angular_core.WritableSignal<boolean>;
498
+ readonly draftConflict: _angular_core.Signal<boolean>;
499
+ readonly draftPorts: _angular_core.Signal<ConnectionEditorPort[]>;
500
+ readonly draftSources: _angular_core.Signal<ConnectionEditorPort[]>;
501
+ readonly draftTargets: _angular_core.Signal<ConnectionEditorPort[]>;
502
+ readonly draftDiagnostics: _angular_core.Signal<_praxisui_core.DiagnosticRecord[]>;
503
+ readonly draftDuplicate: _angular_core.Signal<boolean>;
504
+ readonly canApplyDraft: _angular_core.Signal<boolean>;
484
505
  readonly activeMode: _angular_core.WritableSignal<ConnectionEditorFlowMode>;
485
506
  readonly activeFilter: _angular_core.WritableSignal<ConnectionsEditorFilter>;
486
507
  readonly selectedWidgetId: _angular_core.WritableSignal<string | null>;
@@ -793,6 +814,7 @@ declare class ConnectionEditorComponent {
793
814
  describeEdge(edge: ConnectionsViewerEdge): string;
794
815
  edgeHasDiagnostics(edge: ConnectionsViewerEdge): boolean;
795
816
  edgeDiagnostics(edge: ConnectionsViewerEdge): unknown[];
817
+ edgeRouteTitle(edge: ConnectionsViewerEdge): string;
796
818
  describeSource(edge: ConnectionsViewerEdge): string;
797
819
  describeTarget(edge: ConnectionsViewerEdge): string;
798
820
  globalActionPayloadText(connection: ConnectionEditorConnection): string;
@@ -801,6 +823,20 @@ declare class ConnectionEditorComponent {
801
823
  surfaceOpenHostKind(connection: ConnectionEditorConnection): string;
802
824
  applySurfaceOpenPayload(connection: ConnectionEditorConnection, payload: SurfaceOpenPayload): void;
803
825
  applyGlobalActionPayload(connection: ConnectionEditorConnection, payloadText: string, event: Event): void;
826
+ beginNewConnection(): void;
827
+ beginEditConnection(linkId: string): void;
828
+ changeDraftEndpoint(side: 'source' | 'target', id: string): void;
829
+ projectDraftValue(): void;
830
+ setDraftMissingValue(missingValuePolicy: 'skip' | 'use-default'): void;
831
+ changeDraftPickPath(index: number, path: string): void;
832
+ draftPortLabel(port: ConnectionEditorPort): string;
833
+ draftEndpointLabel(id: string): string;
834
+ applyDraft(): void;
835
+ cancelDraft(): void;
836
+ private clearDraft;
837
+ closeEditor(): void;
838
+ nodeCaptionWidth(): number;
839
+ togglePresentation(): void;
804
840
  tx(key: string, fallback: string): string;
805
841
  private availableGlobalActions;
806
842
  private availableGlobalActionIds;
@@ -857,7 +893,46 @@ declare class ConnectionEditorComponent {
857
893
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConnectionEditorComponent, "praxis-connection-editor", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "page": { "alias": "page"; "required": false; "isSignal": true; }; }, { "pageChange": "pageChange"; "focusWidget": "focusWidget"; "openPageSettings": "openPageSettings"; "close": "close"; }, never, never, true, never>;
858
894
  }
859
895
 
860
- type EditorTabId$1 = 'canvas' | 'grouping' | 'devices' | 'context' | 'state';
896
+ declare const LIMIT_KEYS: readonly ["minColSpan", "maxColSpan", "minRowSpan", "maxRowSpan", "minHeightPx", "maxHeightPx"];
897
+ type LimitKey = typeof LIMIT_KEYS[number];
898
+ type LimitValues = Record<LimitKey, number | null>;
899
+ type HeightValues = {
900
+ heightMode: 'inherit' | 'auto' | 'fixed';
901
+ heightPx: number | null;
902
+ offsetTopPx: number | null;
903
+ };
904
+ type LimitForm = FormGroup<{
905
+ [K in LimitKey]: FormControl<number | null>;
906
+ } & {
907
+ [K in keyof HeightValues]: FormControl<HeightValues[K]>;
908
+ }>;
909
+ type LimitScope = 'base' | WidgetPageDeviceKind;
910
+ interface LimitTarget {
911
+ key: string;
912
+ title: string;
913
+ scope: LimitScope;
914
+ seed: LimitValues & HeightValues;
915
+ }
916
+ type LimitIssue = {
917
+ index: number;
918
+ code: 'integer' | 'range' | 'columns' | 'size' | 'height';
919
+ };
920
+ /** Editor projection of Core canvas constraints; never a second persisted document. */
921
+ declare class CanvasConstraintEditorModel {
922
+ readonly form: FormArray<LimitForm>;
923
+ targets: LimitTarget[];
924
+ private baseline;
925
+ hydrate(page: WidgetPageDefinition): void;
926
+ /** Mutates only the caller's cloned draft, preserving unknown fields and untouched overrides. */
927
+ apply(page: WidgetPageDefinition): LimitIssue | null;
928
+ private fail;
929
+ displayedSize(index: number, columns: number): {
930
+ width: number;
931
+ height: number;
932
+ };
933
+ }
934
+
935
+ type EditorTabId$1 = 'canvas' | 'grouping' | 'devices' | 'context' | 'state' | 'limits';
861
936
  type DeviceKey = 'desktop' | 'tablet' | 'mobile';
862
937
  type GroupingNodeGroup$1 = FormGroup<{
863
938
  kind: FormControl<string>;
@@ -934,11 +1009,19 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
934
1009
  readonly contextError: WritableSignal<string | null>;
935
1010
  readonly stateError: WritableSignal<string | null>;
936
1011
  readonly deviceError: WritableSignal<string | null>;
1012
+ readonly canvasLimits: CanvasConstraintEditorModel;
1013
+ readonly limitsTargetControl: FormControl<number>;
1014
+ readonly limitsError: WritableSignal<string | null>;
1015
+ readonly limitsErrorMatcher: {
1016
+ isErrorState: (control: FormControl | null) => boolean;
1017
+ };
937
1018
  private readonly injectedData;
938
1019
  private readonly i18n;
939
1020
  private pageInput;
940
1021
  private snapshot;
941
1022
  private hydrating;
1023
+ private renderedCandidate;
1024
+ private renderedValidationFingerprint;
942
1025
  private readonly tabOrder;
943
1026
  constructor();
944
1027
  ngOnInit(): void;
@@ -967,6 +1050,14 @@ declare class DynamicPageConfigEditorComponent implements OnInit, SettingsValueP
967
1050
  inheritedThemeHelp(theme: ThemePresetEntry): string;
968
1051
  groupLabel(index: number): string;
969
1052
  tx(key: string, fallback: string): string;
1053
+ limitsTargetLabel(index: number): string;
1054
+ limitFieldError(control: FormControl<number | null>): string;
1055
+ private draftFingerprint;
1056
+ limitsGeometryLabel(): string;
1057
+ limitsUseContentHeight(): boolean;
1058
+ private applyCanvasLimits;
1059
+ private readRenderedIssue;
1060
+ protected refreshRenderedValidation(): void;
970
1061
  private createDeviceVariantForm;
971
1062
  private createGroupingNodeGroup;
972
1063
  private hydrate;