ngx-histaff-alpha 5.7.3 → 5.7.4

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.
Files changed (36) hide show
  1. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-AVoa-v8q.mjs → ngx-histaff-alpha-ai-hint-for-table.component-aANJ9IGi.mjs} +3 -3
  2. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-AVoa-v8q.mjs.map → ngx-histaff-alpha-ai-hint-for-table.component-aANJ9IGi.mjs.map} +1 -1
  3. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-cbm3hPr2.mjs → ngx-histaff-alpha-core-form-design.component-DbfyYTFh.mjs} +5 -5
  4. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-cbm3hPr2.mjs.map → ngx-histaff-alpha-core-form-design.component-DbfyYTFh.mjs.map} +1 -1
  5. package/fesm2022/{ngx-histaff-alpha-core-sticker-collection.component-BiQ-rvp-.mjs → ngx-histaff-alpha-core-sticker-collection.component-BwqJiCc4.mjs} +3 -3
  6. package/fesm2022/{ngx-histaff-alpha-core-sticker-collection.component-BiQ-rvp-.mjs.map → ngx-histaff-alpha-core-sticker-collection.component-BwqJiCc4.mjs.map} +1 -1
  7. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-BHo8FIID.mjs → ngx-histaff-alpha-core-toast-loading.component-6hpkcuyU.mjs} +2 -2
  8. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-BHo8FIID.mjs.map → ngx-histaff-alpha-core-toast-loading.component-6hpkcuyU.mjs.map} +1 -1
  9. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-CPB9bUac.mjs → ngx-histaff-alpha-core-workflow-consume.component-B0UEkFLW.mjs} +2 -2
  10. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-CPB9bUac.mjs.map → ngx-histaff-alpha-core-workflow-consume.component-B0UEkFLW.mjs.map} +1 -1
  11. package/fesm2022/{ngx-histaff-alpha-db-settings.component-BLRtDz07.mjs → ngx-histaff-alpha-db-settings.component-DyTgFHJj.mjs} +5 -5
  12. package/fesm2022/{ngx-histaff-alpha-db-settings.component-BLRtDz07.mjs.map → ngx-histaff-alpha-db-settings.component-DyTgFHJj.mjs.map} +1 -1
  13. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-BiM3aKvD.mjs → ngx-histaff-alpha-design-wrapper.component-CR2DfllM.mjs} +5 -5
  14. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-BiM3aKvD.mjs.map → ngx-histaff-alpha-design-wrapper.component-CR2DfllM.mjs.map} +1 -1
  15. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-DnkN49JV.mjs → ngx-histaff-alpha-design-wrapper.route-B2Pv8hQq.mjs} +5 -5
  16. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-DnkN49JV.mjs.map → ngx-histaff-alpha-design-wrapper.route-B2Pv8hQq.mjs.map} +1 -1
  17. package/fesm2022/{ngx-histaff-alpha-live-form.component-DdKOgA8G.mjs → ngx-histaff-alpha-live-form.component-Djf5udbq.mjs} +102 -32
  18. package/fesm2022/ngx-histaff-alpha-live-form.component-Djf5udbq.mjs.map +1 -0
  19. package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-BUV0gHis.mjs → ngx-histaff-alpha-ngx-histaff-alpha-tEKeWJgJ.mjs} +34 -31
  20. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-tEKeWJgJ.mjs.map +1 -0
  21. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-DGZIdg2Y.mjs → ngx-histaff-alpha-wf-form-assign.component-BSJm0d0_.mjs} +2 -2
  22. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-DGZIdg2Y.mjs.map → ngx-histaff-alpha-wf-form-assign.component-BSJm0d0_.mjs.map} +1 -1
  23. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DJ_fM1J4.mjs → ngx-histaff-alpha-wf-instance-status.component-tJLOmgm7.mjs} +2 -2
  24. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DJ_fM1J4.mjs.map → ngx-histaff-alpha-wf-instance-status.component-tJLOmgm7.mjs.map} +1 -1
  25. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-DMgA379y.mjs → ngx-histaff-alpha-wf-instance-step-react.component-DMX-FFdR.mjs} +3 -3
  26. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-DMgA379y.mjs.map → ngx-histaff-alpha-wf-instance-step-react.component-DMX-FFdR.mjs.map} +1 -1
  27. package/fesm2022/ngx-histaff-alpha.mjs +1 -1
  28. package/lib/app/libraries/core-form-design/core-form-design.service.d.ts +1 -1
  29. package/lib/app/libraries/core-form-design/enums/EnumSupportedRuntimeValidator.d.ts +0 -1
  30. package/lib/app/libraries/core-form-design/live-form/live-form.component.d.ts +24 -17
  31. package/lib/app/libraries/core-workflow-builder/core-workflow.service.d.ts +1 -0
  32. package/lib/app/libraries/core-workflow-builder/interfaces/ISubmitResult.d.ts +6 -0
  33. package/lib/app/libraries/core-workflow-builder/routing-preview/routing-preview.component.d.ts +1 -1
  34. package/package.json +1 -1
  35. package/fesm2022/ngx-histaff-alpha-live-form.component-DdKOgA8G.mjs.map +0 -1
  36. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-BUV0gHis.mjs.map +0 -1
@@ -1,23 +1,23 @@
1
- import { g as CanDeactivateGuard } from './ngx-histaff-alpha-ngx-histaff-alpha-BUV0gHis.mjs';
1
+ import { g as CanDeactivateGuard } from './ngx-histaff-alpha-ngx-histaff-alpha-tEKeWJgJ.mjs';
2
2
 
3
3
  const wfDesignWrapperRoutes = [
4
4
  {
5
5
  path: '',
6
- loadComponent: () => import('./ngx-histaff-alpha-design-wrapper.component-BiM3aKvD.mjs').then(m => m.DesignWrapperComponent),
6
+ loadComponent: () => import('./ngx-histaff-alpha-design-wrapper.component-CR2DfllM.mjs').then(m => m.DesignWrapperComponent),
7
7
  canDeactivate: [CanDeactivateGuard],
8
8
  children: [
9
9
  {
10
10
  path: ':id',
11
11
  outlet: 'preview',
12
- loadComponent: () => import('./ngx-histaff-alpha-live-form.component-DdKOgA8G.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent)
12
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-Djf5udbq.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent)
13
13
  },
14
14
  ]
15
15
  },
16
16
  {
17
17
  path: ':id',
18
- loadComponent: () => import('./ngx-histaff-alpha-live-form.component-DdKOgA8G.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent)
18
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-Djf5udbq.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent)
19
19
  }
20
20
  ];
21
21
 
22
22
  export { wfDesignWrapperRoutes };
23
- //# sourceMappingURL=ngx-histaff-alpha-design-wrapper.route-DnkN49JV.mjs.map
23
+ //# sourceMappingURL=ngx-histaff-alpha-design-wrapper.route-B2Pv8hQq.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-histaff-alpha-design-wrapper.route-DnkN49JV.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/design-wrapper/design-wrapper.route.ts"],"sourcesContent":["import { Routes } from '@angular/router';\r\nimport { CanDeactivateGuard } from '../../../guards/can-deactivate.guard';\r\n\r\nexport const wfDesignWrapperRoutes: Routes = [\r\n {\r\n path: '',\r\n loadComponent: () => import('./design-wrapper.component').then(m => m.DesignWrapperComponent),\r\n canDeactivate: [CanDeactivateGuard],\r\n children: [\r\n {\r\n path: ':id',\r\n outlet: 'preview',\r\n loadComponent: () => import('../../core-form-design/live-form/live-form.component').then(m => m.LiveFormComponent)\r\n },\r\n ]\r\n },\r\n {\r\n path: ':id',\r\n loadComponent: () => import('../../core-form-design/live-form/live-form.component').then(m => m.LiveFormComponent)\r\n }\r\n]"],"names":[],"mappings":";;AAGa,MAAA,qBAAqB,GAAW;AACzC,IAAA;AACI,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,aAAa,EAAE,MAAM,OAAO,2DAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC;QAC7F,aAAa,EAAE,CAAC,kBAAkB,CAAC;AACnC,QAAA,QAAQ,EAAE;AACN,YAAA;AACI,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,aAAa,EAAE,MAAM,OAAO,sDAAsD,oCAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB;AACpH,aAAA;AACJ;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,aAAa,EAAE,MAAM,OAAO,sDAAsD,oCAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB;AACpH;;;;;"}
1
+ {"version":3,"file":"ngx-histaff-alpha-design-wrapper.route-B2Pv8hQq.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-workflow-builder/design-wrapper/design-wrapper.route.ts"],"sourcesContent":["import { Routes } from '@angular/router';\r\nimport { CanDeactivateGuard } from '../../../guards/can-deactivate.guard';\r\n\r\nexport const wfDesignWrapperRoutes: Routes = [\r\n {\r\n path: '',\r\n loadComponent: () => import('./design-wrapper.component').then(m => m.DesignWrapperComponent),\r\n canDeactivate: [CanDeactivateGuard],\r\n children: [\r\n {\r\n path: ':id',\r\n outlet: 'preview',\r\n loadComponent: () => import('../../core-form-design/live-form/live-form.component').then(m => m.LiveFormComponent)\r\n },\r\n ]\r\n },\r\n {\r\n path: ':id',\r\n loadComponent: () => import('../../core-form-design/live-form/live-form.component').then(m => m.LiveFormComponent)\r\n }\r\n]"],"names":[],"mappings":";;AAGa,MAAA,qBAAqB,GAAW;AACzC,IAAA;AACI,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,aAAa,EAAE,MAAM,OAAO,2DAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC;QAC7F,aAAa,EAAE,CAAC,kBAAkB,CAAC;AACnC,QAAA,QAAQ,EAAE;AACN,YAAA;AACI,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,MAAM,EAAE,SAAS;AACjB,gBAAA,aAAa,EAAE,MAAM,OAAO,sDAAsD,oCAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB;AACpH,aAAA;AACJ;AACJ,KAAA;AACD,IAAA;AACI,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,aAAa,EAAE,MAAM,OAAO,sDAAsD,oCAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,iBAAiB;AACpH;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, signal, isDevMode, computed, inject, HostListener, ChangeDetectionStrategy, Component, output, ChangeDetectorRef, Injector, effect } from '@angular/core';
3
- import { c as BaseComponent, $ as EnumImageResolverType, C as CoreWorkflowService, h as AlertService, z as AppConfigService, k as alertOptions, M as MultiLanguageService, T as TranslatePipe, I as ImageErrorResolverDirective, a0 as NormalizeHumanNamePipe, f as TooltipDirective, a1 as CoreIosSwitcherComponent, l as CoreTerminalSpinnerComponent, d as CorePageHeaderComponent, p as DomService, w as CoreParamControlComponent, m as CoreFormDesignService, y as ApplicationHelpService, J as JsonService, A as AppService, a2 as CoreFormService, E as EnumFormBaseContolType, K as EnumCorePageEditMode, L as EnumCoreButtonVNSCode, a as EnumCoreFormControlSeekerSourceType, H as HotKeysDirective, P as CoreFormComponent } from './ngx-histaff-alpha-ngx-histaff-alpha-BUV0gHis.mjs';
3
+ import { c as BaseComponent, $ as EnumImageResolverType, C as CoreWorkflowService, h as AlertService, z as AppConfigService, k as alertOptions, M as MultiLanguageService, T as TranslatePipe, I as ImageErrorResolverDirective, a0 as NormalizeHumanNamePipe, f as TooltipDirective, a1 as CoreIosSwitcherComponent, l as CoreTerminalSpinnerComponent, d as CorePageHeaderComponent, p as DomService, w as CoreParamControlComponent, m as CoreFormDesignService, y as ApplicationHelpService, J as JsonService, A as AppService, a2 as CoreFormService, E as EnumFormBaseContolType, K as EnumCorePageEditMode, L as EnumCoreButtonVNSCode, a as EnumCoreFormControlSeekerSourceType, H as HotKeysDirective, P as CoreFormComponent } from './ngx-histaff-alpha-ngx-histaff-alpha-tEKeWJgJ.mjs';
4
4
  import { catchError, of, finalize, BehaviorSubject, filter, distinctUntilChanged, tap } from 'rxjs';
5
5
  import { NgClass, JsonPipe, NgStyle } from '@angular/common';
6
6
  import { RouterLink, Router, ActivatedRoute } from '@angular/router';
@@ -19,7 +19,7 @@ class RoutingPreviewComponent extends BaseComponent {
19
19
  this.$backendMessage = signal('');
20
20
  this.$submitResponseItems = signal([]);
21
21
  this.$results = signal([]);
22
- this.logExpandedStates = signal([]);
22
+ this.$logExpandedStates = signal([]);
23
23
  this.$logs = signal([]);
24
24
  this.imageResolverType = EnumImageResolverType.AVATAR;
25
25
  this.isDevMode = isDevMode();
@@ -112,7 +112,7 @@ class RoutingPreviewComponent extends BaseComponent {
112
112
  this.liveForm.patchValue(response.attributes);
113
113
  }
114
114
  this.$results.set(validResults);
115
- this.logExpandedStates.set(new Array(validResults.length).fill(false));
115
+ this.$logExpandedStates.set(new Array(validResults.length).fill(false));
116
116
  this.$backendMessage.set(allErrors.join('\n'));
117
117
  }
118
118
  else {
@@ -171,14 +171,14 @@ class RoutingPreviewComponent extends BaseComponent {
171
171
  });
172
172
  }
173
173
  toggleLog(index) {
174
- this.logExpandedStates.update(arr => {
174
+ this.$logExpandedStates.update(arr => {
175
175
  const newArr = [...arr];
176
176
  newArr[index] = !newArr[index];
177
177
  return newArr;
178
178
  });
179
179
  }
180
180
  isLogVisible(index) {
181
- return this.logExpandedStates()?.[index] ?? false;
181
+ return this.$logExpandedStates()?.[index] ?? false;
182
182
  }
183
183
  getLogLinesFor(index) {
184
184
  const logs = this.$logs();
@@ -196,7 +196,7 @@ class RoutingPreviewComponent extends BaseComponent {
196
196
  }
197
197
  }
198
198
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: RoutingPreviewComponent, deps: [{ token: MultiLanguageService }], target: i0.ɵɵFactoryTarget.Component }); }
199
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: RoutingPreviewComponent, isStandalone: true, selector: "routing-preview", inputs: { $previewMode: { classPropertyName: "$previewMode", publicName: "$previewMode", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "document:keydown": "handleKeyDown($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"routing-preview-container inter-font p-relative\">\r\n\r\n <div class=\"correlation-id\">\r\n\r\n <!-- @if ($saga()?.correlationId) {\r\n Workflow live instance: \r\n <a [routerLink]=\"['/root/workflow/status', $saga()?.correlationId]\">\r\n {{ $saga()?.correlationId }}\r\n </a>\r\n } -->\r\n\r\n <!-- @if ($loading()) {\r\n <core-terminal-spinner />\r\n } @else if ($saga()?.correlationId) {\r\n <button @fadeToggle type=\"button\" (click)=\"copy($saga()?.correlationId || '')\" class=\"copy-btn\">\r\n <i class=\"feather-clipboard\"></i>\r\n </button>\r\n\r\n } -->\r\n </div>\r\n\r\n <div class=\"routing-preview-header\">\r\n\r\n <div class=\"button-group\">\r\n <button type=\"button\" class=\"btn btn-primary h35\" (click)=\"backToLiveForm()\">Back to Form (ESC)</button>\r\n <button type=\"button\" class=\"btn btn-secondary h35\" (click)=\"generateRouting()\">Generate</button>\r\n @if (!!appConfigService.WORKFLOW_ENABLE_DEBUG_MODE && $isDebugMode()) {\r\n <button @fadeToggle type=\"button\" class=\"btn btn-secondary h35\" (click)=\"toggleResolvedSteps()\">Show/Hide resolved\r\n steps</button>\r\n }\r\n <button @fadeToggle type=\"button\" class=\"btn btn-primary h35\" (click)=\"initialDebugSubmit()\">Submit</button>\r\n </div>\r\n\r\n @if (!!appConfigService.WORKFLOW_ENABLE_DEBUG_MODE) {\r\n <div class=\"debug-group\">\r\n <label>Debug mode</label>\r\n <core-ios-switcher [width]=\"45\" [showOnOffText]=\"false\" [ngModel]=\"$isDebugMode()\"\r\n (ngModelChange)=\"onIsDebugModeChange($event)\"></core-ios-switcher>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"workflows-wrapper\">\r\n @if ($loading()) {\r\n <core-terminal-spinner /><span>Generating...</span>\r\n } @else {\r\n\r\n\r\n @if (!!$results().length) {\r\n\r\n @for (result of $results(); track $index) {\r\n\r\n <div class=\"result-group mb-8 p-4 rounded bg-white shadow-sm\">\r\n\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <h6 class=\"text-base font-semibold text-sky-700\">Routing for {{ result.targetEmployeeFullName }}</h6>\r\n <div class=\"d-flex d-flex-between\">\r\n <button type=\"button\" class=\"text-xs text-blue-500 underline btn btn-secondary\" (click)=\"toggleLog($index)\">\r\n {{ logExpandedStates()[ $index ] ? 'Hide log' : 'Show log' }}\r\n </button>\r\n @if ($loading()) {\r\n <core-terminal-spinner />\r\n }\r\n <!-- @if (!!$submitResponseItems().length && !!getCorrelationId(result)) {\r\n <div class=\"saga-link d-flex d-flex-start\">\r\n <label>The process activated:</label>\r\n <a class=\"external-link\" [routerLink]=\"['/root/workflow/status', getCorrelationId(result)]\">\r\n Click here to see status\r\n </a>\r\n </div>\r\n } -->\r\n @for (result of $submitResponseItems(); track result.employeeId) {\r\n <div class=\"saga-link d-flex d-flex-start\">\r\n <label>{{ result.employeeFullName }}:</label>\r\n\r\n @if (result.correlationId) {\r\n <a class=\"external-link\" [routerLink]=\"['/root/workflow/status', result.correlationId]\">\r\n \u2705 Click to see status\r\n </a>\r\n } @else {\r\n <span class=\"text-danger d-flex flex-column\">\r\n @for (line of (result.error?.split('\\n') || []); track line) {\r\n <div>\u274C {{ line }}</div>\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"workflow-wrapper\">\r\n\r\n @for (step of result.response.steps! ?? []; track step.id) {\r\n <div class=\"step-column\" [attr.data-actor-count]=\"step.resolvedActors?.length || 0\">\r\n\r\n <div class=\"step-column-aux\">\r\n\r\n <div class=\"step-header {{ step.type.toLowerCase() }}\"\r\n [ngClass]=\"(step.actorResolvedStatus ?? 'RESOLVED').toLowerCase()\">\r\n {{ step.name | translate : lang }} {{ step.config?.routingLogic }}\r\n </div>\r\n\r\n @for (actor of step.resolvedActors; track $index) {\r\n <div class=\"actor-card-aux\">\r\n <div class=\"actor-card d-flex d-flex-start {{ step.type.toLowerCase() }}\">\r\n <div class=\"avatar-wrapper\">\r\n <img [src]=\"actor.avatar\" appImageErrorResolver [type]=\"imageResolverType\"\r\n [isFemale]=\"!!actor.isFemale!\" class=\"actor-avatar\" alt=\"{{ actor.fullName }}\" />\r\n </div>\r\n <div class=\"actor-details\">\r\n <div class=\"actor-line\">\r\n <i class=\"feather-user\"></i>\r\n <span class=\"actor-full-name\" [appTooltip]=\"actor.fullName\">{{ actor.fullName | normalizeHumanName\r\n }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-briefcase\"></i>\r\n <span [appTooltip]=\"actor.jobName\">{{ actor.jobName }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-mail\"></i>\r\n @if ($isDebugMode()) {\r\n <input @fadeToggle class=\"email-debug-input\" type=\"email\" [(ngModel)]=\"actor.email\"\r\n (ngModelChange)=\"onEmailChange(actor, $event)\" placeholder=\"Enter demo email\" />\r\n } @else {\r\n <span [appTooltip]=\"actor.email\">{{ actor.email }}</span>\r\n }\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-hash\"></i>\r\n <span @fadeToggle [appTooltip]=\"actor.employeeCode\">{{ actor.employeeCode }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (isLogVisible($index)) {\r\n <pre class=\"employee-log mt-4 bg-gray-50 p-3 rounded text-xs font-mono text-gray-800\">\r\n @for (line of getLogLinesFor($index); track $index) {\r\n {{ line }}\r\n }\r\n </pre>\r\n }\r\n\r\n </div>\r\n\r\n }\r\n\r\n } @else if (!!$backendMessage()) {\r\n\r\n <div class=\"backend-message error-list bg-red-50 rounded p-4 text-sm text-red-800 leading-relaxed\">\r\n @for (line of $backendMessage().split('\\n'); track $index) {\r\n <div class=\"error-item flex items-start gap-2\">\r\n <i class=\"feather-alert-circle text-red-600 mt-0.5\"></i>\r\n <span [innerText]=\"line\"></span>\r\n </div>\r\n }\r\n </div>\r\n\r\n } @else {\r\n No routing steps found.\r\n }\r\n\r\n\r\n }\r\n\r\n </div>\r\n\r\n @if ($showResolvedSteps()) {\r\n <h5>Resolved steps</h5>\r\n <div class=\"resolved-steps\">\r\n <!-- <pre>{{ $resolvedStepsJson() }}</pre> -->\r\n </div>\r\n }\r\n\r\n</div>", styles: [".routing-preview-container{font-size:13px}.routing-preview-container .correlation-id{display:flex;align-items:center;height:35px;font-family:monospace}.routing-preview-container .correlation-id button{border:none;margin-left:8px}.routing-preview-container .workflow-wrapper{display:flex;flex-direction:row;gap:64px;padding:24px;background:#f5f5f5;overflow-x:auto;min-width:576px;min-height:200px}.routing-preview-container .workflow-wrapper .step-column{width:240px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;position:relative;min-height:100%}.routing-preview-container .workflow-wrapper .step-header{position:relative;font-weight:600;font-size:14px;text-align:center;border:1px solid #ccc;border-radius:8px;box-shadow:0 1px 3px #0000001a;padding:6px 10px;margin-bottom:10px;width:100%;color:#fff}.routing-preview-container .workflow-wrapper .step-header.submit{background-color:#00bcd4}.routing-preview-container .workflow-wrapper .step-header.approval{background-color:#f80}.routing-preview-container .workflow-wrapper .step-header.cc{background-color:#3370ff}.routing-preview-container .workflow-wrapper .step-header.handle{background-color:#935af6}.routing-preview-container .workflow-wrapper .step-header.end{background-color:#673ab7}.routing-preview-container .workflow-wrapper .step-header.resolved{box-shadow:0 0 0 3px #4caf50 inset}.routing-preview-container .workflow-wrapper .step-header.empty{box-shadow:0 0 0 3px #ff9800 inset}.routing-preview-container .workflow-wrapper .step-header.fallback{box-shadow:0 0 0 3px #03a9f4 inset}.routing-preview-container .workflow-wrapper .step-header.error{box-shadow:0 0 0 3px #f44336 inset}.routing-preview-container .workflow-wrapper .actor-card-aux{position:relative}.routing-preview-container .workflow-wrapper .actor-card.d-flex{display:flex;align-items:center;justify-content:flex-start;width:240px;height:110px;font-size:13px;border:1px solid #ccc;padding:0 12px;margin:8px auto;box-shadow:0 1px 3px #0000001a;position:relative;background-color:#fff;border-radius:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-details .actor-line>span{font-weight:700;width:140px;overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-details .actor-line>span.actor-full-name{color:#000}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper{flex-shrink:0;margin-right:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;border:1px solid #ccc}.routing-preview-container .workflow-wrapper .step-column:not(:first-child) .actor-card:before{content:\"\";position:absolute;top:50%;left:-20px;width:16px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:first-child) .actor-card-aux:not(:last-child) .actor-card:after{content:\"\";position:absolute;top:50%;left:-20px;width:2px;height:calc(100% + 10px);background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .actor-card-aux:before{content:\"\";position:absolute;top:50%;right:-16px;width:16px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .actor-card-aux:not(:last-child):after{content:\"\";position:absolute;top:50%;right:-16px;width:2px;height:calc(100% + 10px);background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column-aux{position:relative}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .step-column-aux:after{content:\"\";position:absolute;top:calc(50% + 18.5px);right:-48px;width:32px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .actor-card.submit{background-color:#e0f7fa;border-left:4px solid #00bcd4}.routing-preview-container .workflow-wrapper .actor-card.approval{background-color:#fff3e0;border-left:4px solid #f80}.routing-preview-container .workflow-wrapper .actor-card.cc{background-color:#e6ecff;border-left:4px solid #3370ff}.routing-preview-container .workflow-wrapper .actor-card.handle{background-color:#f3e6ff;border-left:4px solid #935af6}.routing-preview-container .workflow-wrapper .actor-card.end{background-color:#ede7f6;border-left:4px solid #673ab7}.routing-preview-container .workflow-wrapper .actor-line{display:flex;align-items:center;gap:6px;margin:2px 0;height:23.5px}.routing-preview-container .workflow-wrapper .actor-line i{width:16px;height:16px;font-size:16px;color:#848484}.routing-preview-container .workflow-wrapper .actor-line input.email-debug-input{border:1px dashed #00bcd4;background-color:#e0f7fa;width:140px;padding:0 8px}.routing-preview-container .workflow-wrapper .actor-card span{display:block;color:#555;margin:2px 0}@media (max-width: 576px){.routing-preview-container .workflow-wrapper .workflow-wrapper{flex-direction:column;align-items:center;gap:24px}.routing-preview-container .workflow-wrapper .step-column{width:90vw}.routing-preview-container .workflow-wrapper .actor-card{width:100%}}.routing-preview-container .p-relative{position:relative}.routing-preview-container .routing-preview-header{display:flex;align-items:center;justify-content:space-between;height:35px;margin-bottom:15px}.routing-preview-container .routing-preview-header .button-group{display:flex;align-items:center;justify-content:flex-start;gap:8px;height:35px}.routing-preview-container .routing-preview-header .button-group button{border-radius:0;color:#fff;height:35px;font-size:13px}.routing-preview-container .routing-preview-header .debug-group{display:flex;align-items:center;justify-content:flex-start;height:35px}.routing-preview-container .routing-preview-header .debug-group label{-webkit-user-select:none;user-select:none;margin-right:8px}.routing-preview-container h5{padding:15px;color:#848484}.routing-preview-container .resolved-steps pre{padding:15px}.routing-preview-container .employee-log{max-width:100%;overflow-x:auto;background:#f9f9f9;border-left:4px solid #3b82f6;padding:12px 16px;margin-top:16px;font-family:monospace;font-size:13px;border-radius:6px;white-space:pre-wrap;box-sizing:border-box}.routing-preview-container .saga-link label{font-size:13px;color:#848484;margin-right:8px}.routing-preview-container a.external-link{color:#358ccb!important}.routing-preview-container a.external-link:after{font-family:feather;content:\"\\e95b\"}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: ImageErrorResolverDirective, selector: "[appImageErrorResolver]", inputs: ["type", "isFemale"] }, { kind: "pipe", type: NormalizeHumanNamePipe, name: "normalizeHumanName" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "readonly"] }, { kind: "component", type: CoreTerminalSpinnerComponent, selector: "core-terminal-spinner" }], animations: [
199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: RoutingPreviewComponent, isStandalone: true, selector: "routing-preview", inputs: { $previewMode: { classPropertyName: "$previewMode", publicName: "$previewMode", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "document:keydown": "handleKeyDown($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"routing-preview-container inter-font p-relative\">\r\n\r\n <div class=\"correlation-id\">\r\n\r\n <!-- @if ($saga()?.correlationId) {\r\n Workflow live instance: \r\n <a [routerLink]=\"['/root/workflow/status', $saga()?.correlationId]\">\r\n {{ $saga()?.correlationId }}\r\n </a>\r\n } -->\r\n\r\n <!-- @if ($loading()) {\r\n <core-terminal-spinner />\r\n } @else if ($saga()?.correlationId) {\r\n <button @fadeToggle type=\"button\" (click)=\"copy($saga()?.correlationId || '')\" class=\"copy-btn\">\r\n <i class=\"feather-clipboard\"></i>\r\n </button>\r\n\r\n } -->\r\n </div>\r\n\r\n <div class=\"routing-preview-header\">\r\n\r\n <div class=\"button-group\">\r\n <button type=\"button\" class=\"btn btn-primary h35\" (click)=\"backToLiveForm()\">Back to Form (ESC)</button>\r\n <button type=\"button\" class=\"btn btn-secondary h35\" (click)=\"generateRouting()\">Generate</button>\r\n @if (!!appConfigService.WORKFLOW_ENABLE_DEBUG_MODE && $isDebugMode()) {\r\n <button @fadeToggle type=\"button\" class=\"btn btn-secondary h35\" (click)=\"toggleResolvedSteps()\">Show/Hide resolved\r\n steps</button>\r\n }\r\n <button @fadeToggle type=\"button\" class=\"btn btn-primary h35\" (click)=\"initialDebugSubmit()\">Submit</button>\r\n </div>\r\n\r\n @if (!!appConfigService.WORKFLOW_ENABLE_DEBUG_MODE) {\r\n <div class=\"debug-group\">\r\n <label>Debug mode</label>\r\n <core-ios-switcher [width]=\"45\" [showOnOffText]=\"false\" [ngModel]=\"$isDebugMode()\"\r\n (ngModelChange)=\"onIsDebugModeChange($event)\"></core-ios-switcher>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"workflows-wrapper\">\r\n @if ($loading()) {\r\n <core-terminal-spinner /><span>Generating...</span>\r\n } @else {\r\n\r\n\r\n @if (!!$results().length) {\r\n\r\n @for (result of $results(); track $index) {\r\n\r\n <div class=\"result-group mb-8 p-4 rounded bg-white shadow-sm\">\r\n\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <h6 class=\"text-base font-semibold text-sky-700\">Routing for {{ result.targetEmployeeFullName }}</h6>\r\n <div class=\"d-flex d-flex-between\">\r\n <button type=\"button\" class=\"text-xs text-blue-500 underline btn btn-secondary\" (click)=\"toggleLog($index)\">\r\n {{ $logExpandedStates()[ $index ] ? 'Hide log' : 'Show log' }}\r\n </button>\r\n @if ($loading()) {\r\n <core-terminal-spinner />\r\n }\r\n <!-- @if (!!$submitResponseItems().length && !!getCorrelationId(result)) {\r\n <div class=\"saga-link d-flex d-flex-start\">\r\n <label>The process activated:</label>\r\n <a class=\"external-link\" [routerLink]=\"['/root/workflow/status', getCorrelationId(result)]\">\r\n Click here to see status\r\n </a>\r\n </div>\r\n } -->\r\n @for (result of $submitResponseItems(); track result.employeeId) {\r\n <div class=\"saga-link d-flex d-flex-start\">\r\n <label>{{ result.employeeFullName }}:</label>\r\n\r\n @if (result.correlationId) {\r\n <a class=\"external-link\" [routerLink]=\"['/root/workflow/status', result.correlationId]\">\r\n \u2705 Click to see status\r\n </a>\r\n } @else {\r\n <span class=\"text-danger d-flex flex-column\">\r\n @for (line of (result.error?.split('\\n') || []); track line) {\r\n <div>\u274C {{ line }}</div>\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"workflow-wrapper\">\r\n\r\n @for (step of result.response.steps! ?? []; track step.id) {\r\n <div class=\"step-column\" [attr.data-actor-count]=\"step.resolvedActors?.length || 0\">\r\n\r\n <div class=\"step-column-aux\">\r\n\r\n <div class=\"step-header {{ step.type.toLowerCase() }}\"\r\n [ngClass]=\"(step.actorResolvedStatus ?? 'RESOLVED').toLowerCase()\">\r\n {{ step.name | translate : lang }} {{ step.config?.routingLogic }}\r\n </div>\r\n\r\n @for (actor of step.resolvedActors; track $index) {\r\n <div class=\"actor-card-aux\">\r\n <div class=\"actor-card d-flex d-flex-start {{ step.type.toLowerCase() }}\">\r\n <div class=\"avatar-wrapper\">\r\n <img [src]=\"actor.avatar\" appImageErrorResolver [type]=\"imageResolverType\"\r\n [isFemale]=\"!!actor.isFemale!\" class=\"actor-avatar\" alt=\"{{ actor.fullName }}\" />\r\n </div>\r\n <div class=\"actor-details\">\r\n <div class=\"actor-line\">\r\n <i class=\"feather-user\"></i>\r\n <span class=\"actor-full-name\" [appTooltip]=\"actor.fullName\">{{ actor.fullName | normalizeHumanName\r\n }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-briefcase\"></i>\r\n <span [appTooltip]=\"actor.jobName\">{{ actor.jobName }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-mail\"></i>\r\n @if ($isDebugMode()) {\r\n <input @fadeToggle class=\"email-debug-input\" type=\"email\" [(ngModel)]=\"actor.email\"\r\n (ngModelChange)=\"onEmailChange(actor, $event)\" placeholder=\"Enter demo email\" />\r\n } @else {\r\n <span [appTooltip]=\"actor.email\">{{ actor.email }}</span>\r\n }\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-hash\"></i>\r\n <span @fadeToggle [appTooltip]=\"actor.employeeCode\">{{ actor.employeeCode }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (isLogVisible($index)) {\r\n <pre class=\"employee-log mt-4 bg-gray-50 p-3 rounded text-xs font-mono text-gray-800\">\r\n @for (line of getLogLinesFor($index); track $index) {\r\n {{ line }}\r\n }\r\n </pre>\r\n }\r\n\r\n </div>\r\n\r\n }\r\n\r\n } @else if (!!$backendMessage()) {\r\n\r\n <div class=\"backend-message error-list bg-red-50 rounded p-4 text-sm text-red-800 leading-relaxed\">\r\n @for (line of $backendMessage().split('\\n'); track $index) {\r\n <div class=\"error-item flex items-start gap-2\">\r\n <i class=\"feather-alert-circle text-red-600 mt-0.5\"></i>\r\n <span [innerText]=\"line\"></span>\r\n </div>\r\n }\r\n </div>\r\n\r\n } @else {\r\n No routing steps found.\r\n }\r\n\r\n\r\n }\r\n\r\n </div>\r\n\r\n @if ($showResolvedSteps()) {\r\n <h5>Resolved steps</h5>\r\n <div class=\"resolved-steps\">\r\n <!-- <pre>{{ $resolvedStepsJson() }}</pre> -->\r\n </div>\r\n }\r\n\r\n</div>", styles: [".routing-preview-container{font-size:13px}.routing-preview-container .correlation-id{display:flex;align-items:center;height:35px;font-family:monospace}.routing-preview-container .correlation-id button{border:none;margin-left:8px}.routing-preview-container .workflow-wrapper{display:flex;flex-direction:row;gap:64px;padding:24px;background:#f5f5f5;overflow-x:auto;min-width:576px;min-height:200px}.routing-preview-container .workflow-wrapper .step-column{width:240px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;position:relative;min-height:100%}.routing-preview-container .workflow-wrapper .step-header{position:relative;font-weight:600;font-size:14px;text-align:center;border:1px solid #ccc;border-radius:8px;box-shadow:0 1px 3px #0000001a;padding:6px 10px;margin-bottom:10px;width:100%;color:#fff}.routing-preview-container .workflow-wrapper .step-header.submit{background-color:#00bcd4}.routing-preview-container .workflow-wrapper .step-header.approval{background-color:#f80}.routing-preview-container .workflow-wrapper .step-header.cc{background-color:#3370ff}.routing-preview-container .workflow-wrapper .step-header.handle{background-color:#935af6}.routing-preview-container .workflow-wrapper .step-header.end{background-color:#673ab7}.routing-preview-container .workflow-wrapper .step-header.resolved{box-shadow:0 0 0 3px #4caf50 inset}.routing-preview-container .workflow-wrapper .step-header.empty{box-shadow:0 0 0 3px #ff9800 inset}.routing-preview-container .workflow-wrapper .step-header.fallback{box-shadow:0 0 0 3px #03a9f4 inset}.routing-preview-container .workflow-wrapper .step-header.error{box-shadow:0 0 0 3px #f44336 inset}.routing-preview-container .workflow-wrapper .actor-card-aux{position:relative}.routing-preview-container .workflow-wrapper .actor-card.d-flex{display:flex;align-items:center;justify-content:flex-start;width:240px;height:110px;font-size:13px;border:1px solid #ccc;padding:0 12px;margin:8px auto;box-shadow:0 1px 3px #0000001a;position:relative;background-color:#fff;border-radius:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-details .actor-line>span{font-weight:700;width:140px;overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-details .actor-line>span.actor-full-name{color:#000}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper{flex-shrink:0;margin-right:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;border:1px solid #ccc}.routing-preview-container .workflow-wrapper .step-column:not(:first-child) .actor-card:before{content:\"\";position:absolute;top:50%;left:-20px;width:16px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:first-child) .actor-card-aux:not(:last-child) .actor-card:after{content:\"\";position:absolute;top:50%;left:-20px;width:2px;height:calc(100% + 10px);background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .actor-card-aux:before{content:\"\";position:absolute;top:50%;right:-16px;width:16px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .actor-card-aux:not(:last-child):after{content:\"\";position:absolute;top:50%;right:-16px;width:2px;height:calc(100% + 10px);background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column-aux{position:relative}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .step-column-aux:after{content:\"\";position:absolute;top:calc(50% + 18.5px);right:-48px;width:32px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .actor-card.submit{background-color:#e0f7fa;border-left:4px solid #00bcd4}.routing-preview-container .workflow-wrapper .actor-card.approval{background-color:#fff3e0;border-left:4px solid #f80}.routing-preview-container .workflow-wrapper .actor-card.cc{background-color:#e6ecff;border-left:4px solid #3370ff}.routing-preview-container .workflow-wrapper .actor-card.handle{background-color:#f3e6ff;border-left:4px solid #935af6}.routing-preview-container .workflow-wrapper .actor-card.end{background-color:#ede7f6;border-left:4px solid #673ab7}.routing-preview-container .workflow-wrapper .actor-line{display:flex;align-items:center;gap:6px;margin:2px 0;height:23.5px}.routing-preview-container .workflow-wrapper .actor-line i{width:16px;height:16px;font-size:16px;color:#848484}.routing-preview-container .workflow-wrapper .actor-line input.email-debug-input{border:1px dashed #00bcd4;background-color:#e0f7fa;width:140px;padding:0 8px}.routing-preview-container .workflow-wrapper .actor-card span{display:block;color:#555;margin:2px 0}@media (max-width: 576px){.routing-preview-container .workflow-wrapper .workflow-wrapper{flex-direction:column;align-items:center;gap:24px}.routing-preview-container .workflow-wrapper .step-column{width:90vw}.routing-preview-container .workflow-wrapper .actor-card{width:100%}}.routing-preview-container .p-relative{position:relative}.routing-preview-container .routing-preview-header{display:flex;align-items:center;justify-content:space-between;height:35px;margin-bottom:15px}.routing-preview-container .routing-preview-header .button-group{display:flex;align-items:center;justify-content:flex-start;gap:8px;height:35px}.routing-preview-container .routing-preview-header .button-group button{border-radius:0;color:#fff;height:35px;font-size:13px}.routing-preview-container .routing-preview-header .debug-group{display:flex;align-items:center;justify-content:flex-start;height:35px}.routing-preview-container .routing-preview-header .debug-group label{-webkit-user-select:none;user-select:none;margin-right:8px}.routing-preview-container h5{padding:15px;color:#848484}.routing-preview-container .resolved-steps pre{padding:15px}.routing-preview-container .employee-log{max-width:100%;overflow-x:auto;background:#f9f9f9;border-left:4px solid #3b82f6;padding:12px 16px;margin-top:16px;font-family:monospace;font-size:13px;border-radius:6px;white-space:pre-wrap;box-sizing:border-box}.routing-preview-container .saga-link label{font-size:13px;color:#848484;margin-right:8px}.routing-preview-container a.external-link{color:#358ccb!important}.routing-preview-container a.external-link:after{font-family:feather;content:\"\\e95b\"}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: ImageErrorResolverDirective, selector: "[appImageErrorResolver]", inputs: ["type", "isFemale"] }, { kind: "pipe", type: NormalizeHumanNamePipe, name: "normalizeHumanName" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["color", "backgroundColor", "appTooltip", "showAnyway", "position"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "readonly"] }, { kind: "component", type: CoreTerminalSpinnerComponent, selector: "core-terminal-spinner" }], animations: [
200
200
  trigger('fadeToggle', [
201
201
  transition(':enter', [
202
202
  style({ opacity: 0 }),
@@ -232,7 +232,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
232
232
  animate('150ms ease-in', style({ opacity: 0 }))
233
233
  ])
234
234
  ])
235
- ], template: "<div class=\"routing-preview-container inter-font p-relative\">\r\n\r\n <div class=\"correlation-id\">\r\n\r\n <!-- @if ($saga()?.correlationId) {\r\n Workflow live instance: \r\n <a [routerLink]=\"['/root/workflow/status', $saga()?.correlationId]\">\r\n {{ $saga()?.correlationId }}\r\n </a>\r\n } -->\r\n\r\n <!-- @if ($loading()) {\r\n <core-terminal-spinner />\r\n } @else if ($saga()?.correlationId) {\r\n <button @fadeToggle type=\"button\" (click)=\"copy($saga()?.correlationId || '')\" class=\"copy-btn\">\r\n <i class=\"feather-clipboard\"></i>\r\n </button>\r\n\r\n } -->\r\n </div>\r\n\r\n <div class=\"routing-preview-header\">\r\n\r\n <div class=\"button-group\">\r\n <button type=\"button\" class=\"btn btn-primary h35\" (click)=\"backToLiveForm()\">Back to Form (ESC)</button>\r\n <button type=\"button\" class=\"btn btn-secondary h35\" (click)=\"generateRouting()\">Generate</button>\r\n @if (!!appConfigService.WORKFLOW_ENABLE_DEBUG_MODE && $isDebugMode()) {\r\n <button @fadeToggle type=\"button\" class=\"btn btn-secondary h35\" (click)=\"toggleResolvedSteps()\">Show/Hide resolved\r\n steps</button>\r\n }\r\n <button @fadeToggle type=\"button\" class=\"btn btn-primary h35\" (click)=\"initialDebugSubmit()\">Submit</button>\r\n </div>\r\n\r\n @if (!!appConfigService.WORKFLOW_ENABLE_DEBUG_MODE) {\r\n <div class=\"debug-group\">\r\n <label>Debug mode</label>\r\n <core-ios-switcher [width]=\"45\" [showOnOffText]=\"false\" [ngModel]=\"$isDebugMode()\"\r\n (ngModelChange)=\"onIsDebugModeChange($event)\"></core-ios-switcher>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"workflows-wrapper\">\r\n @if ($loading()) {\r\n <core-terminal-spinner /><span>Generating...</span>\r\n } @else {\r\n\r\n\r\n @if (!!$results().length) {\r\n\r\n @for (result of $results(); track $index) {\r\n\r\n <div class=\"result-group mb-8 p-4 rounded bg-white shadow-sm\">\r\n\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <h6 class=\"text-base font-semibold text-sky-700\">Routing for {{ result.targetEmployeeFullName }}</h6>\r\n <div class=\"d-flex d-flex-between\">\r\n <button type=\"button\" class=\"text-xs text-blue-500 underline btn btn-secondary\" (click)=\"toggleLog($index)\">\r\n {{ logExpandedStates()[ $index ] ? 'Hide log' : 'Show log' }}\r\n </button>\r\n @if ($loading()) {\r\n <core-terminal-spinner />\r\n }\r\n <!-- @if (!!$submitResponseItems().length && !!getCorrelationId(result)) {\r\n <div class=\"saga-link d-flex d-flex-start\">\r\n <label>The process activated:</label>\r\n <a class=\"external-link\" [routerLink]=\"['/root/workflow/status', getCorrelationId(result)]\">\r\n Click here to see status\r\n </a>\r\n </div>\r\n } -->\r\n @for (result of $submitResponseItems(); track result.employeeId) {\r\n <div class=\"saga-link d-flex d-flex-start\">\r\n <label>{{ result.employeeFullName }}:</label>\r\n\r\n @if (result.correlationId) {\r\n <a class=\"external-link\" [routerLink]=\"['/root/workflow/status', result.correlationId]\">\r\n \u2705 Click to see status\r\n </a>\r\n } @else {\r\n <span class=\"text-danger d-flex flex-column\">\r\n @for (line of (result.error?.split('\\n') || []); track line) {\r\n <div>\u274C {{ line }}</div>\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"workflow-wrapper\">\r\n\r\n @for (step of result.response.steps! ?? []; track step.id) {\r\n <div class=\"step-column\" [attr.data-actor-count]=\"step.resolvedActors?.length || 0\">\r\n\r\n <div class=\"step-column-aux\">\r\n\r\n <div class=\"step-header {{ step.type.toLowerCase() }}\"\r\n [ngClass]=\"(step.actorResolvedStatus ?? 'RESOLVED').toLowerCase()\">\r\n {{ step.name | translate : lang }} {{ step.config?.routingLogic }}\r\n </div>\r\n\r\n @for (actor of step.resolvedActors; track $index) {\r\n <div class=\"actor-card-aux\">\r\n <div class=\"actor-card d-flex d-flex-start {{ step.type.toLowerCase() }}\">\r\n <div class=\"avatar-wrapper\">\r\n <img [src]=\"actor.avatar\" appImageErrorResolver [type]=\"imageResolverType\"\r\n [isFemale]=\"!!actor.isFemale!\" class=\"actor-avatar\" alt=\"{{ actor.fullName }}\" />\r\n </div>\r\n <div class=\"actor-details\">\r\n <div class=\"actor-line\">\r\n <i class=\"feather-user\"></i>\r\n <span class=\"actor-full-name\" [appTooltip]=\"actor.fullName\">{{ actor.fullName | normalizeHumanName\r\n }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-briefcase\"></i>\r\n <span [appTooltip]=\"actor.jobName\">{{ actor.jobName }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-mail\"></i>\r\n @if ($isDebugMode()) {\r\n <input @fadeToggle class=\"email-debug-input\" type=\"email\" [(ngModel)]=\"actor.email\"\r\n (ngModelChange)=\"onEmailChange(actor, $event)\" placeholder=\"Enter demo email\" />\r\n } @else {\r\n <span [appTooltip]=\"actor.email\">{{ actor.email }}</span>\r\n }\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-hash\"></i>\r\n <span @fadeToggle [appTooltip]=\"actor.employeeCode\">{{ actor.employeeCode }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (isLogVisible($index)) {\r\n <pre class=\"employee-log mt-4 bg-gray-50 p-3 rounded text-xs font-mono text-gray-800\">\r\n @for (line of getLogLinesFor($index); track $index) {\r\n {{ line }}\r\n }\r\n </pre>\r\n }\r\n\r\n </div>\r\n\r\n }\r\n\r\n } @else if (!!$backendMessage()) {\r\n\r\n <div class=\"backend-message error-list bg-red-50 rounded p-4 text-sm text-red-800 leading-relaxed\">\r\n @for (line of $backendMessage().split('\\n'); track $index) {\r\n <div class=\"error-item flex items-start gap-2\">\r\n <i class=\"feather-alert-circle text-red-600 mt-0.5\"></i>\r\n <span [innerText]=\"line\"></span>\r\n </div>\r\n }\r\n </div>\r\n\r\n } @else {\r\n No routing steps found.\r\n }\r\n\r\n\r\n }\r\n\r\n </div>\r\n\r\n @if ($showResolvedSteps()) {\r\n <h5>Resolved steps</h5>\r\n <div class=\"resolved-steps\">\r\n <!-- <pre>{{ $resolvedStepsJson() }}</pre> -->\r\n </div>\r\n }\r\n\r\n</div>", styles: [".routing-preview-container{font-size:13px}.routing-preview-container .correlation-id{display:flex;align-items:center;height:35px;font-family:monospace}.routing-preview-container .correlation-id button{border:none;margin-left:8px}.routing-preview-container .workflow-wrapper{display:flex;flex-direction:row;gap:64px;padding:24px;background:#f5f5f5;overflow-x:auto;min-width:576px;min-height:200px}.routing-preview-container .workflow-wrapper .step-column{width:240px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;position:relative;min-height:100%}.routing-preview-container .workflow-wrapper .step-header{position:relative;font-weight:600;font-size:14px;text-align:center;border:1px solid #ccc;border-radius:8px;box-shadow:0 1px 3px #0000001a;padding:6px 10px;margin-bottom:10px;width:100%;color:#fff}.routing-preview-container .workflow-wrapper .step-header.submit{background-color:#00bcd4}.routing-preview-container .workflow-wrapper .step-header.approval{background-color:#f80}.routing-preview-container .workflow-wrapper .step-header.cc{background-color:#3370ff}.routing-preview-container .workflow-wrapper .step-header.handle{background-color:#935af6}.routing-preview-container .workflow-wrapper .step-header.end{background-color:#673ab7}.routing-preview-container .workflow-wrapper .step-header.resolved{box-shadow:0 0 0 3px #4caf50 inset}.routing-preview-container .workflow-wrapper .step-header.empty{box-shadow:0 0 0 3px #ff9800 inset}.routing-preview-container .workflow-wrapper .step-header.fallback{box-shadow:0 0 0 3px #03a9f4 inset}.routing-preview-container .workflow-wrapper .step-header.error{box-shadow:0 0 0 3px #f44336 inset}.routing-preview-container .workflow-wrapper .actor-card-aux{position:relative}.routing-preview-container .workflow-wrapper .actor-card.d-flex{display:flex;align-items:center;justify-content:flex-start;width:240px;height:110px;font-size:13px;border:1px solid #ccc;padding:0 12px;margin:8px auto;box-shadow:0 1px 3px #0000001a;position:relative;background-color:#fff;border-radius:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-details .actor-line>span{font-weight:700;width:140px;overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-details .actor-line>span.actor-full-name{color:#000}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper{flex-shrink:0;margin-right:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;border:1px solid #ccc}.routing-preview-container .workflow-wrapper .step-column:not(:first-child) .actor-card:before{content:\"\";position:absolute;top:50%;left:-20px;width:16px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:first-child) .actor-card-aux:not(:last-child) .actor-card:after{content:\"\";position:absolute;top:50%;left:-20px;width:2px;height:calc(100% + 10px);background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .actor-card-aux:before{content:\"\";position:absolute;top:50%;right:-16px;width:16px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .actor-card-aux:not(:last-child):after{content:\"\";position:absolute;top:50%;right:-16px;width:2px;height:calc(100% + 10px);background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column-aux{position:relative}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .step-column-aux:after{content:\"\";position:absolute;top:calc(50% + 18.5px);right:-48px;width:32px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .actor-card.submit{background-color:#e0f7fa;border-left:4px solid #00bcd4}.routing-preview-container .workflow-wrapper .actor-card.approval{background-color:#fff3e0;border-left:4px solid #f80}.routing-preview-container .workflow-wrapper .actor-card.cc{background-color:#e6ecff;border-left:4px solid #3370ff}.routing-preview-container .workflow-wrapper .actor-card.handle{background-color:#f3e6ff;border-left:4px solid #935af6}.routing-preview-container .workflow-wrapper .actor-card.end{background-color:#ede7f6;border-left:4px solid #673ab7}.routing-preview-container .workflow-wrapper .actor-line{display:flex;align-items:center;gap:6px;margin:2px 0;height:23.5px}.routing-preview-container .workflow-wrapper .actor-line i{width:16px;height:16px;font-size:16px;color:#848484}.routing-preview-container .workflow-wrapper .actor-line input.email-debug-input{border:1px dashed #00bcd4;background-color:#e0f7fa;width:140px;padding:0 8px}.routing-preview-container .workflow-wrapper .actor-card span{display:block;color:#555;margin:2px 0}@media (max-width: 576px){.routing-preview-container .workflow-wrapper .workflow-wrapper{flex-direction:column;align-items:center;gap:24px}.routing-preview-container .workflow-wrapper .step-column{width:90vw}.routing-preview-container .workflow-wrapper .actor-card{width:100%}}.routing-preview-container .p-relative{position:relative}.routing-preview-container .routing-preview-header{display:flex;align-items:center;justify-content:space-between;height:35px;margin-bottom:15px}.routing-preview-container .routing-preview-header .button-group{display:flex;align-items:center;justify-content:flex-start;gap:8px;height:35px}.routing-preview-container .routing-preview-header .button-group button{border-radius:0;color:#fff;height:35px;font-size:13px}.routing-preview-container .routing-preview-header .debug-group{display:flex;align-items:center;justify-content:flex-start;height:35px}.routing-preview-container .routing-preview-header .debug-group label{-webkit-user-select:none;user-select:none;margin-right:8px}.routing-preview-container h5{padding:15px;color:#848484}.routing-preview-container .resolved-steps pre{padding:15px}.routing-preview-container .employee-log{max-width:100%;overflow-x:auto;background:#f9f9f9;border-left:4px solid #3b82f6;padding:12px 16px;margin-top:16px;font-family:monospace;font-size:13px;border-radius:6px;white-space:pre-wrap;box-sizing:border-box}.routing-preview-container .saga-link label{font-size:13px;color:#848484;margin-right:8px}.routing-preview-container a.external-link{color:#358ccb!important}.routing-preview-container a.external-link:after{font-family:feather;content:\"\\e95b\"}\n"] }]
235
+ ], template: "<div class=\"routing-preview-container inter-font p-relative\">\r\n\r\n <div class=\"correlation-id\">\r\n\r\n <!-- @if ($saga()?.correlationId) {\r\n Workflow live instance: \r\n <a [routerLink]=\"['/root/workflow/status', $saga()?.correlationId]\">\r\n {{ $saga()?.correlationId }}\r\n </a>\r\n } -->\r\n\r\n <!-- @if ($loading()) {\r\n <core-terminal-spinner />\r\n } @else if ($saga()?.correlationId) {\r\n <button @fadeToggle type=\"button\" (click)=\"copy($saga()?.correlationId || '')\" class=\"copy-btn\">\r\n <i class=\"feather-clipboard\"></i>\r\n </button>\r\n\r\n } -->\r\n </div>\r\n\r\n <div class=\"routing-preview-header\">\r\n\r\n <div class=\"button-group\">\r\n <button type=\"button\" class=\"btn btn-primary h35\" (click)=\"backToLiveForm()\">Back to Form (ESC)</button>\r\n <button type=\"button\" class=\"btn btn-secondary h35\" (click)=\"generateRouting()\">Generate</button>\r\n @if (!!appConfigService.WORKFLOW_ENABLE_DEBUG_MODE && $isDebugMode()) {\r\n <button @fadeToggle type=\"button\" class=\"btn btn-secondary h35\" (click)=\"toggleResolvedSteps()\">Show/Hide resolved\r\n steps</button>\r\n }\r\n <button @fadeToggle type=\"button\" class=\"btn btn-primary h35\" (click)=\"initialDebugSubmit()\">Submit</button>\r\n </div>\r\n\r\n @if (!!appConfigService.WORKFLOW_ENABLE_DEBUG_MODE) {\r\n <div class=\"debug-group\">\r\n <label>Debug mode</label>\r\n <core-ios-switcher [width]=\"45\" [showOnOffText]=\"false\" [ngModel]=\"$isDebugMode()\"\r\n (ngModelChange)=\"onIsDebugModeChange($event)\"></core-ios-switcher>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"workflows-wrapper\">\r\n @if ($loading()) {\r\n <core-terminal-spinner /><span>Generating...</span>\r\n } @else {\r\n\r\n\r\n @if (!!$results().length) {\r\n\r\n @for (result of $results(); track $index) {\r\n\r\n <div class=\"result-group mb-8 p-4 rounded bg-white shadow-sm\">\r\n\r\n <div class=\"flex items-center justify-between mb-3\">\r\n <h6 class=\"text-base font-semibold text-sky-700\">Routing for {{ result.targetEmployeeFullName }}</h6>\r\n <div class=\"d-flex d-flex-between\">\r\n <button type=\"button\" class=\"text-xs text-blue-500 underline btn btn-secondary\" (click)=\"toggleLog($index)\">\r\n {{ $logExpandedStates()[ $index ] ? 'Hide log' : 'Show log' }}\r\n </button>\r\n @if ($loading()) {\r\n <core-terminal-spinner />\r\n }\r\n <!-- @if (!!$submitResponseItems().length && !!getCorrelationId(result)) {\r\n <div class=\"saga-link d-flex d-flex-start\">\r\n <label>The process activated:</label>\r\n <a class=\"external-link\" [routerLink]=\"['/root/workflow/status', getCorrelationId(result)]\">\r\n Click here to see status\r\n </a>\r\n </div>\r\n } -->\r\n @for (result of $submitResponseItems(); track result.employeeId) {\r\n <div class=\"saga-link d-flex d-flex-start\">\r\n <label>{{ result.employeeFullName }}:</label>\r\n\r\n @if (result.correlationId) {\r\n <a class=\"external-link\" [routerLink]=\"['/root/workflow/status', result.correlationId]\">\r\n \u2705 Click to see status\r\n </a>\r\n } @else {\r\n <span class=\"text-danger d-flex flex-column\">\r\n @for (line of (result.error?.split('\\n') || []); track line) {\r\n <div>\u274C {{ line }}</div>\r\n }\r\n </span>\r\n }\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n\r\n <div class=\"workflow-wrapper\">\r\n\r\n @for (step of result.response.steps! ?? []; track step.id) {\r\n <div class=\"step-column\" [attr.data-actor-count]=\"step.resolvedActors?.length || 0\">\r\n\r\n <div class=\"step-column-aux\">\r\n\r\n <div class=\"step-header {{ step.type.toLowerCase() }}\"\r\n [ngClass]=\"(step.actorResolvedStatus ?? 'RESOLVED').toLowerCase()\">\r\n {{ step.name | translate : lang }} {{ step.config?.routingLogic }}\r\n </div>\r\n\r\n @for (actor of step.resolvedActors; track $index) {\r\n <div class=\"actor-card-aux\">\r\n <div class=\"actor-card d-flex d-flex-start {{ step.type.toLowerCase() }}\">\r\n <div class=\"avatar-wrapper\">\r\n <img [src]=\"actor.avatar\" appImageErrorResolver [type]=\"imageResolverType\"\r\n [isFemale]=\"!!actor.isFemale!\" class=\"actor-avatar\" alt=\"{{ actor.fullName }}\" />\r\n </div>\r\n <div class=\"actor-details\">\r\n <div class=\"actor-line\">\r\n <i class=\"feather-user\"></i>\r\n <span class=\"actor-full-name\" [appTooltip]=\"actor.fullName\">{{ actor.fullName | normalizeHumanName\r\n }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-briefcase\"></i>\r\n <span [appTooltip]=\"actor.jobName\">{{ actor.jobName }}</span>\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-mail\"></i>\r\n @if ($isDebugMode()) {\r\n <input @fadeToggle class=\"email-debug-input\" type=\"email\" [(ngModel)]=\"actor.email\"\r\n (ngModelChange)=\"onEmailChange(actor, $event)\" placeholder=\"Enter demo email\" />\r\n } @else {\r\n <span [appTooltip]=\"actor.email\">{{ actor.email }}</span>\r\n }\r\n </div>\r\n <div class=\"actor-line\">\r\n <i class=\"feather-hash\"></i>\r\n <span @fadeToggle [appTooltip]=\"actor.employeeCode\">{{ actor.employeeCode }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n @if (isLogVisible($index)) {\r\n <pre class=\"employee-log mt-4 bg-gray-50 p-3 rounded text-xs font-mono text-gray-800\">\r\n @for (line of getLogLinesFor($index); track $index) {\r\n {{ line }}\r\n }\r\n </pre>\r\n }\r\n\r\n </div>\r\n\r\n }\r\n\r\n } @else if (!!$backendMessage()) {\r\n\r\n <div class=\"backend-message error-list bg-red-50 rounded p-4 text-sm text-red-800 leading-relaxed\">\r\n @for (line of $backendMessage().split('\\n'); track $index) {\r\n <div class=\"error-item flex items-start gap-2\">\r\n <i class=\"feather-alert-circle text-red-600 mt-0.5\"></i>\r\n <span [innerText]=\"line\"></span>\r\n </div>\r\n }\r\n </div>\r\n\r\n } @else {\r\n No routing steps found.\r\n }\r\n\r\n\r\n }\r\n\r\n </div>\r\n\r\n @if ($showResolvedSteps()) {\r\n <h5>Resolved steps</h5>\r\n <div class=\"resolved-steps\">\r\n <!-- <pre>{{ $resolvedStepsJson() }}</pre> -->\r\n </div>\r\n }\r\n\r\n</div>", styles: [".routing-preview-container{font-size:13px}.routing-preview-container .correlation-id{display:flex;align-items:center;height:35px;font-family:monospace}.routing-preview-container .correlation-id button{border:none;margin-left:8px}.routing-preview-container .workflow-wrapper{display:flex;flex-direction:row;gap:64px;padding:24px;background:#f5f5f5;overflow-x:auto;min-width:576px;min-height:200px}.routing-preview-container .workflow-wrapper .step-column{width:240px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;position:relative;min-height:100%}.routing-preview-container .workflow-wrapper .step-header{position:relative;font-weight:600;font-size:14px;text-align:center;border:1px solid #ccc;border-radius:8px;box-shadow:0 1px 3px #0000001a;padding:6px 10px;margin-bottom:10px;width:100%;color:#fff}.routing-preview-container .workflow-wrapper .step-header.submit{background-color:#00bcd4}.routing-preview-container .workflow-wrapper .step-header.approval{background-color:#f80}.routing-preview-container .workflow-wrapper .step-header.cc{background-color:#3370ff}.routing-preview-container .workflow-wrapper .step-header.handle{background-color:#935af6}.routing-preview-container .workflow-wrapper .step-header.end{background-color:#673ab7}.routing-preview-container .workflow-wrapper .step-header.resolved{box-shadow:0 0 0 3px #4caf50 inset}.routing-preview-container .workflow-wrapper .step-header.empty{box-shadow:0 0 0 3px #ff9800 inset}.routing-preview-container .workflow-wrapper .step-header.fallback{box-shadow:0 0 0 3px #03a9f4 inset}.routing-preview-container .workflow-wrapper .step-header.error{box-shadow:0 0 0 3px #f44336 inset}.routing-preview-container .workflow-wrapper .actor-card-aux{position:relative}.routing-preview-container .workflow-wrapper .actor-card.d-flex{display:flex;align-items:center;justify-content:flex-start;width:240px;height:110px;font-size:13px;border:1px solid #ccc;padding:0 12px;margin:8px auto;box-shadow:0 1px 3px #0000001a;position:relative;background-color:#fff;border-radius:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-details .actor-line>span{font-weight:700;width:140px;overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-details .actor-line>span.actor-full-name{color:#000}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper{flex-shrink:0;margin-right:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .actor-avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;border:1px solid #ccc}.routing-preview-container .workflow-wrapper .step-column:not(:first-child) .actor-card:before{content:\"\";position:absolute;top:50%;left:-20px;width:16px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:first-child) .actor-card-aux:not(:last-child) .actor-card:after{content:\"\";position:absolute;top:50%;left:-20px;width:2px;height:calc(100% + 10px);background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .actor-card-aux:before{content:\"\";position:absolute;top:50%;right:-16px;width:16px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .actor-card-aux:not(:last-child):after{content:\"\";position:absolute;top:50%;right:-16px;width:2px;height:calc(100% + 10px);background-color:#ccc}.routing-preview-container .workflow-wrapper .step-column-aux{position:relative}.routing-preview-container .workflow-wrapper .step-column:not(:last-child) .step-column-aux:after{content:\"\";position:absolute;top:calc(50% + 18.5px);right:-48px;width:32px;height:2px;background-color:#ccc}.routing-preview-container .workflow-wrapper .actor-card.submit{background-color:#e0f7fa;border-left:4px solid #00bcd4}.routing-preview-container .workflow-wrapper .actor-card.approval{background-color:#fff3e0;border-left:4px solid #f80}.routing-preview-container .workflow-wrapper .actor-card.cc{background-color:#e6ecff;border-left:4px solid #3370ff}.routing-preview-container .workflow-wrapper .actor-card.handle{background-color:#f3e6ff;border-left:4px solid #935af6}.routing-preview-container .workflow-wrapper .actor-card.end{background-color:#ede7f6;border-left:4px solid #673ab7}.routing-preview-container .workflow-wrapper .actor-line{display:flex;align-items:center;gap:6px;margin:2px 0;height:23.5px}.routing-preview-container .workflow-wrapper .actor-line i{width:16px;height:16px;font-size:16px;color:#848484}.routing-preview-container .workflow-wrapper .actor-line input.email-debug-input{border:1px dashed #00bcd4;background-color:#e0f7fa;width:140px;padding:0 8px}.routing-preview-container .workflow-wrapper .actor-card span{display:block;color:#555;margin:2px 0}@media (max-width: 576px){.routing-preview-container .workflow-wrapper .workflow-wrapper{flex-direction:column;align-items:center;gap:24px}.routing-preview-container .workflow-wrapper .step-column{width:90vw}.routing-preview-container .workflow-wrapper .actor-card{width:100%}}.routing-preview-container .p-relative{position:relative}.routing-preview-container .routing-preview-header{display:flex;align-items:center;justify-content:space-between;height:35px;margin-bottom:15px}.routing-preview-container .routing-preview-header .button-group{display:flex;align-items:center;justify-content:flex-start;gap:8px;height:35px}.routing-preview-container .routing-preview-header .button-group button{border-radius:0;color:#fff;height:35px;font-size:13px}.routing-preview-container .routing-preview-header .debug-group{display:flex;align-items:center;justify-content:flex-start;height:35px}.routing-preview-container .routing-preview-header .debug-group label{-webkit-user-select:none;user-select:none;margin-right:8px}.routing-preview-container h5{padding:15px;color:#848484}.routing-preview-container .resolved-steps pre{padding:15px}.routing-preview-container .employee-log{max-width:100%;overflow-x:auto;background:#f9f9f9;border-left:4px solid #3b82f6;padding:12px 16px;margin-top:16px;font-family:monospace;font-size:13px;border-radius:6px;white-space:pre-wrap;box-sizing:border-box}.routing-preview-container .saga-link label{font-size:13px;color:#848484;margin-right:8px}.routing-preview-container a.external-link{color:#358ccb!important}.routing-preview-container a.external-link:after{font-family:feather;content:\"\\e95b\"}\n"] }]
236
236
  }], ctorParameters: () => [{ type: MultiLanguageService }], propDecorators: { handleKeyDown: [{
237
237
  type: HostListener,
238
238
  args: ['document:keydown', ['$event']]
@@ -277,6 +277,11 @@ class LiveFormComponent extends BaseComponent {
277
277
  this.$loading = signal(false);
278
278
  this.$showAfInstanceJson = signal(false);
279
279
  this.$showWfWorkflowJson = signal(false);
280
+ this.$logExpandedStates = signal([]);
281
+ this.$backendMessage = signal('');
282
+ this.$loadingMessage = signal('');
283
+ this.$logs = signal([]);
284
+ this.$results = signal([]);
280
285
  this.coreFormDesignService = inject(CoreFormDesignService);
281
286
  this.applicationHelpService = inject(ApplicationHelpService);
282
287
  this.ds = inject(DomService);
@@ -296,7 +301,6 @@ class LiveFormComponent extends BaseComponent {
296
301
  this.$employeeSubmiterId = signal(0);
297
302
  this.simulatedEmployee$ = new BehaviorSubject(null);
298
303
  this.$showLiveRouting = this.wfs.$showLiveRouting;
299
- // $afInstance = this.fds.$afInstance;
300
304
  this.$zIndex = signal(0);
301
305
  this.$reactMode = signal(false);
302
306
  this.$onBehalfMode = computed(() => this.$workflow()?.allowOnBehalf);
@@ -446,6 +450,93 @@ class LiveFormComponent extends BaseComponent {
446
450
  }
447
451
  this.$showLiveRouting.set(!this.$showLiveRouting());
448
452
  }
453
+ initialSubmit() {
454
+ const steps = this.wfs.$currentSteps();
455
+ const nameMap = new Map();
456
+ for (const step of steps) {
457
+ const name = step.name?.trim();
458
+ if (!name)
459
+ continue;
460
+ nameMap.set(name, (nameMap.get(name) ?? 0) + 1);
461
+ }
462
+ const duplicateNames = [...nameMap.entries()]
463
+ .filter(([_, count]) => count > 1)
464
+ .map(([name]) => name);
465
+ if (duplicateNames.length > 0) {
466
+ this.alertService.warn(`Duplicate step name(s) found: ${duplicateNames.join(", ")}`, alertOptions);
467
+ this.wfs.$designActiveTab.set(3);
468
+ return;
469
+ }
470
+ const form = this.$form();
471
+ if (!form || !form.valid) {
472
+ const controls = form?.controls ?? {};
473
+ const entries = Object.entries(controls);
474
+ const filteredInvalids = entries.filter(([key, ctrl]) => {
475
+ if (key === '___submitterEmployeeId')
476
+ return false; // skip check
477
+ return ctrl.invalid;
478
+ });
479
+ if (filteredInvalids.length > 0) {
480
+ this.wfs.liveFormCheckError$.next(true);
481
+ setTimeout(() => this.wfs.liveFormCheckError$.next(false), 5000);
482
+ this.alertService.info("Please fill required fields", alertOptions);
483
+ return;
484
+ }
485
+ }
486
+ if (!this.wfs.$currentFlow()) {
487
+ this.alertService.info("No flow detected", alertOptions);
488
+ return;
489
+ }
490
+ const request = {
491
+ workflowId: this.wfs.$currentFlow()?.id,
492
+ attributes: this.$form()?.getRawValue(),
493
+ ___targetEmployees: this.$form()?.get('___targetEmployees')?.getRawValue()
494
+ };
495
+ this.$backendMessage.set('');
496
+ this.$loading.set(true);
497
+ this.$loadingMessage.set("Generating routes...");
498
+ this.wfs.initialSubmit(request).pipe(catchError(err => {
499
+ const msg = err?.error?.message || // API-defined message
500
+ err?.message || // Native JS or HttpErrorResponse
501
+ err?.statusText || // Fallback
502
+ 'An unknown error occurred.';
503
+ this.$backendMessage.set(msg);
504
+ return of({ ok: false, status: 500, body: { messageCode: msg } });
505
+ }), finalize(() => {
506
+ this.$loading.set(false);
507
+ this.$loadingMessage.set('');
508
+ })).subscribe(x => {
509
+ if (x.ok && x.status === 200) {
510
+ const body = x.body;
511
+ if (body?.statusCode === 200) {
512
+ const inner = body.innerBody;
513
+ if (!!inner.errors.length) {
514
+ this.alertService.error(inner.errors[0]);
515
+ }
516
+ this.$logs.set(inner.logs ?? []);
517
+ const backendResults = inner.items;
518
+ const allErrors = [];
519
+ for (const result of backendResults) {
520
+ const { employeeId, employeeFullName, correlationId, error } = result;
521
+ if (error || !correlationId) {
522
+ allErrors.push(`🚫 Employee ${employeeId} (${employeeFullName}): ${error || 'Unknown error'}`);
523
+ continue;
524
+ }
525
+ }
526
+ this.$backendMessage.set(allErrors.join('\n'));
527
+ if (!!allErrors.length) {
528
+ this.alertService.error(allErrors[0]);
529
+ }
530
+ }
531
+ else {
532
+ this.$backendMessage.set(body?.messageCode || 'UNEXPECTED_ERROR');
533
+ }
534
+ }
535
+ else {
536
+ this.$backendMessage.set('API_ERROR');
537
+ }
538
+ });
539
+ }
449
540
  ngOnInit() {
450
541
  this.subscriptions.push(this.mls.lang$.subscribe(x => this.lang = x));
451
542
  // Get query param ?preview=true
@@ -520,27 +611,6 @@ class LiveFormComponent extends BaseComponent {
520
611
  }
521
612
  }
522
613
  }
523
- /*
524
- mergeSectionsByField(a: ICoreFormSection[], b: ICoreFormSection[]): ICoreFormSection[] {
525
- const existingFields = new Set<string>();
526
-
527
- // Collect all fields from a
528
- a.forEach(section =>
529
- section.rows.forEach(row =>
530
- row.forEach(control => existingFields.add(control.field))
531
- )
532
- );
533
-
534
- // Check if any field in b already exists in a
535
- const hasOverlap = b.some(section =>
536
- section.rows.some(row =>
537
- row.some(control => existingFields.has(control.field))
538
- )
539
- );
540
-
541
- return hasOverlap ? [...a] : [...a, ...b];
542
- }
543
- */
544
614
  onLiveFormCreated(e) {
545
615
  const form = e.formGroup;
546
616
  this.$form.set(form);
@@ -788,7 +858,7 @@ class LiveFormComponent extends BaseComponent {
788
858
  this.clearInjectedFields();
789
859
  }
790
860
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: LiveFormComponent, deps: [{ token: MultiLanguageService }, { token: CoreFormService }], target: i0.ɵɵFactoryTarget.Component }); }
791
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: LiveFormComponent, isStandalone: true, selector: "live-form", inputs: { $designMode: { classPropertyName: "$designMode", publicName: "$designMode", isSignal: true, isRequired: false, transformFunction: null }, $forKickOff: { classPropertyName: "$forKickOff", publicName: "$forKickOff", isSignal: true, isRequired: false, transformFunction: null }, $workflowReactContext: { classPropertyName: "$workflowReactContext", publicName: "$workflowReactContext", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { $onClose: "$onClose" }, usesInheritance: true, ngImport: i0, template: "<div class=\"live-form-container\" [hotKeys]=\"['F3', 'F6', 'Escape']\">\r\n\r\n @if ($normalMode()) {\r\n <div class=\"form-wrapper live-form\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$inputSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [hideCalculatedSection]=\"true\"\r\n [hideDevSector]=\"true\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n @if ($previewMode()) {\r\n <div class=\"show-routing-wrapper\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <routing-preview-panel />\r\n }\r\n </div>\r\n\r\n\r\n } @else {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root no-padding\">\r\n\r\n <div class=\"form-wrapper live-form\" [class.d-none]=\"$showLiveRouting()\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\" />\r\n <div class=\"preview-close-icon\" (click)=\"onClose()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$inputSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [hideCalculatedSection]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [hideDevSector]=\"false\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n <div class=\"show-routing-wrapper\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <div class=\"h50\"></div>\r\n <routing-preview-panel [$minWidth]=\"coreFormDesignService.$afInstance().width\"/>\r\n <div class=\"h50\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <ng-template #bottomTemplateRef>\r\n <!-- <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $inputSectionsJson() }}</pre> -->\r\n <!-- @if (isDevMode) {\r\n <p class=\"dev-hint\">F3/ESC: Show/Hide afInstance | F6/ESC: Show/Hide Workflow</p>\r\n } -->\r\n @if ($showAfInstanceJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $afInstanceJson() }}</pre>\r\n }\r\n @if ($showWfWorkflowJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $wfWorkflowJson() }}</pre>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #buttonGroupTemplateRef>\r\n <div class=\"button-group\">\r\n <div class=\"button-group-left\"></div>\r\n <div class=\"button-group-right\">\r\n @if ($reactMode()) {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"react('REJECTED')\">Reject</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"react('APPROVED')\">Approve</button>\r\n } @else {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\">Send Request</button>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n</div>", styles: [".live-form-container .modal-container{overflow-y:auto!important;box-sizing:border-box}.live-form-container .form-wrapper.live-form{padding-top:0;padding-bottom:15px;background-color:#fff;position:relative}.live-form-container .form-wrapper.live-form .live-form-header{padding:0 15px}.live-form-container .form-wrapper.live-form .live-form-header .preview-close-icon{position:absolute;right:7px;top:6px;z-index:2;color:gray;cursor:pointer}.live-form-container .form-wrapper.live-form .live-form-header .preview-close-icon i{font-size:18px}.live-form-container .form-wrapper.live-form .show-routing-wrapper{padding:15px;display:flex;align-items:center;justify-content:flex-end}.live-form-container .form-wrapper.live-form .show-routing-wrapper input{width:120px}.live-form-container .modal-content-root{padding:0;overflow-y:visible;background-color:transparent!important;display:flex;flex-direction:column;align-items:center;justify-content:space-between}.live-form-container pre{background-color:#fff;color:#333;padding:1rem 1.5rem;border-radius:10px;box-shadow:0 2px 6px #00000014;font-family:Fira Code,monospace;font-size:.85rem;word-break:keep-all;overflow-x:auto;line-height:1.5;max-height:500px;overflow-y:auto;margin:0}.live-form-container .dev-hint{font-size:12px;color:#888;background-color:#f9f9f9;padding:6px 12px;margin:8px 0;border-left:4px solid #ccc}.live-form-container .h50{height:50px}.live-form-container .routing-preview-wrapper{overflow:hidden;max-height:0;opacity:0;transform:translateY(-10px);transition:max-height .4s ease-out,opacity .4s ease-out,transform .4s ease-out}.live-form-container .routing-preview-wrapper.visible{max-height:800px;overflow:visible;opacity:1;transform:translateY(0)}.live-form-container .show-routing-wrapper button{height:35px;font-size:13px;border-radius:0;color:#fff}.live-form-container .hidden-requester-selector{position:absolute;width:0;height:0;top:-200px;left:-200px;overflow:visible}.live-form-container .button-group{padding:15px;display:flex;align-items:center;justify-content:flex-end}.live-form-container .button-group button{height:35px;border-radius:0;font-size:13px;margin:0 7.5px;width:120px}.live-form-container .button-group button:last-child{margin-right:0}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: HotKeysDirective, selector: "[hotKeys]", inputs: ["hotKeys"] }, { kind: "component", type: RoutingPreviewPanelComponent, selector: "routing-preview-panel", inputs: ["$minWidth"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup", "htmlTooltipRef"], outputs: ["buttonClick"] }, { kind: "component", type: CoreFormComponent, selector: "core-form", inputs: ["formName", "width", "submitText", "leftInputSections", "leftInputSectionsFlexSize", "inputSections", "mode$", "bottomTemplateRef", "customFormButtonItems", "showCaptionButton", "disableSaveButton", "disableCancelButton", "checkError$", "hideButtons", "forceCreateNewForm", "secondBottomTemplateRef", "hideDevSector", "hideCalculatedSection", "buttonGroupTemplateRef"], outputs: ["onFormCreated", "onFormRefCreated", "onSubmit", "onSave", "onCancal", "buttonClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
861
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: LiveFormComponent, isStandalone: true, selector: "live-form", inputs: { $designMode: { classPropertyName: "$designMode", publicName: "$designMode", isSignal: true, isRequired: false, transformFunction: null }, $forKickOff: { classPropertyName: "$forKickOff", publicName: "$forKickOff", isSignal: true, isRequired: false, transformFunction: null }, $workflowReactContext: { classPropertyName: "$workflowReactContext", publicName: "$workflowReactContext", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { $onClose: "$onClose" }, usesInheritance: true, ngImport: i0, template: "<div class=\"live-form-container\" [hotKeys]=\"['F3', 'F6', 'Escape']\">\r\n\r\n @if ($normalMode()) {\r\n <div class=\"form-wrapper live-form\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$inputSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [hideCalculatedSection]=\"true\"\r\n [hideDevSector]=\"true\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n @if ($previewMode()) {\r\n <div class=\"show-routing-wrapper\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <routing-preview-panel />\r\n }\r\n </div>\r\n\r\n\r\n } @else {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root no-padding\">\r\n\r\n <div class=\"form-wrapper live-form\" [class.d-none]=\"$showLiveRouting()\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\" />\r\n <div class=\"preview-close-icon\" (click)=\"onClose()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$inputSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [hideCalculatedSection]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [hideDevSector]=\"false\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n <div class=\"submition-wrapper\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"initialSubmit()\">\r\n Submit \r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <div class=\"h50\"></div>\r\n <routing-preview-panel [$minWidth]=\"coreFormDesignService.$afInstance().width\"/>\r\n <div class=\"h50\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <ng-template #bottomTemplateRef>\r\n <!-- <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $inputSectionsJson() }}</pre> -->\r\n <!-- @if (isDevMode) {\r\n <p class=\"dev-hint\">F3/ESC: Show/Hide afInstance | F6/ESC: Show/Hide Workflow</p>\r\n } -->\r\n @if ($showAfInstanceJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $afInstanceJson() }}</pre>\r\n }\r\n @if ($showWfWorkflowJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $wfWorkflowJson() }}</pre>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #buttonGroupTemplateRef>\r\n <div class=\"button-group\">\r\n <div class=\"button-group-left\"></div>\r\n <div class=\"button-group-right\">\r\n @if ($reactMode()) {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"react('REJECTED')\">Reject</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"react('APPROVED')\">Approve</button>\r\n } @else {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\">Send Request</button>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n</div>", styles: [".live-form-container .modal-container{overflow-y:auto!important;box-sizing:border-box}.live-form-container .form-wrapper.live-form{padding-top:0;padding-bottom:15px;background-color:#fff;position:relative}.live-form-container .form-wrapper.live-form .live-form-header{padding:0 15px}.live-form-container .form-wrapper.live-form .live-form-header .preview-close-icon{position:absolute;right:7px;top:6px;z-index:2;color:gray;cursor:pointer}.live-form-container .form-wrapper.live-form .live-form-header .preview-close-icon i{font-size:18px}.live-form-container .form-wrapper.live-form .submition-wrapper{display:flex;align-items:center;justify-content:flex-end;padding:0 24px;font-size:13px}.live-form-container .form-wrapper.live-form .submition-wrapper button{border-radius:0}.live-form-container .form-wrapper.live-form .submition-wrapper button:not(:last-child){margin-right:8px}.live-form-container .form-wrapper.live-form .show-routing-wrapper{padding:15px;display:flex;align-items:center;justify-content:flex-end}.live-form-container .form-wrapper.live-form .show-routing-wrapper input{width:120px}.live-form-container .modal-content-root{padding:0;overflow-y:visible;background-color:transparent!important;display:flex;flex-direction:column;align-items:center;justify-content:space-between}.live-form-container pre{background-color:#fff;color:#333;padding:1rem 1.5rem;border-radius:10px;box-shadow:0 2px 6px #00000014;font-family:Fira Code,monospace;font-size:.85rem;word-break:keep-all;overflow-x:auto;line-height:1.5;max-height:500px;overflow-y:auto;margin:0}.live-form-container .dev-hint{font-size:12px;color:#888;background-color:#f9f9f9;padding:6px 12px;margin:8px 0;border-left:4px solid #ccc}.live-form-container .h50{height:50px}.live-form-container .routing-preview-wrapper{overflow:hidden;max-height:0;opacity:0;transform:translateY(-10px);transition:max-height .4s ease-out,opacity .4s ease-out,transform .4s ease-out}.live-form-container .routing-preview-wrapper.visible{max-height:800px;overflow:visible;opacity:1;transform:translateY(0)}.live-form-container .show-routing-wrapper button{height:35px;font-size:13px;border-radius:0;color:#fff}.live-form-container .hidden-requester-selector{position:absolute;width:0;height:0;top:-200px;left:-200px;overflow:visible}.live-form-container .button-group{padding:15px;display:flex;align-items:center;justify-content:flex-end}.live-form-container .button-group button{height:35px;border-radius:0;font-size:13px;margin:0 7.5px;width:120px}.live-form-container .button-group button:last-child{margin-right:0}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: HotKeysDirective, selector: "[hotKeys]", inputs: ["hotKeys"] }, { kind: "component", type: RoutingPreviewPanelComponent, selector: "routing-preview-panel", inputs: ["$minWidth"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup", "htmlTooltipRef"], outputs: ["buttonClick"] }, { kind: "component", type: CoreFormComponent, selector: "core-form", inputs: ["formName", "width", "submitText", "leftInputSections", "leftInputSectionsFlexSize", "inputSections", "mode$", "bottomTemplateRef", "customFormButtonItems", "showCaptionButton", "disableSaveButton", "disableCancelButton", "checkError$", "hideButtons", "forceCreateNewForm", "secondBottomTemplateRef", "hideDevSector", "hideCalculatedSection", "buttonGroupTemplateRef"], outputs: ["onFormCreated", "onFormRefCreated", "onSubmit", "onSave", "onCancal", "buttonClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
792
862
  }
793
863
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: LiveFormComponent, decorators: [{
794
864
  type: Component,
@@ -799,7 +869,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
799
869
  CorePageHeaderComponent,
800
870
  CoreFormComponent,
801
871
  TranslatePipe,
802
- ], template: "<div class=\"live-form-container\" [hotKeys]=\"['F3', 'F6', 'Escape']\">\r\n\r\n @if ($normalMode()) {\r\n <div class=\"form-wrapper live-form\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$inputSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [hideCalculatedSection]=\"true\"\r\n [hideDevSector]=\"true\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n @if ($previewMode()) {\r\n <div class=\"show-routing-wrapper\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <routing-preview-panel />\r\n }\r\n </div>\r\n\r\n\r\n } @else {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root no-padding\">\r\n\r\n <div class=\"form-wrapper live-form\" [class.d-none]=\"$showLiveRouting()\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\" />\r\n <div class=\"preview-close-icon\" (click)=\"onClose()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$inputSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [hideCalculatedSection]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [hideDevSector]=\"false\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n <div class=\"show-routing-wrapper\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <div class=\"h50\"></div>\r\n <routing-preview-panel [$minWidth]=\"coreFormDesignService.$afInstance().width\"/>\r\n <div class=\"h50\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <ng-template #bottomTemplateRef>\r\n <!-- <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $inputSectionsJson() }}</pre> -->\r\n <!-- @if (isDevMode) {\r\n <p class=\"dev-hint\">F3/ESC: Show/Hide afInstance | F6/ESC: Show/Hide Workflow</p>\r\n } -->\r\n @if ($showAfInstanceJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $afInstanceJson() }}</pre>\r\n }\r\n @if ($showWfWorkflowJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $wfWorkflowJson() }}</pre>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #buttonGroupTemplateRef>\r\n <div class=\"button-group\">\r\n <div class=\"button-group-left\"></div>\r\n <div class=\"button-group-right\">\r\n @if ($reactMode()) {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"react('REJECTED')\">Reject</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"react('APPROVED')\">Approve</button>\r\n } @else {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\">Send Request</button>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n</div>", styles: [".live-form-container .modal-container{overflow-y:auto!important;box-sizing:border-box}.live-form-container .form-wrapper.live-form{padding-top:0;padding-bottom:15px;background-color:#fff;position:relative}.live-form-container .form-wrapper.live-form .live-form-header{padding:0 15px}.live-form-container .form-wrapper.live-form .live-form-header .preview-close-icon{position:absolute;right:7px;top:6px;z-index:2;color:gray;cursor:pointer}.live-form-container .form-wrapper.live-form .live-form-header .preview-close-icon i{font-size:18px}.live-form-container .form-wrapper.live-form .show-routing-wrapper{padding:15px;display:flex;align-items:center;justify-content:flex-end}.live-form-container .form-wrapper.live-form .show-routing-wrapper input{width:120px}.live-form-container .modal-content-root{padding:0;overflow-y:visible;background-color:transparent!important;display:flex;flex-direction:column;align-items:center;justify-content:space-between}.live-form-container pre{background-color:#fff;color:#333;padding:1rem 1.5rem;border-radius:10px;box-shadow:0 2px 6px #00000014;font-family:Fira Code,monospace;font-size:.85rem;word-break:keep-all;overflow-x:auto;line-height:1.5;max-height:500px;overflow-y:auto;margin:0}.live-form-container .dev-hint{font-size:12px;color:#888;background-color:#f9f9f9;padding:6px 12px;margin:8px 0;border-left:4px solid #ccc}.live-form-container .h50{height:50px}.live-form-container .routing-preview-wrapper{overflow:hidden;max-height:0;opacity:0;transform:translateY(-10px);transition:max-height .4s ease-out,opacity .4s ease-out,transform .4s ease-out}.live-form-container .routing-preview-wrapper.visible{max-height:800px;overflow:visible;opacity:1;transform:translateY(0)}.live-form-container .show-routing-wrapper button{height:35px;font-size:13px;border-radius:0;color:#fff}.live-form-container .hidden-requester-selector{position:absolute;width:0;height:0;top:-200px;left:-200px;overflow:visible}.live-form-container .button-group{padding:15px;display:flex;align-items:center;justify-content:flex-end}.live-form-container .button-group button{height:35px;border-radius:0;font-size:13px;margin:0 7.5px;width:120px}.live-form-container .button-group button:last-child{margin-right:0}\n"] }]
872
+ ], template: "<div class=\"live-form-container\" [hotKeys]=\"['F3', 'F6', 'Escape']\">\r\n\r\n @if ($normalMode()) {\r\n <div class=\"form-wrapper live-form\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\"></core-page-header>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$inputSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [hideCalculatedSection]=\"true\"\r\n [hideDevSector]=\"true\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n @if ($previewMode()) {\r\n <div class=\"show-routing-wrapper\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n </div>\r\n }\r\n\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <routing-preview-panel />\r\n }\r\n </div>\r\n\r\n\r\n } @else {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root no-padding\">\r\n\r\n <div class=\"form-wrapper live-form\" [class.d-none]=\"$showLiveRouting()\" [ngStyle]=\"{\r\n width: !!coreFormDesignService.$afInstance().width ? coreFormDesignService.$afInstance().width + 'px' : 'unset'\r\n }\">\r\n\r\n <div class=\"live-form-header\">\r\n <core-page-header [title]=\"coreFormDesignService.$afInstance().captionCode | translate : lang\" [hideButtonGroup]=\"true\" />\r\n <div class=\"preview-close-icon\" (click)=\"onClose()\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n\r\n <core-form\r\n [inputSections]=\"$inputSections()\"\r\n [customFormButtonItems]=\"$customButtons()!\"\r\n [forceCreateNewForm]=\"true\"\r\n [hideCalculatedSection]=\"true\"\r\n [mode$]=\"mode$\"\r\n [hideButtons]=\"$previewMode()\"\r\n [bottomTemplateRef]=\"bottomTemplateRef\"\r\n [buttonGroupTemplateRef]=\"buttonGroupTemplateRef\"\r\n [hideDevSector]=\"false\"\r\n [checkError$]=\"checkError$\"\r\n (onSubmit)=\"onLiveSubmit($event)\"\r\n (onFormCreated)=\"onLiveFormCreated($event)\"\r\n (onCancal)=\"onClose()\"\r\n />\r\n\r\n <div class=\"submition-wrapper\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"toggleShowRouting()\">\r\n {{ $showLiveRouting() ? 'Hide Routing' : 'Show Routing' }}\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"initialSubmit()\">\r\n Submit \r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"routing-preview-wrapper\" [class.visible]=\"$showLiveRouting()\">\r\n @if ($showLiveRouting()) {\r\n <div class=\"h50\"></div>\r\n <routing-preview-panel [$minWidth]=\"coreFormDesignService.$afInstance().width\"/>\r\n <div class=\"h50\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <ng-template #bottomTemplateRef>\r\n <!-- <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $inputSectionsJson() }}</pre> -->\r\n <!-- @if (isDevMode) {\r\n <p class=\"dev-hint\">F3/ESC: Show/Hide afInstance | F6/ESC: Show/Hide Workflow</p>\r\n } -->\r\n @if ($showAfInstanceJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $afInstanceJson() }}</pre>\r\n }\r\n @if ($showWfWorkflowJson()) {\r\n <pre [ngStyle]=\"{ maxWidth: !!$afInstance()?.width ? $afInstance()?.width! + 'px' : 'unset'}\">{{ $wfWorkflowJson() }}</pre>\r\n }\r\n </ng-template>\r\n\r\n <ng-template #buttonGroupTemplateRef>\r\n <div class=\"button-group\">\r\n <div class=\"button-group-left\"></div>\r\n <div class=\"button-group-right\">\r\n @if ($reactMode()) {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"react('REJECTED')\">Reject</button>\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"react('APPROVED')\">Approve</button>\r\n } @else {\r\n <button type=\"button\" class=\"btn btn-secondary\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\">Send Request</button>\r\n }\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n</div>", styles: [".live-form-container .modal-container{overflow-y:auto!important;box-sizing:border-box}.live-form-container .form-wrapper.live-form{padding-top:0;padding-bottom:15px;background-color:#fff;position:relative}.live-form-container .form-wrapper.live-form .live-form-header{padding:0 15px}.live-form-container .form-wrapper.live-form .live-form-header .preview-close-icon{position:absolute;right:7px;top:6px;z-index:2;color:gray;cursor:pointer}.live-form-container .form-wrapper.live-form .live-form-header .preview-close-icon i{font-size:18px}.live-form-container .form-wrapper.live-form .submition-wrapper{display:flex;align-items:center;justify-content:flex-end;padding:0 24px;font-size:13px}.live-form-container .form-wrapper.live-form .submition-wrapper button{border-radius:0}.live-form-container .form-wrapper.live-form .submition-wrapper button:not(:last-child){margin-right:8px}.live-form-container .form-wrapper.live-form .show-routing-wrapper{padding:15px;display:flex;align-items:center;justify-content:flex-end}.live-form-container .form-wrapper.live-form .show-routing-wrapper input{width:120px}.live-form-container .modal-content-root{padding:0;overflow-y:visible;background-color:transparent!important;display:flex;flex-direction:column;align-items:center;justify-content:space-between}.live-form-container pre{background-color:#fff;color:#333;padding:1rem 1.5rem;border-radius:10px;box-shadow:0 2px 6px #00000014;font-family:Fira Code,monospace;font-size:.85rem;word-break:keep-all;overflow-x:auto;line-height:1.5;max-height:500px;overflow-y:auto;margin:0}.live-form-container .dev-hint{font-size:12px;color:#888;background-color:#f9f9f9;padding:6px 12px;margin:8px 0;border-left:4px solid #ccc}.live-form-container .h50{height:50px}.live-form-container .routing-preview-wrapper{overflow:hidden;max-height:0;opacity:0;transform:translateY(-10px);transition:max-height .4s ease-out,opacity .4s ease-out,transform .4s ease-out}.live-form-container .routing-preview-wrapper.visible{max-height:800px;overflow:visible;opacity:1;transform:translateY(0)}.live-form-container .show-routing-wrapper button{height:35px;font-size:13px;border-radius:0;color:#fff}.live-form-container .hidden-requester-selector{position:absolute;width:0;height:0;top:-200px;left:-200px;overflow:visible}.live-form-container .button-group{padding:15px;display:flex;align-items:center;justify-content:flex-end}.live-form-container .button-group button{height:35px;border-radius:0;font-size:13px;margin:0 7.5px;width:120px}.live-form-container .button-group button:last-child{margin-right:0}\n"] }]
803
873
  }], ctorParameters: () => [{ type: MultiLanguageService }, { type: CoreFormService }] });
804
874
 
805
875
  var liveForm_component = /*#__PURE__*/Object.freeze({
@@ -808,4 +878,4 @@ var liveForm_component = /*#__PURE__*/Object.freeze({
808
878
  });
809
879
 
810
880
  export { LiveFormComponent as L, RoutingPreviewPanelComponent as R, liveForm_component as l };
811
- //# sourceMappingURL=ngx-histaff-alpha-live-form.component-DdKOgA8G.mjs.map
881
+ //# sourceMappingURL=ngx-histaff-alpha-live-form.component-Djf5udbq.mjs.map