wuic-framework-lib 1.0.19 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{wuic-framework-lib-chart-list.component-C0OYuZoM.mjs → wuic-framework-lib-chart-list.component-C9_EDkGu.mjs} +73 -13
- package/fesm2022/{wuic-framework-lib-code-editor.component-B8OQ3Z0k.mjs → wuic-framework-lib-code-editor.component-D_p7LGSQ.mjs} +6 -6
- package/fesm2022/{wuic-framework-lib-designer.component-DsWgWtFj.mjs → wuic-framework-lib-designer.component-Dx6RraAn.mjs} +83 -50
- package/fesm2022/{wuic-framework-lib-first-run-wizard.component-wR_LrvPK.mjs → wuic-framework-lib-first-run-wizard.component-Cp8IKDb9.mjs} +9 -9
- package/fesm2022/{wuic-framework-lib-framework-docs.component-eyzu9tdV.mjs → wuic-framework-lib-framework-docs.component-CxckBsIX.mjs} +1205 -116
- package/fesm2022/{wuic-framework-lib-pivot-builder.component-BFdZW5Ch.mjs → wuic-framework-lib-pivot-builder.component-C-ceJi48.mjs} +269 -21
- package/fesm2022/{wuic-framework-lib-prompt-dialog-fallback-host.component-B583WbYe.mjs → wuic-framework-lib-prompt-dialog-fallback-host.component-DPZCgxOB.mjs} +6 -6
- package/fesm2022/{wuic-framework-lib-report-designer.component-HJUpslLX.mjs → wuic-framework-lib-report-designer.component-3-hUYft8.mjs} +5 -5
- package/fesm2022/{wuic-framework-lib-report-viewer.component-El32zpzi.mjs → wuic-framework-lib-report-viewer.component-D4QD_wPl.mjs} +5 -5
- package/fesm2022/{wuic-framework-lib-scheduler-list.component-E8s_e533.mjs → wuic-framework-lib-scheduler-list.component-C0nY8Wd6.mjs} +28 -5
- package/fesm2022/{wuic-framework-lib-spreadsheet-list-sf.component-CDn0qi_C.mjs → wuic-framework-lib-spreadsheet-list-sf.component-C9sWgq61.mjs} +449 -10
- package/fesm2022/{wuic-framework-lib-workflow-designer.component-hL7oKqYO.mjs → wuic-framework-lib-workflow-designer.component-8mv_Rbz9.mjs} +10 -10
- package/fesm2022/{wuic-framework-lib-wuic-framework-lib-ABS_G7lO.mjs → wuic-framework-lib-wuic-framework-lib-DJZAYFw8.mjs} +5882 -3545
- package/fesm2022/wuic-framework-lib.mjs +1 -1
- package/package.json +1 -1
- package/types/wuic-framework-lib.d.ts +1905 -998
|
@@ -9,7 +9,7 @@ import * as i1 from '@angular/forms';
|
|
|
9
9
|
import { FormsModule } from '@angular/forms';
|
|
10
10
|
import * as i2$1 from 'primeng/autocomplete';
|
|
11
11
|
import { AutoCompleteModule } from 'primeng/autocomplete';
|
|
12
|
-
import * as
|
|
12
|
+
import * as i14 from 'primeng/contextmenu';
|
|
13
13
|
import { ContextMenuModule } from 'primeng/contextmenu';
|
|
14
14
|
import * as i2 from 'primeng/dialog';
|
|
15
15
|
import { DialogModule } from 'primeng/dialog';
|
|
@@ -17,10 +17,10 @@ import * as i9 from 'primeng/menu';
|
|
|
17
17
|
import { MenuModule } from 'primeng/menu';
|
|
18
18
|
import * as i6 from 'primeng/select';
|
|
19
19
|
import { SelectModule } from 'primeng/select';
|
|
20
|
-
import * as
|
|
20
|
+
import * as i8 from '@ngx-translate/core';
|
|
21
21
|
import { TranslateModule } from '@ngx-translate/core';
|
|
22
22
|
import { BehaviorSubject } from 'rxjs';
|
|
23
|
-
import { W as WtoolboxService, M as MetadataProviderService, d as ParametricDialogComponent, k as WuicClientException, l as WuicErrorCodes, G as GlobalHandler, f as DataProviderService, b as DataSourceComponent, j as MetadataEditorComponent } from './wuic-framework-lib-wuic-framework-lib-
|
|
23
|
+
import { W as WtoolboxService, M as MetadataProviderService, d as ParametricDialogComponent, k as WuicClientException, l as WuicErrorCodes, G as GlobalHandler, f as DataProviderService, b as DataSourceComponent, j as MetadataEditorComponent } from './wuic-framework-lib-wuic-framework-lib-DJZAYFw8.mjs';
|
|
24
24
|
|
|
25
25
|
class WorkflowDesignerLayoutHelper {
|
|
26
26
|
/**
|
|
@@ -1043,10 +1043,10 @@ class WorkflowDesignerNodeComponent {
|
|
|
1043
1043
|
}
|
|
1044
1044
|
return value.slice(0, Math.max(1, limit - 1)) + '…';
|
|
1045
1045
|
}
|
|
1046
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
1047
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
1046
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: WorkflowDesignerNodeComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
1047
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: WorkflowDesignerNodeComponent, isStandalone: true, selector: "wuic-workflow-designer-node", inputs: { data: "data", emit: "emit", rendered: "rendered" }, host: { attributes: { "data-testid": "node" }, properties: { "style.width.px": "this.width", "style.height.px": "this.height", "class.selected": "this.selected", "attr.data-wf-node-type": "this.nodeType", "attr.data-wf-action-scope": "this.actionScope", "attr.data-wf-action-type": "this.actionType", "style.--wf-node-accent": "this.accentColor", "style.--wf-node-bg": "this.backgroundColor" } }, usesOnChanges: true, ngImport: i0, template: "<svg class=\"wf-shape-layer\" [attr.viewBox]=\"svgViewBox\" aria-hidden=\"true\">\n <path class=\"wf-shape-fill\" [attr.d]=\"shapePath\"></path>\n <rect class=\"wf-shape-title-band\" [attr.x]=\"titleBandX\" y=\"2\" [attr.width]=\"titleBandWidth\" [attr.height]=\"titleBandHeight\" rx=\"5\" ry=\"5\"></rect>\n <text class=\"wf-shape-title-text\" [attr.x]=\"titleTextX\" [attr.y]=\"titleTextY\">\n @for (line of titleLines; track line; let i = $index) {\n <tspan [attr.x]=\"titleTextX\" [attr.dy]=\"i === 0 ? 0 : titleLineDy\">{{ line }}</tspan>\n }\n </text>\n <path class=\"wf-shape-stroke\" [attr.d]=\"shapePath\" [attr.stroke-dasharray]=\"dashedStroke\"></path>\n</svg>\n\n@for (output of data.outputs | keyvalueimpure: sortByIndex; track output) {\n <div class=\"wf-output\" [attr.data-testid]=\"'output-'+output.key\">\n <div class=\"wf-output-title\" data-testid=\"output-title\">{{ output.value?.label }}</div>\n <div\n class=\"wf-output-socket\"\n refComponent\n [data]=\"{type: 'socket', side: 'output', key: output.key, nodeId: data.id, payload: output.value?.socket, seed: seed }\"\n [emit]=\"emit\"\n data-testid=\"output-socket\">\n </div>\n </div>\n}\n\n@for (control of data.controls | keyvalueimpure: sortByIndex; track control) {\n <div\n class=\"wf-control\"\n refComponent\n [data]=\"{type: 'control', payload: control.value }\"\n [emit]=\"emit\"\n [attr.data-testid]=\"'control-'+control.key\">\n </div>\n}\n\n@for (input of data.inputs | keyvalueimpure: sortByIndex; track input) {\n <div class=\"wf-input\" [attr.data-testid]=\"'input-'+input.key\">\n <div\n class=\"wf-input-socket\"\n refComponent\n [data]=\"{type: 'socket', side: 'input', key: input.key, nodeId: data.id, payload: input.value?.socket, seed: seed }\"\n [emit]=\"emit\"\n data-testid=\"input-socket\">\n </div>\n @if (!input.value?.control || !input.value?.showControl) {\n <div class=\"wf-input-title\" data-testid=\"input-title\">{{ input.value?.label }}</div>\n }\n <div\n class=\"wf-input-control\"\n [style.display]=\"input.value?.control && input.value?.showControl ? '' : 'none'\"\n refComponent\n [data]=\"{type: 'control', payload: input.value?.control }\"\n [emit]=\"emit\"\n data-testid=\"input-control\">\n </div>\n </div>\n}\n", styles: [":host{display:block;box-sizing:border-box;min-height:92px;cursor:pointer;-webkit-user-select:none;user-select:none;line-height:initial;font-family:Arial,sans-serif;position:relative;overflow:visible;color:#0f172a}.wf-shape-layer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}.wf-shape-fill{fill:var(--wf-node-bg, #f8fafc)}.wf-shape-stroke{fill:none;stroke:var(--wf-node-accent, #475569);stroke-width:2.2;vector-effect:non-scaling-stroke}.wf-shape-title-band{fill:var(--wf-node-accent, #475569)}.wf-shape-title-text{fill:#fff;font-size:12px;font-weight:700;font-family:Arial,sans-serif;dominant-baseline:hanging;text-anchor:start}:host.selected{filter:drop-shadow(0 0 .35rem color-mix(in srgb,var(--wf-node-accent, #475569) 42%,transparent))}:host>*{position:relative;z-index:1}.wf-output{position:absolute;top:50%;right:0;transform:translate(50%,-50%);width:0;height:0;display:flex;align-items:center;justify-content:center;z-index:2}.wf-input{position:absolute;top:50%;left:0;transform:translate(-50%,-50%);width:0;height:0;display:flex;align-items:center;justify-content:center;z-index:2}:host[data-wf-node-type=action][data-wf-action-type=\"0\"] .wf-input{left:10%}.wf-input-title,.wf-output-title{display:none}.wf-output-socket{line-height:0;vertical-align:top;margin-right:0;display:block}.wf-input-socket{line-height:0;vertical-align:top;margin-left:0;display:block}.wf-input-control{z-index:1;width:calc(100% - 36px);vertical-align:middle;display:inline-block}.wf-control{padding:6px 18px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: RefDirective, selector: "[refComponent]", inputs: ["data", "emit"] }, { kind: "pipe", type: ImpureKeyvaluePipe, name: "keyvalueimpure" }] });
|
|
1048
1048
|
}
|
|
1049
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
1049
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: WorkflowDesignerNodeComponent, decorators: [{
|
|
1050
1050
|
type: Component,
|
|
1051
1051
|
args: [{ selector: 'wuic-workflow-designer-node', standalone: true, imports: [CommonModule, RefDirective, ImpureKeyvaluePipe], host: {
|
|
1052
1052
|
'data-testid': 'node'
|
|
@@ -5059,10 +5059,10 @@ class WorkflowDesignerComponent {
|
|
|
5059
5059
|
return value !== undefined && value !== null ? String(value) : match;
|
|
5060
5060
|
});
|
|
5061
5061
|
}
|
|
5062
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
5063
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.8", type: WorkflowDesignerComponent, isStandalone: true, selector: "wuic-workflow-designer", outputs: { workflowChange: "workflowChange" }, viewQueries: [{ propertyName: "workflowCanvasRef", first: true, predicate: ["workflowCanvas"], descendants: true, static: true }, { propertyName: "primeContextMenu", first: true, predicate: ["primeContextMenu"], descendants: true }, { propertyName: "routeMetadataDs", first: true, predicate: ["routeMetadataDs"], descendants: true }, { propertyName: "startMenuDs", first: true, predicate: ["startMenuDs"], descendants: true }, { propertyName: "menuAuthDs", first: true, predicate: ["menuAuthDs"], descendants: true }, { propertyName: "routeMetadataEditor", first: true, predicate: ["routeMetadataEditor"], descendants: true }, { propertyName: "actionMetadataEditor", first: true, predicate: ["actionMetadataEditor"], descendants: true }], ngImport: i0, template: "<div class=\"workflow-designer\">\n <div class=\"workflow-toolbar\">\n <div class=\"workflow-current-graph\">{{ currentGraphCaption }}</div>\n <div class=\"workflow-toolbar-menu-group\">\n <button type=\"button\" (click)=\"graphActionsMenu.toggle($event)\">\n Azioni grafo\n </button>\n <p-menu #graphActionsMenu [popup]=\"true\" [model]=\"graphActionsMenuItems\" appendTo=\"body\"></p-menu>\n </div>\n <div class=\"workflow-toolbar-menu-group\">\n <button type=\"button\" (click)=\"runnerActionsMenu.toggle($event)\" [disabled]=\"!canOpenWorkflowRunner\">\n Runner\n </button>\n <p-menu #runnerActionsMenu [popup]=\"true\" [model]=\"runnerActionsMenuItems\" appendTo=\"body\"></p-menu>\n </div>\n </div>\n\n <aside class=\"workflow-palette\">\n <div class=\"workflow-palette-title\">{{ 'workflow.palette' | translate }}</div>\n <div class=\"workflow-palette-list\">\n @for (item of paletteNodes; track item) {\n <div\n class=\"workflow-palette-item\"\n [ngClass]=\"{\n 'workflow-palette-item-route': item.type === 'route',\n 'workflow-palette-item-action': item.type === 'action',\n 'workflow-palette-item-start': item.type === 'start',\n 'workflow-palette-item-condition': item.type === 'condition',\n 'workflow-palette-item-end': item.type === 'end',\n 'workflow-palette-item-disabled': !isPaletteNodeEnabled(item)\n }\"\n [attr.draggable]=\"isPaletteNodeEnabled(item) ? 'true' : 'false'\"\n (dragstart)=\"onPaletteDragStart($event, item)\">\n <div class=\"workflow-palette-item-title\">{{ item.label }}</div>\n @if (item.type === 'route') {\n <div class=\"workflow-palette-item-badge\">{{ 'workflow.badge.route' | translate }}</div>\n }\n @if (item.type === 'action') {\n <div class=\"workflow-palette-item-badge\">{{ 'workflow.badge.action_scope' | translate }}</div>\n }\n <div class=\"workflow-palette-item-description\">{{ item.description }}</div>\n </div>\n }\n </div>\n </aside>\n\n <section\n #workflowCanvas\n class=\"workflow-canvas\"\n (dragover)=\"onCanvasDragOver($event)\"\n (drop)=\"onCanvasDrop($event)\"\n (contextmenu)=\"onCanvasContextMenu($event)\"\n (click)=\"onCanvasClick()\">\n <div class=\"workflow-canvas-hint\">\n {{ 'workflow.drag_hint' | translate }}\n </div>\n </section>\n <p-contextMenu\n #primeContextMenu\n [model]=\"contextMenuItems\"\n appendTo=\"body\"\n [autoZIndex]=\"true\"\n [baseZIndex]=\"13000\">\n </p-contextMenu>\n</div>\n\n<p-dialog\n [header]=\"'Riapri grafo'\"\n [(visible)]=\"reopenWorkflowDialogVisible\"\n [modal]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [appendTo]=\"'body'\"\n [style]=\"{ width: '34rem' }\"\n (onHide)=\"cancelReopenWorkflowDialog()\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-reopen-select\">Grafi esistenti</label>\n <p-select\n inputId=\"workflow-reopen-select\"\n [options]=\"savedGraphOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"reopenDialogSelectedGraphKey\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelReopenWorkflowDialog()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmReopenWorkflowDialog()\"\n [disabled]=\"!reopenDialogSelectedGraphKey || loadingWorkflow\">Riapri</button>\n </div>\n </div>\n</p-dialog>\n\n<div style=\"display:none\">\n <wuic-data-source #routeMetadataDs [hardcodedRoute]=\"routeMetadataRoute\"></wuic-data-source>\n <wuic-data-source #startMenuDs [hardcodedRoute]=\"' metadati menu'\"></wuic-data-source>\n <wuic-data-source #menuAuthDs [hardcodedRoute]=\"' mtdt tnt trizzazioni menus'\"></wuic-data-source>\n @if (routeMetadataDs) {\n <wuic-metadata-editor\n #actionMetadataEditor\n [hardcodedDatasource]=\"routeMetadataDs!\"\n [saveCallback]=\"routeMetadataSaveCallback\"\n [hideReports]=\"true\"\n [hideRelatedTableActions]=\"true\"\n [hideRelatedColumnActions]=\"true\">\n </wuic-metadata-editor>\n }\n</div>\n\n<p-dialog\n [header]=\"'workflow.configure_route' | translate\"\n [(visible)]=\"routePopupVisible\"\n [modal]=\"true\"\n [closable]=\"false\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '32rem' }\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-route-source-select\">Sorgente nodo</label>\n <p-select\n inputId=\"workflow-route-source-select\"\n [options]=\"routeSourceOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedRouteSourceType\"\n (ngModelChange)=\"onRouteSourceTypeChanged()\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n @if (selectedRouteSourceType === 'route') {\n <label for=\"workflow-route-select\">{{ 'workflow.route' | translate }}</label>\n <p-autoComplete\n inputId=\"workflow-route-select\"\n [(ngModel)]=\"selectedRouteName\"\n [suggestions]=\"filteredRouteOptions\"\n [forceSelection]=\"true\"\n [dropdown]=\"true\"\n dropdownMode=\"current\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\"\n (completeMethod)=\"filterRouteOptions($event)\" />\n <label for=\"workflow-action-select\">{{ 'workflow.action' | translate }}</label>\n <p-select\n inputId=\"workflow-action-select\"\n [options]=\"routeActionOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedRouteAction\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n } @else {\n <label for=\"workflow-dashboard-select\">Dashboard</label>\n <p-autoComplete\n inputId=\"workflow-dashboard-select\"\n [(ngModel)]=\"selectedDashboardRoute\"\n [suggestions]=\"filteredDashboardOptions\"\n [forceSelection]=\"true\"\n [dropdown]=\"true\"\n dropdownMode=\"current\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\"\n (completeMethod)=\"filterDashboardOptions($event)\" />\n }\n\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelRouteDrop()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmRouteDrop()\"\n [disabled]=\"selectedRouteSourceType === 'dashboard' ? !selectedDashboardRoute : (!selectedRouteName || !selectedRouteAction)\">{{ 'confirmation' | translate }}</button>\n </div>\n </div>\n</p-dialog>\n\n<p-dialog\n [header]=\"'workflow.metadata_route' | translate\"\n [(visible)]=\"routeMetadataDialogVisible\"\n [modal]=\"true\"\n position=\"top\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [appendTo]=\"'body'\"\n styleClass=\"workflow-route-metadata-dialog\"\n [style]=\"{ width: '78rem', maxHeight: 'calc(100vh - 2rem)' }\"\n [contentStyle]=\"{ overflow: 'visible', maxHeight: 'calc(100vh - 10rem)' }\">\n @if (routeMetadataDialogVisible && routeMetadataDs) {\n <wuic-metadata-editor\n #routeMetadataEditor\n [hardcodedDatasource]=\"routeMetadataDs!\"\n [saveCallback]=\"routeMetadataSaveCallback\"\n [hideReports]=\"true\"\n [hideRelatedTableActions]=\"false\"\n [hideRelatedColumnActions]=\"false\">\n </wuic-metadata-editor>\n }\n</p-dialog>\n\n<p-dialog\n [header]=\"'workflow.configure_action' | translate\"\n [(visible)]=\"actionPopupVisible\"\n [modal]=\"true\"\n [closable]=\"false\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '32rem' }\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-action-type-select\">{{ 'workflow.action_type' | translate }}</label>\n <p-select\n inputId=\"workflow-action-type-select\"\n [options]=\"actionTypeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedActionTypeId\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n <label for=\"workflow-action-scope-select\">{{ 'workflow.action_scope' | translate }}</label>\n <p-select\n inputId=\"workflow-action-scope-select\"\n [options]=\"actionScopeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedActionScopeId\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelActionDrop()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmActionDrop()\"\n [disabled]=\"selectedActionTypeId === null || selectedActionTypeId === undefined || selectedActionScopeId === null || selectedActionScopeId === undefined\">{{ 'confirmation' | translate }}</button>\n </div>\n </div>\n</p-dialog>\n\n<p-dialog\n [header]=\"'Opzioni workflow'\"\n [(visible)]=\"workflowOptionsDialogVisible\"\n [modal]=\"true\"\n [closable]=\"false\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '32rem' }\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-options-caption\">Caption menu start</label>\n <input\n id=\"workflow-options-caption\"\n class=\"workflow-options-input\"\n type=\"text\"\n [(ngModel)]=\"workflowOptionsCaption\" />\n\n <label class=\"workflow-options-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"workflowOptionsInheritMetadata\" />\n <span>Eredita metadati</span>\n </label>\n\n <label class=\"workflow-options-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"workflowOptionsExclusiveMenu\" />\n <span>Menu esclusivo</span>\n </label>\n\n <label class=\"workflow-options-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"workflowOptionsShowExit\" />\n <span>Mostra esci</span>\n </label>\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelWorkflowOptionsDialog()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmWorkflowOptionsDialog()\">{{ 'confirmation' | translate }}</button>\n </div>\n </div>\n</p-dialog>\n", styles: [":host{display:block;height:100%}.workflow-designer{display:grid;grid-template-rows:auto 1fr;grid-template-columns:260px 1fr;gap:12px;height:100%;min-height:520px}.workflow-toolbar{grid-column:1 / span 2;display:flex;align-items:center;flex-wrap:wrap;gap:8px;border:1px solid #d5dce6;border-radius:10px;background:#f7f9fc;padding:10px 12px}.workflow-toolbar label{font-size:.82rem;font-weight:600;color:#2f3f58}.workflow-toolbar input{height:30px;border:1px solid #c7d2e2;border-radius:6px;background:#fff;padding:0 8px;min-width:170px}.workflow-toolbar button{height:30px;border:1px solid #2f67d8;border-radius:6px;background:#2f67d8;color:#fff;padding:0 10px;font-size:.82rem;cursor:pointer}.workflow-toolbar button[disabled]{opacity:.6;cursor:not-allowed}.workflow-toolbar-menu-group{display:inline-flex}.workflow-current-graph{flex:1 1 auto;min-width:240px;font-size:.82rem;font-weight:600;color:#2f3f58}.workflow-palette{border:1px solid #d5dce6;border-radius:10px;background:#f7f9fc;overflow:auto}.workflow-palette-title{padding:10px 12px;font-size:.86rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#3d4f67;border-bottom:1px solid #d5dce6}.workflow-palette-list{display:flex;flex-direction:column;gap:8px;padding:10px}.workflow-palette-item{border:1px solid #c8d3e2;border-radius:8px;background:#fff;padding:10px;cursor:grab;-webkit-user-select:none;user-select:none}.workflow-palette-item-badge{display:inline-block;margin-top:4px;margin-bottom:4px;padding:2px 7px;border-radius:999px;font-size:.68rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;background:#e2e8f0;color:#334155}.workflow-palette-item-route{border-color:#93c5fd;background:#eff6ff}.workflow-palette-item-route .workflow-palette-item-badge{background:#dbeafe;color:#1d4ed8}.workflow-palette-item-action{border-color:#c4b5fd;background:#f5f3ff}.workflow-palette-item-action .workflow-palette-item-badge{background:#ede9fe;color:#6d28d9}.workflow-palette-item-start{border-color:#86efac;background:#f0fdf4}.workflow-palette-item-condition{border-color:#99f6e4;background:#f0fdfa}.workflow-palette-item-end{border-color:#fda4af;background:#fff1f2}.workflow-palette-item:active{cursor:grabbing}.workflow-palette-item-disabled{opacity:.6;cursor:not-allowed;filter:grayscale(.2)}:host-context(.theme-dark) .workflow-palette-item-disabled{opacity:.5}.workflow-palette-item-title{font-size:.94rem;font-weight:600;color:#21324a}.workflow-palette-item-description{margin-top:4px;font-size:.82rem;color:#60738f}.workflow-canvas{position:relative;border:1px solid #d5dce6;border-radius:10px;overflow:hidden;background:radial-gradient(circle at 1px 1px,#dbe3ef 1px,transparent 0);background-size:24px 24px;background-color:#f8fbff}.workflow-canvas-hint{position:absolute;right:12px;bottom:12px;font-size:.82rem;color:#60738f;background:#ffffffeb;border:1px solid #d5dce6;border-radius:6px;padding:5px 8px}.route-popup-form{display:flex;flex-direction:column;gap:8px}.route-popup-form label{font-size:.85rem;font-weight:600;color:#2f3f58;margin-top:2px}.workflow-options-input{width:100%;height:34px;border:1px solid #c7d2e2;border-radius:6px;background:#fff;padding:0 8px;color:#1f2f49}.workflow-options-toggle{display:flex;align-items:center;gap:8px;font-size:.85rem;font-weight:600;color:#2f3f58;margin-top:2px}.workflow-options-toggle input[type=checkbox]{width:16px;height:16px}.route-popup-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}.route-popup-btn{border:1px solid #c7d2e2;background:#fff;color:#1f2f49;border-radius:6px;padding:7px 12px;font-size:.85rem;cursor:pointer}.route-popup-btn-primary{border-color:#2f67d8;background:#2f67d8;color:#fff}:host ::ng-deep .workflow-route-metadata-dialog.p-dialog{max-height:calc(100vh - 2rem)}:host ::ng-deep .workflow-route-metadata-dialog .p-dialog-content{overflow:visible;max-height:calc(100vh - 10rem)}:host ::ng-deep .workflow-canvas [data-wf-node-type] .node{border:1px solid var(--wf-node-accent, #64748b)!important;background:var(--wf-node-bg, #f8fafc)!important}:host ::ng-deep .workflow-canvas [data-wf-node-type] .title{background:var(--wf-node-accent, #64748b)!important;color:#fff!important;font-weight:700}:host ::ng-deep .workflow-canvas [data-wf-node-type=action][data-wf-action-scope=col] .node{border-style:dashed!important}:host ::ng-deep .workflow-canvas [data-wf-node-type=action][data-wf-action-scope=tab] .node{border-style:solid!important}:host-context(.theme-dark) .workflow-toolbar{border-color:#2a3447;background:#141b27}:host-context(.theme-dark) .workflow-current-graph,:host-context(.theme-dark) .workflow-toolbar label{color:#d8e2f1}:host-context(.theme-dark) .workflow-toolbar input{border-color:#334155;background:#0f1724;color:#e5ecf8}:host-context(.theme-dark) .workflow-toolbar button{border-color:#335fcf;background:#335fcf}:host-context(.theme-dark) .workflow-palette{border-color:#2a3447;background:#141b27}:host-context(.theme-dark) .workflow-palette-title{color:#dbe4f2;border-bottom-color:#2a3447}:host-context(.theme-dark) .workflow-palette-item{border-color:#334155;background:#0f1724}:host-context(.theme-dark) .workflow-palette-item-title{color:#e6edf8}:host-context(.theme-dark) .workflow-palette-item-description{color:#9fb0c7}:host-context(.theme-dark) .workflow-palette-item-badge{background:#273247;color:#c9d7ec}:host-context(.theme-dark) .workflow-palette-item-route{border-color:#3b82f6;background:#0f1f35}:host-context(.theme-dark) .workflow-palette-item-route .workflow-palette-item-badge{background:#1e3a6a;color:#c8ddff}:host-context(.theme-dark) .workflow-palette-item-action{border-color:#8b5cf6;background:#24183d}:host-context(.theme-dark) .workflow-palette-item-action .workflow-palette-item-badge{background:#3a2370;color:#ded1ff}:host-context(.theme-dark) .workflow-palette-item-start{border-color:#22c55e;background:#11281c}:host-context(.theme-dark) .workflow-palette-item-condition{border-color:#14b8a6;background:#0f2726}:host-context(.theme-dark) .workflow-palette-item-end{border-color:#ef4444;background:#30171b}:host-context(.theme-dark) .workflow-canvas{border-color:#2a3447;background:radial-gradient(circle at 1px 1px,#334155 1px,transparent 0);background-size:24px 24px;background-color:#0f1724}:host-context(.theme-dark) .workflow-canvas-hint{color:#b9c8de;background:#0f1724e6;border-color:#334155}:host-context(.theme-dark) .route-popup-form label,:host-context(.theme-dark) .workflow-options-toggle{color:#d8e2f1}:host-context(.theme-dark) .workflow-options-input{border-color:#334155;background:#0f1724;color:#e5ecf8}:host-context(.theme-dark) .route-popup-btn{border-color:#334155;background:#111b2b;color:#d8e2f1}:host-context(.theme-dark) .route-popup-btn-primary{border-color:#335fcf;background:#335fcf;color:#fff}:host-context(.theme-dark) ::ng-deep .p-menu,:host-context(.theme-dark) ::ng-deep .p-contextmenu{background:#121b2b;border-color:#334155;color:#dbe4f2}:host-context(.theme-dark) ::ng-deep .p-menu .p-menu-item-content,:host-context(.theme-dark) ::ng-deep .p-contextmenu .p-menu-item-content{color:#dbe4f2}:host-context(.theme-dark) ::ng-deep .p-menu .p-menu-item-content:hover,:host-context(.theme-dark) ::ng-deep .p-contextmenu .p-menu-item-content:hover{background:#1f2a3d}:host-context(.theme-dark) ::ng-deep .p-dialog{background:#121b2b;border-color:#334155;color:#dbe4f2}:host-context(.theme-dark) ::ng-deep .p-dialog .p-dialog-header,:host-context(.theme-dark) ::ng-deep .p-dialog .p-dialog-content,:host-context(.theme-dark) ::ng-deep .p-dialog .p-dialog-footer{background:#121b2b;color:#dbe4f2;border-color:#334155}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "maskMotionOptions", "motionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i6.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i2$1.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "minQueryLength", "delay", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "addOnTab", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "addOnBlur", "separator", "appendTo", "motionOptions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onAdd", "onFocus", "onBlur", "onDropdownClick", "onClear", "onInputKeydown", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i9.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo", "motionOptions"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i13.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay", "appendTo", "motionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: DataSourceComponent, selector: "wuic-data-source", inputs: ["route", "routeFromRouting", "hardcodedRoute", "autoload", "loading", "changeTracking", "parentRecord", "parentMetaInfo", "parentDatasource", "useComboEndpoint", "comboFormulaLookup", "comboMcId", "comboField", "comboExtraFields", "comboCurrentRecord", "componentRef"] }, { kind: "component", type: MetadataEditorComponent, selector: "wuic-metadata-editor", inputs: ["datasource", "hardcodedDatasource", "saveCallback", "hideReports", "hideRelatedTableActions", "hideRelatedColumnActions"] }, { kind: "pipe", type: i2$2.TranslatePipe, name: "translate" }] });
|
|
5062
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: WorkflowDesignerComponent, deps: [{ token: i0.Injector }, { token: DataProviderService }], target: i0.ɵɵFactoryTarget.Component });
|
|
5063
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: WorkflowDesignerComponent, isStandalone: true, selector: "wuic-workflow-designer", outputs: { workflowChange: "workflowChange" }, viewQueries: [{ propertyName: "workflowCanvasRef", first: true, predicate: ["workflowCanvas"], descendants: true, static: true }, { propertyName: "primeContextMenu", first: true, predicate: ["primeContextMenu"], descendants: true }, { propertyName: "routeMetadataDs", first: true, predicate: ["routeMetadataDs"], descendants: true }, { propertyName: "startMenuDs", first: true, predicate: ["startMenuDs"], descendants: true }, { propertyName: "menuAuthDs", first: true, predicate: ["menuAuthDs"], descendants: true }, { propertyName: "routeMetadataEditor", first: true, predicate: ["routeMetadataEditor"], descendants: true }, { propertyName: "actionMetadataEditor", first: true, predicate: ["actionMetadataEditor"], descendants: true }], ngImport: i0, template: "<div class=\"workflow-designer\">\n <div class=\"workflow-toolbar\">\n <div class=\"workflow-current-graph\">{{ currentGraphCaption }}</div>\n <div class=\"workflow-toolbar-menu-group\">\n <button type=\"button\" (click)=\"graphActionsMenu.toggle($event)\">\n Azioni grafo\n </button>\n <p-menu #graphActionsMenu [popup]=\"true\" [model]=\"graphActionsMenuItems\" appendTo=\"body\"></p-menu>\n </div>\n <div class=\"workflow-toolbar-menu-group\">\n <button type=\"button\" (click)=\"runnerActionsMenu.toggle($event)\" [disabled]=\"!canOpenWorkflowRunner\">\n Runner\n </button>\n <p-menu #runnerActionsMenu [popup]=\"true\" [model]=\"runnerActionsMenuItems\" appendTo=\"body\"></p-menu>\n </div>\n </div>\n\n <aside class=\"workflow-palette\">\n <div class=\"workflow-palette-title\">{{ 'workflow.palette' | translate }}</div>\n <div class=\"workflow-palette-list\">\n @for (item of paletteNodes; track item) {\n <div\n class=\"workflow-palette-item\"\n [ngClass]=\"{\n 'workflow-palette-item-route': item.type === 'route',\n 'workflow-palette-item-action': item.type === 'action',\n 'workflow-palette-item-start': item.type === 'start',\n 'workflow-palette-item-condition': item.type === 'condition',\n 'workflow-palette-item-end': item.type === 'end',\n 'workflow-palette-item-disabled': !isPaletteNodeEnabled(item)\n }\"\n [attr.draggable]=\"isPaletteNodeEnabled(item) ? 'true' : 'false'\"\n (dragstart)=\"onPaletteDragStart($event, item)\">\n <div class=\"workflow-palette-item-title\">{{ item.label }}</div>\n @if (item.type === 'route') {\n <div class=\"workflow-palette-item-badge\">{{ 'workflow.badge.route' | translate }}</div>\n }\n @if (item.type === 'action') {\n <div class=\"workflow-palette-item-badge\">{{ 'workflow.badge.action_scope' | translate }}</div>\n }\n <div class=\"workflow-palette-item-description\">{{ item.description }}</div>\n </div>\n }\n </div>\n </aside>\n\n <section\n #workflowCanvas\n class=\"workflow-canvas\"\n (dragover)=\"onCanvasDragOver($event)\"\n (drop)=\"onCanvasDrop($event)\"\n (contextmenu)=\"onCanvasContextMenu($event)\"\n (click)=\"onCanvasClick()\">\n <div class=\"workflow-canvas-hint\">\n {{ 'workflow.drag_hint' | translate }}\n </div>\n </section>\n <p-contextMenu\n #primeContextMenu\n [model]=\"contextMenuItems\"\n appendTo=\"body\"\n [autoZIndex]=\"true\"\n [baseZIndex]=\"13000\">\n </p-contextMenu>\n</div>\n\n<p-dialog\n [header]=\"'Riapri grafo'\"\n [(visible)]=\"reopenWorkflowDialogVisible\"\n [modal]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [appendTo]=\"'body'\"\n [style]=\"{ width: '34rem' }\"\n (onHide)=\"cancelReopenWorkflowDialog()\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-reopen-select\">Grafi esistenti</label>\n <p-select\n inputId=\"workflow-reopen-select\"\n [options]=\"savedGraphOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"reopenDialogSelectedGraphKey\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelReopenWorkflowDialog()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmReopenWorkflowDialog()\"\n [disabled]=\"!reopenDialogSelectedGraphKey || loadingWorkflow\">Riapri</button>\n </div>\n </div>\n</p-dialog>\n\n<div style=\"display:none\">\n <wuic-data-source #routeMetadataDs [hardcodedRoute]=\"routeMetadataRoute\"></wuic-data-source>\n <wuic-data-source #startMenuDs [hardcodedRoute]=\"' metadati menu'\"></wuic-data-source>\n <wuic-data-source #menuAuthDs [hardcodedRoute]=\"' mtdt tnt trizzazioni menus'\"></wuic-data-source>\n @if (routeMetadataDs) {\n <wuic-metadata-editor\n #actionMetadataEditor\n [hardcodedDatasource]=\"routeMetadataDs!\"\n [saveCallback]=\"routeMetadataSaveCallback\"\n [hideReports]=\"true\"\n [hideRelatedTableActions]=\"true\"\n [hideRelatedColumnActions]=\"true\">\n </wuic-metadata-editor>\n }\n</div>\n\n<p-dialog\n [header]=\"'workflow.configure_route' | translate\"\n [(visible)]=\"routePopupVisible\"\n [modal]=\"true\"\n [closable]=\"false\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '32rem' }\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-route-source-select\">Sorgente nodo</label>\n <p-select\n inputId=\"workflow-route-source-select\"\n [options]=\"routeSourceOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedRouteSourceType\"\n (ngModelChange)=\"onRouteSourceTypeChanged()\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n @if (selectedRouteSourceType === 'route') {\n <label for=\"workflow-route-select\">{{ 'workflow.route' | translate }}</label>\n <p-autoComplete\n inputId=\"workflow-route-select\"\n [(ngModel)]=\"selectedRouteName\"\n [suggestions]=\"filteredRouteOptions\"\n [forceSelection]=\"true\"\n [dropdown]=\"true\"\n dropdownMode=\"current\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\"\n (completeMethod)=\"filterRouteOptions($event)\" />\n <label for=\"workflow-action-select\">{{ 'workflow.action' | translate }}</label>\n <p-select\n inputId=\"workflow-action-select\"\n [options]=\"routeActionOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedRouteAction\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n } @else {\n <label for=\"workflow-dashboard-select\">Dashboard</label>\n <p-autoComplete\n inputId=\"workflow-dashboard-select\"\n [(ngModel)]=\"selectedDashboardRoute\"\n [suggestions]=\"filteredDashboardOptions\"\n [forceSelection]=\"true\"\n [dropdown]=\"true\"\n dropdownMode=\"current\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\"\n (completeMethod)=\"filterDashboardOptions($event)\" />\n }\n\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelRouteDrop()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmRouteDrop()\"\n [disabled]=\"selectedRouteSourceType === 'dashboard' ? !selectedDashboardRoute : (!selectedRouteName || !selectedRouteAction)\">{{ 'confirmation' | translate }}</button>\n </div>\n </div>\n</p-dialog>\n\n<p-dialog\n [header]=\"'workflow.metadata_route' | translate\"\n [(visible)]=\"routeMetadataDialogVisible\"\n [modal]=\"true\"\n position=\"top\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [appendTo]=\"'body'\"\n styleClass=\"workflow-route-metadata-dialog\"\n [style]=\"{ width: '78rem', maxHeight: 'calc(100vh - 2rem)' }\"\n [contentStyle]=\"{ overflow: 'visible', maxHeight: 'calc(100vh - 10rem)' }\">\n @if (routeMetadataDialogVisible && routeMetadataDs) {\n <wuic-metadata-editor\n #routeMetadataEditor\n [hardcodedDatasource]=\"routeMetadataDs!\"\n [saveCallback]=\"routeMetadataSaveCallback\"\n [hideReports]=\"true\"\n [hideRelatedTableActions]=\"false\"\n [hideRelatedColumnActions]=\"false\">\n </wuic-metadata-editor>\n }\n</p-dialog>\n\n<p-dialog\n [header]=\"'workflow.configure_action' | translate\"\n [(visible)]=\"actionPopupVisible\"\n [modal]=\"true\"\n [closable]=\"false\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '32rem' }\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-action-type-select\">{{ 'workflow.action_type' | translate }}</label>\n <p-select\n inputId=\"workflow-action-type-select\"\n [options]=\"actionTypeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedActionTypeId\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n <label for=\"workflow-action-scope-select\">{{ 'workflow.action_scope' | translate }}</label>\n <p-select\n inputId=\"workflow-action-scope-select\"\n [options]=\"actionScopeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedActionScopeId\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelActionDrop()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmActionDrop()\"\n [disabled]=\"selectedActionTypeId === null || selectedActionTypeId === undefined || selectedActionScopeId === null || selectedActionScopeId === undefined\">{{ 'confirmation' | translate }}</button>\n </div>\n </div>\n</p-dialog>\n\n<p-dialog\n [header]=\"'Opzioni workflow'\"\n [(visible)]=\"workflowOptionsDialogVisible\"\n [modal]=\"true\"\n [closable]=\"false\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '32rem' }\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-options-caption\">Caption menu start</label>\n <input\n id=\"workflow-options-caption\"\n class=\"workflow-options-input\"\n type=\"text\"\n [(ngModel)]=\"workflowOptionsCaption\" />\n\n <label class=\"workflow-options-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"workflowOptionsInheritMetadata\" />\n <span>Eredita metadati</span>\n </label>\n\n <label class=\"workflow-options-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"workflowOptionsExclusiveMenu\" />\n <span>Menu esclusivo</span>\n </label>\n\n <label class=\"workflow-options-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"workflowOptionsShowExit\" />\n <span>Mostra esci</span>\n </label>\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelWorkflowOptionsDialog()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmWorkflowOptionsDialog()\">{{ 'confirmation' | translate }}</button>\n </div>\n </div>\n</p-dialog>\n", styles: [":host{display:block;height:100%}.workflow-designer{display:grid;grid-template-rows:auto 1fr;grid-template-columns:260px 1fr;gap:12px;height:100%;min-height:520px}.workflow-toolbar{grid-column:1 / span 2;display:flex;align-items:center;flex-wrap:wrap;gap:8px;border:1px solid #d5dce6;border-radius:10px;background:#f7f9fc;padding:10px 12px}.workflow-toolbar label{font-size:.82rem;font-weight:600;color:#2f3f58}.workflow-toolbar input{height:30px;border:1px solid #c7d2e2;border-radius:6px;background:#fff;padding:0 8px;min-width:170px}.workflow-toolbar button{height:30px;border:1px solid #2f67d8;border-radius:6px;background:#2f67d8;color:#fff;padding:0 10px;font-size:.82rem;cursor:pointer}.workflow-toolbar button[disabled]{opacity:.6;cursor:not-allowed}.workflow-toolbar-menu-group{display:inline-flex}.workflow-current-graph{flex:1 1 auto;min-width:240px;font-size:.82rem;font-weight:600;color:#2f3f58}.workflow-palette{border:1px solid #d5dce6;border-radius:10px;background:#f7f9fc;overflow:auto}.workflow-palette-title{padding:10px 12px;font-size:.86rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#3d4f67;border-bottom:1px solid #d5dce6}.workflow-palette-list{display:flex;flex-direction:column;gap:8px;padding:10px}.workflow-palette-item{border:1px solid #c8d3e2;border-radius:8px;background:#fff;padding:10px;cursor:grab;-webkit-user-select:none;user-select:none}.workflow-palette-item-badge{display:inline-block;margin-top:4px;margin-bottom:4px;padding:2px 7px;border-radius:999px;font-size:.68rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;background:#e2e8f0;color:#334155}.workflow-palette-item-route{border-color:#93c5fd;background:#eff6ff}.workflow-palette-item-route .workflow-palette-item-badge{background:#dbeafe;color:#1d4ed8}.workflow-palette-item-action{border-color:#c4b5fd;background:#f5f3ff}.workflow-palette-item-action .workflow-palette-item-badge{background:#ede9fe;color:#6d28d9}.workflow-palette-item-start{border-color:#86efac;background:#f0fdf4}.workflow-palette-item-condition{border-color:#99f6e4;background:#f0fdfa}.workflow-palette-item-end{border-color:#fda4af;background:#fff1f2}.workflow-palette-item:active{cursor:grabbing}.workflow-palette-item-disabled{opacity:.6;cursor:not-allowed;filter:grayscale(.2)}:host-context(.theme-dark) .workflow-palette-item-disabled{opacity:.5}.workflow-palette-item-title{font-size:.94rem;font-weight:600;color:#21324a}.workflow-palette-item-description{margin-top:4px;font-size:.82rem;color:#60738f}.workflow-canvas{position:relative;border:1px solid #d5dce6;border-radius:10px;overflow:hidden;background:radial-gradient(circle at 1px 1px,#dbe3ef 1px,transparent 0);background-size:24px 24px;background-color:#f8fbff}.workflow-canvas-hint{position:absolute;right:12px;bottom:12px;font-size:.82rem;color:#60738f;background:#ffffffeb;border:1px solid #d5dce6;border-radius:6px;padding:5px 8px}.route-popup-form{display:flex;flex-direction:column;gap:8px}.route-popup-form label{font-size:.85rem;font-weight:600;color:#2f3f58;margin-top:2px}.workflow-options-input{width:100%;height:34px;border:1px solid #c7d2e2;border-radius:6px;background:#fff;padding:0 8px;color:#1f2f49}.workflow-options-toggle{display:flex;align-items:center;gap:8px;font-size:.85rem;font-weight:600;color:#2f3f58;margin-top:2px}.workflow-options-toggle input[type=checkbox]{width:16px;height:16px}.route-popup-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}.route-popup-btn{border:1px solid #c7d2e2;background:#fff;color:#1f2f49;border-radius:6px;padding:7px 12px;font-size:.85rem;cursor:pointer}.route-popup-btn-primary{border-color:#2f67d8;background:#2f67d8;color:#fff}:host ::ng-deep .workflow-route-metadata-dialog.p-dialog{max-height:calc(100vh - 2rem)}:host ::ng-deep .workflow-route-metadata-dialog .p-dialog-content{overflow:visible;max-height:calc(100vh - 10rem)}:host ::ng-deep .workflow-canvas [data-wf-node-type] .node{border:1px solid var(--wf-node-accent, #64748b)!important;background:var(--wf-node-bg, #f8fafc)!important}:host ::ng-deep .workflow-canvas [data-wf-node-type] .title{background:var(--wf-node-accent, #64748b)!important;color:#fff!important;font-weight:700}:host ::ng-deep .workflow-canvas [data-wf-node-type=action][data-wf-action-scope=col] .node{border-style:dashed!important}:host ::ng-deep .workflow-canvas [data-wf-node-type=action][data-wf-action-scope=tab] .node{border-style:solid!important}:host-context(.theme-dark) .workflow-toolbar{border-color:#2a3447;background:#141b27}:host-context(.theme-dark) .workflow-current-graph,:host-context(.theme-dark) .workflow-toolbar label{color:#d8e2f1}:host-context(.theme-dark) .workflow-toolbar input{border-color:#334155;background:#0f1724;color:#e5ecf8}:host-context(.theme-dark) .workflow-toolbar button{border-color:#335fcf;background:#335fcf}:host-context(.theme-dark) .workflow-palette{border-color:#2a3447;background:#141b27}:host-context(.theme-dark) .workflow-palette-title{color:#dbe4f2;border-bottom-color:#2a3447}:host-context(.theme-dark) .workflow-palette-item{border-color:#334155;background:#0f1724}:host-context(.theme-dark) .workflow-palette-item-title{color:#e6edf8}:host-context(.theme-dark) .workflow-palette-item-description{color:#9fb0c7}:host-context(.theme-dark) .workflow-palette-item-badge{background:#273247;color:#c9d7ec}:host-context(.theme-dark) .workflow-palette-item-route{border-color:#3b82f6;background:#0f1f35}:host-context(.theme-dark) .workflow-palette-item-route .workflow-palette-item-badge{background:#1e3a6a;color:#c8ddff}:host-context(.theme-dark) .workflow-palette-item-action{border-color:#8b5cf6;background:#24183d}:host-context(.theme-dark) .workflow-palette-item-action .workflow-palette-item-badge{background:#3a2370;color:#ded1ff}:host-context(.theme-dark) .workflow-palette-item-start{border-color:#22c55e;background:#11281c}:host-context(.theme-dark) .workflow-palette-item-condition{border-color:#14b8a6;background:#0f2726}:host-context(.theme-dark) .workflow-palette-item-end{border-color:#ef4444;background:#30171b}:host-context(.theme-dark) .workflow-canvas{border-color:#2a3447;background:radial-gradient(circle at 1px 1px,#334155 1px,transparent 0);background-size:24px 24px;background-color:#0f1724}:host-context(.theme-dark) .workflow-canvas-hint{color:#b9c8de;background:#0f1724e6;border-color:#334155}:host-context(.theme-dark) .route-popup-form label,:host-context(.theme-dark) .workflow-options-toggle{color:#d8e2f1}:host-context(.theme-dark) .workflow-options-input{border-color:#334155;background:#0f1724;color:#e5ecf8}:host-context(.theme-dark) .route-popup-btn{border-color:#334155;background:#111b2b;color:#d8e2f1}:host-context(.theme-dark) .route-popup-btn-primary{border-color:#335fcf;background:#335fcf;color:#fff}:host-context(.theme-dark) ::ng-deep .p-menu,:host-context(.theme-dark) ::ng-deep .p-contextmenu{background:#121b2b;border-color:#334155;color:#dbe4f2}:host-context(.theme-dark) ::ng-deep .p-menu .p-menu-item-content,:host-context(.theme-dark) ::ng-deep .p-contextmenu .p-menu-item-content{color:#dbe4f2}:host-context(.theme-dark) ::ng-deep .p-menu .p-menu-item-content:hover,:host-context(.theme-dark) ::ng-deep .p-contextmenu .p-menu-item-content:hover{background:#1f2a3d}:host-context(.theme-dark) ::ng-deep .p-dialog{background:#121b2b;border-color:#334155;color:#dbe4f2}:host-context(.theme-dark) ::ng-deep .p-dialog .p-dialog-header,:host-context(.theme-dark) ::ng-deep .p-dialog .p-dialog-content,:host-context(.theme-dark) ::ng-deep .p-dialog .p-dialog-footer{background:#121b2b;color:#dbe4f2;border-color:#334155}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: DialogModule }, { kind: "component", type: i2.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "maskMotionOptions", "motionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: SelectModule }, { kind: "component", type: i6.Select, selector: "p-select", inputs: ["id", "scrollHeight", "filter", "panelStyle", "styleClass", "panelStyleClass", "readonly", "editable", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "filterValue", "options", "appendTo", "motionOptions"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i2$1.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "minQueryLength", "delay", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "addOnTab", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "addOnBlur", "separator", "appendTo", "motionOptions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onAdd", "onFocus", "onBlur", "onDropdownClick", "onClear", "onInputKeydown", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i9.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "ariaLabel", "ariaLabelledBy", "id", "tabindex", "appendTo", "motionOptions"], outputs: ["onShow", "onHide", "onBlur", "onFocus"] }, { kind: "ngmodule", type: ContextMenuModule }, { kind: "component", type: i14.ContextMenu, selector: "p-contextMenu, p-contextmenu, p-context-menu", inputs: ["model", "triggerEvent", "target", "global", "style", "styleClass", "autoZIndex", "baseZIndex", "id", "breakpoint", "ariaLabel", "ariaLabelledBy", "pressDelay", "appendTo", "motionOptions"], outputs: ["onShow", "onHide"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: DataSourceComponent, selector: "wuic-data-source", inputs: ["route", "routeFromRouting", "hardcodedRoute", "autoload", "loading", "changeTracking", "parentRecord", "parentMetaInfo", "parentDatasource", "useComboEndpoint", "comboFormulaLookup", "comboMcId", "comboField", "comboExtraFields", "comboCurrentRecord", "componentRef"] }, { kind: "component", type: MetadataEditorComponent, selector: "wuic-metadata-editor", inputs: ["datasource", "hardcodedDatasource", "saveCallback", "hideReports", "hideRelatedTableActions", "hideRelatedColumnActions"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
5064
5064
|
}
|
|
5065
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
5065
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: WorkflowDesignerComponent, decorators: [{
|
|
5066
5066
|
type: Component,
|
|
5067
5067
|
args: [{ selector: 'wuic-workflow-designer', standalone: true, imports: [NgClass, FormsModule, DialogModule, SelectModule, AutoCompleteModule, MenuModule, ContextMenuModule, TranslateModule, DataSourceComponent, MetadataEditorComponent], template: "<div class=\"workflow-designer\">\n <div class=\"workflow-toolbar\">\n <div class=\"workflow-current-graph\">{{ currentGraphCaption }}</div>\n <div class=\"workflow-toolbar-menu-group\">\n <button type=\"button\" (click)=\"graphActionsMenu.toggle($event)\">\n Azioni grafo\n </button>\n <p-menu #graphActionsMenu [popup]=\"true\" [model]=\"graphActionsMenuItems\" appendTo=\"body\"></p-menu>\n </div>\n <div class=\"workflow-toolbar-menu-group\">\n <button type=\"button\" (click)=\"runnerActionsMenu.toggle($event)\" [disabled]=\"!canOpenWorkflowRunner\">\n Runner\n </button>\n <p-menu #runnerActionsMenu [popup]=\"true\" [model]=\"runnerActionsMenuItems\" appendTo=\"body\"></p-menu>\n </div>\n </div>\n\n <aside class=\"workflow-palette\">\n <div class=\"workflow-palette-title\">{{ 'workflow.palette' | translate }}</div>\n <div class=\"workflow-palette-list\">\n @for (item of paletteNodes; track item) {\n <div\n class=\"workflow-palette-item\"\n [ngClass]=\"{\n 'workflow-palette-item-route': item.type === 'route',\n 'workflow-palette-item-action': item.type === 'action',\n 'workflow-palette-item-start': item.type === 'start',\n 'workflow-palette-item-condition': item.type === 'condition',\n 'workflow-palette-item-end': item.type === 'end',\n 'workflow-palette-item-disabled': !isPaletteNodeEnabled(item)\n }\"\n [attr.draggable]=\"isPaletteNodeEnabled(item) ? 'true' : 'false'\"\n (dragstart)=\"onPaletteDragStart($event, item)\">\n <div class=\"workflow-palette-item-title\">{{ item.label }}</div>\n @if (item.type === 'route') {\n <div class=\"workflow-palette-item-badge\">{{ 'workflow.badge.route' | translate }}</div>\n }\n @if (item.type === 'action') {\n <div class=\"workflow-palette-item-badge\">{{ 'workflow.badge.action_scope' | translate }}</div>\n }\n <div class=\"workflow-palette-item-description\">{{ item.description }}</div>\n </div>\n }\n </div>\n </aside>\n\n <section\n #workflowCanvas\n class=\"workflow-canvas\"\n (dragover)=\"onCanvasDragOver($event)\"\n (drop)=\"onCanvasDrop($event)\"\n (contextmenu)=\"onCanvasContextMenu($event)\"\n (click)=\"onCanvasClick()\">\n <div class=\"workflow-canvas-hint\">\n {{ 'workflow.drag_hint' | translate }}\n </div>\n </section>\n <p-contextMenu\n #primeContextMenu\n [model]=\"contextMenuItems\"\n appendTo=\"body\"\n [autoZIndex]=\"true\"\n [baseZIndex]=\"13000\">\n </p-contextMenu>\n</div>\n\n<p-dialog\n [header]=\"'Riapri grafo'\"\n [(visible)]=\"reopenWorkflowDialogVisible\"\n [modal]=\"true\"\n [closable]=\"true\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [appendTo]=\"'body'\"\n [style]=\"{ width: '34rem' }\"\n (onHide)=\"cancelReopenWorkflowDialog()\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-reopen-select\">Grafi esistenti</label>\n <p-select\n inputId=\"workflow-reopen-select\"\n [options]=\"savedGraphOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"reopenDialogSelectedGraphKey\"\n [filter]=\"true\"\n [showClear]=\"true\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelReopenWorkflowDialog()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmReopenWorkflowDialog()\"\n [disabled]=\"!reopenDialogSelectedGraphKey || loadingWorkflow\">Riapri</button>\n </div>\n </div>\n</p-dialog>\n\n<div style=\"display:none\">\n <wuic-data-source #routeMetadataDs [hardcodedRoute]=\"routeMetadataRoute\"></wuic-data-source>\n <wuic-data-source #startMenuDs [hardcodedRoute]=\"' metadati menu'\"></wuic-data-source>\n <wuic-data-source #menuAuthDs [hardcodedRoute]=\"' mtdt tnt trizzazioni menus'\"></wuic-data-source>\n @if (routeMetadataDs) {\n <wuic-metadata-editor\n #actionMetadataEditor\n [hardcodedDatasource]=\"routeMetadataDs!\"\n [saveCallback]=\"routeMetadataSaveCallback\"\n [hideReports]=\"true\"\n [hideRelatedTableActions]=\"true\"\n [hideRelatedColumnActions]=\"true\">\n </wuic-metadata-editor>\n }\n</div>\n\n<p-dialog\n [header]=\"'workflow.configure_route' | translate\"\n [(visible)]=\"routePopupVisible\"\n [modal]=\"true\"\n [closable]=\"false\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '32rem' }\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-route-source-select\">Sorgente nodo</label>\n <p-select\n inputId=\"workflow-route-source-select\"\n [options]=\"routeSourceOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedRouteSourceType\"\n (ngModelChange)=\"onRouteSourceTypeChanged()\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n @if (selectedRouteSourceType === 'route') {\n <label for=\"workflow-route-select\">{{ 'workflow.route' | translate }}</label>\n <p-autoComplete\n inputId=\"workflow-route-select\"\n [(ngModel)]=\"selectedRouteName\"\n [suggestions]=\"filteredRouteOptions\"\n [forceSelection]=\"true\"\n [dropdown]=\"true\"\n dropdownMode=\"current\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\"\n (completeMethod)=\"filterRouteOptions($event)\" />\n <label for=\"workflow-action-select\">{{ 'workflow.action' | translate }}</label>\n <p-select\n inputId=\"workflow-action-select\"\n [options]=\"routeActionOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedRouteAction\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n } @else {\n <label for=\"workflow-dashboard-select\">Dashboard</label>\n <p-autoComplete\n inputId=\"workflow-dashboard-select\"\n [(ngModel)]=\"selectedDashboardRoute\"\n [suggestions]=\"filteredDashboardOptions\"\n [forceSelection]=\"true\"\n [dropdown]=\"true\"\n dropdownMode=\"current\"\n [optionLabel]=\"'label'\"\n [optionValue]=\"'value'\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\"\n (completeMethod)=\"filterDashboardOptions($event)\" />\n }\n\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelRouteDrop()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmRouteDrop()\"\n [disabled]=\"selectedRouteSourceType === 'dashboard' ? !selectedDashboardRoute : (!selectedRouteName || !selectedRouteAction)\">{{ 'confirmation' | translate }}</button>\n </div>\n </div>\n</p-dialog>\n\n<p-dialog\n [header]=\"'workflow.metadata_route' | translate\"\n [(visible)]=\"routeMetadataDialogVisible\"\n [modal]=\"true\"\n position=\"top\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [appendTo]=\"'body'\"\n styleClass=\"workflow-route-metadata-dialog\"\n [style]=\"{ width: '78rem', maxHeight: 'calc(100vh - 2rem)' }\"\n [contentStyle]=\"{ overflow: 'visible', maxHeight: 'calc(100vh - 10rem)' }\">\n @if (routeMetadataDialogVisible && routeMetadataDs) {\n <wuic-metadata-editor\n #routeMetadataEditor\n [hardcodedDatasource]=\"routeMetadataDs!\"\n [saveCallback]=\"routeMetadataSaveCallback\"\n [hideReports]=\"true\"\n [hideRelatedTableActions]=\"false\"\n [hideRelatedColumnActions]=\"false\">\n </wuic-metadata-editor>\n }\n</p-dialog>\n\n<p-dialog\n [header]=\"'workflow.configure_action' | translate\"\n [(visible)]=\"actionPopupVisible\"\n [modal]=\"true\"\n [closable]=\"false\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '32rem' }\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-action-type-select\">{{ 'workflow.action_type' | translate }}</label>\n <p-select\n inputId=\"workflow-action-type-select\"\n [options]=\"actionTypeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedActionTypeId\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n <label for=\"workflow-action-scope-select\">{{ 'workflow.action_scope' | translate }}</label>\n <p-select\n inputId=\"workflow-action-scope-select\"\n [options]=\"actionScopeOptions\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [(ngModel)]=\"selectedActionScopeId\"\n [style]=\"{ width: '100%' }\"\n appendTo=\"body\" />\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelActionDrop()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmActionDrop()\"\n [disabled]=\"selectedActionTypeId === null || selectedActionTypeId === undefined || selectedActionScopeId === null || selectedActionScopeId === undefined\">{{ 'confirmation' | translate }}</button>\n </div>\n </div>\n</p-dialog>\n\n<p-dialog\n [header]=\"'Opzioni workflow'\"\n [(visible)]=\"workflowOptionsDialogVisible\"\n [modal]=\"true\"\n [closable]=\"false\"\n [draggable]=\"false\"\n [resizable]=\"false\"\n [style]=\"{ width: '32rem' }\">\n <div class=\"route-popup-form\">\n <label for=\"workflow-options-caption\">Caption menu start</label>\n <input\n id=\"workflow-options-caption\"\n class=\"workflow-options-input\"\n type=\"text\"\n [(ngModel)]=\"workflowOptionsCaption\" />\n\n <label class=\"workflow-options-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"workflowOptionsInheritMetadata\" />\n <span>Eredita metadati</span>\n </label>\n\n <label class=\"workflow-options-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"workflowOptionsExclusiveMenu\" />\n <span>Menu esclusivo</span>\n </label>\n\n <label class=\"workflow-options-toggle\">\n <input type=\"checkbox\" [(ngModel)]=\"workflowOptionsShowExit\" />\n <span>Mostra esci</span>\n </label>\n\n <div class=\"route-popup-actions\">\n <button type=\"button\" class=\"route-popup-btn\" (click)=\"cancelWorkflowOptionsDialog()\">{{ 'cancel' | translate }}</button>\n <button type=\"button\" class=\"route-popup-btn route-popup-btn-primary\" (click)=\"confirmWorkflowOptionsDialog()\">{{ 'confirmation' | translate }}</button>\n </div>\n </div>\n</p-dialog>\n", styles: [":host{display:block;height:100%}.workflow-designer{display:grid;grid-template-rows:auto 1fr;grid-template-columns:260px 1fr;gap:12px;height:100%;min-height:520px}.workflow-toolbar{grid-column:1 / span 2;display:flex;align-items:center;flex-wrap:wrap;gap:8px;border:1px solid #d5dce6;border-radius:10px;background:#f7f9fc;padding:10px 12px}.workflow-toolbar label{font-size:.82rem;font-weight:600;color:#2f3f58}.workflow-toolbar input{height:30px;border:1px solid #c7d2e2;border-radius:6px;background:#fff;padding:0 8px;min-width:170px}.workflow-toolbar button{height:30px;border:1px solid #2f67d8;border-radius:6px;background:#2f67d8;color:#fff;padding:0 10px;font-size:.82rem;cursor:pointer}.workflow-toolbar button[disabled]{opacity:.6;cursor:not-allowed}.workflow-toolbar-menu-group{display:inline-flex}.workflow-current-graph{flex:1 1 auto;min-width:240px;font-size:.82rem;font-weight:600;color:#2f3f58}.workflow-palette{border:1px solid #d5dce6;border-radius:10px;background:#f7f9fc;overflow:auto}.workflow-palette-title{padding:10px 12px;font-size:.86rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:#3d4f67;border-bottom:1px solid #d5dce6}.workflow-palette-list{display:flex;flex-direction:column;gap:8px;padding:10px}.workflow-palette-item{border:1px solid #c8d3e2;border-radius:8px;background:#fff;padding:10px;cursor:grab;-webkit-user-select:none;user-select:none}.workflow-palette-item-badge{display:inline-block;margin-top:4px;margin-bottom:4px;padding:2px 7px;border-radius:999px;font-size:.68rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;background:#e2e8f0;color:#334155}.workflow-palette-item-route{border-color:#93c5fd;background:#eff6ff}.workflow-palette-item-route .workflow-palette-item-badge{background:#dbeafe;color:#1d4ed8}.workflow-palette-item-action{border-color:#c4b5fd;background:#f5f3ff}.workflow-palette-item-action .workflow-palette-item-badge{background:#ede9fe;color:#6d28d9}.workflow-palette-item-start{border-color:#86efac;background:#f0fdf4}.workflow-palette-item-condition{border-color:#99f6e4;background:#f0fdfa}.workflow-palette-item-end{border-color:#fda4af;background:#fff1f2}.workflow-palette-item:active{cursor:grabbing}.workflow-palette-item-disabled{opacity:.6;cursor:not-allowed;filter:grayscale(.2)}:host-context(.theme-dark) .workflow-palette-item-disabled{opacity:.5}.workflow-palette-item-title{font-size:.94rem;font-weight:600;color:#21324a}.workflow-palette-item-description{margin-top:4px;font-size:.82rem;color:#60738f}.workflow-canvas{position:relative;border:1px solid #d5dce6;border-radius:10px;overflow:hidden;background:radial-gradient(circle at 1px 1px,#dbe3ef 1px,transparent 0);background-size:24px 24px;background-color:#f8fbff}.workflow-canvas-hint{position:absolute;right:12px;bottom:12px;font-size:.82rem;color:#60738f;background:#ffffffeb;border:1px solid #d5dce6;border-radius:6px;padding:5px 8px}.route-popup-form{display:flex;flex-direction:column;gap:8px}.route-popup-form label{font-size:.85rem;font-weight:600;color:#2f3f58;margin-top:2px}.workflow-options-input{width:100%;height:34px;border:1px solid #c7d2e2;border-radius:6px;background:#fff;padding:0 8px;color:#1f2f49}.workflow-options-toggle{display:flex;align-items:center;gap:8px;font-size:.85rem;font-weight:600;color:#2f3f58;margin-top:2px}.workflow-options-toggle input[type=checkbox]{width:16px;height:16px}.route-popup-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:10px}.route-popup-btn{border:1px solid #c7d2e2;background:#fff;color:#1f2f49;border-radius:6px;padding:7px 12px;font-size:.85rem;cursor:pointer}.route-popup-btn-primary{border-color:#2f67d8;background:#2f67d8;color:#fff}:host ::ng-deep .workflow-route-metadata-dialog.p-dialog{max-height:calc(100vh - 2rem)}:host ::ng-deep .workflow-route-metadata-dialog .p-dialog-content{overflow:visible;max-height:calc(100vh - 10rem)}:host ::ng-deep .workflow-canvas [data-wf-node-type] .node{border:1px solid var(--wf-node-accent, #64748b)!important;background:var(--wf-node-bg, #f8fafc)!important}:host ::ng-deep .workflow-canvas [data-wf-node-type] .title{background:var(--wf-node-accent, #64748b)!important;color:#fff!important;font-weight:700}:host ::ng-deep .workflow-canvas [data-wf-node-type=action][data-wf-action-scope=col] .node{border-style:dashed!important}:host ::ng-deep .workflow-canvas [data-wf-node-type=action][data-wf-action-scope=tab] .node{border-style:solid!important}:host-context(.theme-dark) .workflow-toolbar{border-color:#2a3447;background:#141b27}:host-context(.theme-dark) .workflow-current-graph,:host-context(.theme-dark) .workflow-toolbar label{color:#d8e2f1}:host-context(.theme-dark) .workflow-toolbar input{border-color:#334155;background:#0f1724;color:#e5ecf8}:host-context(.theme-dark) .workflow-toolbar button{border-color:#335fcf;background:#335fcf}:host-context(.theme-dark) .workflow-palette{border-color:#2a3447;background:#141b27}:host-context(.theme-dark) .workflow-palette-title{color:#dbe4f2;border-bottom-color:#2a3447}:host-context(.theme-dark) .workflow-palette-item{border-color:#334155;background:#0f1724}:host-context(.theme-dark) .workflow-palette-item-title{color:#e6edf8}:host-context(.theme-dark) .workflow-palette-item-description{color:#9fb0c7}:host-context(.theme-dark) .workflow-palette-item-badge{background:#273247;color:#c9d7ec}:host-context(.theme-dark) .workflow-palette-item-route{border-color:#3b82f6;background:#0f1f35}:host-context(.theme-dark) .workflow-palette-item-route .workflow-palette-item-badge{background:#1e3a6a;color:#c8ddff}:host-context(.theme-dark) .workflow-palette-item-action{border-color:#8b5cf6;background:#24183d}:host-context(.theme-dark) .workflow-palette-item-action .workflow-palette-item-badge{background:#3a2370;color:#ded1ff}:host-context(.theme-dark) .workflow-palette-item-start{border-color:#22c55e;background:#11281c}:host-context(.theme-dark) .workflow-palette-item-condition{border-color:#14b8a6;background:#0f2726}:host-context(.theme-dark) .workflow-palette-item-end{border-color:#ef4444;background:#30171b}:host-context(.theme-dark) .workflow-canvas{border-color:#2a3447;background:radial-gradient(circle at 1px 1px,#334155 1px,transparent 0);background-size:24px 24px;background-color:#0f1724}:host-context(.theme-dark) .workflow-canvas-hint{color:#b9c8de;background:#0f1724e6;border-color:#334155}:host-context(.theme-dark) .route-popup-form label,:host-context(.theme-dark) .workflow-options-toggle{color:#d8e2f1}:host-context(.theme-dark) .workflow-options-input{border-color:#334155;background:#0f1724;color:#e5ecf8}:host-context(.theme-dark) .route-popup-btn{border-color:#334155;background:#111b2b;color:#d8e2f1}:host-context(.theme-dark) .route-popup-btn-primary{border-color:#335fcf;background:#335fcf;color:#fff}:host-context(.theme-dark) ::ng-deep .p-menu,:host-context(.theme-dark) ::ng-deep .p-contextmenu{background:#121b2b;border-color:#334155;color:#dbe4f2}:host-context(.theme-dark) ::ng-deep .p-menu .p-menu-item-content,:host-context(.theme-dark) ::ng-deep .p-contextmenu .p-menu-item-content{color:#dbe4f2}:host-context(.theme-dark) ::ng-deep .p-menu .p-menu-item-content:hover,:host-context(.theme-dark) ::ng-deep .p-contextmenu .p-menu-item-content:hover{background:#1f2a3d}:host-context(.theme-dark) ::ng-deep .p-dialog{background:#121b2b;border-color:#334155;color:#dbe4f2}:host-context(.theme-dark) ::ng-deep .p-dialog .p-dialog-header,:host-context(.theme-dark) ::ng-deep .p-dialog .p-dialog-content,:host-context(.theme-dark) ::ng-deep .p-dialog .p-dialog-footer{background:#121b2b;color:#dbe4f2;border-color:#334155}\n"] }]
|
|
5068
5068
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: DataProviderService }], propDecorators: { workflowCanvasRef: [{
|
|
@@ -5091,4 +5091,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.8", ngImpor
|
|
|
5091
5091
|
}] } });
|
|
5092
5092
|
|
|
5093
5093
|
export { WorkflowDesignerComponent };
|
|
5094
|
-
//# sourceMappingURL=wuic-framework-lib-workflow-designer.component-
|
|
5094
|
+
//# sourceMappingURL=wuic-framework-lib-workflow-designer.component-8mv_Rbz9.mjs.map
|