@praxisui/page-builder 9.0.64 → 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/README.md +109 -2
- package/ai/component-registry.json +2 -2
- package/fesm2022/praxisui-page-builder.mjs +1338 -164
- package/package.json +4 -4
- package/types/praxisui-page-builder.d.ts +93 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/page-builder",
|
|
3
|
-
"version": "9.0.
|
|
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.
|
|
12
|
-
"@praxisui/core": "^9.0.
|
|
13
|
-
"@praxisui/settings-panel": "^9.0.
|
|
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
|
|
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
|
-
|
|
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;
|