@masterteam/workflow 0.0.23 → 0.0.25

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.
@@ -10,7 +10,6 @@ import { Tabs } from '@masterteam/components/tabs';
10
10
  import * as i1 from '@angular/forms';
11
11
  import { FormControl, ReactiveFormsModule, FormsModule } from '@angular/forms';
12
12
  import { DynamicForm } from '@masterteam/forms/dynamic-form';
13
- import { Table } from '@masterteam/components/table';
14
13
  import { Skeleton } from 'primeng/skeleton';
15
14
  import { ToggleField } from '@masterteam/components/toggle-field';
16
15
  import { Button } from '@masterteam/components/button';
@@ -332,7 +331,7 @@ let WorkflowState = class WorkflowState {
332
331
  }
333
332
  getRolesForModule(ctx, _action) {
334
333
  const state = ctx.getState();
335
- const { moduleType, moduleId } = state;
334
+ const { moduleType, moduleId, parentPath } = state;
336
335
  if (!moduleType || !moduleId) {
337
336
  const message = 'Module type and module ID must be set';
338
337
  setLoadingError(ctx, 'getRolesForModule', message);
@@ -340,11 +339,13 @@ let WorkflowState = class WorkflowState {
340
339
  }
341
340
  startLoading(ctx, 'getRolesForModule');
342
341
  return this.http
343
- .get(`${this.rolesUrl}/${moduleType}/${moduleId}`, {
344
- params: { inherited: 'true' },
345
- })
342
+ .get(`${parentPath ? this.rolesUrl.replace('/scopes', '') : this.rolesUrl}${parentPath}/${moduleType}/${moduleId}`, parentPath
343
+ ? undefined
344
+ : {
345
+ params: { inherited: 'true' },
346
+ })
346
347
  .pipe(tap((response) => {
347
- const roles = Array.isArray(response?.data) ? response.data : [];
348
+ const roles = normalizeWorkflowRoles(response?.data);
348
349
  ctx.patchState({ roles });
349
350
  }), catchError((error) => {
350
351
  const message = error?.error?.message ?? error?.message ?? 'Failed to load roles';
@@ -842,6 +843,58 @@ WorkflowState = __decorate([
842
843
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: WorkflowState, decorators: [{
843
844
  type: Injectable
844
845
  }], propDecorators: { setModuleInfo: [], getWorkflows: [], getWorkflow: [], getFormulaProperties: [], getGroups: [], getRolesForModule: [], getStep: [], validateFlow: [], createStep: [], updateStep: [], createConnection: [], updateConnection: [], publishWorkflow: [], deleteStep: [], deleteConnection: [] } });
846
+ function normalizeWorkflowRoles(data) {
847
+ if (!Array.isArray(data)) {
848
+ return [];
849
+ }
850
+ if (data.some((item) => Array.isArray(item?.roles))) {
851
+ return data
852
+ .map((group) => ({
853
+ label: resolveWorkflowRoleGroupLabel(group),
854
+ items: Array.isArray(group?.roles)
855
+ ? group.roles.map(normalizeWorkflowRole).filter(Boolean)
856
+ : [],
857
+ }))
858
+ .filter((group) => group.items.length > 0);
859
+ }
860
+ return data.map(normalizeWorkflowRole).filter(Boolean);
861
+ }
862
+ function normalizeWorkflowRole(role) {
863
+ const value = role?.value ?? role?.id;
864
+ return {
865
+ ...role,
866
+ id: role?.id ?? value,
867
+ value,
868
+ name: normalizeWorkflowRoleName(role?.name),
869
+ };
870
+ }
871
+ function normalizeWorkflowRoleName(name) {
872
+ if (name && typeof name === 'object') {
873
+ return name;
874
+ }
875
+ const label = typeof name === 'string' ? name : '';
876
+ return {
877
+ display: label,
878
+ en: label,
879
+ ar: label,
880
+ };
881
+ }
882
+ function resolveWorkflowRoleGroupLabel(group) {
883
+ const level = group?.level;
884
+ if (typeof level === 'string') {
885
+ return level;
886
+ }
887
+ if (level?.display) {
888
+ return level.display;
889
+ }
890
+ if (level?.en) {
891
+ return level.en;
892
+ }
893
+ if (level?.ar) {
894
+ return level.ar;
895
+ }
896
+ return group?.levelKey ?? group?.scopeType ?? 'Roles';
897
+ }
845
898
 
846
899
  class WorkflowFacade {
847
900
  store = inject(Store);
@@ -964,6 +1017,7 @@ class WorkflowBuilder {
964
1017
  ];
965
1018
  groups = this.workflowFacade.groups;
966
1019
  roles = this.workflowFacade.roles;
1020
+ hasGroupedRoles = computed(() => this.roles().some((role) => Array.isArray(role?.items)), ...(ngDevMode ? [{ debugName: "hasGroupedRoles" }] : []));
967
1021
  workflows = this.workflowFacade.workflows;
968
1022
  workflow = this.workflowFacade.workflow;
969
1023
  loading = this.workflowFacade.isLoading('getWorkflow');
@@ -971,6 +1025,7 @@ class WorkflowBuilder {
971
1025
  isFlowValid = this.workflowFacade.isFlowValid;
972
1026
  selectedStep = this.workflowFacade.selectedStep;
973
1027
  selectedWorkflowId = computed(() => this.workflow()?.id, ...(ngDevMode ? [{ debugName: "selectedWorkflowId" }] : []));
1028
+ connectionFormulaSchemaId = computed(() => this.workflow()?.id, ...(ngDevMode ? [{ debugName: "connectionFormulaSchemaId" }] : []));
974
1029
  hasMultipleWorkflows = computed(() => this.workflows().length > 1, ...(ngDevMode ? [{ debugName: "hasMultipleWorkflows" }] : []));
975
1030
  confirmationService = inject(ConfirmationService);
976
1031
  selectedTab = signal('tab1', ...(ngDevMode ? [{ debugName: "selectedTab" }] : []));
@@ -1122,8 +1177,11 @@ class WorkflowBuilder {
1122
1177
  required: true,
1123
1178
  type: 'select',
1124
1179
  options: this.roles(),
1180
+ group: this.hasGroupedRoles(),
1181
+ optionGroupLabel: 'label',
1182
+ optionGroupChildren: 'items',
1125
1183
  optionLabel: 'name.display',
1126
- optionValue: 'id',
1184
+ optionValue: 'value',
1127
1185
  relations: [{ key: 'targetType', value: '2', action: 'show' }],
1128
1186
  },
1129
1187
  ],
@@ -1426,7 +1484,7 @@ class WorkflowBuilder {
1426
1484
  sourceStepId: event.data.from,
1427
1485
  targetStepId: event.data.to,
1428
1486
  priority: event.data.priority ?? 1,
1429
- formula: event.data.formula ?? [],
1487
+ formula: event.data.formula ?? null,
1430
1488
  };
1431
1489
  this.workflowFacade.createConnection(connectionPayload);
1432
1490
  }
@@ -1439,7 +1497,7 @@ class WorkflowBuilder {
1439
1497
  sourceStepId: event.data.from,
1440
1498
  targetStepId: event.data.to,
1441
1499
  priority: event.data.priority ?? 1,
1442
- formula: event.data.formula ?? [],
1500
+ formula: event.data.formula ?? null,
1443
1501
  };
1444
1502
  this.workflowFacade.updateConnection(connectionId, updatePayload);
1445
1503
  }
@@ -1481,7 +1539,7 @@ class WorkflowBuilder {
1481
1539
  formDialogRef.onClose.subscribe(() => { });
1482
1540
  }
1483
1541
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: WorkflowBuilder, deps: [], target: i0.ɵɵFactoryTarget.Component });
1484
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: WorkflowBuilder, isStandalone: true, selector: "mt-workflow-builder", ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'workflow.builder'\">\r\n <div class=\"h-full flex flex-col\" id=\"workflow-builder-card\">\r\n <!-- Main Tabs at top center -->\r\n <div class=\"flex justify-center w-full py-2\">\r\n <mt-tabs\r\n [active]=\"mainTab()\"\r\n (activeChange)=\"onMainTabChange($event)\"\r\n [options]=\"mainTabsList\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n </div>\r\n @switch (mainTab()) {\r\n @case (\"workflow\") {\r\n @if (!loading()) {\r\n <mt-structure-builder\r\n class=\"flex-1\"\r\n [availableNodes]=\"availableNodes\"\r\n [connectionForm]=\"connectionForm()\"\r\n [nodeActions]=\"nodeActions()\"\r\n [nodes]=\"steps()\"\r\n [connections]=\"connections()\"\r\n (action)=\"onStructureAction($event)\"\r\n [addModalType]=\"'drawer'\"\r\n [addModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [updateModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [addModalHeader]=\"'workflow.builder.addStep' | transloco\"\r\n [updateModalHeader]=\"'workflow.builder.editStep' | transloco\"\r\n [appendTo]=\"'page-content'\"\r\n [nodeFields]=\"nodeFields()\"\r\n [availableTabsClass]=\"\r\n hasMultipleWorkflows() ? 'absolute top-30 start-4 z-1 w-64' : ''\r\n \"\r\n [layoutDirection]=\"'LR'\"\r\n >\r\n <div flowContent>\r\n @if (hasMultipleWorkflows()) {\r\n <div class=\"absolute top-4 start-4 z-10\">\r\n <mt-card class=\"w-64\">\r\n <!-- <div class=\"flex items-center gap-3\">\r\n <label class=\"text-lg font-medium\">{{\r\n 'workflow.builder.selectWorkflow' | transloco\r\n }}</label>\r\n </div> -->\r\n <mt-select-field\r\n [options]=\"workflows()\"\r\n optionLabel=\"name.display\"\r\n optionValue=\"id\"\r\n [ngModel]=\"selectedWorkflowId()\"\r\n (ngModelChange)=\"onWorkflowChange($event)\"\r\n class=\"mt-2\"\r\n />\r\n </mt-card>\r\n </div>\r\n }\r\n <div class=\"absolute top-4 end-4 z-10\">\r\n <div class=\"flex flex-col gap-2 w-80\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-10\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"dev.dataflow-01\"\r\n />\r\n <label>{{\r\n \"workflow.builder.enableWorkflow\" | transloco\r\n }}</label>\r\n </div>\r\n <mt-toggle-field\r\n [ngModel]=\"isPublished()\"\r\n (ngModelChange)=\"onPublishToggle($event)\"\r\n [disabled]=\"isPublishDisabled()\"\r\n ></mt-toggle-field>\r\n </div>\r\n </mt-card>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-template\r\n #nodeDialog\r\n let-close=\"close\"\r\n let-save=\"save\"\r\n let-node=\"node\"\r\n let-drawerController=\"drawerController\"\r\n >\r\n <div class=\"p-4\">\r\n @if (loadingStep()) {\r\n <!-- Loading skeleton -->\r\n <div class=\"space-y-4\">\r\n <!-- Tabs skeleton -->\r\n <div class=\"flex gap-2 mb-4\">\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <!-- Form fields skeleton -->\r\n <div class=\"space-y-4\">\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"3rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"4rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- Actual content -->\r\n <mt-tabs\r\n [active]=\"selectedTab()\"\r\n (activeChange)=\"onNodeDialogTabChange($event)\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n @switch (selectedTab()) {\r\n @case (\"tab1\") {\r\n <div class=\"mt-4\">\r\n <mt-dynamic-form\r\n [formConfig]=\"nodeForm()\"\r\n [formControl]=\"nodeFormControl\"\r\n ></mt-dynamic-form>\r\n </div>\r\n }\r\n @case (\"tab2\") {\r\n <div class=\"mt-4\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-4\">\r\n <div class=\"flex flex-1 items-center gap-3\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"file.file-check-02\"\r\n />\r\n <div class=\"flex flex-col\">\r\n <label class=\"font-medium\">{{\r\n t(\"configureForm\")\r\n }}</label>\r\n <span class=\"text-sm text-muted-color\">{{\r\n t(\"configureForm-description\")\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureForm')\"\r\n size=\"small\"\r\n (onClick)=\"openFormModal()\"\r\n ></mt-button>\r\n </div>\r\n </mt-card>\r\n </div>\r\n\r\n <!-- Properties table (hidden in manageProperties mode) -->\r\n <!-- <div class=\"mt-2\">\r\n <mt-table\r\n [data]=\"propertiesTableData()\"\r\n [columns]=\"propertiesColumns()\"\r\n [selectableRows]=\"false\"\r\n [showGridlines]=\"true\"\r\n [stripedRows]=\"true\"\r\n (cellChange)=\"onPropertyCellChange($event)\"\r\n ></mt-table>\r\n </div> -->\r\n }\r\n @case (\"tab3\") {\r\n <div class=\"mt-4\">\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('show-hide')\"\r\n [descriptionCard]=\"t('show-hide-notifications')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"showHideControl\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (showHideControl.value) {\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureNotifications')\"\r\n size=\"small\"\r\n (onClick)=\"openNotificationsModal()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n </mt-structure-builder>\r\n } @else {\r\n <p-skeleton width=\"100%\" height=\"50rem\" />\r\n }\r\n }\r\n @case (\"notification\") {\r\n <div class=\"flex-1 flex justify-center items-start p-4\">\r\n <div class=\"w-1/2\">\r\n <mt-card [title]=\"'Notifications'\">\r\n <mt-notification-template />\r\n </mt-card>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</ng-container>\r\n", dependencies: [{ kind: "component", type: StructureBuilder, selector: "mt-structure-builder", inputs: ["availableNodes", "nodeForm", "connectionForm", "nodeActions", "nodeFields", "isAutoLayout", "addModalType", "updateModalType", "addModalStyleClass", "updateModalStyleClass", "addModalHeader", "updateModalHeader", "appendTo", "availableTabsClass", "layoutDirection", "nodes", "connections", "nodeTemplate"], outputs: ["nodeActionsEvent", "action", "nodesChange", "connectionsChange"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig"] }, { kind: "component", type: Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: ToggleField, selector: "mt-toggle-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { 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: TranslocoModule }, { kind: "directive", type: i2.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: NotificationTemplate, selector: "mt-notification-template" }, { kind: "component", type: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required", "group", "size", "optionGroupLabel", "optionGroupChildren", "loading", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
1542
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: WorkflowBuilder, isStandalone: true, selector: "mt-workflow-builder", ngImport: i0, template: "<ng-container *transloco=\"let t; prefix: 'workflow.builder'\">\r\n <div class=\"h-full flex flex-col\" id=\"workflow-builder-card\">\r\n <!-- Main Tabs at top center -->\r\n <div class=\"flex justify-center w-full py-2\">\r\n <mt-tabs\r\n [active]=\"mainTab()\"\r\n (activeChange)=\"onMainTabChange($event)\"\r\n [options]=\"mainTabsList\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n </div>\r\n @switch (mainTab()) {\r\n @case (\"workflow\") {\r\n @if (!loading()) {\r\n <mt-structure-builder\r\n class=\"flex-1\"\r\n [availableNodes]=\"availableNodes\"\r\n [connectionForm]=\"connectionForm()\"\r\n [connectionFormulaSchemaId]=\"connectionFormulaSchemaId()\"\r\n [nodeActions]=\"nodeActions()\"\r\n [nodes]=\"steps()\"\r\n [connections]=\"connections()\"\r\n (action)=\"onStructureAction($event)\"\r\n [addModalType]=\"'drawer'\"\r\n [addModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [updateModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [addModalHeader]=\"'workflow.builder.addStep' | transloco\"\r\n [updateModalHeader]=\"'workflow.builder.editStep' | transloco\"\r\n [appendTo]=\"'page-content'\"\r\n [nodeFields]=\"nodeFields()\"\r\n [availableTabsClass]=\"\r\n hasMultipleWorkflows() ? 'absolute top-30 start-4 z-1 w-64' : ''\r\n \"\r\n [layoutDirection]=\"'LR'\"\r\n >\r\n <div flowContent>\r\n @if (hasMultipleWorkflows()) {\r\n <div class=\"absolute top-4 start-4 z-10\">\r\n <mt-card class=\"w-64\">\r\n <!-- <div class=\"flex items-center gap-3\">\r\n <label class=\"text-lg font-medium\">{{\r\n 'workflow.builder.selectWorkflow' | transloco\r\n }}</label>\r\n </div> -->\r\n <mt-select-field\r\n [options]=\"workflows()\"\r\n optionLabel=\"name.display\"\r\n optionValue=\"id\"\r\n [ngModel]=\"selectedWorkflowId()\"\r\n (ngModelChange)=\"onWorkflowChange($event)\"\r\n class=\"mt-2\"\r\n />\r\n </mt-card>\r\n </div>\r\n }\r\n <div class=\"absolute top-4 end-4 z-10\">\r\n <div class=\"flex flex-col gap-2 w-80\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-10\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"dev.dataflow-01\"\r\n />\r\n <label>{{\r\n \"workflow.builder.enableWorkflow\" | transloco\r\n }}</label>\r\n </div>\r\n <mt-toggle-field\r\n [ngModel]=\"isPublished()\"\r\n (ngModelChange)=\"onPublishToggle($event)\"\r\n [disabled]=\"isPublishDisabled()\"\r\n ></mt-toggle-field>\r\n </div>\r\n </mt-card>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-template\r\n #nodeDialog\r\n let-close=\"close\"\r\n let-save=\"save\"\r\n let-node=\"node\"\r\n let-drawerController=\"drawerController\"\r\n >\r\n <div class=\"p-4\">\r\n @if (loadingStep()) {\r\n <!-- Loading skeleton -->\r\n <div class=\"space-y-4\">\r\n <!-- Tabs skeleton -->\r\n <div class=\"flex gap-2 mb-4\">\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <!-- Form fields skeleton -->\r\n <div class=\"space-y-4\">\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"3rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"4rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- Actual content -->\r\n <mt-tabs\r\n [active]=\"selectedTab()\"\r\n (activeChange)=\"onNodeDialogTabChange($event)\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n @switch (selectedTab()) {\r\n @case (\"tab1\") {\r\n <div class=\"mt-4\">\r\n <mt-dynamic-form\r\n [formConfig]=\"nodeForm()\"\r\n [formControl]=\"nodeFormControl\"\r\n ></mt-dynamic-form>\r\n </div>\r\n }\r\n @case (\"tab2\") {\r\n <div class=\"mt-4\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-4\">\r\n <div class=\"flex flex-1 items-center gap-3\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"file.file-check-02\"\r\n />\r\n <div class=\"flex flex-col\">\r\n <label class=\"font-medium\">{{\r\n t(\"configureForm\")\r\n }}</label>\r\n <span class=\"text-sm text-muted-color\">{{\r\n t(\"configureForm-description\")\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureForm')\"\r\n size=\"small\"\r\n (onClick)=\"openFormModal()\"\r\n ></mt-button>\r\n </div>\r\n </mt-card>\r\n </div>\r\n\r\n <!-- Properties table (hidden in manageProperties mode) -->\r\n <!-- <div class=\"mt-2\">\r\n <mt-table\r\n [data]=\"propertiesTableData()\"\r\n [columns]=\"propertiesColumns()\"\r\n [selectableRows]=\"false\"\r\n [showGridlines]=\"true\"\r\n [stripedRows]=\"true\"\r\n (cellChange)=\"onPropertyCellChange($event)\"\r\n ></mt-table>\r\n </div> -->\r\n }\r\n @case (\"tab3\") {\r\n <div class=\"mt-4\">\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('show-hide')\"\r\n [descriptionCard]=\"t('show-hide-notifications')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"showHideControl\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (showHideControl.value) {\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureNotifications')\"\r\n size=\"small\"\r\n (onClick)=\"openNotificationsModal()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n </mt-structure-builder>\r\n } @else {\r\n <p-skeleton width=\"100%\" height=\"50rem\" />\r\n }\r\n }\r\n @case (\"notification\") {\r\n <div class=\"flex-1 flex justify-center items-start p-4\">\r\n <div class=\"w-1/2\">\r\n <mt-card [title]=\"'Notifications'\">\r\n <mt-notification-template />\r\n </mt-card>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</ng-container>\r\n", dependencies: [{ kind: "component", type: StructureBuilder, selector: "mt-structure-builder", inputs: ["availableNodes", "nodeForm", "connectionForm", "connectionFormulaSchemaId", "nodeActions", "nodeFields", "isAutoLayout", "readonly", "addModalType", "updateModalType", "addModalStyleClass", "updateModalStyleClass", "addModalHeader", "updateModalHeader", "appendTo", "availableTabsClass", "layoutDirection", "nodes", "connections", "nodeTemplate"], outputs: ["nodeActionsEvent", "action", "nodesChange", "connectionsChange"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: Tabs, selector: "mt-tabs", inputs: ["options", "optionLabel", "optionValue", "active", "size", "fluid", "disabled"], outputs: ["activeChange", "onChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: DynamicForm, selector: "mt-dynamic-form", inputs: ["formConfig", "forcedHiddenFieldKeys", "preserveForcedHiddenValues", "visibleSectionKeys"], outputs: ["runtimeMessagesChange"] }, { kind: "component", type: Skeleton, selector: "p-skeleton", inputs: ["styleClass", "shape", "animation", "borderRadius", "size", "width", "height"] }, { kind: "component", type: ToggleField, selector: "mt-toggle-field", inputs: ["label", "labelPosition", "placeholder", "readonly", "pInputs", "required", "toggleShape", "size", "icon", "descriptionCard"], outputs: ["onChange"] }, { 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: TranslocoModule }, { kind: "directive", type: i2.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: NotificationTemplate, selector: "mt-notification-template" }, { kind: "component", type: SelectField, selector: "mt-select-field", inputs: ["field", "label", "placeholder", "hasPlaceholderPrefix", "class", "readonly", "pInputs", "options", "optionValue", "optionLabel", "filter", "filterBy", "dataKey", "showClear", "clearAfterSelect", "required", "group", "size", "optionGroupLabel", "optionGroupChildren", "loading", "optionIcon", "optionIconColor", "optionIconShape", "optionAvatarShape", "optionGroupIcon", "optionGroupIconColor", "optionGroupIconShape", "optionGroupAvatarShape"], outputs: ["onChange"] }, { kind: "pipe", type: i2.TranslocoPipe, name: "transloco" }] });
1485
1543
  }
1486
1544
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: WorkflowBuilder, decorators: [{
1487
1545
  type: Component,
@@ -1492,14 +1550,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImpor
1492
1550
  ReactiveFormsModule,
1493
1551
  FormsModule,
1494
1552
  DynamicForm,
1495
- Table,
1496
1553
  Skeleton,
1497
1554
  ToggleField,
1498
1555
  Button,
1499
1556
  TranslocoModule,
1500
1557
  NotificationTemplate,
1501
1558
  SelectField,
1502
- ], host: {}, template: "<ng-container *transloco=\"let t; prefix: 'workflow.builder'\">\r\n <div class=\"h-full flex flex-col\" id=\"workflow-builder-card\">\r\n <!-- Main Tabs at top center -->\r\n <div class=\"flex justify-center w-full py-2\">\r\n <mt-tabs\r\n [active]=\"mainTab()\"\r\n (activeChange)=\"onMainTabChange($event)\"\r\n [options]=\"mainTabsList\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n </div>\r\n @switch (mainTab()) {\r\n @case (\"workflow\") {\r\n @if (!loading()) {\r\n <mt-structure-builder\r\n class=\"flex-1\"\r\n [availableNodes]=\"availableNodes\"\r\n [connectionForm]=\"connectionForm()\"\r\n [nodeActions]=\"nodeActions()\"\r\n [nodes]=\"steps()\"\r\n [connections]=\"connections()\"\r\n (action)=\"onStructureAction($event)\"\r\n [addModalType]=\"'drawer'\"\r\n [addModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [updateModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [addModalHeader]=\"'workflow.builder.addStep' | transloco\"\r\n [updateModalHeader]=\"'workflow.builder.editStep' | transloco\"\r\n [appendTo]=\"'page-content'\"\r\n [nodeFields]=\"nodeFields()\"\r\n [availableTabsClass]=\"\r\n hasMultipleWorkflows() ? 'absolute top-30 start-4 z-1 w-64' : ''\r\n \"\r\n [layoutDirection]=\"'LR'\"\r\n >\r\n <div flowContent>\r\n @if (hasMultipleWorkflows()) {\r\n <div class=\"absolute top-4 start-4 z-10\">\r\n <mt-card class=\"w-64\">\r\n <!-- <div class=\"flex items-center gap-3\">\r\n <label class=\"text-lg font-medium\">{{\r\n 'workflow.builder.selectWorkflow' | transloco\r\n }}</label>\r\n </div> -->\r\n <mt-select-field\r\n [options]=\"workflows()\"\r\n optionLabel=\"name.display\"\r\n optionValue=\"id\"\r\n [ngModel]=\"selectedWorkflowId()\"\r\n (ngModelChange)=\"onWorkflowChange($event)\"\r\n class=\"mt-2\"\r\n />\r\n </mt-card>\r\n </div>\r\n }\r\n <div class=\"absolute top-4 end-4 z-10\">\r\n <div class=\"flex flex-col gap-2 w-80\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-10\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"dev.dataflow-01\"\r\n />\r\n <label>{{\r\n \"workflow.builder.enableWorkflow\" | transloco\r\n }}</label>\r\n </div>\r\n <mt-toggle-field\r\n [ngModel]=\"isPublished()\"\r\n (ngModelChange)=\"onPublishToggle($event)\"\r\n [disabled]=\"isPublishDisabled()\"\r\n ></mt-toggle-field>\r\n </div>\r\n </mt-card>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-template\r\n #nodeDialog\r\n let-close=\"close\"\r\n let-save=\"save\"\r\n let-node=\"node\"\r\n let-drawerController=\"drawerController\"\r\n >\r\n <div class=\"p-4\">\r\n @if (loadingStep()) {\r\n <!-- Loading skeleton -->\r\n <div class=\"space-y-4\">\r\n <!-- Tabs skeleton -->\r\n <div class=\"flex gap-2 mb-4\">\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <!-- Form fields skeleton -->\r\n <div class=\"space-y-4\">\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"3rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"4rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- Actual content -->\r\n <mt-tabs\r\n [active]=\"selectedTab()\"\r\n (activeChange)=\"onNodeDialogTabChange($event)\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n @switch (selectedTab()) {\r\n @case (\"tab1\") {\r\n <div class=\"mt-4\">\r\n <mt-dynamic-form\r\n [formConfig]=\"nodeForm()\"\r\n [formControl]=\"nodeFormControl\"\r\n ></mt-dynamic-form>\r\n </div>\r\n }\r\n @case (\"tab2\") {\r\n <div class=\"mt-4\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-4\">\r\n <div class=\"flex flex-1 items-center gap-3\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"file.file-check-02\"\r\n />\r\n <div class=\"flex flex-col\">\r\n <label class=\"font-medium\">{{\r\n t(\"configureForm\")\r\n }}</label>\r\n <span class=\"text-sm text-muted-color\">{{\r\n t(\"configureForm-description\")\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureForm')\"\r\n size=\"small\"\r\n (onClick)=\"openFormModal()\"\r\n ></mt-button>\r\n </div>\r\n </mt-card>\r\n </div>\r\n\r\n <!-- Properties table (hidden in manageProperties mode) -->\r\n <!-- <div class=\"mt-2\">\r\n <mt-table\r\n [data]=\"propertiesTableData()\"\r\n [columns]=\"propertiesColumns()\"\r\n [selectableRows]=\"false\"\r\n [showGridlines]=\"true\"\r\n [stripedRows]=\"true\"\r\n (cellChange)=\"onPropertyCellChange($event)\"\r\n ></mt-table>\r\n </div> -->\r\n }\r\n @case (\"tab3\") {\r\n <div class=\"mt-4\">\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('show-hide')\"\r\n [descriptionCard]=\"t('show-hide-notifications')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"showHideControl\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (showHideControl.value) {\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureNotifications')\"\r\n size=\"small\"\r\n (onClick)=\"openNotificationsModal()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n </mt-structure-builder>\r\n } @else {\r\n <p-skeleton width=\"100%\" height=\"50rem\" />\r\n }\r\n }\r\n @case (\"notification\") {\r\n <div class=\"flex-1 flex justify-center items-start p-4\">\r\n <div class=\"w-1/2\">\r\n <mt-card [title]=\"'Notifications'\">\r\n <mt-notification-template />\r\n </mt-card>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</ng-container>\r\n" }]
1559
+ ], host: {}, template: "<ng-container *transloco=\"let t; prefix: 'workflow.builder'\">\r\n <div class=\"h-full flex flex-col\" id=\"workflow-builder-card\">\r\n <!-- Main Tabs at top center -->\r\n <div class=\"flex justify-center w-full py-2\">\r\n <mt-tabs\r\n [active]=\"mainTab()\"\r\n (activeChange)=\"onMainTabChange($event)\"\r\n [options]=\"mainTabsList\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n </div>\r\n @switch (mainTab()) {\r\n @case (\"workflow\") {\r\n @if (!loading()) {\r\n <mt-structure-builder\r\n class=\"flex-1\"\r\n [availableNodes]=\"availableNodes\"\r\n [connectionForm]=\"connectionForm()\"\r\n [connectionFormulaSchemaId]=\"connectionFormulaSchemaId()\"\r\n [nodeActions]=\"nodeActions()\"\r\n [nodes]=\"steps()\"\r\n [connections]=\"connections()\"\r\n (action)=\"onStructureAction($event)\"\r\n [addModalType]=\"'drawer'\"\r\n [addModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [updateModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [addModalHeader]=\"'workflow.builder.addStep' | transloco\"\r\n [updateModalHeader]=\"'workflow.builder.editStep' | transloco\"\r\n [appendTo]=\"'page-content'\"\r\n [nodeFields]=\"nodeFields()\"\r\n [availableTabsClass]=\"\r\n hasMultipleWorkflows() ? 'absolute top-30 start-4 z-1 w-64' : ''\r\n \"\r\n [layoutDirection]=\"'LR'\"\r\n >\r\n <div flowContent>\r\n @if (hasMultipleWorkflows()) {\r\n <div class=\"absolute top-4 start-4 z-10\">\r\n <mt-card class=\"w-64\">\r\n <!-- <div class=\"flex items-center gap-3\">\r\n <label class=\"text-lg font-medium\">{{\r\n 'workflow.builder.selectWorkflow' | transloco\r\n }}</label>\r\n </div> -->\r\n <mt-select-field\r\n [options]=\"workflows()\"\r\n optionLabel=\"name.display\"\r\n optionValue=\"id\"\r\n [ngModel]=\"selectedWorkflowId()\"\r\n (ngModelChange)=\"onWorkflowChange($event)\"\r\n class=\"mt-2\"\r\n />\r\n </mt-card>\r\n </div>\r\n }\r\n <div class=\"absolute top-4 end-4 z-10\">\r\n <div class=\"flex flex-col gap-2 w-80\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-10\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"dev.dataflow-01\"\r\n />\r\n <label>{{\r\n \"workflow.builder.enableWorkflow\" | transloco\r\n }}</label>\r\n </div>\r\n <mt-toggle-field\r\n [ngModel]=\"isPublished()\"\r\n (ngModelChange)=\"onPublishToggle($event)\"\r\n [disabled]=\"isPublishDisabled()\"\r\n ></mt-toggle-field>\r\n </div>\r\n </mt-card>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-template\r\n #nodeDialog\r\n let-close=\"close\"\r\n let-save=\"save\"\r\n let-node=\"node\"\r\n let-drawerController=\"drawerController\"\r\n >\r\n <div class=\"p-4\">\r\n @if (loadingStep()) {\r\n <!-- Loading skeleton -->\r\n <div class=\"space-y-4\">\r\n <!-- Tabs skeleton -->\r\n <div class=\"flex gap-2 mb-4\">\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <!-- Form fields skeleton -->\r\n <div class=\"space-y-4\">\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"3rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"4rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- Actual content -->\r\n <mt-tabs\r\n [active]=\"selectedTab()\"\r\n (activeChange)=\"onNodeDialogTabChange($event)\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n @switch (selectedTab()) {\r\n @case (\"tab1\") {\r\n <div class=\"mt-4\">\r\n <mt-dynamic-form\r\n [formConfig]=\"nodeForm()\"\r\n [formControl]=\"nodeFormControl\"\r\n ></mt-dynamic-form>\r\n </div>\r\n }\r\n @case (\"tab2\") {\r\n <div class=\"mt-4\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-4\">\r\n <div class=\"flex flex-1 items-center gap-3\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"file.file-check-02\"\r\n />\r\n <div class=\"flex flex-col\">\r\n <label class=\"font-medium\">{{\r\n t(\"configureForm\")\r\n }}</label>\r\n <span class=\"text-sm text-muted-color\">{{\r\n t(\"configureForm-description\")\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureForm')\"\r\n size=\"small\"\r\n (onClick)=\"openFormModal()\"\r\n ></mt-button>\r\n </div>\r\n </mt-card>\r\n </div>\r\n\r\n <!-- Properties table (hidden in manageProperties mode) -->\r\n <!-- <div class=\"mt-2\">\r\n <mt-table\r\n [data]=\"propertiesTableData()\"\r\n [columns]=\"propertiesColumns()\"\r\n [selectableRows]=\"false\"\r\n [showGridlines]=\"true\"\r\n [stripedRows]=\"true\"\r\n (cellChange)=\"onPropertyCellChange($event)\"\r\n ></mt-table>\r\n </div> -->\r\n }\r\n @case (\"tab3\") {\r\n <div class=\"mt-4\">\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('show-hide')\"\r\n [descriptionCard]=\"t('show-hide-notifications')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"showHideControl\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (showHideControl.value) {\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureNotifications')\"\r\n size=\"small\"\r\n (onClick)=\"openNotificationsModal()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n </mt-structure-builder>\r\n } @else {\r\n <p-skeleton width=\"100%\" height=\"50rem\" />\r\n }\r\n }\r\n @case (\"notification\") {\r\n <div class=\"flex-1 flex justify-center items-start p-4\">\r\n <div class=\"w-1/2\">\r\n <mt-card [title]=\"'Notifications'\">\r\n <mt-notification-template />\r\n </mt-card>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</ng-container>\r\n" }]
1503
1560
  }], ctorParameters: () => [] });
1504
1561
 
1505
1562
  // store/app.state.ts
@@ -1 +1 @@
1
- {"version":3,"file":"masterteam-workflow.mjs","sources":["../../../../packages/masterteam/workflow/src/store/workflow/workflow.actions.ts","../../../../packages/masterteam/workflow/src/store/utils/state-helpers.ts","../../../../packages/masterteam/workflow/src/store/workflow/workflow.state.ts","../../../../packages/masterteam/workflow/src/store/workflow/workflow.facade.ts","../../../../packages/masterteam/workflow/src/store/workflow/api.model.ts","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-notifications-drawer/workflow-notifications-drawer.ts","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-notifications-drawer/workflow-notifications-drawer.html","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-form-drawer/workflow-form-drawer.ts","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-form-drawer/workflow-form-drawer.html","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-builder.ts","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-builder.html","../../../../packages/masterteam/workflow/src/store/app.state.ts","../../../../packages/masterteam/workflow/src/store/index.ts","../../../../packages/masterteam/workflow/src/public-api.ts","../../../../packages/masterteam/workflow/src/masterteam-workflow.ts"],"sourcesContent":["import type { ConnectionPayload, StepPayload } from './workflow.model';\r\n\r\nexport class SetModuleInfo {\r\n static readonly type = '[Workflow] Set Module Info';\r\n\r\n constructor(\r\n public readonly moduleType: string,\r\n public readonly moduleId: string | number,\r\n public readonly parentModuleType?: string,\r\n public readonly parentModuleId?: string | number,\r\n public readonly parentPath?: string,\r\n ) {}\r\n}\r\n\r\nexport class GetWorkflows {\r\n static readonly type = '[Workflow] Get Workflows';\r\n}\r\n\r\nexport class GetWorkflow {\r\n static readonly type = '[Workflow] Get Workflow';\r\n\r\n constructor(public readonly workflowId: string | number) {}\r\n}\r\n\r\nexport class GetFormulaProperties {\r\n static readonly type = '[Workflow] Get Formula Properties';\r\n}\r\n\r\nexport class GetGroups {\r\n static readonly type = '[Workflow] Get Groups';\r\n}\r\n\r\nexport class GetRolesForModule {\r\n static readonly type = '[Workflow] Get Roles For Module';\r\n}\r\n\r\nexport class GetStep {\r\n static readonly type = '[Workflow] Get Step';\r\n\r\n constructor(public readonly stepId: string | number) {}\r\n}\r\n\r\nexport class ValidateFlow {\r\n static readonly type = '[Workflow] Validate Flow';\r\n}\r\n\r\nexport class CreateStep {\r\n static readonly type = '[Workflow] Create Step';\r\n\r\n constructor(public readonly payload: StepPayload) {}\r\n}\r\n\r\nexport class UpdateStep {\r\n static readonly type = '[Workflow] Update Step';\r\n\r\n constructor(\r\n public readonly stepId: string | number,\r\n public readonly payload: StepPayload,\r\n public readonly isInitial?: boolean,\r\n ) {}\r\n}\r\n\r\nexport class CreateConnection {\r\n static readonly type = '[Workflow] Create Connection';\r\n\r\n constructor(public readonly payload: ConnectionPayload) {}\r\n}\r\n\r\nexport class UpdateConnection {\r\n static readonly type = '[Workflow] Update Connection';\r\n\r\n constructor(\r\n public readonly connectionId: string | number,\r\n public readonly payload: ConnectionPayload,\r\n ) {}\r\n}\r\n\r\nexport class PublishWorkflow {\r\n static readonly type = '[Workflow] Publish Workflow';\r\n\r\n constructor(public readonly isPublished: boolean) {}\r\n}\r\n\r\nexport class DeleteStep {\r\n static readonly type = '[Workflow] Delete Step';\r\n\r\n constructor(public readonly stepId: string | number) {}\r\n}\r\n\r\nexport class DeleteConnection {\r\n static readonly type = '[Workflow] Delete Connection';\r\n\r\n constructor(public readonly connectionId: string | number) {}\r\n}\r\n","import type { StateContext } from '@ngxs/store';\r\n\r\nexport interface LoadingStateShape<L extends string = string> {\r\n loadingActive: L[];\r\n errors: Partial<Record<L, string>>;\r\n}\r\n\r\ntype LoadingName<T extends LoadingStateShape<string>> =\r\n T['loadingActive'][number];\r\n\r\nexport function startLoading<T extends LoadingStateShape<string>>(\r\n ctx: StateContext<T>,\r\n loadingName: LoadingName<T>,\r\n): void {\r\n const { loadingActive, errors } = ctx.getState();\r\n\r\n if (!loadingActive.includes(loadingName)) {\r\n ctx.patchState({\r\n loadingActive: [...loadingActive, loadingName],\r\n } as Partial<T>);\r\n }\r\n\r\n if (errors && errors[loadingName]) {\r\n const { [loadingName]: _removed, ...rest } = errors;\r\n ctx.patchState({ errors: rest } as Partial<T>);\r\n }\r\n}\r\n\r\nexport function endLoading<T extends LoadingStateShape<string>>(\r\n ctx: StateContext<T>,\r\n loadingName: LoadingName<T>,\r\n): void {\r\n const { loadingActive } = ctx.getState();\r\n\r\n ctx.patchState({\r\n loadingActive: loadingActive.filter((name) => name !== loadingName),\r\n } as Partial<T>);\r\n}\r\n\r\nexport function setLoadingError<T extends LoadingStateShape<string>>(\r\n ctx: StateContext<T>,\r\n loadingName: LoadingName<T>,\r\n message: string,\r\n): void {\r\n const { errors } = ctx.getState();\r\n ctx.patchState({\r\n errors: { ...errors, [loadingName]: message },\r\n } as Partial<T>);\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { of } from 'rxjs';\r\nimport { catchError, finalize, tap } from 'rxjs/operators';\r\n\r\nimport {\r\n endLoading,\r\n setLoadingError,\r\n startLoading,\r\n} from '../utils/state-helpers';\r\n\r\nimport type {\r\n ConnectionResponse,\r\n FormulaProperty,\r\n GroupDefinition,\r\n PublishResponse,\r\n RoleDefinition,\r\n StepResponse,\r\n StepSchema,\r\n WorkflowConnection,\r\n WorkflowListItem,\r\n WorkflowLoadingName,\r\n WorkflowSchema,\r\n WorkflowStateModel,\r\n WorkflowStepSchema,\r\n} from './workflow.model';\r\nimport {\r\n CreateConnection,\r\n CreateStep,\r\n DeleteConnection,\r\n DeleteStep,\r\n GetFormulaProperties,\r\n GetGroups,\r\n GetRolesForModule,\r\n GetStep,\r\n GetWorkflow,\r\n GetWorkflows,\r\n PublishWorkflow,\r\n SetModuleInfo,\r\n UpdateConnection,\r\n UpdateStep,\r\n ValidateFlow,\r\n} from './workflow.actions';\r\nimport { Response } from './api.model';\r\n\r\nconst DEFAULT_STATE: WorkflowStateModel = {\r\n workflowId: null,\r\n moduleType: null,\r\n moduleId: null,\r\n workflows: [],\r\n workflow: null,\r\n formulaProperties: [],\r\n groups: [],\r\n roles: [],\r\n selectedStep: null,\r\n isFlowValid: null,\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\n@State<WorkflowStateModel>({\r\n name: 'workflow',\r\n defaults: DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class WorkflowState {\r\n private readonly http = inject(HttpClient);\r\n private readonly baseUrl = 'ProcessBuilder';\r\n private readonly groupsUrl = 'identity/Groups';\r\n private readonly rolesUrl = 'identity/roles/scopes';\r\n\r\n @Selector()\r\n static workflowId(state: WorkflowStateModel): string | number | null {\r\n return state.workflowId;\r\n }\r\n\r\n @Selector()\r\n static moduleType(state: WorkflowStateModel): string | null {\r\n return state.moduleType;\r\n }\r\n\r\n @Selector()\r\n static moduleId(state: WorkflowStateModel): string | number | null {\r\n return state.moduleId;\r\n }\r\n\r\n @Selector()\r\n static workflows(state: WorkflowStateModel) {\r\n return state.workflows;\r\n }\r\n\r\n @Selector()\r\n static workflow(state: WorkflowStateModel): WorkflowSchema | null {\r\n return state.workflow;\r\n }\r\n\r\n @Selector()\r\n static formulaProperties(state: WorkflowStateModel): FormulaProperty[] {\r\n return state.formulaProperties;\r\n }\r\n\r\n @Selector()\r\n static groups(state: WorkflowStateModel): GroupDefinition[] {\r\n return state.groups;\r\n }\r\n\r\n @Selector()\r\n static roles(state: WorkflowStateModel): RoleDefinition[] {\r\n return state.roles;\r\n }\r\n\r\n @Selector()\r\n static selectedStep(state: WorkflowStateModel): StepSchema | null {\r\n return state.selectedStep;\r\n }\r\n\r\n @Selector()\r\n static isFlowValid(state: WorkflowStateModel): boolean | null {\r\n return state.isFlowValid;\r\n }\r\n\r\n @Selector()\r\n static stepsSchema(state: WorkflowStateModel): WorkflowStepSchema[] {\r\n return state.workflow?.stepsSchema ?? [];\r\n }\r\n\r\n @Selector()\r\n static connections(state: WorkflowStateModel): WorkflowConnection[] {\r\n return state.workflow?.connections ?? [];\r\n }\r\n\r\n @Selector()\r\n static isLoadingFactory(state: WorkflowStateModel) {\r\n return (loadingName: WorkflowLoadingName) =>\r\n state.loadingActive.includes(loadingName);\r\n }\r\n\r\n @Selector()\r\n static errorFactory(state: WorkflowStateModel) {\r\n return (loadingName: WorkflowLoadingName) =>\r\n state.errors?.[loadingName] ?? null;\r\n }\r\n\r\n @Action(SetModuleInfo)\r\n setModuleInfo(ctx: StateContext<WorkflowStateModel>, action: SetModuleInfo) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(GetWorkflows)\r\n getWorkflows(ctx: StateContext<WorkflowStateModel>, _action: GetWorkflows) {\r\n startLoading(ctx, 'getWorkflows');\r\n\r\n const state = ctx.getState();\r\n const { moduleId, parentPath, moduleType } = state;\r\n\r\n if (!moduleId) {\r\n const message = 'Module ID is not set';\r\n setLoadingError(ctx, 'getWorkflows', message);\r\n endLoading(ctx, 'getWorkflows');\r\n return of(null);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<WorkflowListItem[]>\r\n >(`${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/requestSchema`)\r\n .pipe(\r\n tap((response) => {\r\n const workflows = response?.data ?? [];\r\n ctx.patchState({ workflows });\r\n\r\n // Auto-select and load first workflow if available\r\n if (workflows.length > 0) {\r\n const firstWorkflow = workflows[0];\r\n ctx.patchState({ workflowId: firstWorkflow.id });\r\n ctx.dispatch(new GetWorkflow(firstWorkflow.id));\r\n }\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to load workflows';\r\n setLoadingError(ctx, 'getWorkflows', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'getWorkflows')),\r\n );\r\n }\r\n\r\n @Action(GetWorkflow)\r\n getWorkflow(ctx: StateContext<WorkflowStateModel>, action: GetWorkflow) {\r\n startLoading(ctx, 'getWorkflow');\r\n\r\n const state = ctx.getState();\r\n const workflowId = action.workflowId;\r\n const { moduleId, parentPath, moduleType } = state;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'getWorkflow', message);\r\n endLoading(ctx, 'getWorkflow');\r\n return of(null);\r\n }\r\n\r\n // Set the workflowId in state\r\n ctx.patchState({ workflowId });\r\n\r\n return this.http\r\n .get<Response<WorkflowSchema>>(\r\n `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/requestSchema/${workflowId}`,\r\n {\r\n params: { Mode: 'edit' },\r\n },\r\n )\r\n .pipe(\r\n tap((response) => {\r\n const workflow = response?.data ?? null;\r\n ctx.patchState({\r\n workflow,\r\n isFlowValid: workflow?.isValid ?? null,\r\n });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to load workflow';\r\n setLoadingError(ctx, 'getWorkflow', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'getWorkflow')),\r\n );\r\n }\r\n\r\n @Action(GetFormulaProperties)\r\n getFormulaProperties(\r\n ctx: StateContext<WorkflowStateModel>,\r\n _action: GetFormulaProperties,\r\n ) {\r\n startLoading(ctx, 'getFormulaProperties');\r\n\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'getFormulaProperties', message);\r\n endLoading(ctx, 'getFormulaProperties');\r\n return of(null);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<FormulaProperty[]>\r\n >(`${this.baseUrl}/processFormulaProperties/${workflowId}`)\r\n .pipe(\r\n tap((response) => {\r\n const formulaProperties = Array.isArray(response?.data)\r\n ? response.data\r\n : [];\r\n ctx.patchState({ formulaProperties });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to load formula properties';\r\n setLoadingError(ctx, 'getFormulaProperties', message);\r\n return of([]);\r\n }),\r\n finalize(() => endLoading(ctx, 'getFormulaProperties')),\r\n );\r\n }\r\n\r\n @Action(GetGroups)\r\n getGroups(ctx: StateContext<WorkflowStateModel>, _action: GetGroups) {\r\n const state = ctx.getState();\r\n if (state.groups.length) {\r\n return of(state.groups);\r\n }\r\n\r\n startLoading(ctx, 'getGroups');\r\n\r\n return this.http.get<Response<GroupDefinition[]>>(this.groupsUrl).pipe(\r\n tap((response) => {\r\n const groups = Array.isArray(response?.data) ? response.data : [];\r\n ctx.patchState({ groups });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to load groups';\r\n setLoadingError(ctx, 'getGroups', message);\r\n return of([]);\r\n }),\r\n finalize(() => endLoading(ctx, 'getGroups')),\r\n );\r\n }\r\n\r\n @Action(GetRolesForModule)\r\n getRolesForModule(\r\n ctx: StateContext<WorkflowStateModel>,\r\n _action: GetRolesForModule,\r\n ) {\r\n const state = ctx.getState();\r\n const { moduleType, moduleId } = state;\r\n\r\n if (!moduleType || !moduleId) {\r\n const message = 'Module type and module ID must be set';\r\n setLoadingError(ctx, 'getRolesForModule', message);\r\n return of([]);\r\n }\r\n\r\n startLoading(ctx, 'getRolesForModule');\r\n\r\n return this.http\r\n .get<Response<RoleDefinition[]>>(\r\n `${this.rolesUrl}/${moduleType}/${moduleId}`,\r\n {\r\n params: { inherited: 'true' },\r\n },\r\n )\r\n .pipe(\r\n tap((response) => {\r\n const roles = Array.isArray(response?.data) ? response.data : [];\r\n ctx.patchState({ roles });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to load roles';\r\n setLoadingError(ctx, 'getRolesForModule', message);\r\n return of([]);\r\n }),\r\n finalize(() => endLoading(ctx, 'getRolesForModule')),\r\n );\r\n }\r\n\r\n @Action(GetStep)\r\n getStep(ctx: StateContext<WorkflowStateModel>, action: GetStep) {\r\n startLoading(ctx, 'getStep');\r\n\r\n return this.http\r\n .get<Response<StepSchema>>(\r\n `${this.baseUrl}/stepSchema/${action.stepId}`,\r\n {\r\n params: { Mode: 'edit' },\r\n },\r\n )\r\n .pipe(\r\n tap((response) => {\r\n const selectedStep = response?.data ?? null;\r\n ctx.patchState({ selectedStep });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to load step';\r\n setLoadingError(ctx, 'getStep', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'getStep')),\r\n );\r\n }\r\n\r\n @Action(ValidateFlow)\r\n validateFlow(ctx: StateContext<WorkflowStateModel>, _action: ValidateFlow) {\r\n startLoading(ctx, 'validateFlow');\r\n\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'validateFlow', message);\r\n endLoading(ctx, 'validateFlow');\r\n return of(null);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<boolean>\r\n >(`${this.baseUrl}/requestSchema/${workflowId}/validity`)\r\n .pipe(\r\n tap((response) => {\r\n const isFlowValid = response?.data ?? null;\r\n ctx.patchState({ isFlowValid });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to validate flow';\r\n setLoadingError(ctx, 'validateFlow', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'validateFlow')),\r\n );\r\n }\r\n\r\n @Action(CreateStep)\r\n createStep(ctx: StateContext<WorkflowStateModel>, action: CreateStep) {\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'createStep', message);\r\n return of(null);\r\n }\r\n\r\n const tempId = -Date.now();\r\n const tempStep: any = {\r\n ...action.payload,\r\n id: tempId,\r\n loading: true,\r\n };\r\n\r\n if (state.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n stepsSchema: [...state.workflow.stepsSchema, tempStep],\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'createStep');\r\n\r\n return this.http\r\n .post<\r\n Response<StepResponse>\r\n >(`${this.baseUrl}/requestSchema/${workflowId}/stepSchema`, action.payload)\r\n .pipe(\r\n tap((response) => {\r\n const createdStep = response?.data;\r\n const currentState = ctx.getState();\r\n if (createdStep && currentState.workflow) {\r\n const updatedSteps = currentState.workflow.stepsSchema.map(\r\n (step) =>\r\n step.id === tempId ? { ...createdStep, loading: false } : step,\r\n );\r\n\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: updatedSteps,\r\n },\r\n });\r\n }\r\n // Validate flow after creating step\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n const filteredSteps = currentState.workflow.stepsSchema.filter(\r\n (step) => step.id !== tempId,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: filteredSteps,\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to create step';\r\n setLoadingError(ctx, 'createStep', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'createStep')),\r\n );\r\n }\r\n\r\n @Action(UpdateStep)\r\n updateStep(ctx: StateContext<WorkflowStateModel>, action: UpdateStep) {\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'updateStep', message);\r\n return of(null);\r\n }\r\n\r\n if (state.workflow) {\r\n const updatedSteps = state.workflow.stepsSchema.map((step) =>\r\n step.id === action.stepId ? { ...step, loading: true } : step,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n stepsSchema: updatedSteps,\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'updateStep');\r\n\r\n const endpoint = action.isInitial ? 'initialStepSchema' : 'stepSchema';\r\n\r\n return this.http\r\n .put<\r\n Response<StepResponse>\r\n >(`${this.baseUrl}/${endpoint}/${action.stepId}`, action.payload)\r\n .pipe(\r\n tap((response) => {\r\n const updatedStep = response?.data;\r\n const currentState = ctx.getState();\r\n if (updatedStep && currentState.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: currentState.workflow.stepsSchema.map((step) =>\r\n step.id === updatedStep.id\r\n ? { ...updatedStep, loading: false }\r\n : step,\r\n ),\r\n },\r\n });\r\n }\r\n // Validate flow after updating step\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n const errorSteps = currentState.workflow.stepsSchema.map((step) =>\r\n step.id === action.stepId ? { ...step, loading: false } : step,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: errorSteps,\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to update step';\r\n setLoadingError(ctx, 'updateStep', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'updateStep')),\r\n );\r\n }\r\n\r\n @Action(CreateConnection)\r\n createConnection(\r\n ctx: StateContext<WorkflowStateModel>,\r\n action: CreateConnection,\r\n ) {\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'createConnection', message);\r\n return of(null);\r\n }\r\n\r\n const tempId = -Date.now();\r\n const tempConnection: any = {\r\n ...action.payload,\r\n id: tempId,\r\n loading: true,\r\n source: action.payload.sourceStepId,\r\n target: action.payload.targetStepId,\r\n };\r\n\r\n if (state.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n connections: [...state.workflow.connections, tempConnection],\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'createConnection');\r\n\r\n return this.http\r\n .post<\r\n Response<ConnectionResponse>\r\n >(`${this.baseUrl}/requestSchema/${workflowId}/connection`, action.payload)\r\n .pipe(\r\n tap((response) => {\r\n const createdConnection = response?.data;\r\n const currentState = ctx.getState();\r\n if (createdConnection && currentState.workflow) {\r\n const updatedConnections = currentState.workflow.connections.map(\r\n (conn) =>\r\n conn.id === tempId\r\n ? { ...createdConnection, loading: false }\r\n : conn,\r\n );\r\n\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: updatedConnections,\r\n },\r\n });\r\n }\r\n // Validate flow after creating connection\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n const filteredConnections =\r\n currentState.workflow.connections.filter(\r\n (conn) => conn.id !== tempId,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: filteredConnections,\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to create connection';\r\n setLoadingError(ctx, 'createConnection', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'createConnection')),\r\n );\r\n }\r\n\r\n @Action(UpdateConnection)\r\n updateConnection(\r\n ctx: StateContext<WorkflowStateModel>,\r\n action: UpdateConnection,\r\n ) {\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'updateConnection', message);\r\n return of(null);\r\n }\r\n\r\n if (state.workflow) {\r\n const updatedConnections = state.workflow.connections.map((conn) =>\r\n conn.id === action.connectionId ? { ...conn, loading: true } : conn,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n connections: updatedConnections,\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'updateConnection');\r\n\r\n return this.http\r\n .put<\r\n Response<ConnectionResponse>\r\n >(`${this.baseUrl}/stepSchemaConnection/${action.connectionId}`, action.payload)\r\n .pipe(\r\n tap((response) => {\r\n const updatedConnection = response?.data;\r\n const currentState = ctx.getState();\r\n if (updatedConnection && currentState.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: currentState.workflow.connections.map((conn) =>\r\n conn.id === updatedConnection.id\r\n ? { ...updatedConnection, loading: false }\r\n : conn,\r\n ),\r\n },\r\n });\r\n }\r\n // Validate flow after updating connection\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n const errorConnections = currentState.workflow.connections.map(\r\n (conn) =>\r\n conn.id === action.connectionId\r\n ? { ...conn, loading: false }\r\n : conn,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: errorConnections,\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to update connection';\r\n setLoadingError(ctx, 'updateConnection', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'updateConnection')),\r\n );\r\n }\r\n\r\n @Action(PublishWorkflow)\r\n publishWorkflow(\r\n ctx: StateContext<WorkflowStateModel>,\r\n action: PublishWorkflow,\r\n ) {\r\n startLoading(ctx, 'publishWorkflow');\r\n\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'publishWorkflow', message);\r\n endLoading(ctx, 'publishWorkflow');\r\n return of(null);\r\n }\r\n\r\n return this.http\r\n .put<\r\n Response<PublishResponse>\r\n >(`${this.baseUrl}/requestSchema/${workflowId}/publish`, { IsPublished: action.isPublished })\r\n .pipe(\r\n tap((response) => {\r\n const publishedData = response?.data;\r\n if (publishedData && state.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n isPublished: publishedData.isPublished,\r\n isValid: publishedData.isValid,\r\n },\r\n });\r\n }\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to publish workflow';\r\n setLoadingError(ctx, 'publishWorkflow', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'publishWorkflow')),\r\n );\r\n }\r\n\r\n @Action(DeleteStep)\r\n deleteStep(ctx: StateContext<WorkflowStateModel>, action: DeleteStep) {\r\n const state = ctx.getState();\r\n\r\n if (state.workflow) {\r\n // Mark step as loading\r\n const updatedSteps = state.workflow.stepsSchema.map((step) =>\r\n step.id == action.stepId ? { ...step, loading: true } : step,\r\n );\r\n\r\n // Filter out all connections related to this step\r\n const updatedConnections = state.workflow.connections.filter(\r\n (conn) => conn.source != action.stepId && conn.target != action.stepId,\r\n );\r\n\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n stepsSchema: updatedSteps,\r\n connections: updatedConnections,\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'deleteStep');\r\n\r\n return this.http\r\n .delete<Response<boolean>>(`${this.baseUrl}/stepSchema/${action.stepId}`)\r\n .pipe(\r\n tap(() => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: currentState.workflow.stepsSchema.filter(\r\n (step) => step.id != action.stepId,\r\n ),\r\n },\r\n });\r\n }\r\n // Validate flow after deleting step\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n // Restore step loading state\r\n const errorSteps = currentState.workflow.stepsSchema.map((step) =>\r\n step.id == action.stepId ? { ...step, loading: false } : step,\r\n );\r\n\r\n // Restore connections related to this step from original state\r\n const relatedConnections =\r\n state.workflow?.connections.filter(\r\n (conn) =>\r\n conn.source == action.stepId || conn.target == action.stepId,\r\n ) || [];\r\n\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: errorSteps,\r\n connections: [\r\n ...currentState.workflow.connections,\r\n ...relatedConnections,\r\n ],\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to delete step';\r\n setLoadingError(ctx, 'deleteStep', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'deleteStep')),\r\n );\r\n }\r\n\r\n @Action(DeleteConnection)\r\n deleteConnection(\r\n ctx: StateContext<WorkflowStateModel>,\r\n action: DeleteConnection,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n if (state.workflow) {\r\n const updatedConnections = state.workflow.connections.map((conn) =>\r\n conn.id == action.connectionId ? { ...conn, loading: true } : conn,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n connections: updatedConnections,\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'deleteConnection');\r\n\r\n return this.http\r\n .delete<\r\n Response<boolean>\r\n >(`${this.baseUrl}/stepSchemaConnection/${action.connectionId}`)\r\n .pipe(\r\n tap(() => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: currentState.workflow.connections.filter(\r\n (conn) => conn.id != action.connectionId,\r\n ),\r\n },\r\n });\r\n }\r\n // Validate flow after deleting connection\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n const errorConnections = currentState.workflow.connections.map(\r\n (conn) =>\r\n conn.id == action.connectionId\r\n ? { ...conn, loading: false }\r\n : conn,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: errorConnections,\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to delete connection';\r\n setLoadingError(ctx, 'deleteConnection', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'deleteConnection')),\r\n );\r\n }\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\nimport type { Observable } from 'rxjs';\r\n\r\nimport type {\r\n ConnectionPayload,\r\n FormulaProperty,\r\n GroupDefinition,\r\n RoleDefinition,\r\n StepPayload,\r\n StepSchema,\r\n WorkflowConnection,\r\n WorkflowListItem,\r\n WorkflowLoadingName,\r\n WorkflowSchema,\r\n WorkflowStepSchema,\r\n} from './workflow.model';\r\nimport {\r\n CreateConnection,\r\n CreateStep,\r\n DeleteConnection,\r\n DeleteStep,\r\n GetFormulaProperties,\r\n GetGroups,\r\n GetRolesForModule,\r\n GetStep,\r\n GetWorkflow,\r\n GetWorkflows,\r\n PublishWorkflow,\r\n SetModuleInfo,\r\n UpdateConnection,\r\n UpdateStep,\r\n ValidateFlow,\r\n} from './workflow.actions';\r\nimport { WorkflowState } from './workflow.state';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class WorkflowFacade {\r\n private readonly store = inject(Store);\r\n\r\n readonly workflowId = select<string | number | null>(\r\n WorkflowState.workflowId,\r\n );\r\n readonly moduleType = select<string | null>(WorkflowState.moduleType);\r\n readonly moduleId = select<string | number | null>(WorkflowState.moduleId);\r\n readonly workflows = select<WorkflowListItem[]>(WorkflowState.workflows);\r\n readonly workflow = select<WorkflowSchema | null>(WorkflowState.workflow);\r\n readonly formulaProperties = select<FormulaProperty[]>(\r\n WorkflowState.formulaProperties,\r\n );\r\n readonly groups = select<GroupDefinition[]>(WorkflowState.groups);\r\n readonly roles = select<RoleDefinition[]>(WorkflowState.roles);\r\n readonly selectedStep = select<StepSchema | null>(WorkflowState.selectedStep);\r\n readonly isFlowValid = select<boolean | null>(WorkflowState.isFlowValid);\r\n readonly steps = select<WorkflowStepSchema[]>(WorkflowState.stepsSchema);\r\n readonly connections = select<WorkflowConnection[]>(\r\n WorkflowState.connections,\r\n );\r\n\r\n isLoading(loadingName: WorkflowLoadingName) {\r\n const loadingFactory = select<(name: WorkflowLoadingName) => boolean>(\r\n WorkflowState.isLoadingFactory,\r\n );\r\n return computed(() => loadingFactory()(loadingName));\r\n }\r\n\r\n error(loadingName: WorkflowLoadingName) {\r\n const errorFactory = select<(name: WorkflowLoadingName) => string | null>(\r\n WorkflowState.errorFactory,\r\n );\r\n return computed(() => errorFactory()(loadingName));\r\n }\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n loadWorkflows(): Observable<unknown> {\r\n return this.store.dispatch(new GetWorkflows());\r\n }\r\n\r\n selectWorkflow(workflowId: string | number): Observable<unknown> {\r\n return this.store.dispatch(new GetWorkflow(workflowId));\r\n }\r\n\r\n loadWorkflow(): Observable<unknown> {\r\n return this.loadWorkflows();\r\n }\r\n\r\n loadFormulaProperties(): Observable<unknown> {\r\n return this.store.dispatch(new GetFormulaProperties());\r\n }\r\n\r\n loadGroups(): Observable<unknown> {\r\n return this.store.dispatch(new GetGroups());\r\n }\r\n\r\n loadRolesForModule(): Observable<unknown> {\r\n return this.store.dispatch(new GetRolesForModule());\r\n }\r\n\r\n loadStep(stepId: string | number): Observable<unknown> {\r\n return this.store.dispatch(new GetStep(stepId));\r\n }\r\n\r\n validateFlow(): Observable<unknown> {\r\n return this.store.dispatch(new ValidateFlow());\r\n }\r\n\r\n createStep(payload: StepPayload): Observable<unknown> {\r\n return this.store.dispatch(new CreateStep(payload));\r\n }\r\n\r\n updateStep(\r\n stepId: string | number,\r\n payload: StepPayload,\r\n isInitial?: boolean,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(new UpdateStep(stepId, payload, isInitial));\r\n }\r\n\r\n createConnection(payload: ConnectionPayload): Observable<unknown> {\r\n return this.store.dispatch(new CreateConnection(payload));\r\n }\r\n\r\n updateConnection(\r\n connectionId: string | number,\r\n payload: ConnectionPayload,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(new UpdateConnection(connectionId, payload));\r\n }\r\n\r\n publishWorkflow(isPublished: boolean): Observable<unknown> {\r\n return this.store.dispatch(new PublishWorkflow(isPublished));\r\n }\r\n\r\n deleteStep(stepId: string | number): Observable<unknown> {\r\n return this.store.dispatch(new DeleteStep(stepId));\r\n }\r\n\r\n deleteConnection(connectionId: string | number): Observable<unknown> {\r\n return this.store.dispatch(new DeleteConnection(connectionId));\r\n }\r\n}\r\n","// shared/models/api.model.ts\r\n\r\nexport interface Response<T> {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message?: string | null;\r\n errors?: any | null;\r\n data: T;\r\n cacheSession?: string;\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { NotificationTemplate } from '@masterteam/notification';\r\nimport { Card } from '@masterteam/components/card';\r\n\r\n@Component({\r\n selector: 'mt-workflow-notifications-drawer',\r\n imports: [Card, NotificationTemplate, Card],\r\n templateUrl: './workflow-notifications-drawer.html',\r\n styleUrl: './workflow-notifications-drawer.css',\r\n})\r\nexport class WorkflowNotificationsDrawer {}\r\n","<div class=\"overflow-hidden h-full w-full\">\r\n <div\r\n class=\"flex-1 flex justify-center items-start p-4 h-full overflow-y-auto\"\r\n >\r\n <div class=\"w-2/3\">\r\n <mt-card headless>\r\n <mt-notification-template />\r\n </mt-card>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, inject } from '@angular/core';\r\nimport { FormBuilder } from '@masterteam/form-builder';\r\nimport { ModalService } from '@masterteam/components/modal';\r\n\r\n@Component({\r\n selector: 'mt-workflow-form-drawer',\r\n imports: [FormBuilder],\r\n templateUrl: './workflow-form-drawer.html',\r\n styleUrl: './workflow-form-drawer.css',\r\n})\r\nexport class WorkflowFormDrawer {\r\n readonly modal = inject(ModalService);\r\n}\r\n","<div [class]=\"modal.contentClass + ' p-4'\">\r\n <mt-form-builder\r\n class=\"flex-1\"\r\n canvasStyleClass=\"!w-full\"\r\n mode=\"manageProperties\"\r\n />\r\n</div>\r\n","import {\r\n Component,\r\n inject,\r\n linkedSignal,\r\n signal,\r\n computed,\r\n effect,\r\n} from '@angular/core';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { SBAction, StructureBuilder } from '@masterteam/structure-builder';\r\nimport { WorkflowFacade, WorkflowStepSchema } from '../../store/workflow';\r\nimport { CellChangeEvent } from '@masterteam/components/table';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { FormControl, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { Table } from '@masterteam/components/table';\r\nimport { ColumnDef } from '@masterteam/components/table';\r\nimport { Skeleton } from 'primeng/skeleton';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport {\r\n NotificationTemplate,\r\n NotificationFacade,\r\n} from '@masterteam/notification';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { WorkflowNotificationsDrawer } from './workflow-notifications-drawer/workflow-notifications-drawer';\r\nimport { FormBuilderFacade } from '@masterteam/form-builder';\r\nimport { WorkflowFormDrawer } from './workflow-form-drawer/workflow-form-drawer';\r\n\r\n@Component({\r\n selector: 'mt-workflow-builder',\r\n imports: [\r\n StructureBuilder,\r\n Card,\r\n Tabs,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n DynamicForm,\r\n Table,\r\n Skeleton,\r\n ToggleField,\r\n Button,\r\n TranslocoModule,\r\n NotificationTemplate,\r\n SelectField,\r\n ],\r\n templateUrl: './workflow-builder.html',\r\n styles: [],\r\n host: {},\r\n})\r\nexport class WorkflowBuilder {\r\n private workflowFacade = inject(WorkflowFacade);\r\n private notificationFacade = inject(NotificationFacade);\r\n private formBuilderFacade = inject(FormBuilderFacade);\r\n private transloco = inject(TranslocoService);\r\n readonly modal: ModalService = inject(ModalService);\r\n // Main tabs for Workflow and Notification\r\n mainTab = signal<string>('workflow');\r\n mainTabsList = [\r\n {\r\n label: this.transloco.translate('workflow.builder.workflow'),\r\n value: 'workflow',\r\n },\r\n {\r\n label: this.transloco.translate('workflow.builder.notification'),\r\n value: 'notification',\r\n },\r\n ];\r\n groups = this.workflowFacade.groups;\r\n roles = this.workflowFacade.roles;\r\n workflows = this.workflowFacade.workflows;\r\n workflow = this.workflowFacade.workflow;\r\n loading = this.workflowFacade.isLoading('getWorkflow');\r\n loadingStep = this.workflowFacade.isLoading('getStep');\r\n isFlowValid = this.workflowFacade.isFlowValid;\r\n\r\n selectedStep = this.workflowFacade.selectedStep;\r\n selectedWorkflowId = computed(() => this.workflow()?.id);\r\n hasMultipleWorkflows = computed(() => this.workflows().length > 1);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n\r\n selectedTab = signal<any>('tab1');\r\n nodeFields = signal<any>({\r\n name: 'name.display',\r\n });\r\n nodeFormControl = new FormControl();\r\n isPublished = signal<boolean>(false);\r\n isPublishDisabled = computed(() => !this.isFlowValid());\r\n\r\n isEditingInitialNode = signal<boolean>(false);\r\n\r\n // Properties table data - writable signal that can be updated when loading step details\r\n private _propertiesTableData = signal<any[]>([]);\r\n\r\n // Computed that initializes from workflow properties\r\n propertiesTableData = computed(() => {\r\n const currentData = this._propertiesTableData();\r\n if (currentData.length > 0) {\r\n return currentData;\r\n }\r\n\r\n const properties = this.workflow()?.properties || [];\r\n return properties.map((prop) => ({\r\n id: prop.id,\r\n name: prop.property.name,\r\n isVisible: false,\r\n isEditable: false,\r\n _original: prop, // Keep original for reference\r\n }));\r\n });\r\n\r\n // Table columns configuration\r\n propertiesColumns = signal<ColumnDef[]>([\r\n {\r\n key: 'name',\r\n label: this.transloco.translate('workflow.builder.columnName'),\r\n type: 'text',\r\n },\r\n {\r\n key: 'isVisible',\r\n label: this.transloco.translate('workflow.builder.columnVisible'),\r\n type: 'boolean',\r\n },\r\n {\r\n key: 'isEditable',\r\n label: this.transloco.translate('workflow.builder.columnEditable'),\r\n type: 'boolean',\r\n },\r\n ]);\r\n\r\n // Dynamic tabs list - notification tab only shown for non-initial nodes\r\n tabsList = computed(() => {\r\n const baseTabs = [\r\n {\r\n label: this.transloco.translate('workflow.builder.tabSettings'),\r\n value: 'tab1',\r\n },\r\n {\r\n label: this.transloco.translate('workflow.builder.tabProperties'),\r\n value: 'tab2',\r\n },\r\n ];\r\n\r\n // Add notification tab only for non-initial nodes\r\n if (!this.isEditingInitialNode()) {\r\n baseTabs.push({\r\n label: this.transloco.translate('workflow.builder.notification'),\r\n value: 'tab3',\r\n });\r\n }\r\n\r\n return baseTabs;\r\n });\r\n availableNodes = [\r\n {\r\n id: 'FormStep',\r\n label: this.transloco.translate('workflow.builder.newStep'),\r\n name: {\r\n en: 'Form Step',\r\n ar: 'خطوة النموذج',\r\n },\r\n targetType: '1',\r\n icon: 'general.plus-circle',\r\n color: '#000000',\r\n },\r\n ];\r\n\r\n // Base form sections - defined once for reusability\r\n private readonly baseNameFields = {\r\n key: 'settings',\r\n type: 'none',\r\n bodyClass: 'space-y-2',\r\n fields: [\r\n {\r\n key: 'name.en',\r\n label: this.transloco.translate('workflow.builder.nameEnglish'),\r\n placeholder: this.transloco.translate(\r\n 'workflow.builder.enterNameEnglish',\r\n ),\r\n cssClass: 'w-full',\r\n required: true,\r\n },\r\n {\r\n key: 'name.ar',\r\n label: this.transloco.translate('workflow.builder.nameArabic'),\r\n placeholder: this.transloco.translate(\r\n 'workflow.builder.enterNameArabic',\r\n ),\r\n cssClass: 'w-full',\r\n required: true,\r\n },\r\n ],\r\n };\r\n\r\n // Approver section with dynamic options\r\n private readonly approverSection = computed(() => ({\r\n key: 'approver',\r\n type: 'header',\r\n label: this.transloco.translate('workflow.builder.approver'),\r\n headerClass:\r\n 'rounded-t-xl bg-slate-50 px-4 py-3 text-sm font-semibold text-slate-900 border border-slate-200 border-b-0',\r\n bodyClass: 'rounded-b-xl border border-slate-200 p-4 space-y-3',\r\n cssClass: ' ',\r\n fields: [\r\n {\r\n key: 'targetType',\r\n type: 'radio-button',\r\n orientation: 'horizontal',\r\n defaultValue: '1',\r\n options: [\r\n {\r\n label: this.transloco.translate('workflow.builder.group'),\r\n value: '1',\r\n },\r\n {\r\n label: this.transloco.translate('workflow.builder.role'),\r\n value: '2',\r\n },\r\n ],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n placeholder: 'Enter Role',\r\n cssClass: 'flex items-center gap-6 text-sm text-slate-700',\r\n required: true,\r\n },\r\n {\r\n key: 'group',\r\n label: 'Select',\r\n placeholder: this.transloco.translate('workflow.builder.selectGroup'),\r\n cssClass: 'mt-2 pt-3 border-t border-slate-200 w-full',\r\n required: true,\r\n type: 'select',\r\n options: this.groups(),\r\n optionLabel: 'name.display',\r\n optionValue: 'id',\r\n relations: [{ key: 'targetType', value: '1', action: 'show' }],\r\n },\r\n {\r\n key: 'role',\r\n label: 'Select',\r\n placeholder: 'Enter target value',\r\n cssClass: 'mt-2 pt-3 border-t border-slate-200 w-full',\r\n required: true,\r\n type: 'select',\r\n options: this.roles(),\r\n optionLabel: 'name.display',\r\n optionValue: 'id',\r\n relations: [{ key: 'targetType', value: '2', action: 'show' }],\r\n },\r\n ],\r\n }));\r\n\r\n private readonly slaSection = {\r\n key: 'slaSection',\r\n type: 'none',\r\n bodyClass: 'space-y-1',\r\n fields: [\r\n {\r\n key: 'sla',\r\n label: this.transloco.translate('workflow.builder.sla'),\r\n placeholder: this.transloco.translate('workflow.builder.enterSla'),\r\n cssClass: 'w-full',\r\n required: true,\r\n },\r\n ],\r\n } as const;\r\n\r\n // Dynamic form configuration using computed signal\r\n // Automatically rebuilds when isEditingInitialNode changes\r\n nodeForm = linkedSignal<DynamicFormConfig>(() => {\r\n const sections: any[] = [this.baseNameFields];\r\n\r\n // Conditionally include approver and SLA sections based on isEditingInitialNode\r\n // Initial nodes only show name fields\r\n if (!this.isEditingInitialNode()) {\r\n sections.push(this.approverSection());\r\n sections.push(this.slaSection);\r\n }\r\n\r\n return {\r\n sections,\r\n layout: {},\r\n };\r\n });\r\n\r\n // Computed signal for form state info - useful for debugging or UI indicators\r\n formStateInfo = computed(() => ({\r\n isInitialNode: this.isEditingInitialNode(),\r\n sectionsCount: this.nodeForm().sections.length,\r\n hasApproverSection: !this.isEditingInitialNode(),\r\n hasSlaSection: !this.isEditingInitialNode(),\r\n formMode: this.isEditingInitialNode() ? 'initial-node' : 'standard-node',\r\n }));\r\n\r\n // Sample connection form configuration\r\n connectionForm = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'basic',\r\n label: 'Basic Information',\r\n type: 'none',\r\n cssClass: 'p-4',\r\n columns: 2,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'priority',\r\n label: 'Priority',\r\n },\r\n ],\r\n },\r\n ],\r\n });\r\n\r\n // Nodes currently in the flow (with positions) - linked to store via selectors\r\n steps = computed(() => {\r\n return this.workflowFacade.steps().map((step) => ({\r\n ...step,\r\n color: '#000000',\r\n }));\r\n });\r\n\r\n // Connections between nodes (matching your design) - linked to store via selectors\r\n connections = computed(() => {\r\n return this.workflowFacade.connections().map((connection) => ({\r\n ...connection,\r\n from: connection.source,\r\n to: connection.target,\r\n }));\r\n });\r\n\r\n // Node Actions\r\n nodeActions = signal([\r\n {\r\n key: 'edit',\r\n icon: 'general.edit-05',\r\n variant: 'outlined',\r\n size: 'small',\r\n tooltip: 'Edit',\r\n },\r\n {\r\n key: 'delete',\r\n icon: 'general.trash-01',\r\n variant: 'outlined',\r\n size: 'small',\r\n severity: 'danger',\r\n tooltip: 'Delete',\r\n condition: (node: WorkflowStepSchema) => !node.isInitial,\r\n },\r\n ]);\r\n\r\n readonly showHideControl = new FormControl(false);\r\n\r\n constructor() {\r\n // Effect to initialize isPublished from workflow.isPublished\r\n effect(() => {\r\n const workflow = this.workflow();\r\n if (workflow && workflow.isPublished !== undefined) {\r\n this.isPublished.set(workflow.isPublished);\r\n }\r\n });\r\n\r\n // Effect to watch selectedStep and patch form when it changes\r\n effect(() => {\r\n const step = this.selectedStep();\r\n\r\n if (step) {\r\n // Patch form with complete step data including targetType and targetValue\r\n this.nodeFormControl.patchValue({\r\n name: step.name,\r\n targetType: step.targetType || '1',\r\n group: step.targetType === '1' ? parseInt(step.targetValue!) : null,\r\n role: step.targetType === '2' ? step.targetValue : null,\r\n sla: step.sla,\r\n });\r\n\r\n // Update properties table with step's property permissions\r\n const properties = this.workflow()?.properties || [];\r\n const updatedTableData = properties.map((prop) => {\r\n const stepProperty = step.properties?.find(\r\n (p) => p.propertyId === prop.id,\r\n );\r\n\r\n return {\r\n id: prop.id,\r\n name: prop?.property?.name,\r\n isVisible: stepProperty?.isRead || false,\r\n isEditable: stepProperty?.isWrite || false,\r\n _original: prop,\r\n };\r\n });\r\n\r\n this._propertiesTableData.set(updatedTableData);\r\n this.showHideControl.patchValue(step.hasNotification ?? false);\r\n }\r\n });\r\n }\r\n\r\n // Handle main tab change (Workflow/Notification)\r\n onMainTabChange(tab: string): void {\r\n this.mainTab.set(tab);\r\n if (tab === 'notification') {\r\n const workflowId = this.workflow()?.id;\r\n if (workflowId) {\r\n this.notificationFacade.setModuleInfo('request', workflowId);\r\n this.notificationFacade.loadAllData();\r\n }\r\n }\r\n }\r\n\r\n // Handle node dialog tab change (Settings/Properties/Notification)\r\n onNodeDialogTabChange(tab: string): void {\r\n this.selectedTab.set(tab);\r\n }\r\n\r\n onPublishToggle(isPublished: boolean): void {\r\n // Prevent publishing if workflow is not valid\r\n if (isPublished && !this.isFlowValid()) {\r\n this.isPublished.set(false);\r\n return;\r\n }\r\n\r\n this.workflowFacade.publishWorkflow(isPublished).subscribe({\r\n error: () => {\r\n // Revert the toggle on error\r\n this.isPublished.set(!isPublished);\r\n },\r\n });\r\n }\r\n\r\n onWorkflowChange(workflowId: number): void {\r\n this.workflowFacade.selectWorkflow(workflowId);\r\n }\r\n\r\n clearForm(): void {\r\n // Reset isEditingInitialNode flag\r\n this.isEditingInitialNode.set(false);\r\n\r\n // Reset form to default values\r\n this.nodeFormControl.reset({\r\n name: { en: '', ar: '' },\r\n targetType: '1',\r\n group: null,\r\n role: null,\r\n sla: 0,\r\n });\r\n\r\n // Reset properties table to default state (all unchecked)\r\n const properties = this.workflow()?.properties || [];\r\n const resetTableData = properties.map((prop) => ({\r\n id: prop.id,\r\n name: prop?.property?.name,\r\n isVisible: false,\r\n isEditable: false,\r\n _original: prop,\r\n }));\r\n\r\n this._propertiesTableData.set(resetTableData);\r\n\r\n // Reset toggle controls\r\n this.showHideControl.patchValue(false);\r\n\r\n // Reset to first tab\r\n this.selectedTab.set('tab1');\r\n }\r\n\r\n onPropertyCellChange(event: CellChangeEvent): void {\r\n if (event.type !== 'boolean') return;\r\n\r\n switch (event.column) {\r\n case 'isEditable':\r\n if (event.value) event.row.isVisible = true;\r\n break;\r\n case 'isVisible':\r\n if (!event.value) event.row.isEditable = false;\r\n break;\r\n }\r\n }\r\n\r\n onStructureAction(event: SBAction) {\r\n switch (event.action) {\r\n case 'createNode':\r\n if (event.data) {\r\n // Get form values\r\n const formValue = this.nodeFormControl.value;\r\n\r\n // Get selected properties with isVisible and isEditable flags\r\n const propertiesPayload = this.propertiesTableData()\r\n .filter((prop) => prop.isVisible || prop.isEditable)\r\n .map((prop) => ({\r\n PropertyId: prop.id,\r\n isRead: prop.isVisible,\r\n isWrite: prop.isEditable,\r\n }));\r\n\r\n // Prepare step payload\r\n const stepPayload = {\r\n name: formValue.name,\r\n targetType: formValue.targetType,\r\n targetValue:\r\n formValue.targetType === '1' ? formValue.group : formValue.role,\r\n sla: formValue.sla || 0,\r\n properties: propertiesPayload,\r\n hasNotification: this.showHideControl.value,\r\n hasForm: true,\r\n };\r\n\r\n // Create step via facade\r\n this.workflowFacade.createStep(stepPayload);\r\n }\r\n break;\r\n case 'startUpdating':\r\n if (event.data) {\r\n this.clearForm();\r\n\r\n const stepId = event.data.id;\r\n\r\n // Set the flag based on whether node is initial\r\n // This will trigger nodeForm to rebuild automatically via linkedSignal\r\n this.isEditingInitialNode.set(!!event.data.isInitial);\r\n\r\n // Load step data\r\n this.workflowFacade.loadStep(stepId);\r\n if (stepId) {\r\n this.notificationFacade.setModuleInfo('step', stepId);\r\n this.notificationFacade.loadAllData();\r\n\r\n const workflowId = this.workflow()?.id;\r\n if (workflowId) {\r\n this.formBuilderFacade.setModuleInfo(\r\n 'processstep',\r\n stepId,\r\n 'processschema',\r\n workflowId,\r\n );\r\n this.formBuilderFacade.getFormConfiguration();\r\n }\r\n }\r\n }\r\n break;\r\n case 'startCreating':\r\n // Reset form and properties for new step\r\n this.clearForm();\r\n break;\r\n case 'updateNode':\r\n if (event.data) {\r\n // Get form values\r\n const formValue = this.nodeFormControl.value;\r\n const stepId = event.data.id;\r\n const isInitial = !!event.data.isInitial;\r\n\r\n // Get selected properties with isVisible and isEditable flags\r\n const propertiesPayload = this.propertiesTableData()\r\n .filter((prop) => prop.isVisible || prop.isEditable)\r\n .map((prop) => ({\r\n PropertyId: prop.id,\r\n isRead: prop.isVisible,\r\n isWrite: prop.isEditable,\r\n }));\r\n\r\n // Prepare step payload\r\n const stepPayload = {\r\n name: formValue.name,\r\n targetType: formValue.targetType,\r\n targetValue:\r\n formValue.targetType === '1' ? formValue.group : formValue.role,\r\n sla: formValue.sla || event.data.sla,\r\n properties: propertiesPayload,\r\n hasNotification: this.showHideControl.value,\r\n hasForm: true,\r\n };\r\n\r\n // Update step via facade, passing isInitial flag\r\n this.workflowFacade.updateStep(stepId, stepPayload, isInitial);\r\n }\r\n break;\r\n\r\n case 'deleteNode':\r\n if (event.data) {\r\n const nodeIdToDelete = event.data.id;\r\n this.confirmationService.confirmDelete({\r\n type: 'dialog',\r\n accept: () => {\r\n this.workflowFacade.deleteStep(nodeIdToDelete);\r\n },\r\n reject: () => {},\r\n });\r\n }\r\n break;\r\n\r\n case 'createConnection':\r\n if (event.data) {\r\n // Create connection in store\r\n const connectionPayload = {\r\n sourceStepId: event.data.from,\r\n targetStepId: event.data.to,\r\n priority: event.data.priority ?? 1,\r\n formula: event.data.formula ?? [],\r\n };\r\n this.workflowFacade.createConnection(connectionPayload);\r\n }\r\n break;\r\n\r\n case 'updateConnection':\r\n if (event.data) {\r\n // Update connection in store\r\n const connectionId = event.data.id;\r\n const updatePayload = {\r\n sourceStepId: event.data.from,\r\n targetStepId: event.data.to,\r\n priority: event.data.priority ?? 1,\r\n formula: event.data.formula ?? [],\r\n };\r\n this.workflowFacade.updateConnection(connectionId, updatePayload);\r\n }\r\n break;\r\n\r\n case 'deleteConnection':\r\n if (event.data) {\r\n const connectionIdToDelete = event.data.id;\r\n // Delete connection from store\r\n this.workflowFacade.deleteConnection(connectionIdToDelete);\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n openNotificationsModal() {\r\n const notificationsDialogRef = this.modal.openModal(\r\n WorkflowNotificationsDrawer,\r\n 'drawer',\r\n {\r\n header: this.transloco.translate('workflow.builder.notification'),\r\n styleClass: '!w-[calc(100%-25rem)] !absolute',\r\n position: 'start',\r\n modal: true,\r\n appendTo: '#page-content',\r\n inputValues: {},\r\n },\r\n );\r\n\r\n notificationsDialogRef.onClose.subscribe(\r\n (result: { saved: boolean; conditionalDisplayFormula?: string }) => {\r\n if (result?.saved) {\r\n }\r\n },\r\n );\r\n }\r\n\r\n openFormModal() {\r\n const formDialogRef = this.modal.openModal(WorkflowFormDrawer, 'drawer', {\r\n header: this.transloco.translate('workflow.builder.form'),\r\n styleClass: '!w-[calc(100%-25rem)] !absolute',\r\n position: 'start',\r\n modal: true,\r\n appendTo: '#page-content',\r\n inputValues: {},\r\n });\r\n\r\n formDialogRef.onClose.subscribe(() => {});\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workflow.builder'\">\r\n <div class=\"h-full flex flex-col\" id=\"workflow-builder-card\">\r\n <!-- Main Tabs at top center -->\r\n <div class=\"flex justify-center w-full py-2\">\r\n <mt-tabs\r\n [active]=\"mainTab()\"\r\n (activeChange)=\"onMainTabChange($event)\"\r\n [options]=\"mainTabsList\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n </div>\r\n @switch (mainTab()) {\r\n @case (\"workflow\") {\r\n @if (!loading()) {\r\n <mt-structure-builder\r\n class=\"flex-1\"\r\n [availableNodes]=\"availableNodes\"\r\n [connectionForm]=\"connectionForm()\"\r\n [nodeActions]=\"nodeActions()\"\r\n [nodes]=\"steps()\"\r\n [connections]=\"connections()\"\r\n (action)=\"onStructureAction($event)\"\r\n [addModalType]=\"'drawer'\"\r\n [addModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [updateModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [addModalHeader]=\"'workflow.builder.addStep' | transloco\"\r\n [updateModalHeader]=\"'workflow.builder.editStep' | transloco\"\r\n [appendTo]=\"'page-content'\"\r\n [nodeFields]=\"nodeFields()\"\r\n [availableTabsClass]=\"\r\n hasMultipleWorkflows() ? 'absolute top-30 start-4 z-1 w-64' : ''\r\n \"\r\n [layoutDirection]=\"'LR'\"\r\n >\r\n <div flowContent>\r\n @if (hasMultipleWorkflows()) {\r\n <div class=\"absolute top-4 start-4 z-10\">\r\n <mt-card class=\"w-64\">\r\n <!-- <div class=\"flex items-center gap-3\">\r\n <label class=\"text-lg font-medium\">{{\r\n 'workflow.builder.selectWorkflow' | transloco\r\n }}</label>\r\n </div> -->\r\n <mt-select-field\r\n [options]=\"workflows()\"\r\n optionLabel=\"name.display\"\r\n optionValue=\"id\"\r\n [ngModel]=\"selectedWorkflowId()\"\r\n (ngModelChange)=\"onWorkflowChange($event)\"\r\n class=\"mt-2\"\r\n />\r\n </mt-card>\r\n </div>\r\n }\r\n <div class=\"absolute top-4 end-4 z-10\">\r\n <div class=\"flex flex-col gap-2 w-80\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-10\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"dev.dataflow-01\"\r\n />\r\n <label>{{\r\n \"workflow.builder.enableWorkflow\" | transloco\r\n }}</label>\r\n </div>\r\n <mt-toggle-field\r\n [ngModel]=\"isPublished()\"\r\n (ngModelChange)=\"onPublishToggle($event)\"\r\n [disabled]=\"isPublishDisabled()\"\r\n ></mt-toggle-field>\r\n </div>\r\n </mt-card>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-template\r\n #nodeDialog\r\n let-close=\"close\"\r\n let-save=\"save\"\r\n let-node=\"node\"\r\n let-drawerController=\"drawerController\"\r\n >\r\n <div class=\"p-4\">\r\n @if (loadingStep()) {\r\n <!-- Loading skeleton -->\r\n <div class=\"space-y-4\">\r\n <!-- Tabs skeleton -->\r\n <div class=\"flex gap-2 mb-4\">\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <!-- Form fields skeleton -->\r\n <div class=\"space-y-4\">\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"3rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"4rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- Actual content -->\r\n <mt-tabs\r\n [active]=\"selectedTab()\"\r\n (activeChange)=\"onNodeDialogTabChange($event)\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n @switch (selectedTab()) {\r\n @case (\"tab1\") {\r\n <div class=\"mt-4\">\r\n <mt-dynamic-form\r\n [formConfig]=\"nodeForm()\"\r\n [formControl]=\"nodeFormControl\"\r\n ></mt-dynamic-form>\r\n </div>\r\n }\r\n @case (\"tab2\") {\r\n <div class=\"mt-4\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-4\">\r\n <div class=\"flex flex-1 items-center gap-3\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"file.file-check-02\"\r\n />\r\n <div class=\"flex flex-col\">\r\n <label class=\"font-medium\">{{\r\n t(\"configureForm\")\r\n }}</label>\r\n <span class=\"text-sm text-muted-color\">{{\r\n t(\"configureForm-description\")\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureForm')\"\r\n size=\"small\"\r\n (onClick)=\"openFormModal()\"\r\n ></mt-button>\r\n </div>\r\n </mt-card>\r\n </div>\r\n\r\n <!-- Properties table (hidden in manageProperties mode) -->\r\n <!-- <div class=\"mt-2\">\r\n <mt-table\r\n [data]=\"propertiesTableData()\"\r\n [columns]=\"propertiesColumns()\"\r\n [selectableRows]=\"false\"\r\n [showGridlines]=\"true\"\r\n [stripedRows]=\"true\"\r\n (cellChange)=\"onPropertyCellChange($event)\"\r\n ></mt-table>\r\n </div> -->\r\n }\r\n @case (\"tab3\") {\r\n <div class=\"mt-4\">\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('show-hide')\"\r\n [descriptionCard]=\"t('show-hide-notifications')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"showHideControl\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (showHideControl.value) {\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureNotifications')\"\r\n size=\"small\"\r\n (onClick)=\"openNotificationsModal()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n </mt-structure-builder>\r\n } @else {\r\n <p-skeleton width=\"100%\" height=\"50rem\" />\r\n }\r\n }\r\n @case (\"notification\") {\r\n <div class=\"flex-1 flex justify-center items-start p-4\">\r\n <div class=\"w-1/2\">\r\n <mt-card [title]=\"'Notifications'\">\r\n <mt-notification-template />\r\n </mt-card>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</ng-container>\r\n","// store/app.state.ts\r\n\r\nimport { HttpContextToken } from '@angular/common/http';\r\n\r\nexport const REQUEST_CONTEXT = new HttpContextToken<{ useBaseUrl: boolean }>(\r\n () => ({\r\n useBaseUrl: false,\r\n }),\r\n);\r\n","// Re-export app state\r\nexport * from './app.state';\r\n\r\n// Re-export workflow state\r\nexport * from './workflow';\r\n","/*\r\n * Public API Surface of structure-builder\r\n */\r\n\r\nexport * from './lib/workflow-builder/workflow-builder';\r\n\r\nexport * from './store';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"masterteam-workflow.mjs","sources":["../../../../packages/masterteam/workflow/src/store/workflow/workflow.actions.ts","../../../../packages/masterteam/workflow/src/store/utils/state-helpers.ts","../../../../packages/masterteam/workflow/src/store/workflow/workflow.state.ts","../../../../packages/masterteam/workflow/src/store/workflow/workflow.facade.ts","../../../../packages/masterteam/workflow/src/store/workflow/api.model.ts","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-notifications-drawer/workflow-notifications-drawer.ts","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-notifications-drawer/workflow-notifications-drawer.html","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-form-drawer/workflow-form-drawer.ts","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-form-drawer/workflow-form-drawer.html","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-builder.ts","../../../../packages/masterteam/workflow/src/lib/workflow-builder/workflow-builder.html","../../../../packages/masterteam/workflow/src/store/app.state.ts","../../../../packages/masterteam/workflow/src/store/index.ts","../../../../packages/masterteam/workflow/src/public-api.ts","../../../../packages/masterteam/workflow/src/masterteam-workflow.ts"],"sourcesContent":["import type { ConnectionPayload, StepPayload } from './workflow.model';\r\n\r\nexport class SetModuleInfo {\r\n static readonly type = '[Workflow] Set Module Info';\r\n\r\n constructor(\r\n public readonly moduleType: string,\r\n public readonly moduleId: string | number,\r\n public readonly parentModuleType?: string,\r\n public readonly parentModuleId?: string | number,\r\n public readonly parentPath?: string,\r\n ) {}\r\n}\r\n\r\nexport class GetWorkflows {\r\n static readonly type = '[Workflow] Get Workflows';\r\n}\r\n\r\nexport class GetWorkflow {\r\n static readonly type = '[Workflow] Get Workflow';\r\n\r\n constructor(public readonly workflowId: string | number) {}\r\n}\r\n\r\nexport class GetFormulaProperties {\r\n static readonly type = '[Workflow] Get Formula Properties';\r\n}\r\n\r\nexport class GetGroups {\r\n static readonly type = '[Workflow] Get Groups';\r\n}\r\n\r\nexport class GetRolesForModule {\r\n static readonly type = '[Workflow] Get Roles For Module';\r\n}\r\n\r\nexport class GetStep {\r\n static readonly type = '[Workflow] Get Step';\r\n\r\n constructor(public readonly stepId: string | number) {}\r\n}\r\n\r\nexport class ValidateFlow {\r\n static readonly type = '[Workflow] Validate Flow';\r\n}\r\n\r\nexport class CreateStep {\r\n static readonly type = '[Workflow] Create Step';\r\n\r\n constructor(public readonly payload: StepPayload) {}\r\n}\r\n\r\nexport class UpdateStep {\r\n static readonly type = '[Workflow] Update Step';\r\n\r\n constructor(\r\n public readonly stepId: string | number,\r\n public readonly payload: StepPayload,\r\n public readonly isInitial?: boolean,\r\n ) {}\r\n}\r\n\r\nexport class CreateConnection {\r\n static readonly type = '[Workflow] Create Connection';\r\n\r\n constructor(public readonly payload: ConnectionPayload) {}\r\n}\r\n\r\nexport class UpdateConnection {\r\n static readonly type = '[Workflow] Update Connection';\r\n\r\n constructor(\r\n public readonly connectionId: string | number,\r\n public readonly payload: ConnectionPayload,\r\n ) {}\r\n}\r\n\r\nexport class PublishWorkflow {\r\n static readonly type = '[Workflow] Publish Workflow';\r\n\r\n constructor(public readonly isPublished: boolean) {}\r\n}\r\n\r\nexport class DeleteStep {\r\n static readonly type = '[Workflow] Delete Step';\r\n\r\n constructor(public readonly stepId: string | number) {}\r\n}\r\n\r\nexport class DeleteConnection {\r\n static readonly type = '[Workflow] Delete Connection';\r\n\r\n constructor(public readonly connectionId: string | number) {}\r\n}\r\n","import type { StateContext } from '@ngxs/store';\r\n\r\nexport interface LoadingStateShape<L extends string = string> {\r\n loadingActive: L[];\r\n errors: Partial<Record<L, string>>;\r\n}\r\n\r\ntype LoadingName<T extends LoadingStateShape<string>> =\r\n T['loadingActive'][number];\r\n\r\nexport function startLoading<T extends LoadingStateShape<string>>(\r\n ctx: StateContext<T>,\r\n loadingName: LoadingName<T>,\r\n): void {\r\n const { loadingActive, errors } = ctx.getState();\r\n\r\n if (!loadingActive.includes(loadingName)) {\r\n ctx.patchState({\r\n loadingActive: [...loadingActive, loadingName],\r\n } as Partial<T>);\r\n }\r\n\r\n if (errors && errors[loadingName]) {\r\n const { [loadingName]: _removed, ...rest } = errors;\r\n ctx.patchState({ errors: rest } as Partial<T>);\r\n }\r\n}\r\n\r\nexport function endLoading<T extends LoadingStateShape<string>>(\r\n ctx: StateContext<T>,\r\n loadingName: LoadingName<T>,\r\n): void {\r\n const { loadingActive } = ctx.getState();\r\n\r\n ctx.patchState({\r\n loadingActive: loadingActive.filter((name) => name !== loadingName),\r\n } as Partial<T>);\r\n}\r\n\r\nexport function setLoadingError<T extends LoadingStateShape<string>>(\r\n ctx: StateContext<T>,\r\n loadingName: LoadingName<T>,\r\n message: string,\r\n): void {\r\n const { errors } = ctx.getState();\r\n ctx.patchState({\r\n errors: { ...errors, [loadingName]: message },\r\n } as Partial<T>);\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Action, Selector, State, StateContext } from '@ngxs/store';\r\nimport { of } from 'rxjs';\r\nimport { catchError, finalize, tap } from 'rxjs/operators';\r\n\r\nimport {\r\n endLoading,\r\n setLoadingError,\r\n startLoading,\r\n} from '../utils/state-helpers';\r\n\r\nimport type {\r\n ConnectionResponse,\r\n FormulaProperty,\r\n GroupDefinition,\r\n RoleGroupDefinition,\r\n PublishResponse,\r\n RoleDefinition,\r\n StepResponse,\r\n StepSchema,\r\n WorkflowConnection,\r\n WorkflowListItem,\r\n WorkflowLoadingName,\r\n WorkflowSchema,\r\n WorkflowStateModel,\r\n WorkflowStepSchema,\r\n} from './workflow.model';\r\nimport {\r\n CreateConnection,\r\n CreateStep,\r\n DeleteConnection,\r\n DeleteStep,\r\n GetFormulaProperties,\r\n GetGroups,\r\n GetRolesForModule,\r\n GetStep,\r\n GetWorkflow,\r\n GetWorkflows,\r\n PublishWorkflow,\r\n SetModuleInfo,\r\n UpdateConnection,\r\n UpdateStep,\r\n ValidateFlow,\r\n} from './workflow.actions';\r\nimport { Response } from './api.model';\r\n\r\nconst DEFAULT_STATE: WorkflowStateModel = {\r\n workflowId: null,\r\n moduleType: null,\r\n moduleId: null,\r\n workflows: [],\r\n workflow: null,\r\n formulaProperties: [],\r\n groups: [],\r\n roles: [],\r\n selectedStep: null,\r\n isFlowValid: null,\r\n loadingActive: [],\r\n errors: {},\r\n};\r\n\r\n@State<WorkflowStateModel>({\r\n name: 'workflow',\r\n defaults: DEFAULT_STATE,\r\n})\r\n@Injectable()\r\nexport class WorkflowState {\r\n private readonly http = inject(HttpClient);\r\n private readonly baseUrl = 'ProcessBuilder';\r\n private readonly groupsUrl = 'identity/Groups';\r\n private readonly rolesUrl = 'identity/roles/scopes';\r\n\r\n @Selector()\r\n static workflowId(state: WorkflowStateModel): string | number | null {\r\n return state.workflowId;\r\n }\r\n\r\n @Selector()\r\n static moduleType(state: WorkflowStateModel): string | null {\r\n return state.moduleType;\r\n }\r\n\r\n @Selector()\r\n static moduleId(state: WorkflowStateModel): string | number | null {\r\n return state.moduleId;\r\n }\r\n\r\n @Selector()\r\n static workflows(state: WorkflowStateModel) {\r\n return state.workflows;\r\n }\r\n\r\n @Selector()\r\n static workflow(state: WorkflowStateModel): WorkflowSchema | null {\r\n return state.workflow;\r\n }\r\n\r\n @Selector()\r\n static formulaProperties(state: WorkflowStateModel): FormulaProperty[] {\r\n return state.formulaProperties;\r\n }\r\n\r\n @Selector()\r\n static groups(state: WorkflowStateModel): GroupDefinition[] {\r\n return state.groups;\r\n }\r\n\r\n @Selector()\r\n static roles(\r\n state: WorkflowStateModel,\r\n ): Array<RoleDefinition | RoleGroupDefinition> {\r\n return state.roles;\r\n }\r\n\r\n @Selector()\r\n static selectedStep(state: WorkflowStateModel): StepSchema | null {\r\n return state.selectedStep;\r\n }\r\n\r\n @Selector()\r\n static isFlowValid(state: WorkflowStateModel): boolean | null {\r\n return state.isFlowValid;\r\n }\r\n\r\n @Selector()\r\n static stepsSchema(state: WorkflowStateModel): WorkflowStepSchema[] {\r\n return state.workflow?.stepsSchema ?? [];\r\n }\r\n\r\n @Selector()\r\n static connections(state: WorkflowStateModel): WorkflowConnection[] {\r\n return state.workflow?.connections ?? [];\r\n }\r\n\r\n @Selector()\r\n static isLoadingFactory(state: WorkflowStateModel) {\r\n return (loadingName: WorkflowLoadingName) =>\r\n state.loadingActive.includes(loadingName);\r\n }\r\n\r\n @Selector()\r\n static errorFactory(state: WorkflowStateModel) {\r\n return (loadingName: WorkflowLoadingName) =>\r\n state.errors?.[loadingName] ?? null;\r\n }\r\n\r\n @Action(SetModuleInfo)\r\n setModuleInfo(ctx: StateContext<WorkflowStateModel>, action: SetModuleInfo) {\r\n let parentPath = '';\r\n if (action.parentModuleType && action.parentModuleId) {\r\n parentPath = `/${action.parentModuleType}/${action.parentModuleId}`;\r\n } else if (action.parentPath) {\r\n parentPath = action.parentPath;\r\n }\r\n ctx.patchState({\r\n moduleType: action.moduleType,\r\n moduleId: action.moduleId,\r\n parentModuleType: action.parentModuleType ?? null,\r\n parentModuleId: action.parentModuleId ?? null,\r\n parentPath: parentPath ?? '',\r\n });\r\n }\r\n\r\n @Action(GetWorkflows)\r\n getWorkflows(ctx: StateContext<WorkflowStateModel>, _action: GetWorkflows) {\r\n startLoading(ctx, 'getWorkflows');\r\n\r\n const state = ctx.getState();\r\n const { moduleId, parentPath, moduleType } = state;\r\n\r\n if (!moduleId) {\r\n const message = 'Module ID is not set';\r\n setLoadingError(ctx, 'getWorkflows', message);\r\n endLoading(ctx, 'getWorkflows');\r\n return of(null);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<WorkflowListItem[]>\r\n >(`${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/requestSchema`)\r\n .pipe(\r\n tap((response) => {\r\n const workflows = response?.data ?? [];\r\n ctx.patchState({ workflows });\r\n\r\n // Auto-select and load first workflow if available\r\n if (workflows.length > 0) {\r\n const firstWorkflow = workflows[0];\r\n ctx.patchState({ workflowId: firstWorkflow.id });\r\n ctx.dispatch(new GetWorkflow(firstWorkflow.id));\r\n }\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to load workflows';\r\n setLoadingError(ctx, 'getWorkflows', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'getWorkflows')),\r\n );\r\n }\r\n\r\n @Action(GetWorkflow)\r\n getWorkflow(ctx: StateContext<WorkflowStateModel>, action: GetWorkflow) {\r\n startLoading(ctx, 'getWorkflow');\r\n\r\n const state = ctx.getState();\r\n const workflowId = action.workflowId;\r\n const { moduleId, parentPath, moduleType } = state;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'getWorkflow', message);\r\n endLoading(ctx, 'getWorkflow');\r\n return of(null);\r\n }\r\n\r\n // Set the workflowId in state\r\n ctx.patchState({ workflowId });\r\n\r\n return this.http\r\n .get<Response<WorkflowSchema>>(\r\n `${this.baseUrl}${parentPath}/${moduleType}/${moduleId}/requestSchema/${workflowId}`,\r\n {\r\n params: { Mode: 'edit' },\r\n },\r\n )\r\n .pipe(\r\n tap((response) => {\r\n const workflow = response?.data ?? null;\r\n ctx.patchState({\r\n workflow,\r\n isFlowValid: workflow?.isValid ?? null,\r\n });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to load workflow';\r\n setLoadingError(ctx, 'getWorkflow', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'getWorkflow')),\r\n );\r\n }\r\n\r\n @Action(GetFormulaProperties)\r\n getFormulaProperties(\r\n ctx: StateContext<WorkflowStateModel>,\r\n _action: GetFormulaProperties,\r\n ) {\r\n startLoading(ctx, 'getFormulaProperties');\r\n\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'getFormulaProperties', message);\r\n endLoading(ctx, 'getFormulaProperties');\r\n return of(null);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<FormulaProperty[]>\r\n >(`${this.baseUrl}/processFormulaProperties/${workflowId}`)\r\n .pipe(\r\n tap((response) => {\r\n const formulaProperties = Array.isArray(response?.data)\r\n ? response.data\r\n : [];\r\n ctx.patchState({ formulaProperties });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to load formula properties';\r\n setLoadingError(ctx, 'getFormulaProperties', message);\r\n return of([]);\r\n }),\r\n finalize(() => endLoading(ctx, 'getFormulaProperties')),\r\n );\r\n }\r\n\r\n @Action(GetGroups)\r\n getGroups(ctx: StateContext<WorkflowStateModel>, _action: GetGroups) {\r\n const state = ctx.getState();\r\n if (state.groups.length) {\r\n return of(state.groups);\r\n }\r\n\r\n startLoading(ctx, 'getGroups');\r\n\r\n return this.http.get<Response<GroupDefinition[]>>(this.groupsUrl).pipe(\r\n tap((response) => {\r\n const groups = Array.isArray(response?.data) ? response.data : [];\r\n ctx.patchState({ groups });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to load groups';\r\n setLoadingError(ctx, 'getGroups', message);\r\n return of([]);\r\n }),\r\n finalize(() => endLoading(ctx, 'getGroups')),\r\n );\r\n }\r\n\r\n @Action(GetRolesForModule)\r\n getRolesForModule(\r\n ctx: StateContext<WorkflowStateModel>,\r\n _action: GetRolesForModule,\r\n ) {\r\n const state = ctx.getState();\r\n const { moduleType, moduleId, parentPath } = state;\r\n\r\n if (!moduleType || !moduleId) {\r\n const message = 'Module type and module ID must be set';\r\n setLoadingError(ctx, 'getRolesForModule', message);\r\n return of([]);\r\n }\r\n\r\n startLoading(ctx, 'getRolesForModule');\r\n\r\n return this.http\r\n .get<Response<unknown[]>>(\r\n `${parentPath ? this.rolesUrl.replace('/scopes', '') : this.rolesUrl}${parentPath}/${moduleType}/${moduleId}`,\r\n parentPath\r\n ? undefined\r\n : {\r\n params: { inherited: 'true' },\r\n },\r\n )\r\n .pipe(\r\n tap((response) => {\r\n const roles = normalizeWorkflowRoles(response?.data);\r\n ctx.patchState({ roles });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to load roles';\r\n setLoadingError(ctx, 'getRolesForModule', message);\r\n return of([]);\r\n }),\r\n finalize(() => endLoading(ctx, 'getRolesForModule')),\r\n );\r\n }\r\n\r\n @Action(GetStep)\r\n getStep(ctx: StateContext<WorkflowStateModel>, action: GetStep) {\r\n startLoading(ctx, 'getStep');\r\n\r\n return this.http\r\n .get<Response<StepSchema>>(\r\n `${this.baseUrl}/stepSchema/${action.stepId}`,\r\n {\r\n params: { Mode: 'edit' },\r\n },\r\n )\r\n .pipe(\r\n tap((response) => {\r\n const selectedStep = response?.data ?? null;\r\n ctx.patchState({ selectedStep });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to load step';\r\n setLoadingError(ctx, 'getStep', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'getStep')),\r\n );\r\n }\r\n\r\n @Action(ValidateFlow)\r\n validateFlow(ctx: StateContext<WorkflowStateModel>, _action: ValidateFlow) {\r\n startLoading(ctx, 'validateFlow');\r\n\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'validateFlow', message);\r\n endLoading(ctx, 'validateFlow');\r\n return of(null);\r\n }\r\n\r\n return this.http\r\n .get<\r\n Response<boolean>\r\n >(`${this.baseUrl}/requestSchema/${workflowId}/validity`)\r\n .pipe(\r\n tap((response) => {\r\n const isFlowValid = response?.data ?? null;\r\n ctx.patchState({ isFlowValid });\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to validate flow';\r\n setLoadingError(ctx, 'validateFlow', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'validateFlow')),\r\n );\r\n }\r\n\r\n @Action(CreateStep)\r\n createStep(ctx: StateContext<WorkflowStateModel>, action: CreateStep) {\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'createStep', message);\r\n return of(null);\r\n }\r\n\r\n const tempId = -Date.now();\r\n const tempStep: any = {\r\n ...action.payload,\r\n id: tempId,\r\n loading: true,\r\n };\r\n\r\n if (state.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n stepsSchema: [...state.workflow.stepsSchema, tempStep],\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'createStep');\r\n\r\n return this.http\r\n .post<\r\n Response<StepResponse>\r\n >(`${this.baseUrl}/requestSchema/${workflowId}/stepSchema`, action.payload)\r\n .pipe(\r\n tap((response) => {\r\n const createdStep = response?.data;\r\n const currentState = ctx.getState();\r\n if (createdStep && currentState.workflow) {\r\n const updatedSteps = currentState.workflow.stepsSchema.map(\r\n (step) =>\r\n step.id === tempId ? { ...createdStep, loading: false } : step,\r\n );\r\n\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: updatedSteps,\r\n },\r\n });\r\n }\r\n // Validate flow after creating step\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n const filteredSteps = currentState.workflow.stepsSchema.filter(\r\n (step) => step.id !== tempId,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: filteredSteps,\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to create step';\r\n setLoadingError(ctx, 'createStep', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'createStep')),\r\n );\r\n }\r\n\r\n @Action(UpdateStep)\r\n updateStep(ctx: StateContext<WorkflowStateModel>, action: UpdateStep) {\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'updateStep', message);\r\n return of(null);\r\n }\r\n\r\n if (state.workflow) {\r\n const updatedSteps = state.workflow.stepsSchema.map((step) =>\r\n step.id === action.stepId ? { ...step, loading: true } : step,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n stepsSchema: updatedSteps,\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'updateStep');\r\n\r\n const endpoint = action.isInitial ? 'initialStepSchema' : 'stepSchema';\r\n\r\n return this.http\r\n .put<\r\n Response<StepResponse>\r\n >(`${this.baseUrl}/${endpoint}/${action.stepId}`, action.payload)\r\n .pipe(\r\n tap((response) => {\r\n const updatedStep = response?.data;\r\n const currentState = ctx.getState();\r\n if (updatedStep && currentState.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: currentState.workflow.stepsSchema.map((step) =>\r\n step.id === updatedStep.id\r\n ? { ...updatedStep, loading: false }\r\n : step,\r\n ),\r\n },\r\n });\r\n }\r\n // Validate flow after updating step\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n const errorSteps = currentState.workflow.stepsSchema.map((step) =>\r\n step.id === action.stepId ? { ...step, loading: false } : step,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: errorSteps,\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to update step';\r\n setLoadingError(ctx, 'updateStep', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'updateStep')),\r\n );\r\n }\r\n\r\n @Action(CreateConnection)\r\n createConnection(\r\n ctx: StateContext<WorkflowStateModel>,\r\n action: CreateConnection,\r\n ) {\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'createConnection', message);\r\n return of(null);\r\n }\r\n\r\n const tempId = -Date.now();\r\n const tempConnection: any = {\r\n ...action.payload,\r\n id: tempId,\r\n loading: true,\r\n source: action.payload.sourceStepId,\r\n target: action.payload.targetStepId,\r\n };\r\n\r\n if (state.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n connections: [...state.workflow.connections, tempConnection],\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'createConnection');\r\n\r\n return this.http\r\n .post<\r\n Response<ConnectionResponse>\r\n >(`${this.baseUrl}/requestSchema/${workflowId}/connection`, action.payload)\r\n .pipe(\r\n tap((response) => {\r\n const createdConnection = response?.data;\r\n const currentState = ctx.getState();\r\n if (createdConnection && currentState.workflow) {\r\n const updatedConnections = currentState.workflow.connections.map(\r\n (conn) =>\r\n conn.id === tempId\r\n ? { ...createdConnection, loading: false }\r\n : conn,\r\n );\r\n\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: updatedConnections,\r\n },\r\n });\r\n }\r\n // Validate flow after creating connection\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n const filteredConnections =\r\n currentState.workflow.connections.filter(\r\n (conn) => conn.id !== tempId,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: filteredConnections,\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to create connection';\r\n setLoadingError(ctx, 'createConnection', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'createConnection')),\r\n );\r\n }\r\n\r\n @Action(UpdateConnection)\r\n updateConnection(\r\n ctx: StateContext<WorkflowStateModel>,\r\n action: UpdateConnection,\r\n ) {\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'updateConnection', message);\r\n return of(null);\r\n }\r\n\r\n if (state.workflow) {\r\n const updatedConnections = state.workflow.connections.map((conn) =>\r\n conn.id === action.connectionId ? { ...conn, loading: true } : conn,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n connections: updatedConnections,\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'updateConnection');\r\n\r\n return this.http\r\n .put<\r\n Response<ConnectionResponse>\r\n >(`${this.baseUrl}/stepSchemaConnection/${action.connectionId}`, action.payload)\r\n .pipe(\r\n tap((response) => {\r\n const updatedConnection = response?.data;\r\n const currentState = ctx.getState();\r\n if (updatedConnection && currentState.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: currentState.workflow.connections.map((conn) =>\r\n conn.id === updatedConnection.id\r\n ? { ...updatedConnection, loading: false }\r\n : conn,\r\n ),\r\n },\r\n });\r\n }\r\n // Validate flow after updating connection\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n const errorConnections = currentState.workflow.connections.map(\r\n (conn) =>\r\n conn.id === action.connectionId\r\n ? { ...conn, loading: false }\r\n : conn,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: errorConnections,\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to update connection';\r\n setLoadingError(ctx, 'updateConnection', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'updateConnection')),\r\n );\r\n }\r\n\r\n @Action(PublishWorkflow)\r\n publishWorkflow(\r\n ctx: StateContext<WorkflowStateModel>,\r\n action: PublishWorkflow,\r\n ) {\r\n startLoading(ctx, 'publishWorkflow');\r\n\r\n const state = ctx.getState();\r\n const workflowId = state.workflowId;\r\n\r\n if (!workflowId) {\r\n const message = 'Workflow ID is not set';\r\n setLoadingError(ctx, 'publishWorkflow', message);\r\n endLoading(ctx, 'publishWorkflow');\r\n return of(null);\r\n }\r\n\r\n return this.http\r\n .put<\r\n Response<PublishResponse>\r\n >(`${this.baseUrl}/requestSchema/${workflowId}/publish`, { IsPublished: action.isPublished })\r\n .pipe(\r\n tap((response) => {\r\n const publishedData = response?.data;\r\n if (publishedData && state.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n isPublished: publishedData.isPublished,\r\n isValid: publishedData.isValid,\r\n },\r\n });\r\n }\r\n }),\r\n catchError((error) => {\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to publish workflow';\r\n setLoadingError(ctx, 'publishWorkflow', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'publishWorkflow')),\r\n );\r\n }\r\n\r\n @Action(DeleteStep)\r\n deleteStep(ctx: StateContext<WorkflowStateModel>, action: DeleteStep) {\r\n const state = ctx.getState();\r\n\r\n if (state.workflow) {\r\n // Mark step as loading\r\n const updatedSteps = state.workflow.stepsSchema.map((step) =>\r\n step.id == action.stepId ? { ...step, loading: true } : step,\r\n );\r\n\r\n // Filter out all connections related to this step\r\n const updatedConnections = state.workflow.connections.filter(\r\n (conn) => conn.source != action.stepId && conn.target != action.stepId,\r\n );\r\n\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n stepsSchema: updatedSteps,\r\n connections: updatedConnections,\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'deleteStep');\r\n\r\n return this.http\r\n .delete<Response<boolean>>(`${this.baseUrl}/stepSchema/${action.stepId}`)\r\n .pipe(\r\n tap(() => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: currentState.workflow.stepsSchema.filter(\r\n (step) => step.id != action.stepId,\r\n ),\r\n },\r\n });\r\n }\r\n // Validate flow after deleting step\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n // Restore step loading state\r\n const errorSteps = currentState.workflow.stepsSchema.map((step) =>\r\n step.id == action.stepId ? { ...step, loading: false } : step,\r\n );\r\n\r\n // Restore connections related to this step from original state\r\n const relatedConnections =\r\n state.workflow?.connections.filter(\r\n (conn) =>\r\n conn.source == action.stepId || conn.target == action.stepId,\r\n ) || [];\r\n\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n stepsSchema: errorSteps,\r\n connections: [\r\n ...currentState.workflow.connections,\r\n ...relatedConnections,\r\n ],\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ?? error?.message ?? 'Failed to delete step';\r\n setLoadingError(ctx, 'deleteStep', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'deleteStep')),\r\n );\r\n }\r\n\r\n @Action(DeleteConnection)\r\n deleteConnection(\r\n ctx: StateContext<WorkflowStateModel>,\r\n action: DeleteConnection,\r\n ) {\r\n const state = ctx.getState();\r\n\r\n if (state.workflow) {\r\n const updatedConnections = state.workflow.connections.map((conn) =>\r\n conn.id == action.connectionId ? { ...conn, loading: true } : conn,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...state.workflow,\r\n connections: updatedConnections,\r\n },\r\n });\r\n }\r\n\r\n startLoading(ctx, 'deleteConnection');\r\n\r\n return this.http\r\n .delete<\r\n Response<boolean>\r\n >(`${this.baseUrl}/stepSchemaConnection/${action.connectionId}`)\r\n .pipe(\r\n tap(() => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: currentState.workflow.connections.filter(\r\n (conn) => conn.id != action.connectionId,\r\n ),\r\n },\r\n });\r\n }\r\n // Validate flow after deleting connection\r\n ctx.dispatch(new ValidateFlow());\r\n }),\r\n catchError((error) => {\r\n const currentState = ctx.getState();\r\n if (currentState.workflow) {\r\n const errorConnections = currentState.workflow.connections.map(\r\n (conn) =>\r\n conn.id == action.connectionId\r\n ? { ...conn, loading: false }\r\n : conn,\r\n );\r\n ctx.patchState({\r\n workflow: {\r\n ...currentState.workflow,\r\n connections: errorConnections,\r\n },\r\n });\r\n }\r\n\r\n const message =\r\n error?.error?.message ??\r\n error?.message ??\r\n 'Failed to delete connection';\r\n setLoadingError(ctx, 'deleteConnection', message);\r\n return of(null);\r\n }),\r\n finalize(() => endLoading(ctx, 'deleteConnection')),\r\n );\r\n }\r\n}\r\n\r\nfunction normalizeWorkflowRoles(\r\n data: unknown,\r\n): Array<RoleDefinition | RoleGroupDefinition> {\r\n if (!Array.isArray(data)) {\r\n return [];\r\n }\r\n\r\n if (data.some((item: any) => Array.isArray(item?.roles))) {\r\n return data\r\n .map((group: any) => ({\r\n label: resolveWorkflowRoleGroupLabel(group),\r\n items: Array.isArray(group?.roles)\r\n ? group.roles.map(normalizeWorkflowRole).filter(Boolean)\r\n : [],\r\n }))\r\n .filter((group) => group.items.length > 0);\r\n }\r\n\r\n return data.map(normalizeWorkflowRole).filter(Boolean);\r\n}\r\n\r\nfunction normalizeWorkflowRole(role: any): RoleDefinition {\r\n const value = role?.value ?? role?.id;\r\n return {\r\n ...role,\r\n id: role?.id ?? value,\r\n value,\r\n name: normalizeWorkflowRoleName(role?.name),\r\n };\r\n}\r\n\r\nfunction normalizeWorkflowRoleName(\r\n name: unknown,\r\n): string | Record<string, string> {\r\n if (name && typeof name === 'object') {\r\n return name as Record<string, string>;\r\n }\r\n\r\n const label = typeof name === 'string' ? name : '';\r\n return {\r\n display: label,\r\n en: label,\r\n ar: label,\r\n };\r\n}\r\n\r\nfunction resolveWorkflowRoleGroupLabel(group: any): string {\r\n const level = group?.level;\r\n if (typeof level === 'string') {\r\n return level;\r\n }\r\n\r\n if (level?.display) {\r\n return level.display;\r\n }\r\n\r\n if (level?.en) {\r\n return level.en;\r\n }\r\n\r\n if (level?.ar) {\r\n return level.ar;\r\n }\r\n\r\n return group?.levelKey ?? group?.scopeType ?? 'Roles';\r\n}\r\n","import { Injectable, computed, inject } from '@angular/core';\r\nimport { select, Store } from '@ngxs/store';\r\nimport type { Observable } from 'rxjs';\r\n\r\nimport type {\r\n ConnectionPayload,\r\n FormulaProperty,\r\n GroupDefinition,\r\n RoleGroupDefinition,\r\n RoleDefinition,\r\n StepPayload,\r\n StepSchema,\r\n WorkflowConnection,\r\n WorkflowListItem,\r\n WorkflowLoadingName,\r\n WorkflowSchema,\r\n WorkflowStepSchema,\r\n} from './workflow.model';\r\nimport {\r\n CreateConnection,\r\n CreateStep,\r\n DeleteConnection,\r\n DeleteStep,\r\n GetFormulaProperties,\r\n GetGroups,\r\n GetRolesForModule,\r\n GetStep,\r\n GetWorkflow,\r\n GetWorkflows,\r\n PublishWorkflow,\r\n SetModuleInfo,\r\n UpdateConnection,\r\n UpdateStep,\r\n ValidateFlow,\r\n} from './workflow.actions';\r\nimport { WorkflowState } from './workflow.state';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class WorkflowFacade {\r\n private readonly store = inject(Store);\r\n\r\n readonly workflowId = select<string | number | null>(\r\n WorkflowState.workflowId,\r\n );\r\n readonly moduleType = select<string | null>(WorkflowState.moduleType);\r\n readonly moduleId = select<string | number | null>(WorkflowState.moduleId);\r\n readonly workflows = select<WorkflowListItem[]>(WorkflowState.workflows);\r\n readonly workflow = select<WorkflowSchema | null>(WorkflowState.workflow);\r\n readonly formulaProperties = select<FormulaProperty[]>(\r\n WorkflowState.formulaProperties,\r\n );\r\n readonly groups = select<GroupDefinition[]>(WorkflowState.groups);\r\n readonly roles = select<Array<RoleDefinition | RoleGroupDefinition>>(\r\n WorkflowState.roles,\r\n );\r\n readonly selectedStep = select<StepSchema | null>(WorkflowState.selectedStep);\r\n readonly isFlowValid = select<boolean | null>(WorkflowState.isFlowValid);\r\n readonly steps = select<WorkflowStepSchema[]>(WorkflowState.stepsSchema);\r\n readonly connections = select<WorkflowConnection[]>(\r\n WorkflowState.connections,\r\n );\r\n\r\n isLoading(loadingName: WorkflowLoadingName) {\r\n const loadingFactory = select<(name: WorkflowLoadingName) => boolean>(\r\n WorkflowState.isLoadingFactory,\r\n );\r\n return computed(() => loadingFactory()(loadingName));\r\n }\r\n\r\n error(loadingName: WorkflowLoadingName) {\r\n const errorFactory = select<(name: WorkflowLoadingName) => string | null>(\r\n WorkflowState.errorFactory,\r\n );\r\n return computed(() => errorFactory()(loadingName));\r\n }\r\n setModuleInfo(\r\n moduleType: string,\r\n moduleId: string | number,\r\n parentModuleType?: string,\r\n parentModuleId?: string | number,\r\n parentPath?: string,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(\r\n new SetModuleInfo(\r\n moduleType,\r\n moduleId,\r\n parentModuleType,\r\n parentModuleId,\r\n parentPath,\r\n ),\r\n );\r\n }\r\n\r\n loadWorkflows(): Observable<unknown> {\r\n return this.store.dispatch(new GetWorkflows());\r\n }\r\n\r\n selectWorkflow(workflowId: string | number): Observable<unknown> {\r\n return this.store.dispatch(new GetWorkflow(workflowId));\r\n }\r\n\r\n loadWorkflow(): Observable<unknown> {\r\n return this.loadWorkflows();\r\n }\r\n\r\n loadFormulaProperties(): Observable<unknown> {\r\n return this.store.dispatch(new GetFormulaProperties());\r\n }\r\n\r\n loadGroups(): Observable<unknown> {\r\n return this.store.dispatch(new GetGroups());\r\n }\r\n\r\n loadRolesForModule(): Observable<unknown> {\r\n return this.store.dispatch(new GetRolesForModule());\r\n }\r\n\r\n loadStep(stepId: string | number): Observable<unknown> {\r\n return this.store.dispatch(new GetStep(stepId));\r\n }\r\n\r\n validateFlow(): Observable<unknown> {\r\n return this.store.dispatch(new ValidateFlow());\r\n }\r\n\r\n createStep(payload: StepPayload): Observable<unknown> {\r\n return this.store.dispatch(new CreateStep(payload));\r\n }\r\n\r\n updateStep(\r\n stepId: string | number,\r\n payload: StepPayload,\r\n isInitial?: boolean,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(new UpdateStep(stepId, payload, isInitial));\r\n }\r\n\r\n createConnection(payload: ConnectionPayload): Observable<unknown> {\r\n return this.store.dispatch(new CreateConnection(payload));\r\n }\r\n\r\n updateConnection(\r\n connectionId: string | number,\r\n payload: ConnectionPayload,\r\n ): Observable<unknown> {\r\n return this.store.dispatch(new UpdateConnection(connectionId, payload));\r\n }\r\n\r\n publishWorkflow(isPublished: boolean): Observable<unknown> {\r\n return this.store.dispatch(new PublishWorkflow(isPublished));\r\n }\r\n\r\n deleteStep(stepId: string | number): Observable<unknown> {\r\n return this.store.dispatch(new DeleteStep(stepId));\r\n }\r\n\r\n deleteConnection(connectionId: string | number): Observable<unknown> {\r\n return this.store.dispatch(new DeleteConnection(connectionId));\r\n }\r\n}\r\n","// shared/models/api.model.ts\r\n\r\nexport interface Response<T> {\r\n endpoint: string;\r\n status: number;\r\n code: number;\r\n locale: string;\r\n message?: string | null;\r\n errors?: any | null;\r\n data: T;\r\n cacheSession?: string;\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { NotificationTemplate } from '@masterteam/notification';\r\nimport { Card } from '@masterteam/components/card';\r\n\r\n@Component({\r\n selector: 'mt-workflow-notifications-drawer',\r\n imports: [Card, NotificationTemplate, Card],\r\n templateUrl: './workflow-notifications-drawer.html',\r\n styleUrl: './workflow-notifications-drawer.css',\r\n})\r\nexport class WorkflowNotificationsDrawer {}\r\n","<div class=\"overflow-hidden h-full w-full\">\r\n <div\r\n class=\"flex-1 flex justify-center items-start p-4 h-full overflow-y-auto\"\r\n >\r\n <div class=\"w-2/3\">\r\n <mt-card headless>\r\n <mt-notification-template />\r\n </mt-card>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, inject } from '@angular/core';\r\nimport { FormBuilder } from '@masterteam/form-builder';\r\nimport { ModalService } from '@masterteam/components/modal';\r\n\r\n@Component({\r\n selector: 'mt-workflow-form-drawer',\r\n imports: [FormBuilder],\r\n templateUrl: './workflow-form-drawer.html',\r\n styleUrl: './workflow-form-drawer.css',\r\n})\r\nexport class WorkflowFormDrawer {\r\n readonly modal = inject(ModalService);\r\n}\r\n","<div [class]=\"modal.contentClass + ' p-4'\">\r\n <mt-form-builder\r\n class=\"flex-1\"\r\n canvasStyleClass=\"!w-full\"\r\n mode=\"manageProperties\"\r\n />\r\n</div>\r\n","import {\r\n Component,\r\n inject,\r\n linkedSignal,\r\n signal,\r\n computed,\r\n effect,\r\n} from '@angular/core';\r\nimport { DynamicFormConfig } from '@masterteam/components';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { SBAction, StructureBuilder } from '@masterteam/structure-builder';\r\nimport { WorkflowFacade, WorkflowStepSchema } from '../../store/workflow';\r\nimport { CellChangeEvent } from '@masterteam/components/table';\r\nimport { Tabs } from '@masterteam/components/tabs';\r\nimport { FormControl, ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { DynamicForm } from '@masterteam/forms/dynamic-form';\r\nimport { ColumnDef } from '@masterteam/components/table';\r\nimport { Skeleton } from 'primeng/skeleton';\r\nimport { ToggleField } from '@masterteam/components/toggle-field';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TranslocoModule, TranslocoService } from '@jsverse/transloco';\r\nimport { ConfirmationService } from '@masterteam/components/confirmation';\r\nimport {\r\n NotificationTemplate,\r\n NotificationFacade,\r\n} from '@masterteam/notification';\r\nimport { ModalService } from '@masterteam/components/modal';\r\nimport { SelectField } from '@masterteam/components/select-field';\r\nimport { WorkflowNotificationsDrawer } from './workflow-notifications-drawer/workflow-notifications-drawer';\r\nimport { FormBuilderFacade } from '@masterteam/form-builder';\r\nimport { WorkflowFormDrawer } from './workflow-form-drawer/workflow-form-drawer';\r\n\r\n@Component({\r\n selector: 'mt-workflow-builder',\r\n imports: [\r\n StructureBuilder,\r\n Card,\r\n Tabs,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n DynamicForm,\r\n Skeleton,\r\n ToggleField,\r\n Button,\r\n TranslocoModule,\r\n NotificationTemplate,\r\n SelectField,\r\n ],\r\n templateUrl: './workflow-builder.html',\r\n styles: [],\r\n host: {},\r\n})\r\nexport class WorkflowBuilder {\r\n private workflowFacade = inject(WorkflowFacade);\r\n private notificationFacade = inject(NotificationFacade);\r\n private formBuilderFacade = inject(FormBuilderFacade);\r\n private transloco = inject(TranslocoService);\r\n readonly modal: ModalService = inject(ModalService);\r\n // Main tabs for Workflow and Notification\r\n mainTab = signal<string>('workflow');\r\n mainTabsList = [\r\n {\r\n label: this.transloco.translate('workflow.builder.workflow'),\r\n value: 'workflow',\r\n },\r\n {\r\n label: this.transloco.translate('workflow.builder.notification'),\r\n value: 'notification',\r\n },\r\n ];\r\n groups = this.workflowFacade.groups;\r\n roles = this.workflowFacade.roles;\r\n hasGroupedRoles = computed(() =>\r\n this.roles().some((role: any) => Array.isArray(role?.items)),\r\n );\r\n workflows = this.workflowFacade.workflows;\r\n workflow = this.workflowFacade.workflow;\r\n loading = this.workflowFacade.isLoading('getWorkflow');\r\n loadingStep = this.workflowFacade.isLoading('getStep');\r\n isFlowValid = this.workflowFacade.isFlowValid;\r\n\r\n selectedStep = this.workflowFacade.selectedStep;\r\n selectedWorkflowId = computed(() => this.workflow()?.id);\r\n connectionFormulaSchemaId = computed(() => this.workflow()?.id);\r\n hasMultipleWorkflows = computed(() => this.workflows().length > 1);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n\r\n selectedTab = signal<any>('tab1');\r\n nodeFields = signal<any>({\r\n name: 'name.display',\r\n });\r\n nodeFormControl = new FormControl();\r\n isPublished = signal<boolean>(false);\r\n isPublishDisabled = computed(() => !this.isFlowValid());\r\n\r\n isEditingInitialNode = signal<boolean>(false);\r\n\r\n // Properties table data - writable signal that can be updated when loading step details\r\n private _propertiesTableData = signal<any[]>([]);\r\n\r\n // Computed that initializes from workflow properties\r\n propertiesTableData = computed(() => {\r\n const currentData = this._propertiesTableData();\r\n if (currentData.length > 0) {\r\n return currentData;\r\n }\r\n\r\n const properties = this.workflow()?.properties || [];\r\n return properties.map((prop) => ({\r\n id: prop.id,\r\n name: prop.property.name,\r\n isVisible: false,\r\n isEditable: false,\r\n _original: prop, // Keep original for reference\r\n }));\r\n });\r\n\r\n // Table columns configuration\r\n propertiesColumns = signal<ColumnDef[]>([\r\n {\r\n key: 'name',\r\n label: this.transloco.translate('workflow.builder.columnName'),\r\n type: 'text',\r\n },\r\n {\r\n key: 'isVisible',\r\n label: this.transloco.translate('workflow.builder.columnVisible'),\r\n type: 'boolean',\r\n },\r\n {\r\n key: 'isEditable',\r\n label: this.transloco.translate('workflow.builder.columnEditable'),\r\n type: 'boolean',\r\n },\r\n ]);\r\n\r\n // Dynamic tabs list - notification tab only shown for non-initial nodes\r\n tabsList = computed(() => {\r\n const baseTabs = [\r\n {\r\n label: this.transloco.translate('workflow.builder.tabSettings'),\r\n value: 'tab1',\r\n },\r\n {\r\n label: this.transloco.translate('workflow.builder.tabProperties'),\r\n value: 'tab2',\r\n },\r\n ];\r\n\r\n // Add notification tab only for non-initial nodes\r\n if (!this.isEditingInitialNode()) {\r\n baseTabs.push({\r\n label: this.transloco.translate('workflow.builder.notification'),\r\n value: 'tab3',\r\n });\r\n }\r\n\r\n return baseTabs;\r\n });\r\n availableNodes = [\r\n {\r\n id: 'FormStep',\r\n label: this.transloco.translate('workflow.builder.newStep'),\r\n name: {\r\n en: 'Form Step',\r\n ar: 'خطوة النموذج',\r\n },\r\n targetType: '1',\r\n icon: 'general.plus-circle',\r\n color: '#000000',\r\n },\r\n ];\r\n\r\n // Base form sections - defined once for reusability\r\n private readonly baseNameFields = {\r\n key: 'settings',\r\n type: 'none',\r\n bodyClass: 'space-y-2',\r\n fields: [\r\n {\r\n key: 'name.en',\r\n label: this.transloco.translate('workflow.builder.nameEnglish'),\r\n placeholder: this.transloco.translate(\r\n 'workflow.builder.enterNameEnglish',\r\n ),\r\n cssClass: 'w-full',\r\n required: true,\r\n },\r\n {\r\n key: 'name.ar',\r\n label: this.transloco.translate('workflow.builder.nameArabic'),\r\n placeholder: this.transloco.translate(\r\n 'workflow.builder.enterNameArabic',\r\n ),\r\n cssClass: 'w-full',\r\n required: true,\r\n },\r\n ],\r\n };\r\n\r\n // Approver section with dynamic options\r\n private readonly approverSection = computed(() => ({\r\n key: 'approver',\r\n type: 'header',\r\n label: this.transloco.translate('workflow.builder.approver'),\r\n headerClass:\r\n 'rounded-t-xl bg-slate-50 px-4 py-3 text-sm font-semibold text-slate-900 border border-slate-200 border-b-0',\r\n bodyClass: 'rounded-b-xl border border-slate-200 p-4 space-y-3',\r\n cssClass: ' ',\r\n fields: [\r\n {\r\n key: 'targetType',\r\n type: 'radio-button',\r\n orientation: 'horizontal',\r\n defaultValue: '1',\r\n options: [\r\n {\r\n label: this.transloco.translate('workflow.builder.group'),\r\n value: '1',\r\n },\r\n {\r\n label: this.transloco.translate('workflow.builder.role'),\r\n value: '2',\r\n },\r\n ],\r\n optionLabel: 'label',\r\n optionValue: 'value',\r\n placeholder: 'Enter Role',\r\n cssClass: 'flex items-center gap-6 text-sm text-slate-700',\r\n required: true,\r\n },\r\n {\r\n key: 'group',\r\n label: 'Select',\r\n placeholder: this.transloco.translate('workflow.builder.selectGroup'),\r\n cssClass: 'mt-2 pt-3 border-t border-slate-200 w-full',\r\n required: true,\r\n type: 'select',\r\n options: this.groups(),\r\n optionLabel: 'name.display',\r\n optionValue: 'id',\r\n relations: [{ key: 'targetType', value: '1', action: 'show' }],\r\n },\r\n {\r\n key: 'role',\r\n label: 'Select',\r\n placeholder: 'Enter target value',\r\n cssClass: 'mt-2 pt-3 border-t border-slate-200 w-full',\r\n required: true,\r\n type: 'select',\r\n options: this.roles(),\r\n group: this.hasGroupedRoles(),\r\n optionGroupLabel: 'label',\r\n optionGroupChildren: 'items',\r\n optionLabel: 'name.display',\r\n optionValue: 'value',\r\n relations: [{ key: 'targetType', value: '2', action: 'show' }],\r\n },\r\n ],\r\n }));\r\n\r\n private readonly slaSection = {\r\n key: 'slaSection',\r\n type: 'none',\r\n bodyClass: 'space-y-1',\r\n fields: [\r\n {\r\n key: 'sla',\r\n label: this.transloco.translate('workflow.builder.sla'),\r\n placeholder: this.transloco.translate('workflow.builder.enterSla'),\r\n cssClass: 'w-full',\r\n required: true,\r\n },\r\n ],\r\n } as const;\r\n\r\n // Dynamic form configuration using computed signal\r\n // Automatically rebuilds when isEditingInitialNode changes\r\n nodeForm = linkedSignal<DynamicFormConfig>(() => {\r\n const sections: any[] = [this.baseNameFields];\r\n\r\n // Conditionally include approver and SLA sections based on isEditingInitialNode\r\n // Initial nodes only show name fields\r\n if (!this.isEditingInitialNode()) {\r\n sections.push(this.approverSection());\r\n sections.push(this.slaSection);\r\n }\r\n\r\n return {\r\n sections,\r\n layout: {},\r\n };\r\n });\r\n\r\n // Computed signal for form state info - useful for debugging or UI indicators\r\n formStateInfo = computed(() => ({\r\n isInitialNode: this.isEditingInitialNode(),\r\n sectionsCount: this.nodeForm().sections.length,\r\n hasApproverSection: !this.isEditingInitialNode(),\r\n hasSlaSection: !this.isEditingInitialNode(),\r\n formMode: this.isEditingInitialNode() ? 'initial-node' : 'standard-node',\r\n }));\r\n\r\n // Sample connection form configuration\r\n connectionForm = signal<DynamicFormConfig>({\r\n sections: [\r\n {\r\n key: 'basic',\r\n label: 'Basic Information',\r\n type: 'none',\r\n cssClass: 'p-4',\r\n columns: 2,\r\n order: 1,\r\n fields: [\r\n {\r\n key: 'priority',\r\n label: 'Priority',\r\n },\r\n ],\r\n },\r\n ],\r\n });\r\n\r\n // Nodes currently in the flow (with positions) - linked to store via selectors\r\n steps = computed(() => {\r\n return this.workflowFacade.steps().map((step) => ({\r\n ...step,\r\n color: '#000000',\r\n }));\r\n });\r\n\r\n // Connections between nodes (matching your design) - linked to store via selectors\r\n connections = computed(() => {\r\n return this.workflowFacade.connections().map((connection) => ({\r\n ...connection,\r\n from: connection.source,\r\n to: connection.target,\r\n }));\r\n });\r\n\r\n // Node Actions\r\n nodeActions = signal([\r\n {\r\n key: 'edit',\r\n icon: 'general.edit-05',\r\n variant: 'outlined',\r\n size: 'small',\r\n tooltip: 'Edit',\r\n },\r\n {\r\n key: 'delete',\r\n icon: 'general.trash-01',\r\n variant: 'outlined',\r\n size: 'small',\r\n severity: 'danger',\r\n tooltip: 'Delete',\r\n condition: (node: WorkflowStepSchema) => !node.isInitial,\r\n },\r\n ]);\r\n\r\n readonly showHideControl = new FormControl(false);\r\n\r\n constructor() {\r\n // Effect to initialize isPublished from workflow.isPublished\r\n effect(() => {\r\n const workflow = this.workflow();\r\n if (workflow && workflow.isPublished !== undefined) {\r\n this.isPublished.set(workflow.isPublished);\r\n }\r\n });\r\n\r\n // Effect to watch selectedStep and patch form when it changes\r\n effect(() => {\r\n const step = this.selectedStep();\r\n\r\n if (step) {\r\n // Patch form with complete step data including targetType and targetValue\r\n this.nodeFormControl.patchValue({\r\n name: step.name,\r\n targetType: step.targetType || '1',\r\n group: step.targetType === '1' ? parseInt(step.targetValue!) : null,\r\n role: step.targetType === '2' ? step.targetValue : null,\r\n sla: step.sla,\r\n });\r\n\r\n // Update properties table with step's property permissions\r\n const properties = this.workflow()?.properties || [];\r\n const updatedTableData = properties.map((prop) => {\r\n const stepProperty = step.properties?.find(\r\n (p) => p.propertyId === prop.id,\r\n );\r\n\r\n return {\r\n id: prop.id,\r\n name: prop?.property?.name,\r\n isVisible: stepProperty?.isRead || false,\r\n isEditable: stepProperty?.isWrite || false,\r\n _original: prop,\r\n };\r\n });\r\n\r\n this._propertiesTableData.set(updatedTableData);\r\n this.showHideControl.patchValue(step.hasNotification ?? false);\r\n }\r\n });\r\n }\r\n\r\n // Handle main tab change (Workflow/Notification)\r\n onMainTabChange(tab: string): void {\r\n this.mainTab.set(tab);\r\n if (tab === 'notification') {\r\n const workflowId = this.workflow()?.id;\r\n if (workflowId) {\r\n this.notificationFacade.setModuleInfo('request', workflowId);\r\n this.notificationFacade.loadAllData();\r\n }\r\n }\r\n }\r\n\r\n // Handle node dialog tab change (Settings/Properties/Notification)\r\n onNodeDialogTabChange(tab: string): void {\r\n this.selectedTab.set(tab);\r\n }\r\n\r\n onPublishToggle(isPublished: boolean): void {\r\n // Prevent publishing if workflow is not valid\r\n if (isPublished && !this.isFlowValid()) {\r\n this.isPublished.set(false);\r\n return;\r\n }\r\n\r\n this.workflowFacade.publishWorkflow(isPublished).subscribe({\r\n error: () => {\r\n // Revert the toggle on error\r\n this.isPublished.set(!isPublished);\r\n },\r\n });\r\n }\r\n\r\n onWorkflowChange(workflowId: number): void {\r\n this.workflowFacade.selectWorkflow(workflowId);\r\n }\r\n\r\n clearForm(): void {\r\n // Reset isEditingInitialNode flag\r\n this.isEditingInitialNode.set(false);\r\n\r\n // Reset form to default values\r\n this.nodeFormControl.reset({\r\n name: { en: '', ar: '' },\r\n targetType: '1',\r\n group: null,\r\n role: null,\r\n sla: 0,\r\n });\r\n\r\n // Reset properties table to default state (all unchecked)\r\n const properties = this.workflow()?.properties || [];\r\n const resetTableData = properties.map((prop) => ({\r\n id: prop.id,\r\n name: prop?.property?.name,\r\n isVisible: false,\r\n isEditable: false,\r\n _original: prop,\r\n }));\r\n\r\n this._propertiesTableData.set(resetTableData);\r\n\r\n // Reset toggle controls\r\n this.showHideControl.patchValue(false);\r\n\r\n // Reset to first tab\r\n this.selectedTab.set('tab1');\r\n }\r\n\r\n onPropertyCellChange(event: CellChangeEvent): void {\r\n if (event.type !== 'boolean') return;\r\n\r\n switch (event.column) {\r\n case 'isEditable':\r\n if (event.value) event.row.isVisible = true;\r\n break;\r\n case 'isVisible':\r\n if (!event.value) event.row.isEditable = false;\r\n break;\r\n }\r\n }\r\n\r\n onStructureAction(event: SBAction) {\r\n switch (event.action) {\r\n case 'createNode':\r\n if (event.data) {\r\n // Get form values\r\n const formValue = this.nodeFormControl.value;\r\n\r\n // Get selected properties with isVisible and isEditable flags\r\n const propertiesPayload = this.propertiesTableData()\r\n .filter((prop) => prop.isVisible || prop.isEditable)\r\n .map((prop) => ({\r\n PropertyId: prop.id,\r\n isRead: prop.isVisible,\r\n isWrite: prop.isEditable,\r\n }));\r\n\r\n // Prepare step payload\r\n const stepPayload = {\r\n name: formValue.name,\r\n targetType: formValue.targetType,\r\n targetValue:\r\n formValue.targetType === '1' ? formValue.group : formValue.role,\r\n sla: formValue.sla || 0,\r\n properties: propertiesPayload,\r\n hasNotification: this.showHideControl.value,\r\n hasForm: true,\r\n };\r\n\r\n // Create step via facade\r\n this.workflowFacade.createStep(stepPayload);\r\n }\r\n break;\r\n case 'startUpdating':\r\n if (event.data) {\r\n this.clearForm();\r\n\r\n const stepId = event.data.id;\r\n\r\n // Set the flag based on whether node is initial\r\n // This will trigger nodeForm to rebuild automatically via linkedSignal\r\n this.isEditingInitialNode.set(!!event.data.isInitial);\r\n\r\n // Load step data\r\n this.workflowFacade.loadStep(stepId);\r\n if (stepId) {\r\n this.notificationFacade.setModuleInfo('step', stepId);\r\n this.notificationFacade.loadAllData();\r\n\r\n const workflowId = this.workflow()?.id;\r\n if (workflowId) {\r\n this.formBuilderFacade.setModuleInfo(\r\n 'processstep',\r\n stepId,\r\n 'processschema',\r\n workflowId,\r\n );\r\n this.formBuilderFacade.getFormConfiguration();\r\n }\r\n }\r\n }\r\n break;\r\n case 'startCreating':\r\n // Reset form and properties for new step\r\n this.clearForm();\r\n break;\r\n case 'updateNode':\r\n if (event.data) {\r\n // Get form values\r\n const formValue = this.nodeFormControl.value;\r\n const stepId = event.data.id;\r\n const isInitial = !!event.data.isInitial;\r\n\r\n // Get selected properties with isVisible and isEditable flags\r\n const propertiesPayload = this.propertiesTableData()\r\n .filter((prop) => prop.isVisible || prop.isEditable)\r\n .map((prop) => ({\r\n PropertyId: prop.id,\r\n isRead: prop.isVisible,\r\n isWrite: prop.isEditable,\r\n }));\r\n\r\n // Prepare step payload\r\n const stepPayload = {\r\n name: formValue.name,\r\n targetType: formValue.targetType,\r\n targetValue:\r\n formValue.targetType === '1' ? formValue.group : formValue.role,\r\n sla: formValue.sla || event.data.sla,\r\n properties: propertiesPayload,\r\n hasNotification: this.showHideControl.value,\r\n hasForm: true,\r\n };\r\n\r\n // Update step via facade, passing isInitial flag\r\n this.workflowFacade.updateStep(stepId, stepPayload, isInitial);\r\n }\r\n break;\r\n\r\n case 'deleteNode':\r\n if (event.data) {\r\n const nodeIdToDelete = event.data.id;\r\n this.confirmationService.confirmDelete({\r\n type: 'dialog',\r\n accept: () => {\r\n this.workflowFacade.deleteStep(nodeIdToDelete);\r\n },\r\n reject: () => {},\r\n });\r\n }\r\n break;\r\n\r\n case 'createConnection':\r\n if (event.data) {\r\n // Create connection in store\r\n const connectionPayload = {\r\n sourceStepId: event.data.from,\r\n targetStepId: event.data.to,\r\n priority: event.data.priority ?? 1,\r\n formula: event.data.formula ?? null,\r\n };\r\n this.workflowFacade.createConnection(connectionPayload);\r\n }\r\n break;\r\n\r\n case 'updateConnection':\r\n if (event.data) {\r\n // Update connection in store\r\n const connectionId = event.data.id;\r\n const updatePayload = {\r\n sourceStepId: event.data.from,\r\n targetStepId: event.data.to,\r\n priority: event.data.priority ?? 1,\r\n formula: event.data.formula ?? null,\r\n };\r\n this.workflowFacade.updateConnection(connectionId, updatePayload);\r\n }\r\n break;\r\n\r\n case 'deleteConnection':\r\n if (event.data) {\r\n const connectionIdToDelete = event.data.id;\r\n // Delete connection from store\r\n this.workflowFacade.deleteConnection(connectionIdToDelete);\r\n }\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n openNotificationsModal() {\r\n const notificationsDialogRef = this.modal.openModal(\r\n WorkflowNotificationsDrawer,\r\n 'drawer',\r\n {\r\n header: this.transloco.translate('workflow.builder.notification'),\r\n styleClass: '!w-[calc(100%-25rem)] !absolute',\r\n position: 'start',\r\n modal: true,\r\n appendTo: '#page-content',\r\n inputValues: {},\r\n },\r\n );\r\n\r\n notificationsDialogRef.onClose.subscribe(\r\n (result: { saved: boolean; conditionalDisplayFormula?: string }) => {\r\n if (result?.saved) {\r\n }\r\n },\r\n );\r\n }\r\n\r\n openFormModal() {\r\n const formDialogRef = this.modal.openModal(WorkflowFormDrawer, 'drawer', {\r\n header: this.transloco.translate('workflow.builder.form'),\r\n styleClass: '!w-[calc(100%-25rem)] !absolute',\r\n position: 'start',\r\n modal: true,\r\n appendTo: '#page-content',\r\n inputValues: {},\r\n });\r\n\r\n formDialogRef.onClose.subscribe(() => {});\r\n }\r\n}\r\n","<ng-container *transloco=\"let t; prefix: 'workflow.builder'\">\r\n <div class=\"h-full flex flex-col\" id=\"workflow-builder-card\">\r\n <!-- Main Tabs at top center -->\r\n <div class=\"flex justify-center w-full py-2\">\r\n <mt-tabs\r\n [active]=\"mainTab()\"\r\n (activeChange)=\"onMainTabChange($event)\"\r\n [options]=\"mainTabsList\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n </div>\r\n @switch (mainTab()) {\r\n @case (\"workflow\") {\r\n @if (!loading()) {\r\n <mt-structure-builder\r\n class=\"flex-1\"\r\n [availableNodes]=\"availableNodes\"\r\n [connectionForm]=\"connectionForm()\"\r\n [connectionFormulaSchemaId]=\"connectionFormulaSchemaId()\"\r\n [nodeActions]=\"nodeActions()\"\r\n [nodes]=\"steps()\"\r\n [connections]=\"connections()\"\r\n (action)=\"onStructureAction($event)\"\r\n [addModalType]=\"'drawer'\"\r\n [addModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [updateModalStyleClass]=\"'!w-[25rem] !absolute !shadow-none'\"\r\n [addModalHeader]=\"'workflow.builder.addStep' | transloco\"\r\n [updateModalHeader]=\"'workflow.builder.editStep' | transloco\"\r\n [appendTo]=\"'page-content'\"\r\n [nodeFields]=\"nodeFields()\"\r\n [availableTabsClass]=\"\r\n hasMultipleWorkflows() ? 'absolute top-30 start-4 z-1 w-64' : ''\r\n \"\r\n [layoutDirection]=\"'LR'\"\r\n >\r\n <div flowContent>\r\n @if (hasMultipleWorkflows()) {\r\n <div class=\"absolute top-4 start-4 z-10\">\r\n <mt-card class=\"w-64\">\r\n <!-- <div class=\"flex items-center gap-3\">\r\n <label class=\"text-lg font-medium\">{{\r\n 'workflow.builder.selectWorkflow' | transloco\r\n }}</label>\r\n </div> -->\r\n <mt-select-field\r\n [options]=\"workflows()\"\r\n optionLabel=\"name.display\"\r\n optionValue=\"id\"\r\n [ngModel]=\"selectedWorkflowId()\"\r\n (ngModelChange)=\"onWorkflowChange($event)\"\r\n class=\"mt-2\"\r\n />\r\n </mt-card>\r\n </div>\r\n }\r\n <div class=\"absolute top-4 end-4 z-10\">\r\n <div class=\"flex flex-col gap-2 w-80\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-10\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"dev.dataflow-01\"\r\n />\r\n <label>{{\r\n \"workflow.builder.enableWorkflow\" | transloco\r\n }}</label>\r\n </div>\r\n <mt-toggle-field\r\n [ngModel]=\"isPublished()\"\r\n (ngModelChange)=\"onPublishToggle($event)\"\r\n [disabled]=\"isPublishDisabled()\"\r\n ></mt-toggle-field>\r\n </div>\r\n </mt-card>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-template\r\n #nodeDialog\r\n let-close=\"close\"\r\n let-save=\"save\"\r\n let-node=\"node\"\r\n let-drawerController=\"drawerController\"\r\n >\r\n <div class=\"p-4\">\r\n @if (loadingStep()) {\r\n <!-- Loading skeleton -->\r\n <div class=\"space-y-4\">\r\n <!-- Tabs skeleton -->\r\n <div class=\"flex gap-2 mb-4\">\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <!-- Form fields skeleton -->\r\n <div class=\"space-y-4\">\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"8rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"10rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"3rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"6rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n <div>\r\n <p-skeleton\r\n width=\"4rem\"\r\n height=\"1rem\"\r\n styleClass=\"mb-2\"\r\n ></p-skeleton>\r\n <p-skeleton\r\n width=\"100%\"\r\n height=\"2.5rem\"\r\n borderRadius=\"0.5rem\"\r\n ></p-skeleton>\r\n </div>\r\n </div>\r\n </div>\r\n } @else {\r\n <!-- Actual content -->\r\n <mt-tabs\r\n [active]=\"selectedTab()\"\r\n (activeChange)=\"onNodeDialogTabChange($event)\"\r\n [options]=\"tabsList()\"\r\n size=\"large\"\r\n ></mt-tabs>\r\n @switch (selectedTab()) {\r\n @case (\"tab1\") {\r\n <div class=\"mt-4\">\r\n <mt-dynamic-form\r\n [formConfig]=\"nodeForm()\"\r\n [formControl]=\"nodeFormControl\"\r\n ></mt-dynamic-form>\r\n </div>\r\n }\r\n @case (\"tab2\") {\r\n <div class=\"mt-4\">\r\n <mt-card>\r\n <div class=\"flex items-center gap-4\">\r\n <div class=\"flex flex-1 items-center gap-3\">\r\n <mt-button\r\n [severity]=\"'secondary'\"\r\n icon=\"file.file-check-02\"\r\n />\r\n <div class=\"flex flex-col\">\r\n <label class=\"font-medium\">{{\r\n t(\"configureForm\")\r\n }}</label>\r\n <span class=\"text-sm text-muted-color\">{{\r\n t(\"configureForm-description\")\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureForm')\"\r\n size=\"small\"\r\n (onClick)=\"openFormModal()\"\r\n ></mt-button>\r\n </div>\r\n </mt-card>\r\n </div>\r\n\r\n <!-- Properties table (hidden in manageProperties mode) -->\r\n <!-- <div class=\"mt-2\">\r\n <mt-table\r\n [data]=\"propertiesTableData()\"\r\n [columns]=\"propertiesColumns()\"\r\n [selectableRows]=\"false\"\r\n [showGridlines]=\"true\"\r\n [stripedRows]=\"true\"\r\n (cellChange)=\"onPropertyCellChange($event)\"\r\n ></mt-table>\r\n </div> -->\r\n }\r\n @case (\"tab3\") {\r\n <div class=\"mt-4\">\r\n <mt-toggle-field\r\n toggleShape=\"card\"\r\n [label]=\"t('show-hide')\"\r\n [descriptionCard]=\"t('show-hide-notifications')\"\r\n icon=\"general.eye\"\r\n [formControl]=\"showHideControl\"\r\n >\r\n <ng-template #toggleCardBottom>\r\n @if (showHideControl.value) {\r\n <div class=\"mt-3\">\r\n <mt-button\r\n [label]=\"t('configureNotifications')\"\r\n size=\"small\"\r\n (onClick)=\"openNotificationsModal()\"\r\n ></mt-button>\r\n </div>\r\n }\r\n </ng-template>\r\n </mt-toggle-field>\r\n </div>\r\n }\r\n }\r\n }\r\n </div>\r\n </ng-template>\r\n </mt-structure-builder>\r\n } @else {\r\n <p-skeleton width=\"100%\" height=\"50rem\" />\r\n }\r\n }\r\n @case (\"notification\") {\r\n <div class=\"flex-1 flex justify-center items-start p-4\">\r\n <div class=\"w-1/2\">\r\n <mt-card [title]=\"'Notifications'\">\r\n <mt-notification-template />\r\n </mt-card>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</ng-container>\r\n","// store/app.state.ts\r\n\r\nimport { HttpContextToken } from '@angular/common/http';\r\n\r\nexport const REQUEST_CONTEXT = new HttpContextToken<{ useBaseUrl: boolean }>(\r\n () => ({\r\n useBaseUrl: false,\r\n }),\r\n);\r\n","// Re-export app state\r\nexport * from './app.state';\r\n\r\n// Re-export workflow state\r\nexport * from './workflow';\r\n","/*\r\n * Public API Surface of structure-builder\r\n */\r\n\r\nexport * from './lib/workflow-builder/workflow-builder';\r\n\r\nexport * from './store';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;MAEa,aAAa,CAAA;AAIN,IAAA,UAAA;AACA,IAAA,QAAA;AACA,IAAA,gBAAA;AACA,IAAA,cAAA;AACA,IAAA,UAAA;AAPlB,IAAA,OAAgB,IAAI,GAAG,4BAA4B;IAEnD,WAAA,CACkB,UAAkB,EAClB,QAAyB,EACzB,gBAAyB,EACzB,cAAgC,EAChC,UAAmB,EAAA;QAJnB,IAAA,CAAA,UAAU,GAAV,UAAU;QACV,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACR,IAAA,CAAA,gBAAgB,GAAhB,gBAAgB;QAChB,IAAA,CAAA,cAAc,GAAd,cAAc;QACd,IAAA,CAAA,UAAU,GAAV,UAAU;IACzB;;MAGQ,YAAY,CAAA;AACvB,IAAA,OAAgB,IAAI,GAAG,0BAA0B;;MAGtC,WAAW,CAAA;AAGM,IAAA,UAAA;AAF5B,IAAA,OAAgB,IAAI,GAAG,yBAAyB;AAEhD,IAAA,WAAA,CAA4B,UAA2B,EAAA;QAA3B,IAAA,CAAA,UAAU,GAAV,UAAU;IAAoB;;MAG/C,oBAAoB,CAAA;AAC/B,IAAA,OAAgB,IAAI,GAAG,mCAAmC;;MAG/C,SAAS,CAAA;AACpB,IAAA,OAAgB,IAAI,GAAG,uBAAuB;;MAGnC,iBAAiB,CAAA;AAC5B,IAAA,OAAgB,IAAI,GAAG,iCAAiC;;MAG7C,OAAO,CAAA;AAGU,IAAA,MAAA;AAF5B,IAAA,OAAgB,IAAI,GAAG,qBAAqB;AAE5C,IAAA,WAAA,CAA4B,MAAuB,EAAA;QAAvB,IAAA,CAAA,MAAM,GAAN,MAAM;IAAoB;;MAG3C,YAAY,CAAA;AACvB,IAAA,OAAgB,IAAI,GAAG,0BAA0B;;MAGtC,UAAU,CAAA;AAGO,IAAA,OAAA;AAF5B,IAAA,OAAgB,IAAI,GAAG,wBAAwB;AAE/C,IAAA,WAAA,CAA4B,OAAoB,EAAA;QAApB,IAAA,CAAA,OAAO,GAAP,OAAO;IAAgB;;MAGxC,UAAU,CAAA;AAIH,IAAA,MAAA;AACA,IAAA,OAAA;AACA,IAAA,SAAA;AALlB,IAAA,OAAgB,IAAI,GAAG,wBAAwB;AAE/C,IAAA,WAAA,CACkB,MAAuB,EACvB,OAAoB,EACpB,SAAmB,EAAA;QAFnB,IAAA,CAAA,MAAM,GAAN,MAAM;QACN,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,SAAS,GAAT,SAAS;IACxB;;MAGQ,gBAAgB,CAAA;AAGC,IAAA,OAAA;AAF5B,IAAA,OAAgB,IAAI,GAAG,8BAA8B;AAErD,IAAA,WAAA,CAA4B,OAA0B,EAAA;QAA1B,IAAA,CAAA,OAAO,GAAP,OAAO;IAAsB;;MAG9C,gBAAgB,CAAA;AAIT,IAAA,YAAA;AACA,IAAA,OAAA;AAJlB,IAAA,OAAgB,IAAI,GAAG,8BAA8B;IAErD,WAAA,CACkB,YAA6B,EAC7B,OAA0B,EAAA;QAD1B,IAAA,CAAA,YAAY,GAAZ,YAAY;QACZ,IAAA,CAAA,OAAO,GAAP,OAAO;IACtB;;MAGQ,eAAe,CAAA;AAGE,IAAA,WAAA;AAF5B,IAAA,OAAgB,IAAI,GAAG,6BAA6B;AAEpD,IAAA,WAAA,CAA4B,WAAoB,EAAA;QAApB,IAAA,CAAA,WAAW,GAAX,WAAW;IAAY;;MAGxC,UAAU,CAAA;AAGO,IAAA,MAAA;AAF5B,IAAA,OAAgB,IAAI,GAAG,wBAAwB;AAE/C,IAAA,WAAA,CAA4B,MAAuB,EAAA;QAAvB,IAAA,CAAA,MAAM,GAAN,MAAM;IAAoB;;MAG3C,gBAAgB,CAAA;AAGC,IAAA,YAAA;AAF5B,IAAA,OAAgB,IAAI,GAAG,8BAA8B;AAErD,IAAA,WAAA,CAA4B,YAA6B,EAAA;QAA7B,IAAA,CAAA,YAAY,GAAZ,YAAY;IAAoB;;;AClFxD,SAAU,YAAY,CAC1B,GAAoB,EACpB,WAA2B,EAAA;IAE3B,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE;IAEhD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;QACxC,GAAG,CAAC,UAAU,CAAC;AACb,YAAA,aAAa,EAAE,CAAC,GAAG,aAAa,EAAE,WAAW,CAAC;AACjC,SAAA,CAAC;IAClB;AAEA,IAAA,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE;AACjC,QAAA,MAAM,EAAE,CAAC,WAAW,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM;QACnD,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAgB,CAAC;IAChD;AACF;AAEM,SAAU,UAAU,CACxB,GAAoB,EACpB,WAA2B,EAAA;IAE3B,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE;IAExC,GAAG,CAAC,UAAU,CAAC;AACb,QAAA,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,WAAW,CAAC;AACtD,KAAA,CAAC;AAClB;SAEgB,eAAe,CAC7B,GAAoB,EACpB,WAA2B,EAC3B,OAAe,EAAA;IAEf,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE;IACjC,GAAG,CAAC,UAAU,CAAC;QACb,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,WAAW,GAAG,OAAO,EAAE;AAChC,KAAA,CAAC;AAClB;;;;;;;;ACDA,MAAM,aAAa,GAAuB;AACxC,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,iBAAiB,EAAE,EAAE;AACrB,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,MAAM,EAAE,EAAE;CACX;AAOM,IAAM,aAAa,GAAnB,MAAM,aAAa,CAAA;AACP,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IACzB,OAAO,GAAG,gBAAgB;IAC1B,SAAS,GAAG,iBAAiB;IAC7B,QAAQ,GAAG,uBAAuB;AAG5C,IAAP,OAAO,UAAU,CAAC,KAAyB,EAAA;QACzC,OAAO,KAAK,CAAC,UAAU;IACzB;AAGO,IAAP,OAAO,UAAU,CAAC,KAAyB,EAAA;QACzC,OAAO,KAAK,CAAC,UAAU;IACzB;AAGO,IAAP,OAAO,QAAQ,CAAC,KAAyB,EAAA;QACvC,OAAO,KAAK,CAAC,QAAQ;IACvB;AAGO,IAAP,OAAO,SAAS,CAAC,KAAyB,EAAA;QACxC,OAAO,KAAK,CAAC,SAAS;IACxB;AAGO,IAAP,OAAO,QAAQ,CAAC,KAAyB,EAAA;QACvC,OAAO,KAAK,CAAC,QAAQ;IACvB;AAGO,IAAP,OAAO,iBAAiB,CAAC,KAAyB,EAAA;QAChD,OAAO,KAAK,CAAC,iBAAiB;IAChC;AAGO,IAAP,OAAO,MAAM,CAAC,KAAyB,EAAA;QACrC,OAAO,KAAK,CAAC,MAAM;IACrB;AAGO,IAAP,OAAO,KAAK,CACV,KAAyB,EAAA;QAEzB,OAAO,KAAK,CAAC,KAAK;IACpB;AAGO,IAAP,OAAO,YAAY,CAAC,KAAyB,EAAA;QAC3C,OAAO,KAAK,CAAC,YAAY;IAC3B;AAGO,IAAP,OAAO,WAAW,CAAC,KAAyB,EAAA;QAC1C,OAAO,KAAK,CAAC,WAAW;IAC1B;AAGO,IAAP,OAAO,WAAW,CAAC,KAAyB,EAAA;AAC1C,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE;IAC1C;AAGO,IAAP,OAAO,WAAW,CAAC,KAAyB,EAAA;AAC1C,QAAA,OAAO,KAAK,CAAC,QAAQ,EAAE,WAAW,IAAI,EAAE;IAC1C;AAGO,IAAP,OAAO,gBAAgB,CAAC,KAAyB,EAAA;AAC/C,QAAA,OAAO,CAAC,WAAgC,KACtC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC;IAC7C;AAGO,IAAP,OAAO,YAAY,CAAC,KAAyB,EAAA;AAC3C,QAAA,OAAO,CAAC,WAAgC,KACtC,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,IAAI;IACvC;IAGA,aAAa,CAAC,GAAqC,EAAE,MAAqB,EAAA;QACxE,IAAI,UAAU,GAAG,EAAE;QACnB,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,cAAc,EAAE;YACpD,UAAU,GAAG,CAAA,CAAA,EAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,cAAc,CAAA,CAAE;QACrE;AAAO,aAAA,IAAI,MAAM,CAAC,UAAU,EAAE;AAC5B,YAAA,UAAU,GAAG,MAAM,CAAC,UAAU;QAChC;QACA,GAAG,CAAC,UAAU,CAAC;YACb,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ;AACzB,YAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,IAAI;AACjD,YAAA,cAAc,EAAE,MAAM,CAAC,cAAc,IAAI,IAAI;YAC7C,UAAU,EAAE,UAAU,IAAI,EAAE;AAC7B,SAAA,CAAC;IACJ;IAGA,YAAY,CAAC,GAAqC,EAAE,OAAqB,EAAA;AACvE,QAAA,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC;AAEjC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;QAC5B,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,KAAK;QAElD,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,OAAO,GAAG,sBAAsB;AACtC,YAAA,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC;AAC7C,YAAA,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;AAC/B,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAEF,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,cAAA,CAAgB;AACvE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,SAAS,GAAG,QAAQ,EAAE,IAAI,IAAI,EAAE;AACtC,YAAA,GAAG,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;;AAG7B,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,gBAAA,MAAM,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC;gBAClC,GAAG,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;gBAChD,GAAG,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACjD;AACF,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,0BAA0B;AAC5B,YAAA,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC;AAC7C,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAChD;IACL;IAGA,WAAW,CAAC,GAAqC,EAAE,MAAmB,EAAA;AACpE,QAAA,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC;AAEhC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU;QACpC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,KAAK;QAElD,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,OAAO,GAAG,wBAAwB;AACxC,YAAA,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC;AAC5C,YAAA,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC;AAC9B,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;;AAGA,QAAA,GAAG,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,CAAC;QAE9B,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CACF,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,eAAA,EAAkB,UAAU,EAAE,EACpF;AACE,YAAA,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SACzB;AAEF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,QAAQ,GAAG,QAAQ,EAAE,IAAI,IAAI,IAAI;YACvC,GAAG,CAAC,UAAU,CAAC;gBACb,QAAQ;AACR,gBAAA,WAAW,EAAE,QAAQ,EAAE,OAAO,IAAI,IAAI;AACvC,aAAA,CAAC;AACJ,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,yBAAyB;AAC3B,YAAA,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,OAAO,CAAC;AAC5C,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAC/C;IACL;IAGA,oBAAoB,CAClB,GAAqC,EACrC,OAA6B,EAAA;AAE7B,QAAA,YAAY,CAAC,GAAG,EAAE,sBAAsB,CAAC;AAEzC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;QAEnC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,OAAO,GAAG,wBAAwB;AACxC,YAAA,eAAe,CAAC,GAAG,EAAE,sBAAsB,EAAE,OAAO,CAAC;AACrD,YAAA,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC;AACvC,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,OAAO,IAAI,CAAC;aACT,GAAG,CAEF,GAAG,IAAI,CAAC,OAAO,CAAA,0BAAA,EAA6B,UAAU,EAAE;AACzD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;YACf,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI;kBAClD,QAAQ,CAAC;kBACT,EAAE;AACN,YAAA,GAAG,CAAC,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;AACvC,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,mCAAmC;AACrC,YAAA,eAAe,CAAC,GAAG,EAAE,sBAAsB,EAAE,OAAO,CAAC;AACrD,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;AACf,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,sBAAsB,CAAC,CAAC,CACxD;IACL;IAGA,SAAS,CAAC,GAAqC,EAAE,OAAkB,EAAA;AACjE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE;AACvB,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;QACzB;AAEA,QAAA,YAAY,CAAC,GAAG,EAAE,WAAW,CAAC;AAE9B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA8B,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CACpE,GAAG,CAAC,CAAC,QAAQ,KAAI;YACf,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,EAAE;AACjE,YAAA,GAAG,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;AAC5B,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,uBAAuB;AACpE,YAAA,eAAe,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC;AAC1C,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;AACf,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAC7C;IACH;IAGA,iBAAiB,CACf,GAAqC,EACrC,OAA0B,EAAA;AAE1B,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;QAC5B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,KAAK;AAElD,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC,QAAQ,EAAE;YAC5B,MAAM,OAAO,GAAG,uCAAuC;AACvD,YAAA,eAAe,CAAC,GAAG,EAAE,mBAAmB,EAAE,OAAO,CAAC;AAClD,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;QACf;AAEA,QAAA,YAAY,CAAC,GAAG,EAAE,mBAAmB,CAAC;QAEtC,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CACF,CAAA,EAAG,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAA,EAAG,UAAU,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,EAC7G;AACE,cAAE;AACF,cAAE;AACE,gBAAA,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;aAC9B;AAEN,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;YACf,MAAM,KAAK,GAAG,sBAAsB,CAAC,QAAQ,EAAE,IAAI,CAAC;AACpD,YAAA,GAAG,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC;AAC3B,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,sBAAsB;AACnE,YAAA,eAAe,CAAC,GAAG,EAAE,mBAAmB,EAAE,OAAO,CAAC;AAClD,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;AACf,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CACrD;IACL;IAGA,OAAO,CAAC,GAAqC,EAAE,MAAe,EAAA;AAC5D,QAAA,YAAY,CAAC,GAAG,EAAE,SAAS,CAAC;QAE5B,OAAO,IAAI,CAAC;aACT,GAAG,CACF,CAAA,EAAG,IAAI,CAAC,OAAO,eAAe,MAAM,CAAC,MAAM,CAAA,CAAE,EAC7C;AACE,YAAA,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;SACzB;AAEF,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,YAAY,GAAG,QAAQ,EAAE,IAAI,IAAI,IAAI;AAC3C,YAAA,GAAG,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;AAClC,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,qBAAqB;AAClE,YAAA,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC;AACxC,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAC3C;IACL;IAGA,YAAY,CAAC,GAAqC,EAAE,OAAqB,EAAA;AACvE,QAAA,YAAY,CAAC,GAAG,EAAE,cAAc,CAAC;AAEjC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;QAEnC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,OAAO,GAAG,wBAAwB;AACxC,YAAA,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC;AAC7C,YAAA,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC;AAC/B,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,OAAO,IAAI,CAAC;aACT,GAAG,CAEF,GAAG,IAAI,CAAC,OAAO,CAAA,eAAA,EAAkB,UAAU,WAAW;AACvD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,WAAW,GAAG,QAAQ,EAAE,IAAI,IAAI,IAAI;AAC1C,YAAA,GAAG,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;AACjC,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,yBAAyB;AAC3B,YAAA,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,CAAC;AAC7C,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,CAChD;IACL;IAGA,UAAU,CAAC,GAAqC,EAAE,MAAkB,EAAA;AAClE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;QAEnC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,OAAO,GAAG,wBAAwB;AACxC,YAAA,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC;AAC3C,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;AAEA,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;AAC1B,QAAA,MAAM,QAAQ,GAAQ;YACpB,GAAG,MAAM,CAAC,OAAO;AACjB,YAAA,EAAE,EAAE,MAAM;AACV,YAAA,OAAO,EAAE,IAAI;SACd;AAED,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,GAAG,CAAC,UAAU,CAAC;AACb,gBAAA,QAAQ,EAAE;oBACR,GAAG,KAAK,CAAC,QAAQ;oBACjB,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC;AACvD,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC;QAE/B,OAAO,IAAI,CAAC;AACT,aAAA,IAAI,CAEH,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,eAAA,EAAkB,UAAU,CAAA,WAAA,CAAa,EAAE,MAAM,CAAC,OAAO;AACzE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,WAAW,GAAG,QAAQ,EAAE,IAAI;AAClC,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,WAAW,IAAI,YAAY,CAAC,QAAQ,EAAE;AACxC,gBAAA,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CACxD,CAAC,IAAI,KACH,IAAI,CAAC,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CACjE;gBAED,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;AACxB,wBAAA,WAAW,EAAE,YAAY;AAC1B,qBAAA;AACF,iBAAA,CAAC;YACJ;;AAEA,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;AAClC,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,YAAY,CAAC,QAAQ,EAAE;gBACzB,MAAM,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAC5D,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,MAAM,CAC7B;gBACD,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;AACxB,wBAAA,WAAW,EAAE,aAAa;AAC3B,qBAAA;AACF,iBAAA,CAAC;YACJ;AAEA,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,uBAAuB;AACpE,YAAA,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC;AAC3C,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAC9C;IACL;IAGA,UAAU,CAAC,GAAqC,EAAE,MAAkB,EAAA;AAClE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;QAEnC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,OAAO,GAAG,wBAAwB;AACxC,YAAA,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC;AAC3C,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;AAEA,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KACvD,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAC9D;YACD,GAAG,CAAC,UAAU,CAAC;AACb,gBAAA,QAAQ,EAAE;oBACR,GAAG,KAAK,CAAC,QAAQ;AACjB,oBAAA,WAAW,EAAE,YAAY;AAC1B,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC;AAE/B,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,GAAG,mBAAmB,GAAG,YAAY;QAEtE,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAEF,CAAA,EAAG,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAA,CAAA,EAAI,MAAM,CAAC,MAAM,CAAA,CAAE,EAAE,MAAM,CAAC,OAAO;AAC/D,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,WAAW,GAAG,QAAQ,EAAE,IAAI;AAClC,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,WAAW,IAAI,YAAY,CAAC,QAAQ,EAAE;gBACxC,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;wBACxB,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KACtD,IAAI,CAAC,EAAE,KAAK,WAAW,CAAC;8BACpB,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,KAAK;8BAChC,IAAI,CACT;AACF,qBAAA;AACF,iBAAA,CAAC;YACJ;;AAEA,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;AAClC,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,YAAY,CAAC,QAAQ,EAAE;AACzB,gBAAA,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KAC5D,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAC/D;gBACD,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;AACxB,wBAAA,WAAW,EAAE,UAAU;AACxB,qBAAA;AACF,iBAAA,CAAC;YACJ;AAEA,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,uBAAuB;AACpE,YAAA,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC;AAC3C,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAC9C;IACL;IAGA,gBAAgB,CACd,GAAqC,EACrC,MAAwB,EAAA;AAExB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;QAEnC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,OAAO,GAAG,wBAAwB;AACxC,YAAA,eAAe,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC;AACjD,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;AAEA,QAAA,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE;AAC1B,QAAA,MAAM,cAAc,GAAQ;YAC1B,GAAG,MAAM,CAAC,OAAO;AACjB,YAAA,EAAE,EAAE,MAAM;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;AACnC,YAAA,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,YAAY;SACpC;AAED,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;YAClB,GAAG,CAAC,UAAU,CAAC;AACb,gBAAA,QAAQ,EAAE;oBACR,GAAG,KAAK,CAAC,QAAQ;oBACjB,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;AAC7D,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC;QAErC,OAAO,IAAI,CAAC;AACT,aAAA,IAAI,CAEH,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,eAAA,EAAkB,UAAU,CAAA,WAAA,CAAa,EAAE,MAAM,CAAC,OAAO;AACzE,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,iBAAiB,GAAG,QAAQ,EAAE,IAAI;AACxC,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,iBAAiB,IAAI,YAAY,CAAC,QAAQ,EAAE;AAC9C,gBAAA,MAAM,kBAAkB,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAC9D,CAAC,IAAI,KACH,IAAI,CAAC,EAAE,KAAK;sBACR,EAAE,GAAG,iBAAiB,EAAE,OAAO,EAAE,KAAK;sBACtC,IAAI,CACX;gBAED,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;AACxB,wBAAA,WAAW,EAAE,kBAAkB;AAChC,qBAAA;AACF,iBAAA,CAAC;YACJ;;AAEA,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;AAClC,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,YAAY,CAAC,QAAQ,EAAE;gBACzB,MAAM,mBAAmB,GACvB,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CACtC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,MAAM,CAC7B;gBACH,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;AACxB,wBAAA,WAAW,EAAE,mBAAmB;AACjC,qBAAA;AACF,iBAAA,CAAC;YACJ;AAEA,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,6BAA6B;AAC/B,YAAA,eAAe,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC;AACjD,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,CACpD;IACL;IAGA,gBAAgB,CACd,GAAqC,EACrC,MAAwB,EAAA;AAExB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;QAEnC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,OAAO,GAAG,wBAAwB;AACxC,YAAA,eAAe,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC;AACjD,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;AAEA,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KAC7D,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CACpE;YACD,GAAG,CAAC,UAAU,CAAC;AACb,gBAAA,QAAQ,EAAE;oBACR,GAAG,KAAK,CAAC,QAAQ;AACjB,oBAAA,WAAW,EAAE,kBAAkB;AAChC,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC;QAErC,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAEF,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,sBAAA,EAAyB,MAAM,CAAC,YAAY,CAAA,CAAE,EAAE,MAAM,CAAC,OAAO;AAC9E,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,iBAAiB,GAAG,QAAQ,EAAE,IAAI;AACxC,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,iBAAiB,IAAI,YAAY,CAAC,QAAQ,EAAE;gBAC9C,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;wBACxB,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KACtD,IAAI,CAAC,EAAE,KAAK,iBAAiB,CAAC;8BAC1B,EAAE,GAAG,iBAAiB,EAAE,OAAO,EAAE,KAAK;8BACtC,IAAI,CACT;AACF,qBAAA;AACF,iBAAA,CAAC;YACJ;;AAEA,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;AAClC,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,YAAY,CAAC,QAAQ,EAAE;gBACzB,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAC5D,CAAC,IAAI,KACH,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC;sBACf,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK;sBACzB,IAAI,CACX;gBACD,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;AACxB,wBAAA,WAAW,EAAE,gBAAgB;AAC9B,qBAAA;AACF,iBAAA,CAAC;YACJ;AAEA,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,6BAA6B;AAC/B,YAAA,eAAe,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC;AACjD,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,CACpD;IACL;IAGA,eAAe,CACb,GAAqC,EACrC,MAAuB,EAAA;AAEvB,QAAA,YAAY,CAAC,GAAG,EAAE,iBAAiB,CAAC;AAEpC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAC5B,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU;QAEnC,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,OAAO,GAAG,wBAAwB;AACxC,YAAA,eAAe,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC;AAChD,YAAA,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC;AAClC,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAEF,CAAA,EAAG,IAAI,CAAC,OAAO,kBAAkB,UAAU,CAAA,QAAA,CAAU,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE;AAC3F,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;AACf,YAAA,MAAM,aAAa,GAAG,QAAQ,EAAE,IAAI;AACpC,YAAA,IAAI,aAAa,IAAI,KAAK,CAAC,QAAQ,EAAE;gBACnC,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,KAAK,CAAC,QAAQ;wBACjB,WAAW,EAAE,aAAa,CAAC,WAAW;wBACtC,OAAO,EAAE,aAAa,CAAC,OAAO;AAC/B,qBAAA;AACF,iBAAA,CAAC;YACJ;AACF,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,4BAA4B;AAC9B,YAAA,eAAe,CAAC,GAAG,EAAE,iBAAiB,EAAE,OAAO,CAAC;AAChD,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC,CACnD;IACL;IAGA,UAAU,CAAC,GAAqC,EAAE,MAAkB,EAAA;AAClE,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAE5B,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;;AAElB,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KACvD,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CAC7D;;AAGD,YAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAC1D,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CACvE;YAED,GAAG,CAAC,UAAU,CAAC;AACb,gBAAA,QAAQ,EAAE;oBACR,GAAG,KAAK,CAAC,QAAQ;AACjB,oBAAA,WAAW,EAAE,YAAY;AACzB,oBAAA,WAAW,EAAE,kBAAkB;AAChC,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC;QAE/B,OAAO,IAAI,CAAC;aACT,MAAM,CAAoB,CAAA,EAAG,IAAI,CAAC,OAAO,eAAe,MAAM,CAAC,MAAM,CAAA,CAAE;AACvE,aAAA,IAAI,CACH,GAAG,CAAC,MAAK;AACP,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,YAAY,CAAC,QAAQ,EAAE;gBACzB,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;wBACxB,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CACnD,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CACnC;AACF,qBAAA;AACF,iBAAA,CAAC;YACJ;;AAEA,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;AAClC,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,YAAY,CAAC,QAAQ,EAAE;;AAEzB,gBAAA,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KAC5D,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAC9D;;AAGD,gBAAA,MAAM,kBAAkB,GACtB,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAChC,CAAC,IAAI,KACH,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAC/D,IAAI,EAAE;gBAET,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;AACxB,wBAAA,WAAW,EAAE,UAAU;AACvB,wBAAA,WAAW,EAAE;AACX,4BAAA,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW;AACpC,4BAAA,GAAG,kBAAkB;AACtB,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAC;YACJ;AAEA,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO,IAAI,KAAK,EAAE,OAAO,IAAI,uBAAuB;AACpE,YAAA,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC;AAC3C,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAC9C;IACL;IAGA,gBAAgB,CACd,GAAqC,EACrC,MAAwB,EAAA;AAExB,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,EAAE;AAE5B,QAAA,IAAI,KAAK,CAAC,QAAQ,EAAE;AAClB,YAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,KAC7D,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI,CACnE;YACD,GAAG,CAAC,UAAU,CAAC;AACb,gBAAA,QAAQ,EAAE;oBACR,GAAG,KAAK,CAAC,QAAQ;AACjB,oBAAA,WAAW,EAAE,kBAAkB;AAChC,iBAAA;AACF,aAAA,CAAC;QACJ;AAEA,QAAA,YAAY,CAAC,GAAG,EAAE,kBAAkB,CAAC;QAErC,OAAO,IAAI,CAAC;aACT,MAAM,CAEL,CAAA,EAAG,IAAI,CAAC,OAAO,yBAAyB,MAAM,CAAC,YAAY,CAAA,CAAE;AAC9D,aAAA,IAAI,CACH,GAAG,CAAC,MAAK;AACP,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,YAAY,CAAC,QAAQ,EAAE;gBACzB,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;wBACxB,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CACnD,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,YAAY,CACzC;AACF,qBAAA;AACF,iBAAA,CAAC;YACJ;;AAEA,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;AAClC,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,EAAE;AACnC,YAAA,IAAI,YAAY,CAAC,QAAQ,EAAE;gBACzB,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAC5D,CAAC,IAAI,KACH,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC;sBACd,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK;sBACzB,IAAI,CACX;gBACD,GAAG,CAAC,UAAU,CAAC;AACb,oBAAA,QAAQ,EAAE;wBACR,GAAG,YAAY,CAAC,QAAQ;AACxB,wBAAA,WAAW,EAAE,gBAAgB;AAC9B,qBAAA;AACF,iBAAA,CAAC;YACJ;AAEA,YAAA,MAAM,OAAO,GACX,KAAK,EAAE,KAAK,EAAE,OAAO;AACrB,gBAAA,KAAK,EAAE,OAAO;AACd,gBAAA,6BAA6B;AAC/B,YAAA,eAAe,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,CAAC;AACjD,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;AACjB,QAAA,CAAC,CAAC,EACF,QAAQ,CAAC,MAAM,UAAU,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,CACpD;IACL;uGAx1BW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAb,aAAa,EAAA,CAAA;;AAiFxB,UAAA,CAAA;IADC,MAAM,CAAC,aAAa;AAepB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,eAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,YAAY;AAwCnB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,cAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,WAAW;AA2ClB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,oBAAoB;AAsC3B,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,sBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,SAAS;AAsBhB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,iBAAiB;AAsCxB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,OAAO;AAwBd,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,SAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,YAAY;AAiCnB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,cAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,UAAU;AA0EjB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,YAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,UAAU;AAuEjB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,YAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAoFvB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AA6EvB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,eAAe;AA4CtB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,UAAU;AA8EjB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,YAAA,EAAA,IAAA,CAAA;AAGD,UAAA,CAAA;IADC,MAAM,CAAC,gBAAgB;AAmEvB,CAAA,EAAA,aAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAj1BM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,YAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,YAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,UAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,WAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,UAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,mBAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAKR,CAAA,EAAA,aAAA,EAAA,OAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,cAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAGR,CAAA,EAAA,aAAA,EAAA,aAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAIR,CAAA,EAAA,aAAA,EAAA,kBAAA,EAAA,IAAA,CAAA;AAGM,UAAA,CAAA;AADN,IAAA,QAAQ;AAIR,CAAA,EAAA,aAAA,EAAA,cAAA,EAAA,IAAA,CAAA;AA9EU,aAAa,GAAA,UAAA,CAAA;AALzB,IAAA,KAAK,CAAqB;AACzB,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,QAAQ,EAAE,aAAa;KACxB;AAEY,CAAA,EAAA,aAAa,CAy1BzB;2FAz1BY,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB;;AA41BD,SAAS,sBAAsB,CAC7B,IAAa,EAAA;IAEb,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AACxB,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE;AACxD,QAAA,OAAO;AACJ,aAAA,GAAG,CAAC,CAAC,KAAU,MAAM;AACpB,YAAA,KAAK,EAAE,6BAA6B,CAAC,KAAK,CAAC;YAC3C,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK;AAC/B,kBAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,OAAO;AACvD,kBAAE,EAAE;AACP,SAAA,CAAC;AACD,aAAA,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C;IAEA,OAAO,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACxD;AAEA,SAAS,qBAAqB,CAAC,IAAS,EAAA;IACtC,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE;IACrC,OAAO;AACL,QAAA,GAAG,IAAI;AACP,QAAA,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,KAAK;QACrB,KAAK;AACL,QAAA,IAAI,EAAE,yBAAyB,CAAC,IAAI,EAAE,IAAI,CAAC;KAC5C;AACH;AAEA,SAAS,yBAAyB,CAChC,IAAa,EAAA;AAEb,IAAA,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACpC,QAAA,OAAO,IAA8B;IACvC;AAEA,IAAA,MAAM,KAAK,GAAG,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,EAAE;IAClD,OAAO;AACL,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,EAAE,EAAE,KAAK;AACT,QAAA,EAAE,EAAE,KAAK;KACV;AACH;AAEA,SAAS,6BAA6B,CAAC,KAAU,EAAA;AAC/C,IAAA,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK;AAC1B,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,IAAI,KAAK,EAAE,OAAO,EAAE;QAClB,OAAO,KAAK,CAAC,OAAO;IACtB;AAEA,IAAA,IAAI,KAAK,EAAE,EAAE,EAAE;QACb,OAAO,KAAK,CAAC,EAAE;IACjB;AAEA,IAAA,IAAI,KAAK,EAAE,EAAE,EAAE;QACb,OAAO,KAAK,CAAC,EAAE;IACjB;IAEA,OAAO,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE,SAAS,IAAI,OAAO;AACvD;;MCv7Ba,cAAc,CAAA;AACR,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAE7B,IAAA,UAAU,GAAG,MAAM,CAC1B,aAAa,CAAC,UAAU,CACzB;AACQ,IAAA,UAAU,GAAG,MAAM,CAAgB,aAAa,CAAC,UAAU,CAAC;AAC5D,IAAA,QAAQ,GAAG,MAAM,CAAyB,aAAa,CAAC,QAAQ,CAAC;AACjE,IAAA,SAAS,GAAG,MAAM,CAAqB,aAAa,CAAC,SAAS,CAAC;AAC/D,IAAA,QAAQ,GAAG,MAAM,CAAwB,aAAa,CAAC,QAAQ,CAAC;AAChE,IAAA,iBAAiB,GAAG,MAAM,CACjC,aAAa,CAAC,iBAAiB,CAChC;AACQ,IAAA,MAAM,GAAG,MAAM,CAAoB,aAAa,CAAC,MAAM,CAAC;AACxD,IAAA,KAAK,GAAG,MAAM,CACrB,aAAa,CAAC,KAAK,CACpB;AACQ,IAAA,YAAY,GAAG,MAAM,CAAoB,aAAa,CAAC,YAAY,CAAC;AACpE,IAAA,WAAW,GAAG,MAAM,CAAiB,aAAa,CAAC,WAAW,CAAC;AAC/D,IAAA,KAAK,GAAG,MAAM,CAAuB,aAAa,CAAC,WAAW,CAAC;AAC/D,IAAA,WAAW,GAAG,MAAM,CAC3B,aAAa,CAAC,WAAW,CAC1B;AAED,IAAA,SAAS,CAAC,WAAgC,EAAA;QACxC,MAAM,cAAc,GAAG,MAAM,CAC3B,aAAa,CAAC,gBAAgB,CAC/B;QACD,OAAO,QAAQ,CAAC,MAAM,cAAc,EAAE,CAAC,WAAW,CAAC,CAAC;IACtD;AAEA,IAAA,KAAK,CAAC,WAAgC,EAAA;QACpC,MAAM,YAAY,GAAG,MAAM,CACzB,aAAa,CAAC,YAAY,CAC3B;QACD,OAAO,QAAQ,CAAC,MAAM,YAAY,EAAE,CAAC,WAAW,CAAC,CAAC;IACpD;IACA,aAAa,CACX,UAAkB,EAClB,QAAyB,EACzB,gBAAyB,EACzB,cAAgC,EAChC,UAAmB,EAAA;QAEnB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CACxB,IAAI,aAAa,CACf,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,UAAU,CACX,CACF;IACH;IAEA,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;IAChD;AAEA,IAAA,cAAc,CAAC,UAA2B,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;IACzD;IAEA,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC7B;IAEA,qBAAqB,GAAA;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,oBAAoB,EAAE,CAAC;IACxD;IAEA,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,EAAE,CAAC;IAC7C;IAEA,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,iBAAiB,EAAE,CAAC;IACrD;AAEA,IAAA,QAAQ,CAAC,MAAuB,EAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD;IAEA,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,YAAY,EAAE,CAAC;IAChD;AAEA,IAAA,UAAU,CAAC,OAAoB,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACrD;AAEA,IAAA,UAAU,CACR,MAAuB,EACvB,OAAoB,EACpB,SAAmB,EAAA;AAEnB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACxE;AAEA,IAAA,gBAAgB,CAAC,OAA0B,EAAA;AACzC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3D;IAEA,gBAAgB,CACd,YAA6B,EAC7B,OAA0B,EAAA;AAE1B,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACzE;AAEA,IAAA,eAAe,CAAC,WAAoB,EAAA;AAClC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,WAAW,CAAC,CAAC;IAC9D;AAEA,IAAA,UAAU,CAAC,MAAuB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;IACpD;AAEA,IAAA,gBAAgB,CAAC,YAA6B,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAChE;uGAxHW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACvCD;;MCUa,2BAA2B,CAAA;uGAA3B,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECVxC,gTAWA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDLY,IAAI,+FAAE,oBAAoB,EAAA,QAAA,EAAA,0BAAA,EAAA,CAAA,EAAA,CAAA;;2FAIzB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBANvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kCAAkC,WACnC,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAA,QAAA,EAAA,gTAAA,EAAA;;;MEIhC,kBAAkB,CAAA;AACpB,IAAA,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC;uGAD1B,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECV/B,wLAOA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDDY,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,kBAAA,EAAA,MAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAIV,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;+BACE,yBAAyB,EAAA,OAAA,EAC1B,CAAC,WAAW,CAAC,EAAA,QAAA,EAAA,wLAAA,EAAA;;;ME8CX,eAAe,CAAA;AAClB,IAAA,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AACvC,IAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,IAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,IAAA,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACnC,IAAA,KAAK,GAAiB,MAAM,CAAC,YAAY,CAAC;;AAEnD,IAAA,OAAO,GAAG,MAAM,CAAS,UAAU,mDAAC;AACpC,IAAA,YAAY,GAAG;AACb,QAAA;YACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC5D,YAAA,KAAK,EAAE,UAAU;AAClB,SAAA;AACD,QAAA;YACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC;AAChE,YAAA,KAAK,EAAE,cAAc;AACtB,SAAA;KACF;AACD,IAAA,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM;AACnC,IAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK;AACjC,IAAA,eAAe,GAAG,QAAQ,CAAC,MACzB,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,IAAS,KAAK,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAC7D;AACD,IAAA,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS;AACzC,IAAA,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ;IACvC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,aAAa,CAAC;IACtD,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC;AACtD,IAAA,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW;AAE7C,IAAA,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY;AAC/C,IAAA,kBAAkB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,8DAAC;AACxD,IAAA,yBAAyB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,qEAAC;AAC/D,IAAA,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,GAAG,CAAC,gEAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAElE,IAAA,WAAW,GAAG,MAAM,CAAM,MAAM,uDAAC;IACjC,UAAU,GAAG,MAAM,CAAM;AACvB,QAAA,IAAI,EAAE,cAAc;AACrB,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AACF,IAAA,eAAe,GAAG,IAAI,WAAW,EAAE;AACnC,IAAA,WAAW,GAAG,MAAM,CAAU,KAAK,uDAAC;AACpC,IAAA,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEvD,IAAA,oBAAoB,GAAG,MAAM,CAAU,KAAK,gEAAC;;AAGrC,IAAA,oBAAoB,GAAG,MAAM,CAAQ,EAAE,gEAAC;;AAGhD,IAAA,mBAAmB,GAAG,QAAQ,CAAC,MAAK;AAClC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,EAAE;AAC/C,QAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AAC1B,YAAA,OAAO,WAAW;QACpB;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,IAAI,EAAE;QACpD,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;YAC/B,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;AACxB,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,UAAU,EAAE,KAAK;YACjB,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC,CAAC;AACL,IAAA,CAAC,+DAAC;;IAGF,iBAAiB,GAAG,MAAM,CAAc;AACtC,QAAA;AACE,YAAA,GAAG,EAAE,MAAM;YACX,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC;AAC9D,YAAA,IAAI,EAAE,MAAM;AACb,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC;AACjE,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iCAAiC,CAAC;AAClE,YAAA,IAAI,EAAE,SAAS;AAChB,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,mBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,QAAQ,GAAG,QAAQ,CAAC,MAAK;AACvB,QAAA,MAAM,QAAQ,GAAG;AACf,YAAA;gBACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;AAC/D,gBAAA,KAAK,EAAE,MAAM;AACd,aAAA;AACD,YAAA;gBACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gCAAgC,CAAC;AACjE,gBAAA,KAAK,EAAE,MAAM;AACd,aAAA;SACF;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC;AAChE,gBAAA,KAAK,EAAE,MAAM;AACd,aAAA,CAAC;QACJ;AAEA,QAAA,OAAO,QAAQ;AACjB,IAAA,CAAC,oDAAC;AACF,IAAA,cAAc,GAAG;AACf,QAAA;AACE,YAAA,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,0BAA0B,CAAC;AAC3D,YAAA,IAAI,EAAE;AACJ,gBAAA,EAAE,EAAE,WAAW;AACf,gBAAA,EAAE,EAAE,cAAc;AACnB,aAAA;AACD,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,IAAI,EAAE,qBAAqB;AAC3B,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA;KACF;;AAGgB,IAAA,cAAc,GAAG;AAChC,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,MAAM,EAAE;AACN,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;gBAC/D,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CACnC,mCAAmC,CACpC;AACD,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,6BAA6B,CAAC;gBAC9D,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CACnC,kCAAkC,CACnC;AACD,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA;KACF;;AAGgB,IAAA,eAAe,GAAG,QAAQ,CAAC,OAAO;AACjD,QAAA,GAAG,EAAE,UAAU;AACf,QAAA,IAAI,EAAE,QAAQ;QACd,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAC5D,QAAA,WAAW,EACT,4GAA4G;AAC9G,QAAA,SAAS,EAAE,oDAAoD;AAC/D,QAAA,QAAQ,EAAE,GAAG;AACb,QAAA,MAAM,EAAE;AACN,YAAA;AACE,gBAAA,GAAG,EAAE,YAAY;AACjB,gBAAA,IAAI,EAAE,cAAc;AACpB,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,YAAY,EAAE,GAAG;AACjB,gBAAA,OAAO,EAAE;AACP,oBAAA;wBACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,wBAAwB,CAAC;AACzD,wBAAA,KAAK,EAAE,GAAG;AACX,qBAAA;AACD,oBAAA;wBACE,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC;AACxD,wBAAA,KAAK,EAAE,GAAG;AACX,qBAAA;AACF,iBAAA;AACD,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,WAAW,EAAE,YAAY;AACzB,gBAAA,QAAQ,EAAE,gDAAgD;AAC1D,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,8BAA8B,CAAC;AACrE,gBAAA,QAAQ,EAAE,4CAA4C;AACtD,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE;AACtB,gBAAA,WAAW,EAAE,cAAc;AAC3B,gBAAA,WAAW,EAAE,IAAI;AACjB,gBAAA,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/D,aAAA;AACD,YAAA;AACE,gBAAA,GAAG,EAAE,MAAM;AACX,gBAAA,KAAK,EAAE,QAAQ;AACf,gBAAA,WAAW,EAAE,oBAAoB;AACjC,gBAAA,QAAQ,EAAE,4CAA4C;AACtD,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE;AACrB,gBAAA,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE;AAC7B,gBAAA,gBAAgB,EAAE,OAAO;AACzB,gBAAA,mBAAmB,EAAE,OAAO;AAC5B,gBAAA,WAAW,EAAE,cAAc;AAC3B,gBAAA,WAAW,EAAE,OAAO;AACpB,gBAAA,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/D,aAAA;AACF,SAAA;AACF,KAAA,CAAC,2DAAC;AAEc,IAAA,UAAU,GAAG;AAC5B,QAAA,GAAG,EAAE,YAAY;AACjB,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,SAAS,EAAE,WAAW;AACtB,QAAA,MAAM,EAAE;AACN,YAAA;AACE,gBAAA,GAAG,EAAE,KAAK;gBACV,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,sBAAsB,CAAC;gBACvD,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,2BAA2B,CAAC;AAClE,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,QAAQ,EAAE,IAAI;AACf,aAAA;AACF,SAAA;KACO;;;AAIV,IAAA,QAAQ,GAAG,YAAY,CAAoB,MAAK;AAC9C,QAAA,MAAM,QAAQ,GAAU,CAAC,IAAI,CAAC,cAAc,CAAC;;;AAI7C,QAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE;YAChC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;AACrC,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;QAChC;QAEA,OAAO;YACL,QAAQ;AACR,YAAA,MAAM,EAAE,EAAE;SACX;AACH,IAAA,CAAC,oDAAC;;AAGF,IAAA,aAAa,GAAG,QAAQ,CAAC,OAAO;AAC9B,QAAA,aAAa,EAAE,IAAI,CAAC,oBAAoB,EAAE;QAC1C,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM;AAC9C,QAAA,kBAAkB,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAChD,QAAA,aAAa,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC3C,QAAA,QAAQ,EAAE,IAAI,CAAC,oBAAoB,EAAE,GAAG,cAAc,GAAG,eAAe;AACzE,KAAA,CAAC,yDAAC;;IAGH,cAAc,GAAG,MAAM,CAAoB;AACzC,QAAA,QAAQ,EAAE;AACR,YAAA;AACE,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,KAAK,EAAE,mBAAmB;AAC1B,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE,KAAK;AACf,gBAAA,OAAO,EAAE,CAAC;AACV,gBAAA,KAAK,EAAE,CAAC;AACR,gBAAA,MAAM,EAAE;AACN,oBAAA;AACE,wBAAA,GAAG,EAAE,UAAU;AACf,wBAAA,KAAK,EAAE,UAAU;AAClB,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,KAAK,GAAG,QAAQ,CAAC,MAAK;AACpB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;AAChD,YAAA,GAAG,IAAI;AACP,YAAA,KAAK,EAAE,SAAS;AACjB,SAAA,CAAC,CAAC;AACL,IAAA,CAAC,iDAAC;;AAGF,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AAC1B,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,CAAC,UAAU,MAAM;AAC5D,YAAA,GAAG,UAAU;YACb,IAAI,EAAE,UAAU,CAAC,MAAM;YACvB,EAAE,EAAE,UAAU,CAAC,MAAM;AACtB,SAAA,CAAC,CAAC;AACL,IAAA,CAAC,uDAAC;;IAGF,WAAW,GAAG,MAAM,CAAC;AACnB,QAAA;AACE,YAAA,GAAG,EAAE,MAAM;AACX,YAAA,IAAI,EAAE,iBAAiB;AACvB,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE,MAAM;AAChB,SAAA;AACD,QAAA;AACE,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,IAAI,EAAE,kBAAkB;AACxB,YAAA,OAAO,EAAE,UAAU;AACnB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,QAAQ,EAAE,QAAQ;AAClB,YAAA,OAAO,EAAE,QAAQ;YACjB,SAAS,EAAE,CAAC,IAAwB,KAAK,CAAC,IAAI,CAAC,SAAS;AACzD,SAAA;AACF,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEO,IAAA,eAAe,GAAG,IAAI,WAAW,CAAC,KAAK,CAAC;AAEjD,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAChC,IAAI,QAAQ,IAAI,QAAQ,CAAC,WAAW,KAAK,SAAS,EAAE;gBAClD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC5C;AACF,QAAA,CAAC,CAAC;;QAGF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE;YAEhC,IAAI,IAAI,EAAE;;AAER,gBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC;oBAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,oBAAA,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,GAAG;AAClC,oBAAA,KAAK,EAAE,IAAI,CAAC,UAAU,KAAK,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAY,CAAC,GAAG,IAAI;AACnE,oBAAA,IAAI,EAAE,IAAI,CAAC,UAAU,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI;oBACvD,GAAG,EAAE,IAAI,CAAC,GAAG;AACd,iBAAA,CAAC;;gBAGF,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,IAAI,EAAE;gBACpD,MAAM,gBAAgB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;oBAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CACxC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,EAAE,CAChC;oBAED,OAAO;wBACL,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,wBAAA,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;AAC1B,wBAAA,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,KAAK;AACxC,wBAAA,UAAU,EAAE,YAAY,EAAE,OAAO,IAAI,KAAK;AAC1C,wBAAA,SAAS,EAAE,IAAI;qBAChB;AACH,gBAAA,CAAC,CAAC;AAEF,gBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,gBAAgB,CAAC;gBAC/C,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,IAAI,KAAK,CAAC;YAChE;AACF,QAAA,CAAC,CAAC;IACJ;;AAGA,IAAA,eAAe,CAAC,GAAW,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;AACrB,QAAA,IAAI,GAAG,KAAK,cAAc,EAAE;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE;YACtC,IAAI,UAAU,EAAE;gBACd,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,EAAE,UAAU,CAAC;AAC5D,gBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;YACvC;QACF;IACF;;AAGA,IAAA,qBAAqB,CAAC,GAAW,EAAA;AAC/B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3B;AAEA,IAAA,eAAe,CAAC,WAAoB,EAAA;;QAElC,IAAI,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACtC,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B;QACF;QAEA,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC;YACzD,KAAK,EAAE,MAAK;;gBAEV,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;YACpC,CAAC;AACF,SAAA,CAAC;IACJ;AAEA,IAAA,gBAAgB,CAAC,UAAkB,EAAA;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC;IAChD;IAEA,SAAS,GAAA;;AAEP,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC;;AAGpC,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YACzB,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACxB,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,GAAG,EAAE,CAAC;AACP,SAAA,CAAC;;QAGF,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,UAAU,IAAI,EAAE;QACpD,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM;YAC/C,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,YAAA,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI;AAC1B,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,SAAS,EAAE,IAAI;AAChB,SAAA,CAAC,CAAC;AAEH,QAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,cAAc,CAAC;;AAG7C,QAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,CAAC;;AAGtC,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;IAC9B;AAEA,IAAA,oBAAoB,CAAC,KAAsB,EAAA;AACzC,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;YAAE;AAE9B,QAAA,QAAQ,KAAK,CAAC,MAAM;AAClB,YAAA,KAAK,YAAY;gBACf,IAAI,KAAK,CAAC,KAAK;AAAE,oBAAA,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI;gBAC3C;AACF,YAAA,KAAK,WAAW;gBACd,IAAI,CAAC,KAAK,CAAC,KAAK;AAAE,oBAAA,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK;gBAC9C;;IAEN;AAEA,IAAA,iBAAiB,CAAC,KAAe,EAAA;AAC/B,QAAA,QAAQ,KAAK,CAAC,MAAM;AAClB,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,KAAK,CAAC,IAAI,EAAE;;AAEd,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;;AAG5C,oBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB;AAC/C,yBAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU;AAClD,yBAAA,GAAG,CAAC,CAAC,IAAI,MAAM;wBACd,UAAU,EAAE,IAAI,CAAC,EAAE;wBACnB,MAAM,EAAE,IAAI,CAAC,SAAS;wBACtB,OAAO,EAAE,IAAI,CAAC,UAAU;AACzB,qBAAA,CAAC,CAAC;;AAGL,oBAAA,MAAM,WAAW,GAAG;wBAClB,IAAI,EAAE,SAAS,CAAC,IAAI;wBACpB,UAAU,EAAE,SAAS,CAAC,UAAU;AAChC,wBAAA,WAAW,EACT,SAAS,CAAC,UAAU,KAAK,GAAG,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI;AACjE,wBAAA,GAAG,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC;AACvB,wBAAA,UAAU,EAAE,iBAAiB;AAC7B,wBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AAC3C,wBAAA,OAAO,EAAE,IAAI;qBACd;;AAGD,oBAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,WAAW,CAAC;gBAC7C;gBACA;AACF,YAAA,KAAK,eAAe;AAClB,gBAAA,IAAI,KAAK,CAAC,IAAI,EAAE;oBACd,IAAI,CAAC,SAAS,EAAE;AAEhB,oBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE;;;AAI5B,oBAAA,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;;AAGrD,oBAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACpC,IAAI,MAAM,EAAE;wBACV,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;AACrD,wBAAA,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE;wBAErC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE;wBACtC,IAAI,UAAU,EAAE;AACd,4BAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAClC,aAAa,EACb,MAAM,EACN,eAAe,EACf,UAAU,CACX;AACD,4BAAA,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE;wBAC/C;oBACF;gBACF;gBACA;AACF,YAAA,KAAK,eAAe;;gBAElB,IAAI,CAAC,SAAS,EAAE;gBAChB;AACF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,KAAK,CAAC,IAAI,EAAE;;AAEd,oBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;AAC5C,oBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE;oBAC5B,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS;;AAGxC,oBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,mBAAmB;AAC/C,yBAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU;AAClD,yBAAA,GAAG,CAAC,CAAC,IAAI,MAAM;wBACd,UAAU,EAAE,IAAI,CAAC,EAAE;wBACnB,MAAM,EAAE,IAAI,CAAC,SAAS;wBACtB,OAAO,EAAE,IAAI,CAAC,UAAU;AACzB,qBAAA,CAAC,CAAC;;AAGL,oBAAA,MAAM,WAAW,GAAG;wBAClB,IAAI,EAAE,SAAS,CAAC,IAAI;wBACpB,UAAU,EAAE,SAAS,CAAC,UAAU;AAChC,wBAAA,WAAW,EACT,SAAS,CAAC,UAAU,KAAK,GAAG,GAAG,SAAS,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI;wBACjE,GAAG,EAAE,SAAS,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG;AACpC,wBAAA,UAAU,EAAE,iBAAiB;AAC7B,wBAAA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,KAAK;AAC3C,wBAAA,OAAO,EAAE,IAAI;qBACd;;oBAGD,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,SAAS,CAAC;gBAChE;gBACA;AAEF,YAAA,KAAK,YAAY;AACf,gBAAA,IAAI,KAAK,CAAC,IAAI,EAAE;AACd,oBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE;AACpC,oBAAA,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC;AACrC,wBAAA,IAAI,EAAE,QAAQ;wBACd,MAAM,EAAE,MAAK;AACX,4BAAA,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,cAAc,CAAC;wBAChD,CAAC;AACD,wBAAA,MAAM,EAAE,MAAK,EAAE,CAAC;AACjB,qBAAA,CAAC;gBACJ;gBACA;AAEF,YAAA,KAAK,kBAAkB;AACrB,gBAAA,IAAI,KAAK,CAAC,IAAI,EAAE;;AAEd,oBAAA,MAAM,iBAAiB,GAAG;AACxB,wBAAA,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;AAC7B,wBAAA,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AAC3B,wBAAA,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC;AAClC,wBAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;qBACpC;AACD,oBAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,iBAAiB,CAAC;gBACzD;gBACA;AAEF,YAAA,KAAK,kBAAkB;AACrB,gBAAA,IAAI,KAAK,CAAC,IAAI,EAAE;;AAEd,oBAAA,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE;AAClC,oBAAA,MAAM,aAAa,GAAG;AACpB,wBAAA,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI;AAC7B,wBAAA,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE;AAC3B,wBAAA,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC;AAClC,wBAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI;qBACpC;oBACD,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC;gBACnE;gBACA;AAEF,YAAA,KAAK,kBAAkB;AACrB,gBAAA,IAAI,KAAK,CAAC,IAAI,EAAE;AACd,oBAAA,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE;;AAE1C,oBAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,oBAAoB,CAAC;gBAC5D;gBACA;AAEF,YAAA;gBACE;;IAEN;IACA,sBAAsB,GAAA;QACpB,MAAM,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CACjD,2BAA2B,EAC3B,QAAQ,EACR;YACE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,+BAA+B,CAAC;AACjE,YAAA,UAAU,EAAE,iCAAiC;AAC7C,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,WAAW,EAAE,EAAE;AAChB,SAAA,CACF;QAED,sBAAsB,CAAC,OAAO,CAAC,SAAS,CACtC,CAAC,MAA8D,KAAI;AACjE,YAAA,IAAI,MAAM,EAAE,KAAK,EAAE;YACnB;AACF,QAAA,CAAC,CACF;IACH;IAEA,aAAa,GAAA;QACX,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,QAAQ,EAAE;YACvE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,uBAAuB,CAAC;AACzD,YAAA,UAAU,EAAE,iCAAiC;AAC7C,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,QAAQ,EAAE,eAAe;AACzB,YAAA,WAAW,EAAE,EAAE;AAChB,SAAA,CAAC;QAEF,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,MAAK,EAAE,CAAC,CAAC;IAC3C;uGA3mBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpD5B,mjXA4QA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDzOI,gBAAgB,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,2BAAA,EAAA,aAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,uBAAA,EAAA,gBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,aAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAChB,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,IAAI,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,QAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACJ,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,WAAW,uPACX,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,uBAAA,EAAA,4BAAA,EAAA,oBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,uBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,QAAQ,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,WAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACR,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,EAAA,aAAA,EAAA,UAAA,EAAA,SAAA,EAAA,UAAA,EAAA,aAAA,EAAA,MAAA,EAAA,MAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,MAAM,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,SAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,UAAA,EAAA,OAAA,EAAA,SAAA,EAAA,eAAA,EAAA,MAAA,EAAA,SAAA,EAAA,WAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACN,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACf,oBAAoB,EAAA,QAAA,EAAA,0BAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACpB,WAAW,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,OAAA,EAAA,aAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,SAAA,EAAA,aAAA,EAAA,aAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,OAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,qBAAA,EAAA,SAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,sBAAA,EAAA,wBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA;;2FAMF,eAAe,EAAA,UAAA,EAAA,CAAA;kBApB3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,qBAAqB,EAAA,OAAA,EACtB;wBACP,gBAAgB;wBAChB,IAAI;wBACJ,IAAI;wBACJ,mBAAmB;wBACnB,WAAW;wBACX,WAAW;wBACX,QAAQ;wBACR,WAAW;wBACX,MAAM;wBACN,eAAe;wBACf,oBAAoB;wBACpB,WAAW;AACZ,qBAAA,EAAA,IAAA,EAGK,EAAE,EAAA,QAAA,EAAA,mjXAAA,EAAA;;;AElDV;AAIO,MAAM,eAAe,GAAG,IAAI,gBAAgB,CACjD,OAAO;AACL,IAAA,UAAU,EAAE,KAAK;AAClB,CAAA,CAAC;;ACPJ;;ACAA;;AAEG;;ACFH;;AAEG;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@masterteam/workflow",
3
- "version": "0.0.23",
3
+ "version": "0.0.25",
4
4
  "publishConfig": {
5
5
  "directory": "../../../dist/masterteam/workflow",
6
6
  "linkDirectory": false,
@@ -19,12 +19,12 @@
19
19
  "tailwindcss": "^4.1.17",
20
20
  "tailwindcss-primeui": "^0.6.1",
21
21
  "@ngxs/store": "^20.1.0",
22
- "@masterteam/components": "^0.0.90",
23
- "@masterteam/structure-builder": "^0.0.33",
24
- "@masterteam/icons": "^0.0.13",
25
- "@masterteam/forms": "^0.0.36",
26
- "@masterteam/form-builder": "^0.0.9",
27
- "@masterteam/notification": "^0.0.10"
22
+ "@masterteam/components": "^0.0.101",
23
+ "@masterteam/notification": "^0.0.11",
24
+ "@masterteam/form-builder": "^0.0.12",
25
+ "@masterteam/structure-builder": "^0.0.37",
26
+ "@masterteam/forms": "^0.0.47",
27
+ "@masterteam/icons": "^0.0.13"
28
28
  },
29
29
  "sideEffects": false,
30
30
  "exports": {
@@ -1,3 +1,5 @@
1
+ import * as _masterteam_formula_builder from '@masterteam/formula-builder';
2
+ import { FormulaBuilderValue } from '@masterteam/formula-builder';
1
3
  import * as _masterteam_workflow from '@masterteam/workflow';
2
4
  import * as _angular_core from '@angular/core';
3
5
  import { DynamicFormConfig } from '@masterteam/components';
@@ -28,7 +30,7 @@ interface WorkflowConnection {
28
30
  id: number;
29
31
  source: number;
30
32
  target: number;
31
- formula: any[];
33
+ formula: FormulaBuilderValue | null;
32
34
  priority: number;
33
35
  loading?: boolean;
34
36
  }
@@ -93,8 +95,14 @@ interface GroupDefinition {
93
95
  [key: string]: unknown;
94
96
  }
95
97
  interface RoleDefinition {
96
- id: number;
97
- name: string;
98
+ id?: number | string;
99
+ value: number | string;
100
+ name: string | Record<string, string>;
101
+ [key: string]: unknown;
102
+ }
103
+ interface RoleGroupDefinition {
104
+ label: string;
105
+ items: RoleDefinition[];
98
106
  [key: string]: unknown;
99
107
  }
100
108
  interface StepPropertyItem {
@@ -143,13 +151,13 @@ interface ConnectionPayload {
143
151
  sourceStepId: number | string;
144
152
  targetStepId: number | string;
145
153
  priority: string | number;
146
- formula: any[];
154
+ formula: FormulaBuilderValue | null;
147
155
  }
148
156
  interface ConnectionResponse {
149
157
  id: number;
150
158
  source: number;
151
159
  target: number;
152
- formula: any[];
160
+ formula: FormulaBuilderValue | null;
153
161
  priority: number;
154
162
  }
155
163
  interface PublishPayload {
@@ -175,7 +183,7 @@ interface WorkflowStateModel extends LoadingStateShape<WorkflowLoadingName> {
175
183
  workflow: WorkflowSchema | null;
176
184
  formulaProperties: FormulaProperty[];
177
185
  groups: GroupDefinition[];
178
- roles: RoleDefinition[];
186
+ roles: Array<RoleDefinition | RoleGroupDefinition>;
179
187
  selectedStep: StepSchema | null;
180
188
  isFlowValid: boolean | null;
181
189
  }
@@ -262,7 +270,7 @@ declare class WorkflowFacade {
262
270
  readonly workflow: _angular_core.Signal<WorkflowSchema | null>;
263
271
  readonly formulaProperties: _angular_core.Signal<FormulaProperty[]>;
264
272
  readonly groups: _angular_core.Signal<GroupDefinition[]>;
265
- readonly roles: _angular_core.Signal<RoleDefinition[]>;
273
+ readonly roles: _angular_core.Signal<(RoleDefinition | RoleGroupDefinition)[]>;
266
274
  readonly selectedStep: _angular_core.Signal<StepSchema | null>;
267
275
  readonly isFlowValid: _angular_core.Signal<boolean | null>;
268
276
  readonly steps: _angular_core.Signal<WorkflowStepSchema[]>;
@@ -312,7 +320,7 @@ declare class WorkflowState {
312
320
  static workflow(state: WorkflowStateModel): WorkflowSchema | null;
313
321
  static formulaProperties(state: WorkflowStateModel): FormulaProperty[];
314
322
  static groups(state: WorkflowStateModel): GroupDefinition[];
315
- static roles(state: WorkflowStateModel): RoleDefinition[];
323
+ static roles(state: WorkflowStateModel): Array<RoleDefinition | RoleGroupDefinition>;
316
324
  static selectedStep(state: WorkflowStateModel): StepSchema | null;
317
325
  static isFlowValid(state: WorkflowStateModel): boolean | null;
318
326
  static stepsSchema(state: WorkflowStateModel): WorkflowStepSchema[];
@@ -322,9 +330,9 @@ declare class WorkflowState {
322
330
  setModuleInfo(ctx: StateContext<WorkflowStateModel>, action: SetModuleInfo): void;
323
331
  getWorkflows(ctx: StateContext<WorkflowStateModel>, _action: GetWorkflows): rxjs.Observable<Response<WorkflowListItem[]> | null>;
324
332
  getWorkflow(ctx: StateContext<WorkflowStateModel>, action: GetWorkflow): rxjs.Observable<Response<WorkflowSchema> | null>;
325
- getFormulaProperties(ctx: StateContext<WorkflowStateModel>, _action: GetFormulaProperties): rxjs.Observable<null> | rxjs.Observable<never[] | Response<FormulaProperty[]>>;
333
+ getFormulaProperties(ctx: StateContext<WorkflowStateModel>, _action: GetFormulaProperties): rxjs.Observable<null> | rxjs.Observable<Response<FormulaProperty[]> | never[]>;
326
334
  getGroups(ctx: StateContext<WorkflowStateModel>, _action: GetGroups): rxjs.Observable<GroupDefinition[]> | rxjs.Observable<never[] | Response<GroupDefinition[]>>;
327
- getRolesForModule(ctx: StateContext<WorkflowStateModel>, _action: GetRolesForModule): rxjs.Observable<never[] | Response<RoleDefinition[]>>;
335
+ getRolesForModule(ctx: StateContext<WorkflowStateModel>, _action: GetRolesForModule): rxjs.Observable<never[] | Response<unknown[]>>;
328
336
  getStep(ctx: StateContext<WorkflowStateModel>, action: GetStep): rxjs.Observable<Response<StepSchema> | null>;
329
337
  validateFlow(ctx: StateContext<WorkflowStateModel>, _action: ValidateFlow): rxjs.Observable<Response<boolean> | null>;
330
338
  createStep(ctx: StateContext<WorkflowStateModel>, action: CreateStep): rxjs.Observable<Response<StepResponse> | null>;
@@ -350,7 +358,8 @@ declare class WorkflowBuilder {
350
358
  value: string;
351
359
  }[];
352
360
  groups: _angular_core.Signal<_masterteam_workflow.GroupDefinition[]>;
353
- roles: _angular_core.Signal<_masterteam_workflow.RoleDefinition[]>;
361
+ roles: _angular_core.Signal<(_masterteam_workflow.RoleDefinition | _masterteam_workflow.RoleGroupDefinition)[]>;
362
+ hasGroupedRoles: _angular_core.Signal<boolean>;
354
363
  workflows: _angular_core.Signal<_masterteam_workflow.WorkflowListItem[]>;
355
364
  workflow: _angular_core.Signal<_masterteam_workflow.WorkflowSchema | null>;
356
365
  loading: _angular_core.Signal<boolean>;
@@ -358,6 +367,7 @@ declare class WorkflowBuilder {
358
367
  isFlowValid: _angular_core.Signal<boolean | null>;
359
368
  selectedStep: _angular_core.Signal<_masterteam_workflow.StepSchema | null>;
360
369
  selectedWorkflowId: _angular_core.Signal<number | undefined>;
370
+ connectionFormulaSchemaId: _angular_core.Signal<number | undefined>;
361
371
  hasMultipleWorkflows: _angular_core.Signal<boolean>;
362
372
  private readonly confirmationService;
363
373
  selectedTab: _angular_core.WritableSignal<any>;
@@ -412,7 +422,7 @@ declare class WorkflowBuilder {
412
422
  id: number;
413
423
  source: number;
414
424
  target: number;
415
- formula: any[];
425
+ formula: _masterteam_formula_builder.FormulaBuilderValue | null;
416
426
  priority: number;
417
427
  loading?: boolean;
418
428
  }[]>;
@@ -453,4 +463,4 @@ declare const REQUEST_CONTEXT: HttpContextToken<{
453
463
  }>;
454
464
 
455
465
  export { CreateConnection, CreateStep, DeleteConnection, DeleteStep, GetFormulaProperties, GetGroups, GetRolesForModule, GetStep, GetWorkflow, GetWorkflows, PublishWorkflow, REQUEST_CONTEXT, SetModuleInfo, UpdateConnection, UpdateStep, ValidateFlow, WorkflowBuilder, WorkflowFacade, WorkflowState };
456
- export type { ConnectionPayload, ConnectionResponse, FormulaProperty, GroupDefinition, PublishPayload, PublishResponse, Response, RoleDefinition, StepPayload, StepPropertyItem, StepPropertyPayload, StepResponse, StepSchema, WorkflowConnection, WorkflowListItem, WorkflowLoadingName, WorkflowProperty, WorkflowPropertyConfig, WorkflowSchema, WorkflowStateModel, WorkflowStepSchema };
466
+ export type { ConnectionPayload, ConnectionResponse, FormulaProperty, GroupDefinition, PublishPayload, PublishResponse, Response, RoleDefinition, RoleGroupDefinition, StepPayload, StepPropertyItem, StepPropertyPayload, StepResponse, StepSchema, WorkflowConnection, WorkflowListItem, WorkflowLoadingName, WorkflowProperty, WorkflowPropertyConfig, WorkflowSchema, WorkflowStateModel, WorkflowStepSchema };