@masterteam/structure-builder 0.0.26 → 0.0.28
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.
|
@@ -28,7 +28,7 @@ class NodeFormDialogComponent {
|
|
|
28
28
|
dynamicFormControl = new FormControl();
|
|
29
29
|
nodeData;
|
|
30
30
|
formSchema;
|
|
31
|
-
data = input(null,
|
|
31
|
+
data = input(null, ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
32
32
|
ngOnInit() {
|
|
33
33
|
this.nodeData = this.data()?.node || {};
|
|
34
34
|
this.formSchema = this.data()?.formSchema || [];
|
|
@@ -55,10 +55,10 @@ class NodeFormDialogComponent {
|
|
|
55
55
|
onCancel() {
|
|
56
56
|
this.ref.close();
|
|
57
57
|
}
|
|
58
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
59
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
58
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: NodeFormDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
59
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: NodeFormDialogComponent, isStandalone: true, selector: "mt-node-form-dialog", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div [class]=\"[modalService.contentClass, 'p-4']\">\n @if (this.data()?.template) {\n <ng-container\n *ngTemplateOutlet=\"data().template; context: templateContext\"\n ></ng-container>\n } @else {\n @if (nodeData) {\n <mt-dynamic-form\n [formConfig]=\"formSchema\"\n [formControl]=\"dynamicFormControl\"\n ></mt-dynamic-form>\n }\n }\n</div>\n<div [class]=\"modalService.footerClass\">\n <mt-button\n [label]=\"'structureBuilder.cancel' | transloco\"\n severity=\"secondary\"\n (onClick)=\"onCancel()\"\n >\n </mt-button>\n <mt-button\n [disabled]=\"!dynamicFormControl.valid\"\n [label]=\"'structureBuilder.saveChanges' | transloco\"\n severity=\"primary\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i3.TranslocoPipe, name: "transloco" }] });
|
|
60
60
|
}
|
|
61
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
61
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: NodeFormDialogComponent, decorators: [{
|
|
62
62
|
type: Component,
|
|
63
63
|
args: [{ selector: 'mt-node-form-dialog', standalone: true, imports: [
|
|
64
64
|
CommonModule,
|
|
@@ -72,7 +72,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
|
|
|
72
72
|
class ConnectionFormDialogComponent {
|
|
73
73
|
modalService = inject(ModalService);
|
|
74
74
|
ref = inject(ModalRef);
|
|
75
|
-
data = input(null,
|
|
75
|
+
data = input(null, ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
76
76
|
dynamicFormControl = new FormControl();
|
|
77
77
|
connectionData;
|
|
78
78
|
formSchema;
|
|
@@ -94,10 +94,10 @@ class ConnectionFormDialogComponent {
|
|
|
94
94
|
onCancel() {
|
|
95
95
|
this.ref.close();
|
|
96
96
|
}
|
|
97
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
98
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.
|
|
97
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ConnectionFormDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
98
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: ConnectionFormDialogComponent, isStandalone: true, selector: "mt-connection-form-dialog", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div [class]=\"[modalService.contentClass, 'p-4']\">\n @if (connectionData && formSchema?.sections.length > 0) {\n <mt-dynamic-form\n [formConfig]=\"formSchema\"\n [formControl]=\"dynamicFormControl\"\n ></mt-dynamic-form>\n }\n</div>\n\n<div [class]=\"modalService.footerClass\">\n <mt-button\n [label]=\"'structureBuilder.cancel' | transloco\"\n severity=\"secondary\"\n (onClick)=\"onCancel()\"\n >\n </mt-button>\n <mt-button\n [disabled]=\"!dynamicFormControl.valid\"\n [label]=\"'structureBuilder.saveChanges' | transloco\"\n severity=\"primary\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i3.TranslocoPipe, name: "transloco" }] });
|
|
99
99
|
}
|
|
100
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ConnectionFormDialogComponent, decorators: [{
|
|
101
101
|
type: Component,
|
|
102
102
|
args: [{ selector: 'mt-connection-form-dialog', standalone: true, imports: [
|
|
103
103
|
CommonModule,
|
|
@@ -109,7 +109,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
|
|
|
109
109
|
}], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }] } });
|
|
110
110
|
|
|
111
111
|
class Toolbar {
|
|
112
|
-
size = input(
|
|
112
|
+
size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
|
|
113
113
|
builderComponent = inject(StructureBuilder);
|
|
114
114
|
onZoomIn() {
|
|
115
115
|
this.builderComponent.fZoomDirective()?.zoomIn();
|
|
@@ -128,10 +128,10 @@ class Toolbar {
|
|
|
128
128
|
autoLayout() {
|
|
129
129
|
this.builderComponent.maybeAutoLayout();
|
|
130
130
|
}
|
|
131
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
132
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.
|
|
131
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: Toolbar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
132
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.3", type: Toolbar, isStandalone: true, selector: "mt-toolbar", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<mt-button\n (onClick)=\"autoLayout()\"\n class=\"bg-content rounded-(--p-button-border-radius)\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"arrow.refresh-cw-05\"\n></mt-button>\n\n<mt-buttongroup class=\"bg-content rounded-(--p-button-border-radius)\">\n <mt-button\n (onClick)=\"onZoomOut()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.minus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onZoomIn()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.plus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onFitToScreen()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"layout.grid-02\"\n ></mt-button>\n</mt-buttongroup>\n", styles: [":host{display:flex;justify-content:flex-end;align-items:center;position:absolute;gap:calc(var(--spacing) * 2);inset-inline-end:calc(var(--spacing) * 4);bottom:calc(var(--spacing) * 4)}\n"], dependencies: [{ kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: ButtonGroup, selector: "mt-buttonGroup, mt-buttongroup, mt-button-group" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
133
133
|
}
|
|
134
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: Toolbar, decorators: [{
|
|
135
135
|
type: Component,
|
|
136
136
|
args: [{ selector: 'mt-toolbar', imports: [Button, ButtonGroup], changeDetection: ChangeDetectionStrategy.OnPush, template: "<mt-button\n (onClick)=\"autoLayout()\"\n class=\"bg-content rounded-(--p-button-border-radius)\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"arrow.refresh-cw-05\"\n></mt-button>\n\n<mt-buttongroup class=\"bg-content rounded-(--p-button-border-radius)\">\n <mt-button\n (onClick)=\"onZoomOut()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.minus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onZoomIn()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.plus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onFitToScreen()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"layout.grid-02\"\n ></mt-button>\n</mt-buttongroup>\n", styles: [":host{display:flex;justify-content:flex-end;align-items:center;position:absolute;gap:calc(var(--spacing) * 2);inset-inline-end:calc(var(--spacing) * 4);bottom:calc(var(--spacing) * 4)}\n"] }]
|
|
137
137
|
}], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
|
|
@@ -150,10 +150,10 @@ class FilterActionsPipe {
|
|
|
150
150
|
return action.condition(node);
|
|
151
151
|
});
|
|
152
152
|
}
|
|
153
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
154
|
-
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.
|
|
153
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: FilterActionsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
154
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.3", ngImport: i0, type: FilterActionsPipe, isStandalone: true, name: "filterActions" });
|
|
155
155
|
}
|
|
156
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: FilterActionsPipe, decorators: [{
|
|
157
157
|
type: Pipe,
|
|
158
158
|
args: [{
|
|
159
159
|
name: 'filterActions',
|
|
@@ -186,36 +186,36 @@ class StructureBuilder {
|
|
|
186
186
|
transloco = inject(TranslocoService);
|
|
187
187
|
nodeActionsEvent = output();
|
|
188
188
|
action = output();
|
|
189
|
-
availableNodes = input([],
|
|
190
|
-
fCanvas = viewChild(FCanvasComponent,
|
|
191
|
-
fFlowComponent = viewChild(FFlowComponent,
|
|
192
|
-
fCanvasComponent = viewChild(FCanvasComponent,
|
|
193
|
-
fZoomDirective = viewChild(FZoomDirective,
|
|
194
|
-
nodeForm = input({ sections: [] },
|
|
195
|
-
connectionForm = input({ sections: [] },
|
|
196
|
-
nodeActions = input([],
|
|
189
|
+
availableNodes = input([], ...(ngDevMode ? [{ debugName: "availableNodes" }] : []));
|
|
190
|
+
fCanvas = viewChild(FCanvasComponent, ...(ngDevMode ? [{ debugName: "fCanvas" }] : []));
|
|
191
|
+
fFlowComponent = viewChild(FFlowComponent, ...(ngDevMode ? [{ debugName: "fFlowComponent" }] : []));
|
|
192
|
+
fCanvasComponent = viewChild(FCanvasComponent, ...(ngDevMode ? [{ debugName: "fCanvasComponent" }] : []));
|
|
193
|
+
fZoomDirective = viewChild(FZoomDirective, ...(ngDevMode ? [{ debugName: "fZoomDirective" }] : []));
|
|
194
|
+
nodeForm = input({ sections: [] }, ...(ngDevMode ? [{ debugName: "nodeForm" }] : []));
|
|
195
|
+
connectionForm = input({ sections: [] }, ...(ngDevMode ? [{ debugName: "connectionForm" }] : []));
|
|
196
|
+
nodeActions = input([], ...(ngDevMode ? [{ debugName: "nodeActions" }] : []));
|
|
197
197
|
nodeFields = input({
|
|
198
198
|
id: 'id',
|
|
199
199
|
name: 'name',
|
|
200
200
|
icon: 'icon',
|
|
201
201
|
color: 'color',
|
|
202
|
-
},
|
|
203
|
-
isAutoLayout = input(true,
|
|
204
|
-
addModalType = input('dialog',
|
|
205
|
-
updateModalType = input('drawer',
|
|
206
|
-
addModalStyleClass = input('!w-[35rem]',
|
|
207
|
-
updateModalStyleClass = input('!w-[35rem]',
|
|
208
|
-
addModalHeader = input('Add Node',
|
|
209
|
-
updateModalHeader = input('Edit Node Properties',
|
|
210
|
-
appendTo = input('',
|
|
211
|
-
nodes = model([],
|
|
212
|
-
connections = model([],
|
|
213
|
-
nodeDialogTemplate = contentChild('nodeDialog',
|
|
214
|
-
activeTab = signal('0',
|
|
202
|
+
}, ...(ngDevMode ? [{ debugName: "nodeFields" }] : []));
|
|
203
|
+
isAutoLayout = input(true, ...(ngDevMode ? [{ debugName: "isAutoLayout" }] : []));
|
|
204
|
+
addModalType = input('dialog', ...(ngDevMode ? [{ debugName: "addModalType" }] : []));
|
|
205
|
+
updateModalType = input('drawer', ...(ngDevMode ? [{ debugName: "updateModalType" }] : []));
|
|
206
|
+
addModalStyleClass = input('!w-[35rem]', ...(ngDevMode ? [{ debugName: "addModalStyleClass" }] : []));
|
|
207
|
+
updateModalStyleClass = input('!w-[35rem]', ...(ngDevMode ? [{ debugName: "updateModalStyleClass" }] : []));
|
|
208
|
+
addModalHeader = input('Add Node', ...(ngDevMode ? [{ debugName: "addModalHeader" }] : []));
|
|
209
|
+
updateModalHeader = input('Edit Node Properties', ...(ngDevMode ? [{ debugName: "updateModalHeader" }] : []));
|
|
210
|
+
appendTo = input('', ...(ngDevMode ? [{ debugName: "appendTo" }] : []));
|
|
211
|
+
nodes = model([], ...(ngDevMode ? [{ debugName: "nodes" }] : []));
|
|
212
|
+
connections = model([], ...(ngDevMode ? [{ debugName: "connections" }] : []));
|
|
213
|
+
nodeDialogTemplate = contentChild('nodeDialog', ...(ngDevMode ? [{ debugName: "nodeDialogTemplate" }] : []));
|
|
214
|
+
activeTab = signal('0', ...(ngDevMode ? [{ debugName: "activeTab" }] : []));
|
|
215
215
|
eMarkerType = EFMarkerType;
|
|
216
|
-
configuration = signal(CONFIGURATION[Direction.TOP_TO_BOTTOM],
|
|
217
|
-
direction = signal(Direction.TOP_TO_BOTTOM,
|
|
218
|
-
positions = signal({},
|
|
216
|
+
configuration = signal(CONFIGURATION[Direction.TOP_TO_BOTTOM], ...(ngDevMode ? [{ debugName: "configuration" }] : []));
|
|
217
|
+
direction = signal(Direction.TOP_TO_BOTTOM, ...(ngDevMode ? [{ debugName: "direction" }] : []));
|
|
218
|
+
positions = signal({}, ...(ngDevMode ? [{ debugName: "positions" }] : []));
|
|
219
219
|
dialogRef;
|
|
220
220
|
fields = computed(() => {
|
|
221
221
|
const inputFields = this.nodeFields();
|
|
@@ -225,7 +225,7 @@ class StructureBuilder {
|
|
|
225
225
|
icon: inputFields.icon || 'icon',
|
|
226
226
|
color: inputFields.color || 'color',
|
|
227
227
|
};
|
|
228
|
-
},
|
|
228
|
+
}, ...(ngDevMode ? [{ debugName: "fields" }] : []));
|
|
229
229
|
availableTabs = computed(() => {
|
|
230
230
|
const tabsSet = new Set();
|
|
231
231
|
this.availableNodes().forEach((node) => {
|
|
@@ -234,7 +234,7 @@ class StructureBuilder {
|
|
|
234
234
|
}
|
|
235
235
|
});
|
|
236
236
|
return Array.from(tabsSet).sort();
|
|
237
|
-
},
|
|
237
|
+
}, ...(ngDevMode ? [{ debugName: "availableTabs" }] : []));
|
|
238
238
|
currentTabNodes = computed(() => {
|
|
239
239
|
const tabs = this.availableTabs();
|
|
240
240
|
const currentTabIndex = parseInt(this.activeTab());
|
|
@@ -242,7 +242,7 @@ class StructureBuilder {
|
|
|
242
242
|
return [];
|
|
243
243
|
const currentTab = tabs[currentTabIndex];
|
|
244
244
|
return this.availableNodes().filter((node) => node.tab.includes(currentTab));
|
|
245
|
-
},
|
|
245
|
+
}, ...(ngDevMode ? [{ debugName: "currentTabNodes" }] : []));
|
|
246
246
|
nodesWithComputedProps = computed(() => {
|
|
247
247
|
const fields = this.fields();
|
|
248
248
|
const pos = this.positions();
|
|
@@ -265,12 +265,12 @@ class StructureBuilder {
|
|
|
265
265
|
configuration,
|
|
266
266
|
};
|
|
267
267
|
});
|
|
268
|
-
},
|
|
268
|
+
}, ...(ngDevMode ? [{ debugName: "nodesWithComputedProps" }] : []));
|
|
269
269
|
connectionsComputed = computed(() => this.connections()?.map((c) => ({
|
|
270
270
|
...c,
|
|
271
271
|
from: String(c.from),
|
|
272
272
|
to: String(c.to),
|
|
273
|
-
})),
|
|
273
|
+
})), ...(ngDevMode ? [{ debugName: "connectionsComputed" }] : []));
|
|
274
274
|
coreFields = computed(() => {
|
|
275
275
|
const fields = this.fields();
|
|
276
276
|
return new Set([
|
|
@@ -281,7 +281,7 @@ class StructureBuilder {
|
|
|
281
281
|
'_computedIcon',
|
|
282
282
|
'_computedColor',
|
|
283
283
|
]);
|
|
284
|
-
},
|
|
284
|
+
}, ...(ngDevMode ? [{ debugName: "coreFields" }] : []));
|
|
285
285
|
constructor() { }
|
|
286
286
|
ngOnInit() {
|
|
287
287
|
this.getData(new dagre.graphlib.Graph(), this.direction());
|
|
@@ -474,10 +474,10 @@ class StructureBuilder {
|
|
|
474
474
|
extractNodeId(connectionEndId) {
|
|
475
475
|
return (connectionEndId || '').replace(/-(in|out)$/, '');
|
|
476
476
|
}
|
|
477
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.
|
|
478
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: StructureBuilder, isStandalone: true, selector: "mt-structure-builder", inputs: { availableNodes: { classPropertyName: "availableNodes", publicName: "availableNodes", isSignal: true, isRequired: false, transformFunction: null }, nodeForm: { classPropertyName: "nodeForm", publicName: "nodeForm", isSignal: true, isRequired: false, transformFunction: null }, connectionForm: { classPropertyName: "connectionForm", publicName: "connectionForm", isSignal: true, isRequired: false, transformFunction: null }, nodeActions: { classPropertyName: "nodeActions", publicName: "nodeActions", isSignal: true, isRequired: false, transformFunction: null }, nodeFields: { classPropertyName: "nodeFields", publicName: "nodeFields", isSignal: true, isRequired: false, transformFunction: null }, isAutoLayout: { classPropertyName: "isAutoLayout", publicName: "isAutoLayout", isSignal: true, isRequired: false, transformFunction: null }, addModalType: { classPropertyName: "addModalType", publicName: "addModalType", isSignal: true, isRequired: false, transformFunction: null }, updateModalType: { classPropertyName: "updateModalType", publicName: "updateModalType", isSignal: true, isRequired: false, transformFunction: null }, addModalStyleClass: { classPropertyName: "addModalStyleClass", publicName: "addModalStyleClass", isSignal: true, isRequired: false, transformFunction: null }, updateModalStyleClass: { classPropertyName: "updateModalStyleClass", publicName: "updateModalStyleClass", isSignal: true, isRequired: false, transformFunction: null }, addModalHeader: { classPropertyName: "addModalHeader", publicName: "addModalHeader", isSignal: true, isRequired: false, transformFunction: null }, updateModalHeader: { classPropertyName: "updateModalHeader", publicName: "updateModalHeader", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null }, nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, connections: { classPropertyName: "connections", publicName: "connections", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodeActionsEvent: "nodeActionsEvent", action: "action", nodes: "nodesChange", connections: "connectionsChange" }, host: { classAttribute: "flex h-full bg-surface-200 dark:bg-surface-700 relative rounded-2xl overflow-hidden" }, providers: [DialogService], queries: [{ propertyName: "nodeDialogTemplate", first: true, predicate: ["nodeDialog"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "fCanvas", first: true, predicate: FCanvasComponent, descendants: true, isSignal: true }, { propertyName: "fFlowComponent", first: true, predicate: FFlowComponent, descendants: true, isSignal: true }, { propertyName: "fCanvasComponent", first: true, predicate: FCanvasComponent, descendants: true, isSignal: true }, { propertyName: "fZoomDirective", first: true, predicate: FZoomDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<!-- structure-builder.html -->\n@if (availableTabs().length > 0) {\n <mt-card\n class=\"absolute ms-4 mt-4 z-1 h-[calc(100%---spacing(8))] w-1/5 min-w-xs\"\n >\n <ng-template #headless>\n <!-- Header -->\n <div class=\"flex items-center justify-between px-4 pt-5\">\n <h3 class=\"text-xl font-semibold\">\n {{ \"structureBuilder.levelTemplates\" | transloco }}\n </h3>\n </div>\n\n <!-- Tabs using PrimeNG -->\n <p-tabs\n [(value)]=\"activeTab\"\n styleClass=\"structure-tabs \"\n class=\"h-full overflow-hidden\"\n >\n <p-tablist>\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tab [value]=\"i.toString()\">{{ tab | titlecase }}</p-tab>\n }\n </p-tablist>\n <p-tabpanels class=\"bg-transparent! p-0! overflow-auto\">\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tabpanel [value]=\"i.toString()\">\n <p class=\"text-xs text-muted py-3 px-4\">\n {{ \"structureBuilder.dragToAdd\" | transloco }}\n </p>\n\n <!-- Node List -->\n <div class=\"space-y-1 px-4\">\n @for (node of currentTabNodes(); track node.id) {\n <div\n fExternalItem\n [fData]=\"node\"\n class=\"group select-none relative flex items-center gap-3 py-3 px-4 hover:bg-emphasis hover:border-solid transition-colors rounded-lg border-1 border-dashed border-color border-surface-300 dark:border-surface-500 cursor-move transition-colors\"\n >\n <!-- Node Icon with color -->\n <div class=\"text-primary text-lg\">\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\n </div>\n\n <!-- Node Name -->\n <span class=\"text-base font-medium flex-1\">{{\n node.label\n }}</span>\n </div>\n }\n\n @if (currentTabNodes().length === 0) {\n <div class=\"text-center py-8 text-gray-400\">\n <p class=\"text-sm\">\n {{\n \"structureBuilder.allItemsInUse\"\n | transloco: { tab: tab }\n }}\n </p>\n </div>\n }\n </div>\n </p-tabpanel>\n }\n </p-tabpanels>\n </p-tabs>\n </ng-template>\n </mt-card>\n} @else if (availableNodes().length > 0) {\n <mt-card\n [title]=\"'structureBuilder.steps' | transloco\"\n class=\"absolute top-4 start-4 z-1 w-64\"\n >\n <div class=\"flex flex-col gap-2\">\n @for (node of availableNodes(); track node.id) {\n <div\n fExternalItem\n [fData]=\"node\"\n class=\"group select-none relative flex items-center gap-3 py-3 px-4 hover:bg-emphasis hover:border-solid transition-colors rounded-lg border-1 border-dashed border-color border-surface-300 dark:border-surface-500 cursor-move bg-content\"\n >\n <!-- Node Icon with color -->\n <div class=\"text-primary text-lg\">\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\n </div>\n\n <!-- Node Name -->\n <span class=\"text-base font-medium flex-1\">{{ node.label }}</span>\n </div>\n }\n </div>\n </mt-card>\n}\n<!-- Left Sidebar -->\n\n<!-- Main Canvas Area -->\n<div class=\"flex-1 z-0 relative\">\n <ng-content select=\"[flowContent]\"></ng-content>\n\n <f-flow\n fDraggable\n (fLoaded)=\"onLoaded()\"\n (fCreateNode)=\"onCreateNode($event)\"\n (fCreateConnection)=\"onCreateConnection($event)\"\n class=\"size-full\"\n >\n <f-background>\n <f-circle-pattern color=\"#b5b5b5\"></f-circle-pattern>\n </f-background>\n <f-canvas fZoom [fZoomMinimum]=\"0.1\" [fZoomMaximum]=\"2\">\n <f-connection-for-create fBehavior=\"floating\" fType=\"straight\">\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-connection-for-create>\n <f-snap-connection\n fBehavior=\"fixed\"\n fType=\"segment\"\n class=\"z-1\"\n [fSnapThreshold]=\"100\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-snap-connection>\n\n <f-connection-for-create></f-connection-for-create>\n\n <!-- Enhanced Connections with Edit Button -->\n @for (connection of connectionsComputed(); track connection.id) {\n <f-connection\n [fReassignDisabled]=\"true\"\n [fOutputId]=\"connection.from\"\n [fInputId]=\"connection.to\"\n fBehavior=\"fixed\"\n fType=\"segment\"\n [ngClass]=\"{ 'connection-loading': connection.loading, 'z-1': true }\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <div\n fConnectionCenter\n class=\"flex items-center gap-1 bg-content rounded-md p-1 shadow-sm\"\n >\n @if (!connection.loading) {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.edit-05'\"\n (click)=\"openConnectionDialog(connection)\"\n >\n </mt-button>\n <mt-button\n size=\"small\"\n variant=\"text\"\n severity=\"danger\"\n [icon]=\"'general.trash-01'\"\n (click)=\"removeConnection(connection)\"\n >\n </mt-button>\n } @else {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.loading-01'\"\n >\n </mt-button>\n }\n </div>\n </f-connection>\n }\n\n <!-- Enhanced Nodes with Edit Button -->\n @for (node of nodesWithComputedProps(); track node._computedId) {\n <mt-card\n fNode\n fDragHandle\n [fNodePosition]=\"{\n x: node.configuration?.x || 200,\n y: node.configuration?.y || 100,\n }\"\n (fNodePositionChange)=\"onNodePositionChange($event, node._computedId)\"\n [style.--node-data-border-color]=\"node._computedColor\"\n >\n <ng-template #headless>\n @if (!node.loading) {\n <div\n class=\"flex flex-col items-center min-w-3xs gap-2 px-3 py-4 rounded-t-2xl bg-white dark:bg-surface-800 border-(--p-content-border-color)\"\n >\n @if (node._computedIcon) {\n <mt-icon\n class=\"text-2xl text-primary\"\n [icon]=\"node._computedIcon\"\n />\n }\n <div>{{ node._computedName }}</div>\n </div>\n <div\n class=\"flex justify-center pt-3 mb-4 gap-2 bg-surface-50 dark:bg-surface-900\"\n >\n @for (\n action of nodeActions() | filterActions: node;\n track action.key\n ) {\n <mt-button\n [size]=\"action?.size || 'small'\"\n [variant]=\"action?.variant\"\n [icon]=\"action?.icon\"\n [tooltip]=\"action?.tooltip\"\n [severity]=\"action?.severity\"\n (onClick)=\"buttonAction(action, node)\"\n >\n </mt-button>\n }\n </div>\n <div\n fNodeInput\n [fInputId]=\"node._computedId\"\n fInputConnectableSide=\"top\"\n [fInputMultiple]=\"true\"\n class=\"top\"\n ></div>\n\n <div\n fNodeOutput\n [fOutputId]=\"node._computedId\"\n fOutputConnectableSide=\"bottom\"\n [isSelfConnectable]=\"false\"\n [fOutputMultiple]=\"true\"\n class=\"bottom bg-surface-50 dark:bg-surface-900\"\n ></div>\n } @else {\n <p-skeleton height=\"10rem\" width=\"15rem\" />\n }\n\n <!-- Node Header with Edit Button -->\n </ng-template>\n </mt-card>\n }\n </f-canvas>\n </f-flow>\n</div>\n<mt-toolbar />\n", styles: ["::ng-deep :root{--background-element-color: rgba(0, 0, 0, .1);--selection-area-color: rgba(100, 108, 255, .14);--disabled-color: #e2e2e2;--node-background-color: #ffffff;--node-background-color-inverse: #000000;--node-border-radius: 2px;--node-border-color: rgba(60, 60, 67, .36);--node-selected-border-color: #3451b2;--node-color: rgba(60, 60, 67, .78);--node-shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--connection-color: var(--p-text-color);--snap-connection-color: var(--p-text-muted-color);--connection-gradient-1: #b8272c;--connection-gradient-2: #30a46c;--outlet-color: #3451b2;--input-output-color: rgba(60, 60, 67, .78);--minimap-background-color: #ffffff;--minimap-node-color: rgba(60, 60, 67);--minimap-node-selected-color: var(--p-primary-color);--minimap-view-color: rgba(100, 108, 255, .14)}::ng-deep :root.dark{--background-element-color: rgba(255, 255, 255, .1);--selection-area-color: rgba(100, 108, 255, .16);--disabled-color: #2c2c2e;--node-background-color: #000000;--node-background-color-inverse: #ffffff;--node-border-radius: 2px;--node-border-color: rgba(235, 235, 245, .38);--node-selected-border-color: #a8b1ff;--node-color: rgba(235, 235, 245, .6);--node-shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--connection-color: rgba(235, 235, 245, 1);--snap-connection-color: rgba(235, 235, 245, .2);--connection-gradient-1: #f66f81;--connection-gradient-2: #298459;--outlet-color: #a8b1ff;--input-output-color: rgba(235, 235, 245, .6);--minimap-background-color: #1b1b1f;--minimap-node-color: rgba(255, 255, 245, .86);--minimap-node-selected-color: #a8b1ff;--minimap-view-color: rgba(100, 108, 255, .16)}::ng-deep :root{--form-field-text-color: var(--node-color);--form-field-background: var(--minimap-view-color);--form-field-panel-shadow: var(--shadow-4);--form-field-panel-background: var(--node-background-color);--form-field-active-color: var(--minimap-node-selected-color)}::ng-deep f-flow .f-connection{cursor:pointer}::ng-deep f-flow .f-connection .f-connection-drag-handle{fill:transparent}::ng-deep f-flow .f-connection .f-connection-selection{fill:none}::ng-deep f-flow .f-connection .f-connection-path{fill:none;stroke:var(--connection-color);stroke-width:2}::ng-deep f-flow .f-connection .f-connection-marker{fill:var(--connection-color)}::ng-deep f-flow .f-connection .f-marker path,::ng-deep f-flow .f-connection .f-marker circle{fill:var(--connection-color)}::ng-deep f-flow .f-connection .f-connection-text,::ng-deep f-flow .f-connection .f-connection-center{fill:var(--connection-color);color:var(--connection-color)}::ng-deep f-flow .f-connection.f-snap-connection .f-connection-path{stroke:var(--snap-connection-color)}::ng-deep f-flow .f-connection .f-connection-center{display:none}::ng-deep f-flow .f-connection.connection-loading .f-connection-center{display:block}::ng-deep f-flow .f-connection.f-selected .f-connection-center{display:block}::ng-deep f-flow .f-connection.f-selected .f-connection-path{stroke:var(--minimap-node-selected-color)}::ng-deep f-flow .f-connection.f-selected .f-marker path,::ng-deep f-flow .f-connection.f-selected .f-marker circle{fill:var(--p-primary-color);stroke:var(--minimap-node-selected-color)}::ng-deep f-flow .f-connection .f-connection-selection{fill:none;stroke:transparent;stroke-width:20;cursor:pointer}::ng-deep f-flow .f-connection:hover .f-connection-selection{stroke:var(--p-primary-color);opacity:.1}::ng-deep f-flow .f-connection.f-snap-connection .f-connection-path{stroke:var(--snap-connection-color);stroke-width:2px}::ng-deep f-flow .f-connection.f-snap-connection .f-marker path,::ng-deep f-flow .f-connection.f-snap-connection .f-marker circle{fill:var(--snap-connection-color)}::ng-deep f-flow .f-connection.f-snap-connection .f-connection-selection{fill:transparent!important;stroke:transparent!important}::ng-deep f-flow .f-connection.f-connection-for-create .f-connection-selection{fill:transparent!important;stroke:transparent!important}::ng-deep f-flow .f-connection-for-create{pointer-events:none}::ng-deep f-flow .f-connection-for-create .f-connection .f-connection-path{stroke:var(--snap-connection-color);stroke-width:3px;stroke-dasharray:8,4;animation:connection-dash 1s linear infinite}::ng-deep f-flow .f-connection-for-create .f-connection .f-marker path,::ng-deep f-flow .f-connection-for-create .f-connection .f-marker circle{fill:var(--snap-connection-color)}@keyframes connection-dash{to{stroke-dashoffset:-12}}.f-node-input:not(.f-node),.f-node-output:not(.f-node){position:absolute;width:100%;height:16px;border-radius:0 0 1rem 1rem}.f-node-input:not(.f-node):hover,.f-node-output:not(.f-node):hover{border:.5px dashed var(--p-primary-color)}.f-node-input:not(.f-node).top,.f-node-output:not(.f-node).top{top:0}.f-node-input:not(.f-node).bottom,.f-node-output:not(.f-node).bottom{bottom:0}.f-node-input:not(.f-node).f-node-output-not-connectable,.f-node-input:not(.f-node).f-node-input-not-connectable,.f-node-output:not(.f-node).f-node-output-not-connectable,.f-node-output:not(.f-node).f-node-input-not-connectable{background-color:var(--disabled-color)}.f-node-input:not(.f-node){border-radius:4px}.f-node-input,.f-node-output{z-index:10;pointer-events:all}.examples-toolbar{display:flex;justify-content:flex-end;align-items:center;flex-wrap:wrap;gap:8px;position:absolute;right:16px;top:16px}.examples-toolbar button{font-weight:500;border:none;border-radius:2px;padding:4px 8px;line-height:normal}.f-node:before{content:\"\";position:absolute;width:100%;height:4rem;border-radius:var(--radius-2xl);z-index:-1;top:-.25rem;background-color:var(--node-data-border-color)}.connection-center{display:flex;gap:8px;background:var(--node-background-color);border:1px solid var(--node-border-color);border-radius:4px;padding:4px;box-shadow:var(--node-shadow)}.connection-center .connection-edit-btn,.connection-center .connection-delete-btn{background:none;border:none;width:24px;height:24px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.connection-center .connection-edit-btn:hover,.connection-center .connection-delete-btn:hover{background-color:var(--minimap-view-color)}.connection-center .connection-edit-btn{color:var(--minimap-node-selected-color)}.connection-center .connection-delete-btn{color:#ef4444}.node-edit-btn,.node-delete-btn{background:none;border:none;width:32px;height:32px;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.node-edit-btn:hover,.node-delete-btn:hover{background-color:var(--minimap-view-color)}.node-edit-btn{color:var(--minimap-node-selected-color)}.node-delete-btn{color:#ef4444}.node-properties{max-height:200px;overflow-y:auto}.node-properties .property-item{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid var(--node-border-color);font-size:12px}.node-properties .property-item .property-key{font-weight:600;color:var(--node-color);margin-right:8px}.node-properties .property-item .property-value{color:var(--minimap-node-selected-color);word-break:break-word}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: FFlowModule }, { kind: "component", type: i2$1.FFlowComponent, selector: "f-flow", inputs: ["fFlowId"], outputs: ["fLoaded"] }, { kind: "component", type: i2$1.FCanvasComponent, selector: "f-canvas", inputs: ["position", "scale", "debounceTime"], outputs: ["fCanvasChange"] }, { kind: "component", type: i2$1.FBackgroundComponent, selector: "f-background" }, { kind: "component", type: i2$1.FCirclePatternComponent, selector: "f-circle-pattern", inputs: ["id", "color", "radius"] }, { kind: "directive", type: i2$1.FZoomDirective, selector: "f-canvas[fZoom]", inputs: ["fZoom", "fWheelTrigger", "fDblClickTrigger", "fZoomMinimum", "fZoomMaximum", "fZoomStep", "fZoomDblClickStep"], exportAs: ["fComponent"] }, { kind: "directive", type: i2$1.FExternalItemDirective, selector: "[fExternalItem]", inputs: ["fExternalItemId", "fData", "fDisabled", "fPreview", "fPreviewMatchSize", "fPlaceholder"] }, { kind: "component", type: i2$1.FConnectionComponent, selector: "f-connection", inputs: ["fConnectionId", "fText", "fTextStartOffset", "fOutputId", "fInputId", "fRadius", "fOffset", "fBehavior", "fType", "fSelectionDisabled", "fReassignableStart", "fReassignDisabled", "fInputSide", "fOutputSide"], exportAs: ["fComponent"] }, { kind: "directive", type: i2$1.FConnectionCenterDirective, selector: "[fConnectionCenter]", inputs: ["fConnectionCenter"] }, { kind: "component", type: i2$1.FConnectionForCreateComponent, selector: "f-connection-for-create", inputs: ["fRadius", "fOffset", "fBehavior", "fType", "fInputSide", "fOutputSide"] }, { kind: "directive", type: i2$1.FMarkerDirective, selector: "svg[fMarker]", inputs: ["width", "height", "refX", "refY", "type", "orient", "markerUnits"] }, { kind: "component", type: i2$1.FSnapConnectionComponent, selector: "f-snap-connection", inputs: ["fSnapThreshold", "fRadius", "fOffset", "fBehavior", "fType", "fInputSide", "fOutputSide"] }, { kind: "directive", type: i2$1.FNodeInputDirective, selector: "[fNodeInput]", inputs: ["fInputId", "fInputCategory", "fInputMultiple", "fInputDisabled", "fInputConnectableSide"], exportAs: ["fNodeInput"] }, { kind: "directive", type: i2$1.FNodeOutputDirective, selector: "[fNodeOutput]", inputs: ["fOutputId", "fOutputMultiple", "fOutputDisabled", "fOutputConnectableSide", "isSelfConnectable", "fCanBeConnectedInputs"], exportAs: ["fNodeOutput"] }, { kind: "directive", type: i2$1.FNodeDirective, selector: "[fNode]", inputs: ["fNodeId", "fNodeParentId", "fNodePosition", "fNodeSize", "fNodeRotate", "fConnectOnNode", "fMinimapClass", "fNodeDraggingDisabled", "fNodeSelectionDisabled", "fIncludePadding", "fAutoExpandOnChildHit", "fAutoSizeToFitChildren"], outputs: ["fNodePositionChange", "fNodeSizeChange", "fNodeRotateChange"], exportAs: ["fComponent"] }, { kind: "directive", type: i2$1.FDragHandleDirective, selector: "[fDragHandle]" }, { kind: "directive", type: i2$1.FDraggableDirective, selector: "f-flow[fDraggable]", inputs: ["fDraggableDisabled", "fMultiSelectTrigger", "fReassignConnectionTrigger", "fCreateConnectionTrigger", "fNodeResizeTrigger", "fNodeRotateTrigger", "fNodeMoveTrigger", "fCanvasMoveTrigger", "fExternalItemTrigger", "fEmitOnNodeIntersect", "vCellSize", "hCellSize", "fCellSizeWhileDragging"], outputs: ["fSelectionChange", "fNodeIntersectedWithConnections", "fCreateNode", "fMoveNodes", "fReassignConnection", "fCreateConnection", "fDropToGroup", "fDragStarted", "fDragEnded"], exportAs: ["fDraggable"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i3$1.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i3$1.TabPanels, selector: "p-tabpanels" }, { kind: "component", type: i3$1.TabPanel, selector: "p-tabpanel", inputs: ["lazy", "value"], outputs: ["valueChange"] }, { kind: "component", type: i3$1.TabList, selector: "p-tablist" }, { kind: "component", type: i3$1.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: Toolbar, selector: "mt-toolbar", inputs: ["size"] }, { kind: "component", type: Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: FilterActionsPipe, name: "filterActions" }, { kind: "pipe", type: i3.TranslocoPipe, name: "transloco" }] });
|
|
477
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: StructureBuilder, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
478
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: StructureBuilder, isStandalone: true, selector: "mt-structure-builder", inputs: { availableNodes: { classPropertyName: "availableNodes", publicName: "availableNodes", isSignal: true, isRequired: false, transformFunction: null }, nodeForm: { classPropertyName: "nodeForm", publicName: "nodeForm", isSignal: true, isRequired: false, transformFunction: null }, connectionForm: { classPropertyName: "connectionForm", publicName: "connectionForm", isSignal: true, isRequired: false, transformFunction: null }, nodeActions: { classPropertyName: "nodeActions", publicName: "nodeActions", isSignal: true, isRequired: false, transformFunction: null }, nodeFields: { classPropertyName: "nodeFields", publicName: "nodeFields", isSignal: true, isRequired: false, transformFunction: null }, isAutoLayout: { classPropertyName: "isAutoLayout", publicName: "isAutoLayout", isSignal: true, isRequired: false, transformFunction: null }, addModalType: { classPropertyName: "addModalType", publicName: "addModalType", isSignal: true, isRequired: false, transformFunction: null }, updateModalType: { classPropertyName: "updateModalType", publicName: "updateModalType", isSignal: true, isRequired: false, transformFunction: null }, addModalStyleClass: { classPropertyName: "addModalStyleClass", publicName: "addModalStyleClass", isSignal: true, isRequired: false, transformFunction: null }, updateModalStyleClass: { classPropertyName: "updateModalStyleClass", publicName: "updateModalStyleClass", isSignal: true, isRequired: false, transformFunction: null }, addModalHeader: { classPropertyName: "addModalHeader", publicName: "addModalHeader", isSignal: true, isRequired: false, transformFunction: null }, updateModalHeader: { classPropertyName: "updateModalHeader", publicName: "updateModalHeader", isSignal: true, isRequired: false, transformFunction: null }, appendTo: { classPropertyName: "appendTo", publicName: "appendTo", isSignal: true, isRequired: false, transformFunction: null }, nodes: { classPropertyName: "nodes", publicName: "nodes", isSignal: true, isRequired: false, transformFunction: null }, connections: { classPropertyName: "connections", publicName: "connections", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { nodeActionsEvent: "nodeActionsEvent", action: "action", nodes: "nodesChange", connections: "connectionsChange" }, host: { classAttribute: "flex h-full bg-surface-200 dark:bg-surface-700 relative rounded-2xl overflow-hidden" }, providers: [DialogService], queries: [{ propertyName: "nodeDialogTemplate", first: true, predicate: ["nodeDialog"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "fCanvas", first: true, predicate: FCanvasComponent, descendants: true, isSignal: true }, { propertyName: "fFlowComponent", first: true, predicate: FFlowComponent, descendants: true, isSignal: true }, { propertyName: "fCanvasComponent", first: true, predicate: FCanvasComponent, descendants: true, isSignal: true }, { propertyName: "fZoomDirective", first: true, predicate: FZoomDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<!-- structure-builder.html -->\n@if (availableTabs().length > 0) {\n <mt-card\n class=\"absolute ms-4 mt-4 z-1 h-[calc(100%---spacing(8))] w-1/5 min-w-xs\"\n >\n <ng-template #headless>\n <!-- Header -->\n <div class=\"flex items-center justify-between px-4 pt-5\">\n <h3 class=\"text-xl font-semibold\">\n {{ \"structureBuilder.levelTemplates\" | transloco }}\n </h3>\n </div>\n\n <!-- Tabs using PrimeNG -->\n <p-tabs\n [(value)]=\"activeTab\"\n styleClass=\"structure-tabs \"\n class=\"h-full overflow-hidden\"\n >\n <p-tablist>\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tab [value]=\"i.toString()\">{{ tab | titlecase }}</p-tab>\n }\n </p-tablist>\n <p-tabpanels class=\"bg-transparent! p-0! overflow-auto\">\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tabpanel [value]=\"i.toString()\">\n <p class=\"text-xs text-muted py-3 px-4\">\n {{ \"structureBuilder.dragToAdd\" | transloco }}\n </p>\n\n <!-- Node List -->\n <div class=\"space-y-1 px-4\">\n @for (node of currentTabNodes(); track node.id) {\n <div\n fExternalItem\n [fData]=\"node\"\n class=\"group select-none relative flex items-center gap-3 py-3 px-4 hover:bg-emphasis hover:border-solid transition-colors rounded-lg border-1 border-dashed border-color border-surface-300 dark:border-surface-500 cursor-move transition-colors\"\n >\n <!-- Node Icon with color -->\n <div class=\"text-primary text-lg\">\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\n </div>\n\n <!-- Node Name -->\n <span class=\"text-base font-medium flex-1\">{{\n node.label\n }}</span>\n </div>\n }\n\n @if (currentTabNodes().length === 0) {\n <div class=\"text-center py-8 text-gray-400\">\n <p class=\"text-sm\">\n {{\n \"structureBuilder.allItemsInUse\"\n | transloco: { tab: tab }\n }}\n </p>\n </div>\n }\n </div>\n </p-tabpanel>\n }\n </p-tabpanels>\n </p-tabs>\n </ng-template>\n </mt-card>\n} @else if (availableNodes().length > 0) {\n <mt-card\n [title]=\"'structureBuilder.steps' | transloco\"\n class=\"absolute top-4 start-4 z-1 w-64\"\n >\n <div class=\"flex flex-col gap-2\">\n @for (node of availableNodes(); track node.id) {\n <div\n fExternalItem\n [fData]=\"node\"\n class=\"group select-none relative flex items-center gap-3 py-3 px-4 hover:bg-emphasis hover:border-solid transition-colors rounded-lg border-1 border-dashed border-color border-surface-300 dark:border-surface-500 cursor-move bg-content\"\n >\n <!-- Node Icon with color -->\n <div class=\"text-primary text-lg\">\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\n </div>\n\n <!-- Node Name -->\n <span class=\"text-base font-medium flex-1\">{{ node.label }}</span>\n </div>\n }\n </div>\n </mt-card>\n}\n<!-- Left Sidebar -->\n\n<!-- Main Canvas Area -->\n<div class=\"flex-1 z-0 relative\">\n <ng-content select=\"[flowContent]\"></ng-content>\n\n <f-flow\n fDraggable\n (fLoaded)=\"onLoaded()\"\n (fCreateNode)=\"onCreateNode($event)\"\n (fCreateConnection)=\"onCreateConnection($event)\"\n class=\"size-full\"\n >\n <f-background>\n <f-circle-pattern color=\"#b5b5b5\"></f-circle-pattern>\n </f-background>\n <f-canvas fZoom [fZoomMinimum]=\"0.1\" [fZoomMaximum]=\"2\">\n <f-connection-for-create fBehavior=\"floating\" fType=\"straight\">\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-connection-for-create>\n <f-snap-connection\n fBehavior=\"fixed\"\n fType=\"segment\"\n class=\"z-1\"\n [fSnapThreshold]=\"100\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-snap-connection>\n\n <f-connection-for-create></f-connection-for-create>\n\n <!-- Enhanced Connections with Edit Button -->\n @for (connection of connectionsComputed(); track connection.id) {\n <f-connection\n [fReassignDisabled]=\"true\"\n [fOutputId]=\"connection.from\"\n [fInputId]=\"connection.to\"\n fBehavior=\"fixed\"\n fType=\"segment\"\n [ngClass]=\"{ 'connection-loading': connection.loading, 'z-1': true }\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <div\n fConnectionCenter\n class=\"flex items-center gap-1 bg-content rounded-md p-1 shadow-sm\"\n >\n @if (!connection.loading) {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.edit-05'\"\n (click)=\"openConnectionDialog(connection)\"\n >\n </mt-button>\n <mt-button\n size=\"small\"\n variant=\"text\"\n severity=\"danger\"\n [icon]=\"'general.trash-01'\"\n (click)=\"removeConnection(connection)\"\n >\n </mt-button>\n } @else {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.loading-01'\"\n >\n </mt-button>\n }\n </div>\n </f-connection>\n }\n\n <!-- Enhanced Nodes with Edit Button -->\n @for (node of nodesWithComputedProps(); track node._computedId) {\n <mt-card\n fNode\n fDragHandle\n [fNodePosition]=\"{\n x: node.configuration?.x || 200,\n y: node.configuration?.y || 100,\n }\"\n (fNodePositionChange)=\"onNodePositionChange($event, node._computedId)\"\n [style.--node-data-border-color]=\"node._computedColor\"\n >\n <ng-template #headless>\n @if (!node.loading) {\n <div\n class=\"flex flex-col items-center min-w-3xs gap-2 px-3 py-4 rounded-t-2xl bg-white dark:bg-surface-800 border-(--p-content-border-color)\"\n >\n @if (node._computedIcon) {\n <mt-icon\n class=\"text-2xl text-primary\"\n [icon]=\"node._computedIcon\"\n />\n }\n <div>{{ node._computedName }}</div>\n </div>\n <div\n class=\"flex justify-center pt-3 mb-4 gap-2 bg-surface-50 dark:bg-surface-900\"\n >\n @for (\n action of nodeActions() | filterActions: node;\n track action.key\n ) {\n <mt-button\n [size]=\"action?.size || 'small'\"\n [variant]=\"action?.variant\"\n [icon]=\"action?.icon\"\n [tooltip]=\"action?.tooltip\"\n [severity]=\"action?.severity\"\n (onClick)=\"buttonAction(action, node)\"\n >\n </mt-button>\n }\n </div>\n <div\n fNodeInput\n [fInputId]=\"node._computedId\"\n fInputConnectableSide=\"top\"\n [fInputMultiple]=\"true\"\n class=\"top\"\n ></div>\n\n <div\n fNodeOutput\n [fOutputId]=\"node._computedId\"\n fOutputConnectableSide=\"bottom\"\n [isSelfConnectable]=\"false\"\n [fOutputMultiple]=\"true\"\n class=\"bottom bg-surface-50 dark:bg-surface-900\"\n ></div>\n } @else {\n <p-skeleton height=\"10rem\" width=\"15rem\" />\n }\n\n <!-- Node Header with Edit Button -->\n </ng-template>\n </mt-card>\n }\n </f-canvas>\n </f-flow>\n</div>\n<mt-toolbar />\n", styles: ["::ng-deep :root{--background-element-color: rgba(0, 0, 0, .1);--selection-area-color: rgba(100, 108, 255, .14);--disabled-color: #e2e2e2;--node-background-color: #ffffff;--node-background-color-inverse: #000000;--node-border-radius: 2px;--node-border-color: rgba(60, 60, 67, .36);--node-selected-border-color: #3451b2;--node-color: rgba(60, 60, 67, .78);--node-shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--connection-color: var(--p-text-color);--snap-connection-color: var(--p-text-muted-color);--connection-gradient-1: #b8272c;--connection-gradient-2: #30a46c;--outlet-color: #3451b2;--input-output-color: rgba(60, 60, 67, .78);--minimap-background-color: #ffffff;--minimap-node-color: rgba(60, 60, 67);--minimap-node-selected-color: var(--p-primary-color);--minimap-view-color: rgba(100, 108, 255, .14)}::ng-deep :root.dark{--background-element-color: rgba(255, 255, 255, .1);--selection-area-color: rgba(100, 108, 255, .16);--disabled-color: #2c2c2e;--node-background-color: #000000;--node-background-color-inverse: #ffffff;--node-border-radius: 2px;--node-border-color: rgba(235, 235, 245, .38);--node-selected-border-color: #a8b1ff;--node-color: rgba(235, 235, 245, .6);--node-shadow: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 2px rgba(0, 0, 0, .06);--connection-color: rgba(235, 235, 245, 1);--snap-connection-color: rgba(235, 235, 245, .2);--connection-gradient-1: #f66f81;--connection-gradient-2: #298459;--outlet-color: #a8b1ff;--input-output-color: rgba(235, 235, 245, .6);--minimap-background-color: #1b1b1f;--minimap-node-color: rgba(255, 255, 245, .86);--minimap-node-selected-color: #a8b1ff;--minimap-view-color: rgba(100, 108, 255, .16)}::ng-deep :root{--form-field-text-color: var(--node-color);--form-field-background: var(--minimap-view-color);--form-field-panel-shadow: var(--shadow-4);--form-field-panel-background: var(--node-background-color);--form-field-active-color: var(--minimap-node-selected-color)}::ng-deep f-flow .f-connection{cursor:pointer}::ng-deep f-flow .f-connection .f-connection-drag-handle{fill:transparent}::ng-deep f-flow .f-connection .f-connection-selection{fill:none}::ng-deep f-flow .f-connection .f-connection-path{fill:none;stroke:var(--connection-color);stroke-width:2}::ng-deep f-flow .f-connection .f-connection-marker{fill:var(--connection-color)}::ng-deep f-flow .f-connection .f-marker path,::ng-deep f-flow .f-connection .f-marker circle{fill:var(--connection-color)}::ng-deep f-flow .f-connection .f-connection-text,::ng-deep f-flow .f-connection .f-connection-center{fill:var(--connection-color);color:var(--connection-color)}::ng-deep f-flow .f-connection.f-snap-connection .f-connection-path{stroke:var(--snap-connection-color)}::ng-deep f-flow .f-connection .f-connection-center{display:none}::ng-deep f-flow .f-connection.connection-loading .f-connection-center{display:block}::ng-deep f-flow .f-connection.f-selected .f-connection-center{display:block}::ng-deep f-flow .f-connection.f-selected .f-connection-path{stroke:var(--minimap-node-selected-color)}::ng-deep f-flow .f-connection.f-selected .f-marker path,::ng-deep f-flow .f-connection.f-selected .f-marker circle{fill:var(--p-primary-color);stroke:var(--minimap-node-selected-color)}::ng-deep f-flow .f-connection .f-connection-selection{fill:none;stroke:transparent;stroke-width:20;cursor:pointer}::ng-deep f-flow .f-connection:hover .f-connection-selection{stroke:var(--p-primary-color);opacity:.1}::ng-deep f-flow .f-connection.f-snap-connection .f-connection-path{stroke:var(--snap-connection-color);stroke-width:2px}::ng-deep f-flow .f-connection.f-snap-connection .f-marker path,::ng-deep f-flow .f-connection.f-snap-connection .f-marker circle{fill:var(--snap-connection-color)}::ng-deep f-flow .f-connection.f-snap-connection .f-connection-selection{fill:transparent!important;stroke:transparent!important}::ng-deep f-flow .f-connection.f-connection-for-create .f-connection-selection{fill:transparent!important;stroke:transparent!important}::ng-deep f-flow .f-connection-for-create{pointer-events:none}::ng-deep f-flow .f-connection-for-create .f-connection .f-connection-path{stroke:var(--snap-connection-color);stroke-width:3px;stroke-dasharray:8,4;animation:connection-dash 1s linear infinite}::ng-deep f-flow .f-connection-for-create .f-connection .f-marker path,::ng-deep f-flow .f-connection-for-create .f-connection .f-marker circle{fill:var(--snap-connection-color)}@keyframes connection-dash{to{stroke-dashoffset:-12}}.f-node-input:not(.f-node),.f-node-output:not(.f-node){position:absolute;width:100%;height:16px;border-radius:0 0 1rem 1rem}.f-node-input:not(.f-node):hover,.f-node-output:not(.f-node):hover{border:.5px dashed var(--p-primary-color)}.f-node-input:not(.f-node).top,.f-node-output:not(.f-node).top{top:0}.f-node-input:not(.f-node).bottom,.f-node-output:not(.f-node).bottom{bottom:0}.f-node-input:not(.f-node).f-node-output-not-connectable,.f-node-input:not(.f-node).f-node-input-not-connectable,.f-node-output:not(.f-node).f-node-output-not-connectable,.f-node-output:not(.f-node).f-node-input-not-connectable{background-color:var(--disabled-color)}.f-node-input:not(.f-node){border-radius:4px}.f-node-input,.f-node-output{z-index:10;pointer-events:all}.examples-toolbar{display:flex;justify-content:flex-end;align-items:center;flex-wrap:wrap;gap:8px;position:absolute;right:16px;top:16px}.examples-toolbar button{font-weight:500;border:none;border-radius:2px;padding:4px 8px;line-height:normal}.f-node:before{content:\"\";position:absolute;width:100%;height:4rem;border-radius:var(--radius-2xl);z-index:-1;top:-.25rem;background-color:var(--node-data-border-color)}.connection-center{display:flex;gap:8px;background:var(--node-background-color);border:1px solid var(--node-border-color);border-radius:4px;padding:4px;box-shadow:var(--node-shadow)}.connection-center .connection-edit-btn,.connection-center .connection-delete-btn{background:none;border:none;width:24px;height:24px;border-radius:4px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.connection-center .connection-edit-btn:hover,.connection-center .connection-delete-btn:hover{background-color:var(--minimap-view-color)}.connection-center .connection-edit-btn{color:var(--minimap-node-selected-color)}.connection-center .connection-delete-btn{color:#ef4444}.node-edit-btn,.node-delete-btn{background:none;border:none;width:32px;height:32px;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease}.node-edit-btn:hover,.node-delete-btn:hover{background-color:var(--minimap-view-color)}.node-edit-btn{color:var(--minimap-node-selected-color)}.node-delete-btn{color:#ef4444}.node-properties{max-height:200px;overflow-y:auto}.node-properties .property-item{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid var(--node-border-color);font-size:12px}.node-properties .property-item .property-key{font-weight:600;color:var(--node-color);margin-right:8px}.node-properties .property-item .property-value{color:var(--minimap-node-selected-color);word-break:break-word}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: FFlowModule }, { kind: "component", type: i2$1.FFlowComponent, selector: "f-flow", inputs: ["fFlowId"], outputs: ["fLoaded"] }, { kind: "component", type: i2$1.FCanvasComponent, selector: "f-canvas", inputs: ["position", "scale", "debounceTime"], outputs: ["fCanvasChange"] }, { kind: "component", type: i2$1.FBackgroundComponent, selector: "f-background" }, { kind: "component", type: i2$1.FCirclePatternComponent, selector: "f-circle-pattern", inputs: ["id", "color", "radius"] }, { kind: "directive", type: i2$1.FZoomDirective, selector: "f-canvas[fZoom]", inputs: ["fZoom", "fWheelTrigger", "fDblClickTrigger", "fZoomMinimum", "fZoomMaximum", "fZoomStep", "fZoomDblClickStep"], exportAs: ["fComponent"] }, { kind: "directive", type: i2$1.FExternalItemDirective, selector: "[fExternalItem]", inputs: ["fExternalItemId", "fData", "fDisabled", "fPreview", "fPreviewMatchSize", "fPlaceholder"] }, { kind: "component", type: i2$1.FConnectionComponent, selector: "f-connection", inputs: ["fConnectionId", "fText", "fTextStartOffset", "fOutputId", "fInputId", "fRadius", "fOffset", "fBehavior", "fType", "fSelectionDisabled", "fReassignableStart", "fReassignDisabled", "fInputSide", "fOutputSide"], exportAs: ["fComponent"] }, { kind: "directive", type: i2$1.FConnectionCenterDirective, selector: "[fConnectionCenter]", inputs: ["fConnectionCenter"] }, { kind: "component", type: i2$1.FConnectionForCreateComponent, selector: "f-connection-for-create", inputs: ["fRadius", "fOffset", "fBehavior", "fType", "fInputSide", "fOutputSide"] }, { kind: "directive", type: i2$1.FMarkerDirective, selector: "svg[fMarker]", inputs: ["width", "height", "refX", "refY", "type", "orient", "markerUnits"] }, { kind: "component", type: i2$1.FSnapConnectionComponent, selector: "f-snap-connection", inputs: ["fSnapThreshold", "fRadius", "fOffset", "fBehavior", "fType", "fInputSide", "fOutputSide"] }, { kind: "directive", type: i2$1.FNodeInputDirective, selector: "[fNodeInput]", inputs: ["fInputId", "fInputCategory", "fInputMultiple", "fInputDisabled", "fInputConnectableSide"], exportAs: ["fNodeInput"] }, { kind: "directive", type: i2$1.FNodeOutputDirective, selector: "[fNodeOutput]", inputs: ["fOutputId", "fOutputMultiple", "fOutputDisabled", "fOutputConnectableSide", "isSelfConnectable", "fCanBeConnectedInputs"], exportAs: ["fNodeOutput"] }, { kind: "directive", type: i2$1.FNodeDirective, selector: "[fNode]", inputs: ["fNodeId", "fNodeParentId", "fNodePosition", "fNodeSize", "fNodeRotate", "fConnectOnNode", "fMinimapClass", "fNodeDraggingDisabled", "fNodeSelectionDisabled", "fIncludePadding", "fAutoExpandOnChildHit", "fAutoSizeToFitChildren"], outputs: ["fNodePositionChange", "fNodeSizeChange", "fNodeRotateChange"], exportAs: ["fComponent"] }, { kind: "directive", type: i2$1.FDragHandleDirective, selector: "[fDragHandle]" }, { kind: "directive", type: i2$1.FDraggableDirective, selector: "f-flow[fDraggable]", inputs: ["fDraggableDisabled", "fMultiSelectTrigger", "fReassignConnectionTrigger", "fCreateConnectionTrigger", "fNodeResizeTrigger", "fNodeRotateTrigger", "fNodeMoveTrigger", "fCanvasMoveTrigger", "fExternalItemTrigger", "fEmitOnNodeIntersect", "vCellSize", "hCellSize", "fCellSizeWhileDragging"], outputs: ["fSelectionChange", "fNodeIntersectedWithConnections", "fCreateNode", "fMoveNodes", "fReassignConnection", "fCreateConnection", "fDropToGroup", "fDragStarted", "fDragEnded"], exportAs: ["fDraggable"] }, { kind: "ngmodule", type: TabsModule }, { kind: "component", type: i3$1.Tabs, selector: "p-tabs", inputs: ["value", "scrollable", "lazy", "selectOnFocus", "showNavigators", "tabindex"], outputs: ["valueChange"] }, { kind: "component", type: i3$1.TabPanels, selector: "p-tabpanels" }, { kind: "component", type: i3$1.TabPanel, selector: "p-tabpanel", inputs: ["lazy", "value"], outputs: ["valueChange"] }, { kind: "component", type: i3$1.TabList, selector: "p-tablist" }, { kind: "component", type: i3$1.Tab, selector: "p-tab", inputs: ["value", "disabled"], outputs: ["valueChange"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: Toolbar, selector: "mt-toolbar", inputs: ["size"] }, { kind: "component", type: Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: FilterActionsPipe, name: "filterActions" }, { kind: "pipe", type: i3.TranslocoPipe, name: "transloco" }] });
|
|
479
479
|
}
|
|
480
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.
|
|
480
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: StructureBuilder, decorators: [{
|
|
481
481
|
type: Component,
|
|
482
482
|
args: [{ selector: 'mt-structure-builder', standalone: true, imports: [
|
|
483
483
|
CommonModule,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"masterteam-structure-builder.mjs","sources":["../../../../packages/masterteam/structure-builder/src/lib/node-form-dialog/node-form-dialog.ts","../../../../packages/masterteam/structure-builder/src/lib/node-form-dialog/node-form-dialog.html","../../../../packages/masterteam/structure-builder/src/lib/connection-form-dialog/connection-form-dialog.ts","../../../../packages/masterteam/structure-builder/src/lib/connection-form-dialog/connection-form-dialog.html","../../../../packages/masterteam/structure-builder/src/lib/toolbar/toolbar.ts","../../../../packages/masterteam/structure-builder/src/lib/toolbar/toolbar.html","../../../../packages/masterteam/structure-builder/src/lib/filter-actions.pipe.ts","../../../../packages/masterteam/structure-builder/src/lib/structure-builder.ts","../../../../packages/masterteam/structure-builder/src/lib/structure-builder.html","../../../../packages/masterteam/structure-builder/src/public-api.ts","../../../../packages/masterteam/structure-builder/src/masterteam-structure-builder.ts"],"sourcesContent":["import { Component, inject, AfterViewInit, OnInit, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { ModalService } from '@masterteam/components/modal';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { Button } from '@masterteam/components/button';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { TranslocoModule } from '@jsverse/transloco';\n\nexport interface NodeFormData {\n id: string;\n label: string;\n description?: string;\n [key: string]: any;\n}\n\n@Component({\n selector: 'mt-node-form-dialog',\n standalone: true,\n imports: [\n CommonModule,\n DynamicForm,\n Button,\n ReactiveFormsModule,\n TranslocoModule,\n ],\n templateUrl: './node-form-dialog.html',\n styleUrls: ['./node-form-dialog.scss'],\n})\nexport class NodeFormDialogComponent implements AfterViewInit, OnInit {\n readonly modalService: ModalService = inject(ModalService);\n ref: ModalRef = inject(ModalRef);\n dynamicFormControl = new FormControl();\n nodeData: NodeFormData;\n formSchema: any;\n data = input<any>(null);\n\n ngOnInit() {\n this.nodeData = this.data()?.node || {};\n this.formSchema = this.data()?.formSchema || [];\n }\n ngAfterViewInit(): void {\n this.dynamicFormControl.setValue(this.nodeData);\n }\n get templateContext() {\n return {\n node: this.nodeData,\n save: (item: any = {}) => this.onSave(item),\n cancel: () => this.onCancel(),\n close: () => this.onCancel(),\n };\n }\n onSave(item: any = {}) {\n const updatedNode = {\n ...this.nodeData,\n ...this.dynamicFormControl.value,\n ...item,\n };\n this.ref.close(updatedNode);\n }\n\n onCancel() {\n this.ref.close();\n }\n}\n","<div [class]=\"[modalService.contentClass, 'p-4']\">\n @if (this.data()?.template) {\n <ng-container\n *ngTemplateOutlet=\"data().template; context: templateContext\"\n ></ng-container>\n } @else {\n @if (nodeData) {\n <mt-dynamic-form\n [formConfig]=\"formSchema\"\n [formControl]=\"dynamicFormControl\"\n ></mt-dynamic-form>\n }\n }\n</div>\n<div [class]=\"modalService.footerClass\">\n <mt-button\n [label]=\"'structureBuilder.cancel' | transloco\"\n severity=\"secondary\"\n (onClick)=\"onCancel()\"\n >\n </mt-button>\n <mt-button\n [disabled]=\"!dynamicFormControl.valid\"\n [label]=\"'structureBuilder.saveChanges' | transloco\"\n severity=\"primary\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n</div>\n","import { ModalService } from '@masterteam/components/modal';\nimport { Component, inject, AfterViewInit, input, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { Button } from '@masterteam/components/button';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { TranslocoModule } from '@jsverse/transloco';\n\n@Component({\n selector: 'mt-connection-form-dialog',\n standalone: true,\n imports: [\n CommonModule,\n DynamicForm,\n Button,\n ReactiveFormsModule,\n TranslocoModule,\n ],\n templateUrl: './connection-form-dialog.html',\n styleUrls: ['./connection-form-dialog.scss'],\n})\nexport class ConnectionFormDialogComponent implements AfterViewInit, OnInit {\n readonly modalService: ModalService = inject(ModalService);\n private ref: ModalRef = inject(ModalRef);\n data = input<any>(null);\n dynamicFormControl = new FormControl();\n connectionData: any;\n formSchema: any;\n\n ngOnInit() {\n this.connectionData = this.data()?.connection || {};\n this.formSchema = this.data()?.formSchema || [];\n }\n ngAfterViewInit(): void {\n this.dynamicFormControl.setValue(this.connectionData);\n }\n\n onSave(): void {\n if (this.dynamicFormControl.valid) {\n this.ref.close({\n ...this.connectionData,\n ...this.dynamicFormControl.value,\n });\n }\n }\n\n onCancel(): void {\n this.ref.close();\n }\n}\n","<div [class]=\"[modalService.contentClass, 'p-4']\">\n @if (connectionData && formSchema?.sections.length > 0) {\n <mt-dynamic-form\n [formConfig]=\"formSchema\"\n [formControl]=\"dynamicFormControl\"\n ></mt-dynamic-form>\n }\n</div>\n\n<div [class]=\"modalService.footerClass\">\n <mt-button\n [label]=\"'structureBuilder.cancel' | transloco\"\n severity=\"secondary\"\n (onClick)=\"onCancel()\"\n >\n </mt-button>\n <mt-button\n [disabled]=\"!dynamicFormControl.valid\"\n [label]=\"'structureBuilder.saveChanges' | transloco\"\n severity=\"primary\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { Button } from '@masterteam/components/button';\nimport { ButtonGroup } from '@masterteam/components/button-group';\nimport { PointExtensions } from '@foblex/2d';\nimport { StructureBuilder } from '../structure-builder';\n\n@Component({\n selector: 'mt-toolbar',\n imports: [Button, ButtonGroup],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.css',\n})\nexport class Toolbar {\n readonly size = input<'small' | 'large' | undefined>();\n\n private builderComponent = inject(StructureBuilder);\n\n public onZoomIn(): void {\n this.builderComponent.fZoomDirective()?.zoomIn();\n }\n\n public onZoomOut(): void {\n this.builderComponent.fZoomDirective()?.zoomOut();\n }\n\n public onFitToScreen(): void {\n this.builderComponent\n .fCanvasComponent()\n ?.fitToScreen(PointExtensions.initialize(250, 250), true);\n }\n\n public onOneToOne(): void {\n this.builderComponent.fCanvasComponent()?.resetScaleAndCenter();\n }\n public autoLayout(): void {\n this.builderComponent.maybeAutoLayout();\n }\n}\n","<mt-button\n (onClick)=\"autoLayout()\"\n class=\"bg-content rounded-(--p-button-border-radius)\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"arrow.refresh-cw-05\"\n></mt-button>\n\n<mt-buttongroup class=\"bg-content rounded-(--p-button-border-radius)\">\n <mt-button\n (onClick)=\"onZoomOut()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.minus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onZoomIn()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.plus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onFitToScreen()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"layout.grid-02\"\n ></mt-button>\n</mt-buttongroup>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Actions } from './structure-builder';\n\n@Pipe({\n name: 'filterActions',\n standalone: true,\n pure: true,\n})\nexport class FilterActionsPipe implements PipeTransform {\n transform(actions: Actions[], node: any): Actions[] {\n if (!actions || !Array.isArray(actions)) {\n return [];\n }\n\n return actions.filter((action) => {\n // If no condition is provided, always show the action\n if (!action.condition) {\n return true;\n }\n\n // Evaluate the condition function\n return action.condition(node);\n });\n }\n}\n","import {\n Component,\n input,\n model,\n signal,\n computed,\n inject,\n contentChild,\n TemplateRef,\n viewChild,\n output,\n OnInit,\n} from '@angular/core';\nimport { TranslocoService, TranslocoModule } from '@jsverse/transloco';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DialogService } from '@masterteam/components/dialog';\nimport { DrawerService } from '@masterteam/components/dynamic-drawer';\nimport { ModalService } from '@masterteam/components/modal';\nimport { TabsModule } from 'primeng/tabs';\nimport {\n EFMarkerType,\n FCanvasComponent,\n FCreateConnectionEvent,\n FCreateNodeEvent,\n FFlowComponent,\n FFlowModule,\n FZoomDirective,\n} from '@foblex/flow';\nimport { Button } from '@masterteam/components/button';\nimport { Card } from '@masterteam/components/card';\nimport { Icon } from '@masterteam/icons';\nimport { NodeFormDialogComponent } from './node-form-dialog/node-form-dialog';\nimport { ConnectionFormDialogComponent } from './connection-form-dialog/connection-form-dialog';\nimport { DynamicFormConfig } from '@masterteam/components';\nimport { Toolbar } from './toolbar/toolbar';\nimport { FilterActionsPipe } from './filter-actions.pipe';\n\n// 🔁 dagre & helpers – same approach as lib sample\nimport * as dagre from 'dagre';\nimport { graphlib } from 'dagre';\nimport Graph = graphlib.Graph;\nimport { IPoint, PointExtensions } from '@foblex/2d';\nimport { Skeleton } from 'primeng/skeleton'; // TO DO\n\nexport interface Node {\n configuration?: {\n x?: number;\n y?: number;\n };\n [key: string]: any;\n loading?: boolean;\n}\n\nexport interface NodeFieldsMapping {\n id?: string;\n name?: string;\n icon?: string;\n color?: string;\n}\n\nexport interface AvailableNode {\n id: string;\n label: string;\n icon: string;\n color: string;\n tab: string[];\n [key: string]: any;\n}\n\nexport interface Connection {\n id: string;\n from: string;\n to: string;\n [key: string]: any;\n}\n\nexport interface Actions {\n key: string;\n icon: string;\n variant: string;\n size: string;\n severity?: string;\n tooltip?: string;\n /**\n * Optional condition function to determine if action should be shown\n * @param node - The node object to evaluate\n * @returns true to show the action, false to hide it\n * @example\n * // Show delete only if node is not initial\n * condition: (node) => !node.isInitial\n *\n * // Show edit only if node has specific status\n * condition: (node) => node.status === 'draft'\n */\n condition?: (node: any) => boolean;\n}\n\nexport interface NodeActionEvent {\n action: Actions;\n node: AvailableNode;\n}\n\nexport type SBActionType =\n | 'createNode'\n | 'updateNode'\n | 'deleteNode'\n | 'createConnection'\n | 'updateConnection'\n | 'deleteConnection'\n | 'startCreating'\n | 'startUpdating';\n\nexport interface SBAction {\n action: SBActionType;\n data?: any;\n}\n\n// ✨ Direction & config — mirrors lib sample\nenum Direction {\n LEFT_TO_RIGHT = 'LR',\n TOP_TO_BOTTOM = 'TB',\n}\n\nconst CONFIGURATION = {\n [Direction.LEFT_TO_RIGHT]: {\n // kept for parity; sides aren’t directly used here but available if needed\n outputSide: 'RIGHT',\n inputSide: 'LEFT',\n },\n [Direction.TOP_TO_BOTTOM]: {\n outputSide: 'BOTTOM',\n inputSide: 'TOP',\n },\n} as const;\n\n@Component({\n selector: 'mt-structure-builder',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n FFlowModule,\n TabsModule,\n Button,\n Icon,\n Card,\n Toolbar,\n Skeleton,\n FilterActionsPipe,\n TranslocoModule,\n ],\n templateUrl: './structure-builder.html',\n styleUrl: './structure-builder.scss',\n providers: [DialogService],\n host: {\n class:\n 'flex h-full bg-surface-200 dark:bg-surface-700 relative rounded-2xl overflow-hidden',\n },\n})\nexport class StructureBuilder implements OnInit {\n readonly dialogService = inject(DialogService);\n readonly drawerService = inject(DrawerService);\n readonly modal: ModalService = inject(ModalService);\n private transloco = inject(TranslocoService);\n nodeActionsEvent = output<NodeActionEvent>();\n action = output<SBAction>();\n availableNodes = input<AvailableNode[]>([]);\n protected fCanvas = viewChild(FCanvasComponent);\n public fFlowComponent = viewChild(FFlowComponent);\n public fCanvasComponent = viewChild(FCanvasComponent);\n public fZoomDirective = viewChild(FZoomDirective);\n nodeForm = input<DynamicFormConfig>({ sections: [] });\n connectionForm = input<DynamicFormConfig>({ sections: [] });\n nodeActions = input<Actions[]>([]);\n nodeFields = input<NodeFieldsMapping>({\n id: 'id',\n name: 'name',\n icon: 'icon',\n color: 'color',\n });\n\n isAutoLayout = input<boolean>(true);\n addModalType = input<'drawer' | 'dialog'>('dialog');\n updateModalType = input<'drawer' | 'dialog'>('drawer');\n addModalStyleClass = input<string>('!w-[35rem]');\n updateModalStyleClass = input<string>('!w-[35rem]');\n addModalHeader = input<string>('Add Node');\n updateModalHeader = input<string>('Edit Node Properties');\n appendTo = input<string>('');\n nodes = model<Node[]>([]);\n connections = model<Connection[]>([]);\n nodeDialogTemplate = contentChild<TemplateRef<any>>('nodeDialog');\n\n activeTab = signal('0');\n protected readonly eMarkerType = EFMarkerType;\n\n protected configuration = signal(CONFIGURATION[Direction.TOP_TO_BOTTOM]);\n protected direction = signal<Direction>(Direction.TOP_TO_BOTTOM);\n\n private positions = signal<Record<string, IPoint>>({});\n private dialogRef: any;\n protected fields = computed(() => {\n const inputFields = this.nodeFields();\n return {\n id: inputFields.id || 'id',\n name: inputFields.name || 'name',\n icon: inputFields.icon || 'icon',\n color: inputFields.color || 'color',\n } as any;\n });\n\n availableTabs = computed(() => {\n const tabsSet = new Set<string>();\n this.availableNodes().forEach((node) => {\n if (node.tab && Array.isArray(node.tab)) {\n node.tab.forEach((tab) => tabsSet.add(tab));\n }\n });\n return Array.from(tabsSet).sort();\n });\n\n currentTabNodes = computed(() => {\n const tabs = this.availableTabs();\n const currentTabIndex = parseInt(this.activeTab());\n if (currentTabIndex >= tabs.length) return [];\n const currentTab = tabs[currentTabIndex];\n return this.availableNodes().filter((node) =>\n node.tab.includes(currentTab),\n );\n });\n\n nodesWithComputedProps = computed(() => {\n const fields = this.fields();\n const pos = this.positions();\n return this.nodes().map((node) => {\n const _computedId = String(this.getNestedValue(node, fields.id));\n const _computedName = this.getNestedValue(node, fields.name);\n const _computedIcon = this.getNestedValue(node, fields.icon);\n const _computedColor = this.getNestedValue(node, fields.color);\n const id = _computedId;\n const configuration = {\n ...(node.configuration ?? {}),\n ...(pos[id] ?? {}),\n };\n return {\n ...node,\n _computedId,\n _computedName,\n _computedIcon,\n _computedColor,\n configuration,\n };\n });\n });\n connectionsComputed = computed(() =>\n this.connections()?.map((c) => ({\n ...c,\n from: String(c.from),\n to: String(c.to),\n })),\n );\n coreFields = computed(() => {\n const fields = this.fields();\n return new Set([\n ...Object.values(fields),\n 'configuration',\n '_computedId',\n '_computedName',\n '_computedIcon',\n '_computedColor',\n ]);\n });\n\n constructor() {}\n\n public ngOnInit(): void {\n this.getData(new dagre.graphlib.Graph(), this.direction());\n }\n\n protected onLoaded(): void {\n this.fitToScreen();\n }\n\n onCreateNode(event: FCreateNodeEvent): void {\n const nodeData = event.data as AvailableNode;\n if (!nodeData) return;\n\n const newNode: Node = {\n ...nodeData,\n configuration: {\n x: event.rect.x,\n y: event.rect.y,\n },\n };\n\n if (this.nodeForm()?.sections.length > 0 || this.nodeDialogTemplate()) {\n this.openNodeDialog(newNode, true);\n } else {\n this.action.emit({ action: 'createNode', data: newNode });\n }\n }\n\n onNodePositionChange(event: any, nodeId: string): void {\n const position = event;\n if (nodeId && position) {\n this.positions.update((p) => ({\n ...p,\n [nodeId]: { x: position.x, y: position.y },\n }));\n }\n }\n\n onCreateConnection(event: FCreateConnectionEvent): void {\n const newConnection: Connection = {\n id: this.generateConnectionId(),\n from: event.fOutputId!,\n to: event.fInputId!,\n };\n if (!event.fInputId! || !event.fOutputId!) {\n return;\n }\n const exists = this.connectionsComputed().some(\n (conn) =>\n conn.from === newConnection.from && conn.to === newConnection.to,\n );\n\n if (!exists) {\n this.action.emit({ action: 'createConnection', data: newConnection });\n }\n }\n\n openNodeDialog(node: Node, isNewNode: boolean = false): void {\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n const modalType = isNewNode ? this.addModalType() : this.updateModalType();\n this.action.emit({\n action: isNewNode ? 'startCreating' : 'startUpdating',\n data: node,\n });\n\n const styleClass = isNewNode\n ? this.addModalStyleClass()\n : this.updateModalStyleClass();\n const header = isNewNode ? this.addModalHeader() : this.updateModalHeader();\n\n const config = {\n header: header,\n styleClass: styleClass,\n focusOnShow: this.nodeDialogTemplate() ? false : true,\n appendTo: this.appendTo(),\n position: modalType === 'drawer' ? 'end' : undefined,\n inputValues: {\n data: {\n node: node,\n formSchema: this.nodeForm(),\n template: this.nodeDialogTemplate(),\n },\n },\n };\n this.dialogRef = this.modal.openModal(\n NodeFormDialogComponent,\n modalType,\n config,\n );\n\n this.dialogRef.onClose.subscribe((result: any) => {\n if (result) {\n if (isNewNode) {\n const newNodeWithFormData = { ...node, ...result };\n this.action.emit({ action: 'createNode', data: newNodeWithFormData });\n } else {\n this.onNodeFormSubmit(result);\n }\n }\n });\n }\n\n openConnectionDialog(connection: Connection): void {\n const ref = this.modal.openModal(ConnectionFormDialogComponent, 'dialog', {\n header: this.transloco.translate(\n 'structureBuilder.editConnectionProperties',\n ),\n width: '600px',\n\n inputValues: {\n data: {\n connection: connection,\n formSchema: this.connectionForm(),\n },\n },\n });\n\n ref.onClose.subscribe((result: any) => {\n if (result) {\n this.onConnectionFormSubmit(result);\n }\n });\n }\n\n onNodeFormSubmit(formData: any): void {\n const nodeId = formData[this.fields().id];\n if (nodeId) {\n this.action.emit({ action: 'updateNode', data: formData });\n }\n }\n\n onConnectionFormSubmit(formData: any): void {\n const connectionId = formData.id;\n if (connectionId) {\n this.action.emit({ action: 'updateConnection', data: formData });\n }\n }\n\n removeNode(node: any): void {\n this.action.emit({ action: 'deleteNode', data: node });\n }\n\n removeConnection(connection: any): void {\n this.action.emit({ action: 'deleteConnection', data: connection });\n }\n\n buttonAction(action: any, node: any) {\n this.nodeActionsEvent.emit({ action, node });\n if (action.key === 'edit') {\n this.openNodeDialog(node);\n } else if (action.key === 'delete') {\n this.removeNode(node);\n }\n }\n\n protected fitToScreen(): void {\n const area = this.nodes()?.length * 70;\n this.fCanvasComponent()?.fitToScreen(\n PointExtensions.initialize(area, area),\n false,\n );\n }\n\n private getData(graph: Graph, direction: Direction): void {\n this.direction.set(direction);\n if (this.isAutoLayout()) {\n this.fFlowComponent()?.reset();\n }\n this.updateGraph(graph, direction);\n this.applyGraphPositions(graph);\n }\n\n private updateGraph(graph: Graph, direction: Direction): void {\n this.configuration.set(CONFIGURATION[Direction.TOP_TO_BOTTOM]);\n graph.setGraph({ rankdir: direction });\n\n const SIZE = { width: 300, height: 200 };\n this.nodes().forEach((n) => {\n graph.setNode(n[this.fields().id], {\n width: SIZE.width,\n height: SIZE.height,\n });\n });\n\n this.connectionsComputed().forEach((c) => {\n const fromId = c.from;\n const toId = c.to;\n if (fromId && toId && fromId !== toId) {\n graph.setEdge(fromId, toId, {});\n }\n });\n\n dagre.layout(graph);\n }\n\n private applyGraphPositions(graph: Graph): void {\n const positionsById: Record<string, IPoint> = {};\n graph.nodes().forEach((key) => {\n const gNode = graph.node(key);\n positionsById[key] = { x: gNode.x, y: gNode.y };\n });\n this.positions.update((old) => ({ ...old, ...positionsById }));\n }\n\n private getNestedValue(obj: unknown, path?: string | null): unknown {\n if (!path) return undefined;\n const keys = path\n .replace(/\\[(\\w+)\\]/g, '.$1')\n .replace(/^\\./, '')\n .split('.')\n .filter(Boolean);\n\n return keys.reduce<unknown>(\n (acc, k) => (acc == null ? undefined : (acc as any)[k]),\n obj,\n );\n }\n\n maybeAutoLayout(): void {\n if (!this.isAutoLayout() || this.nodes().length === 0) return;\n this.getData(new dagre.graphlib.Graph(), this.direction());\n }\n\n private generateConnectionId(): string {\n return `conn-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private extractNodeId(connectionEndId: string): string {\n return (connectionEndId || '').replace(/-(in|out)$/, '');\n }\n}\n","<!-- structure-builder.html -->\n@if (availableTabs().length > 0) {\n <mt-card\n class=\"absolute ms-4 mt-4 z-1 h-[calc(100%---spacing(8))] w-1/5 min-w-xs\"\n >\n <ng-template #headless>\n <!-- Header -->\n <div class=\"flex items-center justify-between px-4 pt-5\">\n <h3 class=\"text-xl font-semibold\">\n {{ \"structureBuilder.levelTemplates\" | transloco }}\n </h3>\n </div>\n\n <!-- Tabs using PrimeNG -->\n <p-tabs\n [(value)]=\"activeTab\"\n styleClass=\"structure-tabs \"\n class=\"h-full overflow-hidden\"\n >\n <p-tablist>\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tab [value]=\"i.toString()\">{{ tab | titlecase }}</p-tab>\n }\n </p-tablist>\n <p-tabpanels class=\"bg-transparent! p-0! overflow-auto\">\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tabpanel [value]=\"i.toString()\">\n <p class=\"text-xs text-muted py-3 px-4\">\n {{ \"structureBuilder.dragToAdd\" | transloco }}\n </p>\n\n <!-- Node List -->\n <div class=\"space-y-1 px-4\">\n @for (node of currentTabNodes(); track node.id) {\n <div\n fExternalItem\n [fData]=\"node\"\n class=\"group select-none relative flex items-center gap-3 py-3 px-4 hover:bg-emphasis hover:border-solid transition-colors rounded-lg border-1 border-dashed border-color border-surface-300 dark:border-surface-500 cursor-move transition-colors\"\n >\n <!-- Node Icon with color -->\n <div class=\"text-primary text-lg\">\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\n </div>\n\n <!-- Node Name -->\n <span class=\"text-base font-medium flex-1\">{{\n node.label\n }}</span>\n </div>\n }\n\n @if (currentTabNodes().length === 0) {\n <div class=\"text-center py-8 text-gray-400\">\n <p class=\"text-sm\">\n {{\n \"structureBuilder.allItemsInUse\"\n | transloco: { tab: tab }\n }}\n </p>\n </div>\n }\n </div>\n </p-tabpanel>\n }\n </p-tabpanels>\n </p-tabs>\n </ng-template>\n </mt-card>\n} @else if (availableNodes().length > 0) {\n <mt-card\n [title]=\"'structureBuilder.steps' | transloco\"\n class=\"absolute top-4 start-4 z-1 w-64\"\n >\n <div class=\"flex flex-col gap-2\">\n @for (node of availableNodes(); track node.id) {\n <div\n fExternalItem\n [fData]=\"node\"\n class=\"group select-none relative flex items-center gap-3 py-3 px-4 hover:bg-emphasis hover:border-solid transition-colors rounded-lg border-1 border-dashed border-color border-surface-300 dark:border-surface-500 cursor-move bg-content\"\n >\n <!-- Node Icon with color -->\n <div class=\"text-primary text-lg\">\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\n </div>\n\n <!-- Node Name -->\n <span class=\"text-base font-medium flex-1\">{{ node.label }}</span>\n </div>\n }\n </div>\n </mt-card>\n}\n<!-- Left Sidebar -->\n\n<!-- Main Canvas Area -->\n<div class=\"flex-1 z-0 relative\">\n <ng-content select=\"[flowContent]\"></ng-content>\n\n <f-flow\n fDraggable\n (fLoaded)=\"onLoaded()\"\n (fCreateNode)=\"onCreateNode($event)\"\n (fCreateConnection)=\"onCreateConnection($event)\"\n class=\"size-full\"\n >\n <f-background>\n <f-circle-pattern color=\"#b5b5b5\"></f-circle-pattern>\n </f-background>\n <f-canvas fZoom [fZoomMinimum]=\"0.1\" [fZoomMaximum]=\"2\">\n <f-connection-for-create fBehavior=\"floating\" fType=\"straight\">\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-connection-for-create>\n <f-snap-connection\n fBehavior=\"fixed\"\n fType=\"segment\"\n class=\"z-1\"\n [fSnapThreshold]=\"100\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-snap-connection>\n\n <f-connection-for-create></f-connection-for-create>\n\n <!-- Enhanced Connections with Edit Button -->\n @for (connection of connectionsComputed(); track connection.id) {\n <f-connection\n [fReassignDisabled]=\"true\"\n [fOutputId]=\"connection.from\"\n [fInputId]=\"connection.to\"\n fBehavior=\"fixed\"\n fType=\"segment\"\n [ngClass]=\"{ 'connection-loading': connection.loading, 'z-1': true }\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <div\n fConnectionCenter\n class=\"flex items-center gap-1 bg-content rounded-md p-1 shadow-sm\"\n >\n @if (!connection.loading) {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.edit-05'\"\n (click)=\"openConnectionDialog(connection)\"\n >\n </mt-button>\n <mt-button\n size=\"small\"\n variant=\"text\"\n severity=\"danger\"\n [icon]=\"'general.trash-01'\"\n (click)=\"removeConnection(connection)\"\n >\n </mt-button>\n } @else {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.loading-01'\"\n >\n </mt-button>\n }\n </div>\n </f-connection>\n }\n\n <!-- Enhanced Nodes with Edit Button -->\n @for (node of nodesWithComputedProps(); track node._computedId) {\n <mt-card\n fNode\n fDragHandle\n [fNodePosition]=\"{\n x: node.configuration?.x || 200,\n y: node.configuration?.y || 100,\n }\"\n (fNodePositionChange)=\"onNodePositionChange($event, node._computedId)\"\n [style.--node-data-border-color]=\"node._computedColor\"\n >\n <ng-template #headless>\n @if (!node.loading) {\n <div\n class=\"flex flex-col items-center min-w-3xs gap-2 px-3 py-4 rounded-t-2xl bg-white dark:bg-surface-800 border-(--p-content-border-color)\"\n >\n @if (node._computedIcon) {\n <mt-icon\n class=\"text-2xl text-primary\"\n [icon]=\"node._computedIcon\"\n />\n }\n <div>{{ node._computedName }}</div>\n </div>\n <div\n class=\"flex justify-center pt-3 mb-4 gap-2 bg-surface-50 dark:bg-surface-900\"\n >\n @for (\n action of nodeActions() | filterActions: node;\n track action.key\n ) {\n <mt-button\n [size]=\"action?.size || 'small'\"\n [variant]=\"action?.variant\"\n [icon]=\"action?.icon\"\n [tooltip]=\"action?.tooltip\"\n [severity]=\"action?.severity\"\n (onClick)=\"buttonAction(action, node)\"\n >\n </mt-button>\n }\n </div>\n <div\n fNodeInput\n [fInputId]=\"node._computedId\"\n fInputConnectableSide=\"top\"\n [fInputMultiple]=\"true\"\n class=\"top\"\n ></div>\n\n <div\n fNodeOutput\n [fOutputId]=\"node._computedId\"\n fOutputConnectableSide=\"bottom\"\n [isSelfConnectable]=\"false\"\n [fOutputMultiple]=\"true\"\n class=\"bottom bg-surface-50 dark:bg-surface-900\"\n ></div>\n } @else {\n <p-skeleton height=\"10rem\" width=\"15rem\" />\n }\n\n <!-- Node Header with Edit Button -->\n </ng-template>\n </mt-card>\n }\n </f-canvas>\n </f-flow>\n</div>\n<mt-toolbar />\n","/*\n * Public API Surface of structure-builder\n */\n\nexport * from './lib/structure-builder';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"masterteam-structure-builder.mjs","sources":["../../../../packages/masterteam/structure-builder/src/lib/node-form-dialog/node-form-dialog.ts","../../../../packages/masterteam/structure-builder/src/lib/node-form-dialog/node-form-dialog.html","../../../../packages/masterteam/structure-builder/src/lib/connection-form-dialog/connection-form-dialog.ts","../../../../packages/masterteam/structure-builder/src/lib/connection-form-dialog/connection-form-dialog.html","../../../../packages/masterteam/structure-builder/src/lib/toolbar/toolbar.ts","../../../../packages/masterteam/structure-builder/src/lib/toolbar/toolbar.html","../../../../packages/masterteam/structure-builder/src/lib/filter-actions.pipe.ts","../../../../packages/masterteam/structure-builder/src/lib/structure-builder.ts","../../../../packages/masterteam/structure-builder/src/lib/structure-builder.html","../../../../packages/masterteam/structure-builder/src/public-api.ts","../../../../packages/masterteam/structure-builder/src/masterteam-structure-builder.ts"],"sourcesContent":["import { Component, inject, AfterViewInit, OnInit, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { ModalService } from '@masterteam/components/modal';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { Button } from '@masterteam/components/button';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { TranslocoModule } from '@jsverse/transloco';\n\nexport interface NodeFormData {\n id: string;\n label: string;\n description?: string;\n [key: string]: any;\n}\n\n@Component({\n selector: 'mt-node-form-dialog',\n standalone: true,\n imports: [\n CommonModule,\n DynamicForm,\n Button,\n ReactiveFormsModule,\n TranslocoModule,\n ],\n templateUrl: './node-form-dialog.html',\n styleUrls: ['./node-form-dialog.scss'],\n})\nexport class NodeFormDialogComponent implements AfterViewInit, OnInit {\n readonly modalService: ModalService = inject(ModalService);\n ref: ModalRef = inject(ModalRef);\n dynamicFormControl = new FormControl();\n nodeData: NodeFormData;\n formSchema: any;\n data = input<any>(null);\n\n ngOnInit() {\n this.nodeData = this.data()?.node || {};\n this.formSchema = this.data()?.formSchema || [];\n }\n ngAfterViewInit(): void {\n this.dynamicFormControl.setValue(this.nodeData);\n }\n get templateContext() {\n return {\n node: this.nodeData,\n save: (item: any = {}) => this.onSave(item),\n cancel: () => this.onCancel(),\n close: () => this.onCancel(),\n };\n }\n onSave(item: any = {}) {\n const updatedNode = {\n ...this.nodeData,\n ...this.dynamicFormControl.value,\n ...item,\n };\n this.ref.close(updatedNode);\n }\n\n onCancel() {\n this.ref.close();\n }\n}\n","<div [class]=\"[modalService.contentClass, 'p-4']\">\n @if (this.data()?.template) {\n <ng-container\n *ngTemplateOutlet=\"data().template; context: templateContext\"\n ></ng-container>\n } @else {\n @if (nodeData) {\n <mt-dynamic-form\n [formConfig]=\"formSchema\"\n [formControl]=\"dynamicFormControl\"\n ></mt-dynamic-form>\n }\n }\n</div>\n<div [class]=\"modalService.footerClass\">\n <mt-button\n [label]=\"'structureBuilder.cancel' | transloco\"\n severity=\"secondary\"\n (onClick)=\"onCancel()\"\n >\n </mt-button>\n <mt-button\n [disabled]=\"!dynamicFormControl.valid\"\n [label]=\"'structureBuilder.saveChanges' | transloco\"\n severity=\"primary\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n</div>\n","import { ModalService } from '@masterteam/components/modal';\nimport { Component, inject, AfterViewInit, input, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\nimport { Button } from '@masterteam/components/button';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { ModalRef } from '@masterteam/components/dialog';\nimport { TranslocoModule } from '@jsverse/transloco';\n\n@Component({\n selector: 'mt-connection-form-dialog',\n standalone: true,\n imports: [\n CommonModule,\n DynamicForm,\n Button,\n ReactiveFormsModule,\n TranslocoModule,\n ],\n templateUrl: './connection-form-dialog.html',\n styleUrls: ['./connection-form-dialog.scss'],\n})\nexport class ConnectionFormDialogComponent implements AfterViewInit, OnInit {\n readonly modalService: ModalService = inject(ModalService);\n private ref: ModalRef = inject(ModalRef);\n data = input<any>(null);\n dynamicFormControl = new FormControl();\n connectionData: any;\n formSchema: any;\n\n ngOnInit() {\n this.connectionData = this.data()?.connection || {};\n this.formSchema = this.data()?.formSchema || [];\n }\n ngAfterViewInit(): void {\n this.dynamicFormControl.setValue(this.connectionData);\n }\n\n onSave(): void {\n if (this.dynamicFormControl.valid) {\n this.ref.close({\n ...this.connectionData,\n ...this.dynamicFormControl.value,\n });\n }\n }\n\n onCancel(): void {\n this.ref.close();\n }\n}\n","<div [class]=\"[modalService.contentClass, 'p-4']\">\n @if (connectionData && formSchema?.sections.length > 0) {\n <mt-dynamic-form\n [formConfig]=\"formSchema\"\n [formControl]=\"dynamicFormControl\"\n ></mt-dynamic-form>\n }\n</div>\n\n<div [class]=\"modalService.footerClass\">\n <mt-button\n [label]=\"'structureBuilder.cancel' | transloco\"\n severity=\"secondary\"\n (onClick)=\"onCancel()\"\n >\n </mt-button>\n <mt-button\n [disabled]=\"!dynamicFormControl.valid\"\n [label]=\"'structureBuilder.saveChanges' | transloco\"\n severity=\"primary\"\n (onClick)=\"onSave()\"\n >\n </mt-button>\n</div>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n input,\n} from '@angular/core';\nimport { Button } from '@masterteam/components/button';\nimport { ButtonGroup } from '@masterteam/components/button-group';\nimport { PointExtensions } from '@foblex/2d';\nimport { StructureBuilder } from '../structure-builder';\n\n@Component({\n selector: 'mt-toolbar',\n imports: [Button, ButtonGroup],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './toolbar.html',\n styleUrl: './toolbar.css',\n})\nexport class Toolbar {\n readonly size = input<'small' | 'large' | undefined>();\n\n private builderComponent = inject(StructureBuilder);\n\n public onZoomIn(): void {\n this.builderComponent.fZoomDirective()?.zoomIn();\n }\n\n public onZoomOut(): void {\n this.builderComponent.fZoomDirective()?.zoomOut();\n }\n\n public onFitToScreen(): void {\n this.builderComponent\n .fCanvasComponent()\n ?.fitToScreen(PointExtensions.initialize(250, 250), true);\n }\n\n public onOneToOne(): void {\n this.builderComponent.fCanvasComponent()?.resetScaleAndCenter();\n }\n public autoLayout(): void {\n this.builderComponent.maybeAutoLayout();\n }\n}\n","<mt-button\n (onClick)=\"autoLayout()\"\n class=\"bg-content rounded-(--p-button-border-radius)\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"arrow.refresh-cw-05\"\n></mt-button>\n\n<mt-buttongroup class=\"bg-content rounded-(--p-button-border-radius)\">\n <mt-button\n (onClick)=\"onZoomOut()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.minus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onZoomIn()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"general.plus\"\n ></mt-button>\n <mt-button\n (onClick)=\"onFitToScreen()\"\n size=\"size()\"\n variant=\"outlined\"\n severity=\"secondary\"\n icon=\"layout.grid-02\"\n ></mt-button>\n</mt-buttongroup>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { Actions } from './structure-builder';\n\n@Pipe({\n name: 'filterActions',\n standalone: true,\n pure: true,\n})\nexport class FilterActionsPipe implements PipeTransform {\n transform(actions: Actions[], node: any): Actions[] {\n if (!actions || !Array.isArray(actions)) {\n return [];\n }\n\n return actions.filter((action) => {\n // If no condition is provided, always show the action\n if (!action.condition) {\n return true;\n }\n\n // Evaluate the condition function\n return action.condition(node);\n });\n }\n}\n","import {\n Component,\n input,\n model,\n signal,\n computed,\n inject,\n contentChild,\n TemplateRef,\n viewChild,\n output,\n OnInit,\n} from '@angular/core';\nimport { TranslocoService, TranslocoModule } from '@jsverse/transloco';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DialogService } from '@masterteam/components/dialog';\nimport { DrawerService } from '@masterteam/components/dynamic-drawer';\nimport { ModalService } from '@masterteam/components/modal';\nimport { TabsModule } from 'primeng/tabs';\nimport {\n EFMarkerType,\n FCanvasComponent,\n FCreateConnectionEvent,\n FCreateNodeEvent,\n FFlowComponent,\n FFlowModule,\n FZoomDirective,\n} from '@foblex/flow';\nimport { Button } from '@masterteam/components/button';\nimport { Card } from '@masterteam/components/card';\nimport { Icon } from '@masterteam/icons';\nimport { NodeFormDialogComponent } from './node-form-dialog/node-form-dialog';\nimport { ConnectionFormDialogComponent } from './connection-form-dialog/connection-form-dialog';\nimport { DynamicFormConfig } from '@masterteam/components';\nimport { Toolbar } from './toolbar/toolbar';\nimport { FilterActionsPipe } from './filter-actions.pipe';\n\n// 🔁 dagre & helpers – same approach as lib sample\nimport * as dagre from 'dagre';\nimport { graphlib } from 'dagre';\nimport Graph = graphlib.Graph;\nimport { IPoint, PointExtensions } from '@foblex/2d';\nimport { Skeleton } from 'primeng/skeleton'; // TO DO\n\nexport interface Node {\n configuration?: {\n x?: number;\n y?: number;\n };\n [key: string]: any;\n loading?: boolean;\n}\n\nexport interface NodeFieldsMapping {\n id?: string;\n name?: string;\n icon?: string;\n color?: string;\n}\n\nexport interface AvailableNode {\n id: string;\n label: string;\n icon: string;\n color: string;\n tab: string[];\n [key: string]: any;\n}\n\nexport interface Connection {\n id: string;\n from: string;\n to: string;\n [key: string]: any;\n}\n\nexport interface Actions {\n key: string;\n icon: string;\n variant: string;\n size: string;\n severity?: string;\n tooltip?: string;\n /**\n * Optional condition function to determine if action should be shown\n * @param node - The node object to evaluate\n * @returns true to show the action, false to hide it\n * @example\n * // Show delete only if node is not initial\n * condition: (node) => !node.isInitial\n *\n * // Show edit only if node has specific status\n * condition: (node) => node.status === 'draft'\n */\n condition?: (node: any) => boolean;\n}\n\nexport interface NodeActionEvent {\n action: Actions;\n node: AvailableNode;\n}\n\nexport type SBActionType =\n | 'createNode'\n | 'updateNode'\n | 'deleteNode'\n | 'createConnection'\n | 'updateConnection'\n | 'deleteConnection'\n | 'startCreating'\n | 'startUpdating';\n\nexport interface SBAction {\n action: SBActionType;\n data?: any;\n}\n\n// ✨ Direction & config — mirrors lib sample\nenum Direction {\n LEFT_TO_RIGHT = 'LR',\n TOP_TO_BOTTOM = 'TB',\n}\n\nconst CONFIGURATION = {\n [Direction.LEFT_TO_RIGHT]: {\n // kept for parity; sides aren’t directly used here but available if needed\n outputSide: 'RIGHT',\n inputSide: 'LEFT',\n },\n [Direction.TOP_TO_BOTTOM]: {\n outputSide: 'BOTTOM',\n inputSide: 'TOP',\n },\n} as const;\n\n@Component({\n selector: 'mt-structure-builder',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n FFlowModule,\n TabsModule,\n Button,\n Icon,\n Card,\n Toolbar,\n Skeleton,\n FilterActionsPipe,\n TranslocoModule,\n ],\n templateUrl: './structure-builder.html',\n styleUrl: './structure-builder.scss',\n providers: [DialogService],\n host: {\n class:\n 'flex h-full bg-surface-200 dark:bg-surface-700 relative rounded-2xl overflow-hidden',\n },\n})\nexport class StructureBuilder implements OnInit {\n readonly dialogService = inject(DialogService);\n readonly drawerService = inject(DrawerService);\n readonly modal: ModalService = inject(ModalService);\n private transloco = inject(TranslocoService);\n nodeActionsEvent = output<NodeActionEvent>();\n action = output<SBAction>();\n availableNodes = input<AvailableNode[]>([]);\n protected fCanvas = viewChild(FCanvasComponent);\n public fFlowComponent = viewChild(FFlowComponent);\n public fCanvasComponent = viewChild(FCanvasComponent);\n public fZoomDirective = viewChild(FZoomDirective);\n nodeForm = input<DynamicFormConfig>({ sections: [] });\n connectionForm = input<DynamicFormConfig>({ sections: [] });\n nodeActions = input<Actions[]>([]);\n nodeFields = input<NodeFieldsMapping>({\n id: 'id',\n name: 'name',\n icon: 'icon',\n color: 'color',\n });\n\n isAutoLayout = input<boolean>(true);\n addModalType = input<'drawer' | 'dialog'>('dialog');\n updateModalType = input<'drawer' | 'dialog'>('drawer');\n addModalStyleClass = input<string>('!w-[35rem]');\n updateModalStyleClass = input<string>('!w-[35rem]');\n addModalHeader = input<string>('Add Node');\n updateModalHeader = input<string>('Edit Node Properties');\n appendTo = input<string>('');\n nodes = model<Node[]>([]);\n connections = model<Connection[]>([]);\n nodeDialogTemplate = contentChild<TemplateRef<any>>('nodeDialog');\n\n activeTab = signal('0');\n protected readonly eMarkerType = EFMarkerType;\n\n protected configuration = signal(CONFIGURATION[Direction.TOP_TO_BOTTOM]);\n protected direction = signal<Direction>(Direction.TOP_TO_BOTTOM);\n\n private positions = signal<Record<string, IPoint>>({});\n private dialogRef: any;\n protected fields = computed(() => {\n const inputFields = this.nodeFields();\n return {\n id: inputFields.id || 'id',\n name: inputFields.name || 'name',\n icon: inputFields.icon || 'icon',\n color: inputFields.color || 'color',\n } as any;\n });\n\n availableTabs = computed(() => {\n const tabsSet = new Set<string>();\n this.availableNodes().forEach((node) => {\n if (node.tab && Array.isArray(node.tab)) {\n node.tab.forEach((tab) => tabsSet.add(tab));\n }\n });\n return Array.from(tabsSet).sort();\n });\n\n currentTabNodes = computed(() => {\n const tabs = this.availableTabs();\n const currentTabIndex = parseInt(this.activeTab());\n if (currentTabIndex >= tabs.length) return [];\n const currentTab = tabs[currentTabIndex];\n return this.availableNodes().filter((node) =>\n node.tab.includes(currentTab),\n );\n });\n\n nodesWithComputedProps = computed(() => {\n const fields = this.fields();\n const pos = this.positions();\n return this.nodes().map((node) => {\n const _computedId = String(this.getNestedValue(node, fields.id));\n const _computedName = this.getNestedValue(node, fields.name);\n const _computedIcon = this.getNestedValue(node, fields.icon);\n const _computedColor = this.getNestedValue(node, fields.color);\n const id = _computedId;\n const configuration = {\n ...(node.configuration ?? {}),\n ...(pos[id] ?? {}),\n };\n return {\n ...node,\n _computedId,\n _computedName,\n _computedIcon,\n _computedColor,\n configuration,\n };\n });\n });\n connectionsComputed = computed(() =>\n this.connections()?.map((c) => ({\n ...c,\n from: String(c.from),\n to: String(c.to),\n })),\n );\n coreFields = computed(() => {\n const fields = this.fields();\n return new Set([\n ...Object.values(fields),\n 'configuration',\n '_computedId',\n '_computedName',\n '_computedIcon',\n '_computedColor',\n ]);\n });\n\n constructor() {}\n\n public ngOnInit(): void {\n this.getData(new dagre.graphlib.Graph(), this.direction());\n }\n\n protected onLoaded(): void {\n this.fitToScreen();\n }\n\n onCreateNode(event: FCreateNodeEvent): void {\n const nodeData = event.data as AvailableNode;\n if (!nodeData) return;\n\n const newNode: Node = {\n ...nodeData,\n configuration: {\n x: event.rect.x,\n y: event.rect.y,\n },\n };\n\n if (this.nodeForm()?.sections.length > 0 || this.nodeDialogTemplate()) {\n this.openNodeDialog(newNode, true);\n } else {\n this.action.emit({ action: 'createNode', data: newNode });\n }\n }\n\n onNodePositionChange(event: any, nodeId: string): void {\n const position = event;\n if (nodeId && position) {\n this.positions.update((p) => ({\n ...p,\n [nodeId]: { x: position.x, y: position.y },\n }));\n }\n }\n\n onCreateConnection(event: FCreateConnectionEvent): void {\n const newConnection: Connection = {\n id: this.generateConnectionId(),\n from: event.fOutputId!,\n to: event.fInputId!,\n };\n if (!event.fInputId! || !event.fOutputId!) {\n return;\n }\n const exists = this.connectionsComputed().some(\n (conn) =>\n conn.from === newConnection.from && conn.to === newConnection.to,\n );\n\n if (!exists) {\n this.action.emit({ action: 'createConnection', data: newConnection });\n }\n }\n\n openNodeDialog(node: Node, isNewNode: boolean = false): void {\n if (this.dialogRef) {\n this.dialogRef.close();\n }\n const modalType = isNewNode ? this.addModalType() : this.updateModalType();\n this.action.emit({\n action: isNewNode ? 'startCreating' : 'startUpdating',\n data: node,\n });\n\n const styleClass = isNewNode\n ? this.addModalStyleClass()\n : this.updateModalStyleClass();\n const header = isNewNode ? this.addModalHeader() : this.updateModalHeader();\n\n const config = {\n header: header,\n styleClass: styleClass,\n focusOnShow: this.nodeDialogTemplate() ? false : true,\n appendTo: this.appendTo(),\n position: modalType === 'drawer' ? 'end' : undefined,\n inputValues: {\n data: {\n node: node,\n formSchema: this.nodeForm(),\n template: this.nodeDialogTemplate(),\n },\n },\n };\n this.dialogRef = this.modal.openModal(\n NodeFormDialogComponent,\n modalType,\n config,\n );\n\n this.dialogRef.onClose.subscribe((result: any) => {\n if (result) {\n if (isNewNode) {\n const newNodeWithFormData = { ...node, ...result };\n this.action.emit({ action: 'createNode', data: newNodeWithFormData });\n } else {\n this.onNodeFormSubmit(result);\n }\n }\n });\n }\n\n openConnectionDialog(connection: Connection): void {\n const ref = this.modal.openModal(ConnectionFormDialogComponent, 'dialog', {\n header: this.transloco.translate(\n 'structureBuilder.editConnectionProperties',\n ),\n width: '600px',\n\n inputValues: {\n data: {\n connection: connection,\n formSchema: this.connectionForm(),\n },\n },\n });\n\n ref.onClose.subscribe((result: any) => {\n if (result) {\n this.onConnectionFormSubmit(result);\n }\n });\n }\n\n onNodeFormSubmit(formData: any): void {\n const nodeId = formData[this.fields().id];\n if (nodeId) {\n this.action.emit({ action: 'updateNode', data: formData });\n }\n }\n\n onConnectionFormSubmit(formData: any): void {\n const connectionId = formData.id;\n if (connectionId) {\n this.action.emit({ action: 'updateConnection', data: formData });\n }\n }\n\n removeNode(node: any): void {\n this.action.emit({ action: 'deleteNode', data: node });\n }\n\n removeConnection(connection: any): void {\n this.action.emit({ action: 'deleteConnection', data: connection });\n }\n\n buttonAction(action: any, node: any) {\n this.nodeActionsEvent.emit({ action, node });\n if (action.key === 'edit') {\n this.openNodeDialog(node);\n } else if (action.key === 'delete') {\n this.removeNode(node);\n }\n }\n\n protected fitToScreen(): void {\n const area = this.nodes()?.length * 70;\n this.fCanvasComponent()?.fitToScreen(\n PointExtensions.initialize(area, area),\n false,\n );\n }\n\n private getData(graph: Graph, direction: Direction): void {\n this.direction.set(direction);\n if (this.isAutoLayout()) {\n this.fFlowComponent()?.reset();\n }\n this.updateGraph(graph, direction);\n this.applyGraphPositions(graph);\n }\n\n private updateGraph(graph: Graph, direction: Direction): void {\n this.configuration.set(CONFIGURATION[Direction.TOP_TO_BOTTOM]);\n graph.setGraph({ rankdir: direction });\n\n const SIZE = { width: 300, height: 200 };\n this.nodes().forEach((n) => {\n graph.setNode(n[this.fields().id], {\n width: SIZE.width,\n height: SIZE.height,\n });\n });\n\n this.connectionsComputed().forEach((c) => {\n const fromId = c.from;\n const toId = c.to;\n if (fromId && toId && fromId !== toId) {\n graph.setEdge(fromId, toId, {});\n }\n });\n\n dagre.layout(graph);\n }\n\n private applyGraphPositions(graph: Graph): void {\n const positionsById: Record<string, IPoint> = {};\n graph.nodes().forEach((key) => {\n const gNode = graph.node(key);\n positionsById[key] = { x: gNode.x, y: gNode.y };\n });\n this.positions.update((old) => ({ ...old, ...positionsById }));\n }\n\n private getNestedValue(obj: unknown, path?: string | null): unknown {\n if (!path) return undefined;\n const keys = path\n .replace(/\\[(\\w+)\\]/g, '.$1')\n .replace(/^\\./, '')\n .split('.')\n .filter(Boolean);\n\n return keys.reduce<unknown>(\n (acc, k) => (acc == null ? undefined : (acc as any)[k]),\n obj,\n );\n }\n\n maybeAutoLayout(): void {\n if (!this.isAutoLayout() || this.nodes().length === 0) return;\n this.getData(new dagre.graphlib.Graph(), this.direction());\n }\n\n private generateConnectionId(): string {\n return `conn-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n\n private extractNodeId(connectionEndId: string): string {\n return (connectionEndId || '').replace(/-(in|out)$/, '');\n }\n}\n","<!-- structure-builder.html -->\n@if (availableTabs().length > 0) {\n <mt-card\n class=\"absolute ms-4 mt-4 z-1 h-[calc(100%---spacing(8))] w-1/5 min-w-xs\"\n >\n <ng-template #headless>\n <!-- Header -->\n <div class=\"flex items-center justify-between px-4 pt-5\">\n <h3 class=\"text-xl font-semibold\">\n {{ \"structureBuilder.levelTemplates\" | transloco }}\n </h3>\n </div>\n\n <!-- Tabs using PrimeNG -->\n <p-tabs\n [(value)]=\"activeTab\"\n styleClass=\"structure-tabs \"\n class=\"h-full overflow-hidden\"\n >\n <p-tablist>\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tab [value]=\"i.toString()\">{{ tab | titlecase }}</p-tab>\n }\n </p-tablist>\n <p-tabpanels class=\"bg-transparent! p-0! overflow-auto\">\n @for (tab of availableTabs(); track tab; let i = $index) {\n <p-tabpanel [value]=\"i.toString()\">\n <p class=\"text-xs text-muted py-3 px-4\">\n {{ \"structureBuilder.dragToAdd\" | transloco }}\n </p>\n\n <!-- Node List -->\n <div class=\"space-y-1 px-4\">\n @for (node of currentTabNodes(); track node.id) {\n <div\n fExternalItem\n [fData]=\"node\"\n class=\"group select-none relative flex items-center gap-3 py-3 px-4 hover:bg-emphasis hover:border-solid transition-colors rounded-lg border-1 border-dashed border-color border-surface-300 dark:border-surface-500 cursor-move transition-colors\"\n >\n <!-- Node Icon with color -->\n <div class=\"text-primary text-lg\">\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\n </div>\n\n <!-- Node Name -->\n <span class=\"text-base font-medium flex-1\">{{\n node.label\n }}</span>\n </div>\n }\n\n @if (currentTabNodes().length === 0) {\n <div class=\"text-center py-8 text-gray-400\">\n <p class=\"text-sm\">\n {{\n \"structureBuilder.allItemsInUse\"\n | transloco: { tab: tab }\n }}\n </p>\n </div>\n }\n </div>\n </p-tabpanel>\n }\n </p-tabpanels>\n </p-tabs>\n </ng-template>\n </mt-card>\n} @else if (availableNodes().length > 0) {\n <mt-card\n [title]=\"'structureBuilder.steps' | transloco\"\n class=\"absolute top-4 start-4 z-1 w-64\"\n >\n <div class=\"flex flex-col gap-2\">\n @for (node of availableNodes(); track node.id) {\n <div\n fExternalItem\n [fData]=\"node\"\n class=\"group select-none relative flex items-center gap-3 py-3 px-4 hover:bg-emphasis hover:border-solid transition-colors rounded-lg border-1 border-dashed border-color border-surface-300 dark:border-surface-500 cursor-move bg-content\"\n >\n <!-- Node Icon with color -->\n <div class=\"text-primary text-lg\">\n <mt-icon [icon]=\"node.icon || 'general.box'\"></mt-icon>\n </div>\n\n <!-- Node Name -->\n <span class=\"text-base font-medium flex-1\">{{ node.label }}</span>\n </div>\n }\n </div>\n </mt-card>\n}\n<!-- Left Sidebar -->\n\n<!-- Main Canvas Area -->\n<div class=\"flex-1 z-0 relative\">\n <ng-content select=\"[flowContent]\"></ng-content>\n\n <f-flow\n fDraggable\n (fLoaded)=\"onLoaded()\"\n (fCreateNode)=\"onCreateNode($event)\"\n (fCreateConnection)=\"onCreateConnection($event)\"\n class=\"size-full\"\n >\n <f-background>\n <f-circle-pattern color=\"#b5b5b5\"></f-circle-pattern>\n </f-background>\n <f-canvas fZoom [fZoomMinimum]=\"0.1\" [fZoomMaximum]=\"2\">\n <f-connection-for-create fBehavior=\"floating\" fType=\"straight\">\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-connection-for-create>\n <f-snap-connection\n fBehavior=\"fixed\"\n fType=\"segment\"\n class=\"z-1\"\n [fSnapThreshold]=\"100\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n </f-snap-connection>\n\n <f-connection-for-create></f-connection-for-create>\n\n <!-- Enhanced Connections with Edit Button -->\n @for (connection of connectionsComputed(); track connection.id) {\n <f-connection\n [fReassignDisabled]=\"true\"\n [fOutputId]=\"connection.from\"\n [fInputId]=\"connection.to\"\n fBehavior=\"fixed\"\n fType=\"segment\"\n [ngClass]=\"{ 'connection-loading': connection.loading, 'z-1': true }\"\n >\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_START\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <svg\n viewBox=\"0 0 12 12\"\n fMarker\n [type]=\"eMarkerType.SELECTED_END\"\n [height]=\"12\"\n [width]=\"12\"\n [refX]=\"6\"\n [refY]=\"6\"\n >\n <circle\n cx=\"6\"\n cy=\"6\"\n r=\"3\"\n stroke=\"none\"\n fill=\"currentColor\"\n ></circle>\n </svg>\n <div\n fConnectionCenter\n class=\"flex items-center gap-1 bg-content rounded-md p-1 shadow-sm\"\n >\n @if (!connection.loading) {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.edit-05'\"\n (click)=\"openConnectionDialog(connection)\"\n >\n </mt-button>\n <mt-button\n size=\"small\"\n variant=\"text\"\n severity=\"danger\"\n [icon]=\"'general.trash-01'\"\n (click)=\"removeConnection(connection)\"\n >\n </mt-button>\n } @else {\n <mt-button\n size=\"small\"\n variant=\"text\"\n [icon]=\"'general.loading-01'\"\n >\n </mt-button>\n }\n </div>\n </f-connection>\n }\n\n <!-- Enhanced Nodes with Edit Button -->\n @for (node of nodesWithComputedProps(); track node._computedId) {\n <mt-card\n fNode\n fDragHandle\n [fNodePosition]=\"{\n x: node.configuration?.x || 200,\n y: node.configuration?.y || 100,\n }\"\n (fNodePositionChange)=\"onNodePositionChange($event, node._computedId)\"\n [style.--node-data-border-color]=\"node._computedColor\"\n >\n <ng-template #headless>\n @if (!node.loading) {\n <div\n class=\"flex flex-col items-center min-w-3xs gap-2 px-3 py-4 rounded-t-2xl bg-white dark:bg-surface-800 border-(--p-content-border-color)\"\n >\n @if (node._computedIcon) {\n <mt-icon\n class=\"text-2xl text-primary\"\n [icon]=\"node._computedIcon\"\n />\n }\n <div>{{ node._computedName }}</div>\n </div>\n <div\n class=\"flex justify-center pt-3 mb-4 gap-2 bg-surface-50 dark:bg-surface-900\"\n >\n @for (\n action of nodeActions() | filterActions: node;\n track action.key\n ) {\n <mt-button\n [size]=\"action?.size || 'small'\"\n [variant]=\"action?.variant\"\n [icon]=\"action?.icon\"\n [tooltip]=\"action?.tooltip\"\n [severity]=\"action?.severity\"\n (onClick)=\"buttonAction(action, node)\"\n >\n </mt-button>\n }\n </div>\n <div\n fNodeInput\n [fInputId]=\"node._computedId\"\n fInputConnectableSide=\"top\"\n [fInputMultiple]=\"true\"\n class=\"top\"\n ></div>\n\n <div\n fNodeOutput\n [fOutputId]=\"node._computedId\"\n fOutputConnectableSide=\"bottom\"\n [isSelfConnectable]=\"false\"\n [fOutputMultiple]=\"true\"\n class=\"bottom bg-surface-50 dark:bg-surface-900\"\n ></div>\n } @else {\n <p-skeleton height=\"10rem\" width=\"15rem\" />\n }\n\n <!-- Node Header with Edit Button -->\n </ng-template>\n </mt-card>\n }\n </f-canvas>\n </f-flow>\n</div>\n<mt-toolbar />\n","/*\n * Public API Surface of structure-builder\n */\n\nexport * from './lib/structure-builder';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3","i4"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masterteam/structure-builder",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.28",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"directory": "../../../dist/masterteam/structure-builder",
|
|
6
6
|
"linkDirectory": false,
|
|
7
7
|
"access": "public"
|
|
8
8
|
},
|
|
9
9
|
"peerDependencies": {
|
|
10
|
-
"@angular/common": "^21.0.
|
|
11
|
-
"@angular/core": "^21.0.
|
|
12
|
-
"@angular/forms": "^21.0.
|
|
13
|
-
"@foblex/flow": "^17.9.
|
|
14
|
-
"@primeuix/themes": "^2.0.
|
|
10
|
+
"@angular/common": "^21.0.3",
|
|
11
|
+
"@angular/core": "^21.0.3",
|
|
12
|
+
"@angular/forms": "^21.0.3",
|
|
13
|
+
"@foblex/flow": "^17.9.81",
|
|
14
|
+
"@primeuix/themes": "^2.0.2",
|
|
15
15
|
"@tailwindcss/postcss": "^4.1.17",
|
|
16
|
+
"@jsverse/transloco": "^8.0.2",
|
|
16
17
|
"postcss": "^8.5.6",
|
|
17
|
-
"primeng": "21.0.
|
|
18
|
+
"primeng": "21.0.1",
|
|
18
19
|
"rxjs": "^7.8.2",
|
|
19
20
|
"tailwindcss": "^4.1.17",
|
|
20
21
|
"tailwindcss-primeui": "^0.6.1",
|
|
@@ -22,9 +23,9 @@
|
|
|
22
23
|
},
|
|
23
24
|
"dependencies": {
|
|
24
25
|
"tslib": "^2.3.0",
|
|
25
|
-
"@masterteam/forms": "^0.0.
|
|
26
|
-
"@masterteam/
|
|
27
|
-
"@masterteam/
|
|
26
|
+
"@masterteam/forms": "^0.0.30",
|
|
27
|
+
"@masterteam/icons": "^0.0.11",
|
|
28
|
+
"@masterteam/components": "^0.0.65"
|
|
28
29
|
},
|
|
29
30
|
"sideEffects": false,
|
|
30
31
|
"exports": {
|