ngx-histaff-alpha 6.3.6 → 6.3.8

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 (50) hide show
  1. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-D_Yv-aKW.mjs → ngx-histaff-alpha-ai-hint-for-table.component-D9X0r5wC.mjs} +2 -2
  2. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-D_Yv-aKW.mjs.map → ngx-histaff-alpha-ai-hint-for-table.component-D9X0r5wC.mjs.map} +1 -1
  3. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-BDh-358_.mjs → ngx-histaff-alpha-core-form-design.component-Jzy7HTBy.mjs} +6 -6
  4. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-BDh-358_.mjs.map → ngx-histaff-alpha-core-form-design.component-Jzy7HTBy.mjs.map} +1 -1
  5. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-BBWim535.mjs → ngx-histaff-alpha-core-template-editor.component-CwYRUlbM.mjs} +2 -2
  6. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-BBWim535.mjs.map → ngx-histaff-alpha-core-template-editor.component-CwYRUlbM.mjs.map} +1 -1
  7. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-DxfG1JzG.mjs → ngx-histaff-alpha-core-toast-loading.component-Byl2v6zI.mjs} +2 -2
  8. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-DxfG1JzG.mjs.map → ngx-histaff-alpha-core-toast-loading.component-Byl2v6zI.mjs.map} +1 -1
  9. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-CvGswHbB.mjs → ngx-histaff-alpha-core-workflow-consume.component-Fma_hNMb.mjs} +2 -2
  10. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-CvGswHbB.mjs.map → ngx-histaff-alpha-core-workflow-consume.component-Fma_hNMb.mjs.map} +1 -1
  11. package/fesm2022/{ngx-histaff-alpha-db-settings.component-CqNPzdzL.mjs → ngx-histaff-alpha-db-settings.component-CpjFcS3r.mjs} +5 -5
  12. package/fesm2022/{ngx-histaff-alpha-db-settings.component-CqNPzdzL.mjs.map → ngx-histaff-alpha-db-settings.component-CpjFcS3r.mjs.map} +1 -1
  13. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-CVsgjU2z.mjs → ngx-histaff-alpha-design-wrapper.component-CWPAtJdW.mjs} +5 -5
  14. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-CVsgjU2z.mjs.map → ngx-histaff-alpha-design-wrapper.component-CWPAtJdW.mjs.map} +1 -1
  15. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-B_EjwkZd.mjs → ngx-histaff-alpha-design-wrapper.route-BPTxhFez.mjs} +5 -5
  16. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-B_EjwkZd.mjs.map → ngx-histaff-alpha-design-wrapper.route-BPTxhFez.mjs.map} +1 -1
  17. package/fesm2022/{ngx-histaff-alpha-form-array-props.component-BEKVB15X.mjs → ngx-histaff-alpha-form-array-props.component-CFQHLdzG.mjs} +3 -3
  18. package/fesm2022/{ngx-histaff-alpha-form-array-props.component-BEKVB15X.mjs.map → ngx-histaff-alpha-form-array-props.component-CFQHLdzG.mjs.map} +1 -1
  19. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-BEt_LyNb.mjs → ngx-histaff-alpha-hrm-schema.component-DhcmippJ.mjs} +2 -2
  20. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-BEt_LyNb.mjs.map → ngx-histaff-alpha-hrm-schema.component-DhcmippJ.mjs.map} +1 -1
  21. package/fesm2022/{ngx-histaff-alpha-live-form.component-FW_M5cI5.mjs → ngx-histaff-alpha-live-form.component-iX23HD-T.mjs} +4 -4
  22. package/fesm2022/{ngx-histaff-alpha-live-form.component-FW_M5cI5.mjs.map → ngx-histaff-alpha-live-form.component-iX23HD-T.mjs.map} +1 -1
  23. package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-YPc6xct6.mjs → ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs} +2133 -1019
  24. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs.map +1 -0
  25. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-pL0ykKNj.mjs → ngx-histaff-alpha-simple-chat.component-Da4H2k5o.mjs} +2 -2
  26. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-pL0ykKNj.mjs.map → ngx-histaff-alpha-simple-chat.component-Da4H2k5o.mjs.map} +1 -1
  27. package/fesm2022/{ngx-histaff-alpha-template-list.component-36QflRwY.mjs → ngx-histaff-alpha-template-list.component-CVK_Ewx4.mjs} +2 -2
  28. package/fesm2022/{ngx-histaff-alpha-template-list.component-36QflRwY.mjs.map → ngx-histaff-alpha-template-list.component-CVK_Ewx4.mjs.map} +1 -1
  29. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-DlAdz6Wq.mjs → ngx-histaff-alpha-tracker-studio.component-8tqyVAcU.mjs} +2 -2
  30. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-DlAdz6Wq.mjs.map → ngx-histaff-alpha-tracker-studio.component-8tqyVAcU.mjs.map} +1 -1
  31. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-V9exT_fm.mjs → ngx-histaff-alpha-wf-form-assign.component-CRs1A8j_.mjs} +2 -2
  32. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-V9exT_fm.mjs.map → ngx-histaff-alpha-wf-form-assign.component-CRs1A8j_.mjs.map} +1 -1
  33. package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-BuCfL80F.mjs → ngx-histaff-alpha-wf-global-config.component-yeFb4wxY.mjs} +19 -2
  34. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-yeFb4wxY.mjs.map +1 -0
  35. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DJuPBwqR.mjs → ngx-histaff-alpha-wf-instance-status.component-Jahj4MO-.mjs} +2 -2
  36. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-DJuPBwqR.mjs.map → ngx-histaff-alpha-wf-instance-status.component-Jahj4MO-.mjs.map} +1 -1
  37. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-OAdGYvAN.mjs → ngx-histaff-alpha-wf-instance-step-react.component-Bri0bRw3.mjs} +3 -3
  38. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-OAdGYvAN.mjs.map → ngx-histaff-alpha-wf-instance-step-react.component-Bri0bRw3.mjs.map} +1 -1
  39. package/fesm2022/ngx-histaff-alpha.mjs +1 -1
  40. package/lib/app/libraries/core-com-tree/com-party.service.d.ts +3 -2
  41. package/lib/app/libraries/core-com-tree/core-com-tree.component.d.ts +7 -5
  42. package/lib/app/libraries/core-com-tree/mokeUpLinearData.d.ts +19 -0
  43. package/lib/app/libraries/core-control-no-form-array/core-control-no-form-array.component.d.ts +3 -1
  44. package/lib/app/libraries/core-form/core-form-array/core-form-array.component.d.ts +5 -4
  45. package/lib/app/libraries/core-shift-collection/core-shift-collection.component.d.ts +2 -1
  46. package/lib/app/services/app-config.service.d.ts +1 -0
  47. package/package.json +2 -2
  48. package/public-api.d.ts +3 -0
  49. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-YPc6xct6.mjs.map +0 -1
  50. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-BuCfL80F.mjs.map +0 -1
@@ -1,23 +1,23 @@
1
- import { q as CanDeactivateGuard } from './ngx-histaff-alpha-ngx-histaff-alpha-YPc6xct6.mjs';
1
+ import { q as CanDeactivateGuard } from './ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs';
2
2
 
3
3
  const wfDesignWrapperRoutes = [
4
4
  {
5
5
  path: '',
6
- loadComponent: () => import('./ngx-histaff-alpha-design-wrapper.component-CVsgjU2z.mjs').then(m => m.DesignWrapperComponent),
6
+ loadComponent: () => import('./ngx-histaff-alpha-design-wrapper.component-CWPAtJdW.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-FW_M5cI5.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent)
12
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-iX23HD-T.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-FW_M5cI5.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent)
18
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-iX23HD-T.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-B_EjwkZd.mjs.map
23
+ //# sourceMappingURL=ngx-histaff-alpha-design-wrapper.route-BPTxhFez.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-histaff-alpha-design-wrapper.route-B_EjwkZd.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-BPTxhFez.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,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Component } from '@angular/core';
3
- import { B as BasePropsComponent } from './ngx-histaff-alpha-core-form-design.component-BDh-358_.mjs';
4
- import { d as EnumFormBaseContolType } from './ngx-histaff-alpha-ngx-histaff-alpha-YPc6xct6.mjs';
3
+ import { B as BasePropsComponent } from './ngx-histaff-alpha-core-form-design.component-Jzy7HTBy.mjs';
4
+ import { d as EnumFormBaseContolType } from './ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs';
5
5
 
6
6
  class FormArrayPropsComponent extends BasePropsComponent {
7
7
  openDesigner() {
@@ -23,4 +23,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
23
23
  }] });
24
24
 
25
25
  export { FormArrayPropsComponent };
26
- //# sourceMappingURL=ngx-histaff-alpha-form-array-props.component-BEKVB15X.mjs.map
26
+ //# sourceMappingURL=ngx-histaff-alpha-form-array-props.component-CFQHLdzG.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-histaff-alpha-form-array-props.component-BEKVB15X.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/form-array-props/form-array-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/form-array-props/form-array-props.component.html"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { EnumFormBaseContolType } from '../../../../../enum/EnumFormBaseContolType';\r\n\r\n@Component({\r\n selector: 'form-array-props',\r\n imports: [],\r\n templateUrl: './form-array-props.component.html',\r\n styleUrl: './form-array-props.component.scss'\r\n})\r\nexport class FormArrayPropsComponent extends BasePropsComponent {\r\n\r\n openDesigner() {\r\n const control = this.coreFormDesignService.$control();\r\n if (control?.controlType === EnumFormBaseContolType.FORM_ARRAY) {\r\n\r\n\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n this.coreFormDesignService.$showFormArrayDesign.set(true);\r\n\r\n // Since $nestedDesignSections is of type WritableSignal<ICoreFormSection[] | null>\r\n // if set (not null), we use @if in parent conponent (CoreFormDesignComponent template)\r\n // to display a popup containing CoreFormArrayLayoutEditorComponent\r\n }\r\n }\r\n}\r\n"," <div class=\"mt-3 d-flex d-flex-center\">\r\n <button class=\"btn btn-outline-primary\" (click)=\"openDesigner()\">\r\n Design Nested Layout\r\n </button>\r\n </div>"],"names":[],"mappings":";;;;;AAUM,MAAO,uBAAwB,SAAQ,kBAAkB,CAAA;IAE7D,YAAY,GAAA;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE;QACnD,IAAI,OAAO,EAAE,WAAW,KAAK,sBAAsB,CAAC,UAAU,EAAE;YAG9D,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5D,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;;;;;;8GARpD,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,mGCVpC,+LAIU,EAAA,MAAA,EAAA,CAAA,sDAAA,CAAA,EAAA,CAAA,CAAA;;2FDMG,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,EAAE,EAAA,QAAA,EAAA,+LAAA,EAAA,MAAA,EAAA,CAAA,sDAAA,CAAA,EAAA;;;;;"}
1
+ {"version":3,"file":"ngx-histaff-alpha-form-array-props.component-CFQHLdzG.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/form-array-props/form-array-props.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/libraries/core-form-design/field-setting/type-specific/form-array-props/form-array-props.component.html"],"sourcesContent":["import { Component } from '@angular/core';\r\nimport { BasePropsComponent } from '../../base-props/base-props.component';\r\nimport { EnumFormBaseContolType } from '../../../../../enum/EnumFormBaseContolType';\r\n\r\n@Component({\r\n selector: 'form-array-props',\r\n imports: [],\r\n templateUrl: './form-array-props.component.html',\r\n styleUrl: './form-array-props.component.scss'\r\n})\r\nexport class FormArrayPropsComponent extends BasePropsComponent {\r\n\r\n openDesigner() {\r\n const control = this.coreFormDesignService.$control();\r\n if (control?.controlType === EnumFormBaseContolType.FORM_ARRAY) {\r\n\r\n\r\n this.coreFormDesignService.$fieldSettingPanelOpen.set(false);\r\n this.coreFormDesignService.$showFormArrayDesign.set(true);\r\n\r\n // Since $nestedDesignSections is of type WritableSignal<ICoreFormSection[] | null>\r\n // if set (not null), we use @if in parent conponent (CoreFormDesignComponent template)\r\n // to display a popup containing CoreFormArrayLayoutEditorComponent\r\n }\r\n }\r\n}\r\n"," <div class=\"mt-3 d-flex d-flex-center\">\r\n <button class=\"btn btn-outline-primary\" (click)=\"openDesigner()\">\r\n Design Nested Layout\r\n </button>\r\n </div>"],"names":[],"mappings":";;;;;AAUM,MAAO,uBAAwB,SAAQ,kBAAkB,CAAA;IAE7D,YAAY,GAAA;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE;QACnD,IAAI,OAAO,EAAE,WAAW,KAAK,sBAAsB,CAAC,UAAU,EAAE;YAG9D,IAAI,CAAC,qBAAqB,CAAC,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC;YAC5D,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;;;;;;8GARpD,uBAAuB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,uBAAuB,mGCVpC,+LAIU,EAAA,MAAA,EAAA,CAAA,sDAAA,CAAA,EAAA,CAAA,CAAA;;2FDMG,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBANnC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAkB,WACnB,EAAE,EAAA,QAAA,EAAA,+LAAA,EAAA,MAAA,EAAA,CAAA,sDAAA,CAAA,EAAA;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { inject, Component } from '@angular/core';
3
- import { B as BaseComponent, A as AppService } from './ngx-histaff-alpha-ngx-histaff-alpha-YPc6xct6.mjs';
3
+ import { B as BaseComponent, A as AppService } from './ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs';
4
4
  import { finalize } from 'rxjs';
5
5
 
6
6
  class HrmSchemaComponent extends BaseComponent {
@@ -36,4 +36,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
36
36
  }] });
37
37
 
38
38
  export { HrmSchemaComponent };
39
- //# sourceMappingURL=ngx-histaff-alpha-hrm-schema.component-BEt_LyNb.mjs.map
39
+ //# sourceMappingURL=ngx-histaff-alpha-hrm-schema.component-DhcmippJ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngx-histaff-alpha-hrm-schema.component-BEt_LyNb.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/root/hrm-schema/hrm-schema.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/root/hrm-schema/hrm-schema.component.html"],"sourcesContent":["import { AfterViewInit, Component, inject } from '@angular/core';\r\nimport { AppService } from '../../services/app.service';\r\nimport { BaseComponent } from '../../libraries/base-component/base/base.component';\r\nimport { finalize } from 'rxjs';\r\n\r\ninterface SchemaReport {\r\n name: string;\r\n success: boolean;\r\n durationMs: number;\r\n logs: string[];\r\n errors: string[];\r\n}\r\n\r\n@Component({\r\n selector: 'hrm-schema',\r\n imports: [],\r\n templateUrl: './hrm-schema.component.html',\r\n styleUrl: './hrm-schema.component.scss'\r\n})\r\nexport class HrmSchemaComponent extends BaseComponent implements AfterViewInit {\r\n reports: SchemaReport[] = [];\r\n loading: boolean = false;\r\n appService = inject(AppService)\r\n\r\n get maxDuration(): number {\r\n return this.reports.length ? Math.max(...this.reports.map(r => r.durationMs)) : 1;\r\n }\r\n\r\n // Scale bar width as percentage\r\n getWidth(report: SchemaReport): string {\r\n return `${(report.durationMs / this.maxDuration) * 100}%`;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.loading = true;\r\n this.subscriptions.push(\r\n this.appService.get('/api/HrmSchemaEssential/SchemaCheck').pipe(\r\n finalize(() => this.loading = false)\r\n ).subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.reports = x.body.innerBody;\r\n }\r\n })\r\n )\r\n })\r\n }\r\n}\r\n","\r\n<div class=\"container-fluid\">\r\n <div class=\"schema-bar-chart\">\r\n @for (r of reports; track $index) {\r\n <div class=\"schema-bar-row\">\r\n <div class=\"schema-label\">{{ r.name }}</div>\r\n <div class=\"schema-bar-wrapper\">\r\n <div class=\"schema-bar\" [class.success]=\"r.success\" [class.fail]=\"!r.success\" [style.width]=\"getWidth(r)\"\r\n [title]=\"r.durationMs + ' ms\\n' + (r.errors.length ? r.errors.join('; ') : 'OK')\">\r\n {{ r.durationMs }} ms\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>"],"names":[],"mappings":";;;;;AAmBM,MAAO,kBAAmB,SAAQ,aAAa,CAAA;AANrD,IAAA,WAAA,GAAA;;QAOE,IAAO,CAAA,OAAA,GAAmB,EAAE;QAC5B,IAAO,CAAA,OAAA,GAAY,KAAK;AACxB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAyBhC;AAvBC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;;;AAInF,IAAA,QAAQ,CAAC,MAAoB,EAAA;AAC3B,QAAA,OAAO,CAAG,EAAA,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG;;IAG3D,eAAe,GAAA;QACb,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,IAAI,CAC7D,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CACrC,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,gBAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;oBAC1D,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS;;aAElC,CAAC,CACH;AACH,SAAC,CAAC;;8GA1BO,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,6FCnB/B,4pBAeM,EAAA,MAAA,EAAA,CAAA,sfAAA,CAAA,EAAA,CAAA,CAAA;;2FDIO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,WACb,EAAE,EAAA,QAAA,EAAA,4pBAAA,EAAA,MAAA,EAAA,CAAA,sfAAA,CAAA,EAAA;;;;;"}
1
+ {"version":3,"file":"ngx-histaff-alpha-hrm-schema.component-DhcmippJ.mjs","sources":["../../../projects/ngx-histaff-alpha/src/lib/app/root/hrm-schema/hrm-schema.component.ts","../../../projects/ngx-histaff-alpha/src/lib/app/root/hrm-schema/hrm-schema.component.html"],"sourcesContent":["import { AfterViewInit, Component, inject } from '@angular/core';\r\nimport { AppService } from '../../services/app.service';\r\nimport { BaseComponent } from '../../libraries/base-component/base/base.component';\r\nimport { finalize } from 'rxjs';\r\n\r\ninterface SchemaReport {\r\n name: string;\r\n success: boolean;\r\n durationMs: number;\r\n logs: string[];\r\n errors: string[];\r\n}\r\n\r\n@Component({\r\n selector: 'hrm-schema',\r\n imports: [],\r\n templateUrl: './hrm-schema.component.html',\r\n styleUrl: './hrm-schema.component.scss'\r\n})\r\nexport class HrmSchemaComponent extends BaseComponent implements AfterViewInit {\r\n reports: SchemaReport[] = [];\r\n loading: boolean = false;\r\n appService = inject(AppService)\r\n\r\n get maxDuration(): number {\r\n return this.reports.length ? Math.max(...this.reports.map(r => r.durationMs)) : 1;\r\n }\r\n\r\n // Scale bar width as percentage\r\n getWidth(report: SchemaReport): string {\r\n return `${(report.durationMs / this.maxDuration) * 100}%`;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.loading = true;\r\n this.subscriptions.push(\r\n this.appService.get('/api/HrmSchemaEssential/SchemaCheck').pipe(\r\n finalize(() => this.loading = false)\r\n ).subscribe(x => {\r\n if (x.ok && x.status === 200 && x.body?.statusCode === 200) {\r\n this.reports = x.body.innerBody;\r\n }\r\n })\r\n )\r\n })\r\n }\r\n}\r\n","\r\n<div class=\"container-fluid\">\r\n <div class=\"schema-bar-chart\">\r\n @for (r of reports; track $index) {\r\n <div class=\"schema-bar-row\">\r\n <div class=\"schema-label\">{{ r.name }}</div>\r\n <div class=\"schema-bar-wrapper\">\r\n <div class=\"schema-bar\" [class.success]=\"r.success\" [class.fail]=\"!r.success\" [style.width]=\"getWidth(r)\"\r\n [title]=\"r.durationMs + ' ms\\n' + (r.errors.length ? r.errors.join('; ') : 'OK')\">\r\n {{ r.durationMs }} ms\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>"],"names":[],"mappings":";;;;;AAmBM,MAAO,kBAAmB,SAAQ,aAAa,CAAA;AANrD,IAAA,WAAA,GAAA;;QAOE,IAAO,CAAA,OAAA,GAAmB,EAAE;QAC5B,IAAO,CAAA,OAAA,GAAY,KAAK;AACxB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAyBhC;AAvBC,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC;;;AAInF,IAAA,QAAQ,CAAC,MAAoB,EAAA;AAC3B,QAAA,OAAO,CAAG,EAAA,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG;;IAG3D,eAAe,GAAA;QACb,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;AACnB,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,IAAI,CAC7D,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CACrC,CAAC,SAAS,CAAC,CAAC,IAAG;AACd,gBAAA,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,GAAG,EAAE;oBAC1D,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS;;aAElC,CAAC,CACH;AACH,SAAC,CAAC;;8GA1BO,kBAAkB,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,6FCnB/B,4pBAeM,EAAA,MAAA,EAAA,CAAA,sfAAA,CAAA,EAAA,CAAA,CAAA;;2FDIO,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAN9B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,YAAY,WACb,EAAE,EAAA,QAAA,EAAA,4pBAAA,EAAA,MAAA,EAAA,CAAA,sfAAA,CAAA,EAAA;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { input, signal, computed, isDevMode, inject, HostListener, ChangeDetectionStrategy, Component, output, ChangeDetectorRef, Injector, effect } from '@angular/core';
3
- import { B as BaseComponent, a8 as EnumImageResolverType, h as CoreWorkflowService, k as CoreFormService, j as AlertService, X as AppConfigService, t as alertOptions, M as MultiLanguageService, T as TranslatePipe, I as ImageErrorResolverDirective, a9 as NormalizeHumanNamePipe, o as TooltipDirective, aa as CoreIosSwitcherComponent, u as CoreTerminalSpinnerComponent, f as CorePageHeaderComponent, x as DomService, L as CoreParamControlComponent, v as CoreFormDesignService, P as ApplicationHelpService, W as JsonService, A as AppService, d as EnumFormBaseContolType, R as EnumCorePageEditMode, Y as EnumCoreButtonVNSCode, i as EnumCoreFormControlSeekerSourceType, Q as HotKeysDirective, U as CoreFormComponent, a5 as JsonSafePipe } from './ngx-histaff-alpha-ngx-histaff-alpha-YPc6xct6.mjs';
3
+ import { B as BaseComponent, a8 as EnumImageResolverType, h as CoreWorkflowService, k as CoreFormService, j as AlertService, X as AppConfigService, t as alertOptions, M as MultiLanguageService, T as TranslatePipe, I as ImageErrorResolverDirective, a9 as NormalizeHumanNamePipe, o as TooltipDirective, aa as CoreIosSwitcherComponent, u as CoreTerminalSpinnerComponent, f as CorePageHeaderComponent, x as DomService, L as CoreParamControlComponent, v as CoreFormDesignService, P as ApplicationHelpService, W as JsonService, A as AppService, d as EnumFormBaseContolType, R as EnumCorePageEditMode, Y as EnumCoreButtonVNSCode, i as EnumCoreFormControlSeekerSourceType, Q as HotKeysDirective, U as CoreFormComponent, a5 as JsonSafePipe } from './ngx-histaff-alpha-ngx-histaff-alpha-BJ3ZVba7.mjs';
4
4
  import { catchError, of, finalize, BehaviorSubject, filter, distinctUntilChanged } from 'rxjs';
5
5
  import { NgClass, JsonPipe, NgStyle } from '@angular/common';
6
6
  import { RouterLink, Router, ActivatedRoute } from '@angular/router';
@@ -246,7 +246,7 @@ class RoutingPreviewComponent extends BaseComponent {
246
246
  this.$showEmailPreview.set(false);
247
247
  }
248
248
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: RoutingPreviewComponent, deps: [{ token: MultiLanguageService }], target: i0.ɵɵFactoryTarget.Component }); }
249
- 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 </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 <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; let resultIndex = $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 @for (result of $submitResult()?.items || []; 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 @if ($isDebugMode() && !!$submitResult() && !!$submitResult()?.items) {\r\n <div @fadeToggle class=\"actor-tool\" [appTooltip]=\"!actor.debugToolOpen ? 'Dubug tool' : ''\" [position]=\"'right'\" (click)=\"onActorToolClick(step, actor)\">\r\n <i class=\"feather-more-horizontal\"></i>\r\n @if (!!actor.debugToolOpen) {\r\n <ul class=\"actor-tool-list\">\r\n @switch (step.type) {\r\n @case ('Submit') {\r\n <li (click)=\"previewEmail('SUBMIT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Submit email</li>\r\n }\r\n @case ('CC') {\r\n <li (click)=\"previewEmail('CC', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview CC email</li>\r\n }\r\n @case ('Approval') {\r\n <li (click)=\"previewEmail('REACT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview React email</li>\r\n }\r\n @case ('End') {\r\n <li (click)=\"previewEmail('FULLY_APPROVE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview FullyAppoved email</li>\r\n <li (click)=\"previewEmail('REJECT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Rejected email</li>\r\n <li (click)=\"previewEmail('CANCEL', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Cancelled email</li>\r\n <li (click)=\"previewEmail('TERMINATE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Terminated email</li>\r\n <li (click)=\"previewEmail('REVOKE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Revoked email</li>\r\n }\r\n }\r\n </ul>\r\n }\r\n </div>\r\n }\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 (!!$submitErrors() && !!$submitErrors()!.length) {\r\n <pre>\r\n <span>{{ $submitErrors()![$index] }}</span>\r\n </pre>\r\n }\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 @if ($showEmailPreview()) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"email-preview\">\r\n <div class=\"email-header\">\r\n PREVIEW\r\n <div class=\"close-wrapper\">\r\n <i class=\"feather-x\" (click)=\"onCloseEmailPreview()\"></i>\r\n </div>\r\n </div>\r\n <div class=\"email-subject\" [innerHtml]=\"$emailSubject()\"></div>\r\n <div class=\"email-body\" [innerHtml]=\"$emailBody()\"></div>\r\n </div>\r\n </div>\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;display:flex;flex-direction:column;margin-right:8px;gap:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool{position:relative;display:flex;align-items:center;justify-content:center;width:40px;height:40px;background-color:#fff;border-radius:50%;cursor:pointer}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool i{width:24px;height:24px;font-size:24px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list{position:absolute;z-index:1;bottom:0;left:48px;display:block;width:210px;background-color:#fff;box-shadow:.4rem 0 2rem #0000002e;padding:0}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li{height:35px;display:flex;align-items:center}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li:before{content:\"\\e98a\";font-family:feather;display:inline-block;margin:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li:hover{color:#fff;background-color:#358ccb}.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\"}.routing-preview-container .email-preview .email-header{position:relative;display:flex;align-items:center;justify-content:center;height:35px;width:calc(100% + 30px);transform:translate(-15px,-15px)}.routing-preview-container .email-preview .email-header .close-wrapper{width:35px;height:35px;position:absolute;top:0;right:0;display:flex;align-items:center;justify-content:center;cursor:pointer}.routing-preview-container .email-preview .email-header .close-wrapper:hover{color:#fff;background-color:#848484;border:1px solid white}.routing-preview-container .email-preview .email-header .close-wrapper i{font-size:24px}.routing-preview-container .modal-content-root{overflow-x:hidden}\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: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "height", "readonly"] }, { kind: "component", type: CoreTerminalSpinnerComponent, selector: "core-terminal-spinner" }], animations: [
249
+ 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 </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 <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; let resultIndex = $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 @for (result of $submitResult()?.items || []; 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 @if ($isDebugMode() && !!$submitResult() && !!$submitResult()?.items) {\r\n <div @fadeToggle class=\"actor-tool\" [appTooltip]=\"!actor.debugToolOpen ? 'Dubug tool' : ''\" [position]=\"'right'\" (click)=\"onActorToolClick(step, actor)\">\r\n <i class=\"feather-more-horizontal\"></i>\r\n @if (!!actor.debugToolOpen) {\r\n <ul class=\"actor-tool-list\">\r\n @switch (step.type) {\r\n @case ('Submit') {\r\n <li (click)=\"previewEmail('SUBMIT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Submit email</li>\r\n }\r\n @case ('CC') {\r\n <li (click)=\"previewEmail('CC', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview CC email</li>\r\n }\r\n @case ('Approval') {\r\n <li (click)=\"previewEmail('REACT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview React email</li>\r\n }\r\n @case ('End') {\r\n <li (click)=\"previewEmail('FULLY_APPROVE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview FullyAppoved email</li>\r\n <li (click)=\"previewEmail('REJECT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Rejected email</li>\r\n <li (click)=\"previewEmail('CANCEL', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Cancelled email</li>\r\n <li (click)=\"previewEmail('TERMINATE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Terminated email</li>\r\n <li (click)=\"previewEmail('REVOKE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Revoked email</li>\r\n }\r\n }\r\n </ul>\r\n }\r\n </div>\r\n }\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 (!!$submitErrors() && !!$submitErrors()!.length) {\r\n <pre>\r\n <span>{{ $submitErrors()![$index] }}</span>\r\n </pre>\r\n }\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 @if ($showEmailPreview()) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"email-preview\">\r\n <div class=\"email-header\">\r\n PREVIEW\r\n <div class=\"close-wrapper\">\r\n <i class=\"feather-x\" (click)=\"onCloseEmailPreview()\"></i>\r\n </div>\r\n </div>\r\n <div class=\"email-subject\" [innerHtml]=\"$emailSubject()\"></div>\r\n <div class=\"email-body\" [innerHtml]=\"$emailBody()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>", styles: [".routing-preview-container{font-size:13px;max-width:95vw}.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;display:flex;flex-direction:column;margin-right:8px;gap:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool{position:relative;display:flex;align-items:center;justify-content:center;width:40px;height:40px;background-color:#fff;border-radius:50%;cursor:pointer}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool i{width:24px;height:24px;font-size:24px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list{position:absolute;z-index:1;bottom:0;left:48px;display:block;width:210px;background-color:#fff;box-shadow:.4rem 0 2rem #0000002e;padding:0}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li{height:35px;display:flex;align-items:center}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li:before{content:\"\\e98a\";font-family:feather;display:inline-block;margin:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li:hover{color:#fff;background-color:#358ccb}.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\"}.routing-preview-container .email-preview .email-header{position:relative;display:flex;align-items:center;justify-content:center;height:35px;width:calc(100% + 30px);transform:translate(-15px,-15px)}.routing-preview-container .email-preview .email-header .close-wrapper{width:35px;height:35px;position:absolute;top:0;right:0;display:flex;align-items:center;justify-content:center;cursor:pointer}.routing-preview-container .email-preview .email-header .close-wrapper:hover{color:#fff;background-color:#848484;border:1px solid white}.routing-preview-container .email-preview .email-header .close-wrapper i{font-size:24px}.routing-preview-container .modal-content-root{overflow-x:hidden}\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: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "height", "readonly"] }, { kind: "component", type: CoreTerminalSpinnerComponent, selector: "core-terminal-spinner" }], animations: [
250
250
  trigger('fadeToggle', [
251
251
  transition(':enter', [
252
252
  style({ opacity: 0 }),
@@ -282,7 +282,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
282
282
  animate('150ms ease-in', style({ opacity: 0 }))
283
283
  ])
284
284
  ])
285
- ], template: "<div class=\"routing-preview-container inter-font p-relative\">\r\n\r\n <div class=\"correlation-id\">\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 <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; let resultIndex = $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 @for (result of $submitResult()?.items || []; 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 @if ($isDebugMode() && !!$submitResult() && !!$submitResult()?.items) {\r\n <div @fadeToggle class=\"actor-tool\" [appTooltip]=\"!actor.debugToolOpen ? 'Dubug tool' : ''\" [position]=\"'right'\" (click)=\"onActorToolClick(step, actor)\">\r\n <i class=\"feather-more-horizontal\"></i>\r\n @if (!!actor.debugToolOpen) {\r\n <ul class=\"actor-tool-list\">\r\n @switch (step.type) {\r\n @case ('Submit') {\r\n <li (click)=\"previewEmail('SUBMIT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Submit email</li>\r\n }\r\n @case ('CC') {\r\n <li (click)=\"previewEmail('CC', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview CC email</li>\r\n }\r\n @case ('Approval') {\r\n <li (click)=\"previewEmail('REACT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview React email</li>\r\n }\r\n @case ('End') {\r\n <li (click)=\"previewEmail('FULLY_APPROVE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview FullyAppoved email</li>\r\n <li (click)=\"previewEmail('REJECT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Rejected email</li>\r\n <li (click)=\"previewEmail('CANCEL', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Cancelled email</li>\r\n <li (click)=\"previewEmail('TERMINATE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Terminated email</li>\r\n <li (click)=\"previewEmail('REVOKE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Revoked email</li>\r\n }\r\n }\r\n </ul>\r\n }\r\n </div>\r\n }\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 (!!$submitErrors() && !!$submitErrors()!.length) {\r\n <pre>\r\n <span>{{ $submitErrors()![$index] }}</span>\r\n </pre>\r\n }\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 @if ($showEmailPreview()) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"email-preview\">\r\n <div class=\"email-header\">\r\n PREVIEW\r\n <div class=\"close-wrapper\">\r\n <i class=\"feather-x\" (click)=\"onCloseEmailPreview()\"></i>\r\n </div>\r\n </div>\r\n <div class=\"email-subject\" [innerHtml]=\"$emailSubject()\"></div>\r\n <div class=\"email-body\" [innerHtml]=\"$emailBody()\"></div>\r\n </div>\r\n </div>\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;display:flex;flex-direction:column;margin-right:8px;gap:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool{position:relative;display:flex;align-items:center;justify-content:center;width:40px;height:40px;background-color:#fff;border-radius:50%;cursor:pointer}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool i{width:24px;height:24px;font-size:24px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list{position:absolute;z-index:1;bottom:0;left:48px;display:block;width:210px;background-color:#fff;box-shadow:.4rem 0 2rem #0000002e;padding:0}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li{height:35px;display:flex;align-items:center}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li:before{content:\"\\e98a\";font-family:feather;display:inline-block;margin:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li:hover{color:#fff;background-color:#358ccb}.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\"}.routing-preview-container .email-preview .email-header{position:relative;display:flex;align-items:center;justify-content:center;height:35px;width:calc(100% + 30px);transform:translate(-15px,-15px)}.routing-preview-container .email-preview .email-header .close-wrapper{width:35px;height:35px;position:absolute;top:0;right:0;display:flex;align-items:center;justify-content:center;cursor:pointer}.routing-preview-container .email-preview .email-header .close-wrapper:hover{color:#fff;background-color:#848484;border:1px solid white}.routing-preview-container .email-preview .email-header .close-wrapper i{font-size:24px}.routing-preview-container .modal-content-root{overflow-x:hidden}\n"] }]
285
+ ], template: "<div class=\"routing-preview-container inter-font p-relative\">\r\n\r\n <div class=\"correlation-id\">\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 <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; let resultIndex = $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 @for (result of $submitResult()?.items || []; 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 @if ($isDebugMode() && !!$submitResult() && !!$submitResult()?.items) {\r\n <div @fadeToggle class=\"actor-tool\" [appTooltip]=\"!actor.debugToolOpen ? 'Dubug tool' : ''\" [position]=\"'right'\" (click)=\"onActorToolClick(step, actor)\">\r\n <i class=\"feather-more-horizontal\"></i>\r\n @if (!!actor.debugToolOpen) {\r\n <ul class=\"actor-tool-list\">\r\n @switch (step.type) {\r\n @case ('Submit') {\r\n <li (click)=\"previewEmail('SUBMIT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Submit email</li>\r\n }\r\n @case ('CC') {\r\n <li (click)=\"previewEmail('CC', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview CC email</li>\r\n }\r\n @case ('Approval') {\r\n <li (click)=\"previewEmail('REACT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview React email</li>\r\n }\r\n @case ('End') {\r\n <li (click)=\"previewEmail('FULLY_APPROVE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview FullyAppoved email</li>\r\n <li (click)=\"previewEmail('REJECT', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Rejected email</li>\r\n <li (click)=\"previewEmail('CANCEL', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Cancelled email</li>\r\n <li (click)=\"previewEmail('TERMINATE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Terminated email</li>\r\n <li (click)=\"previewEmail('REVOKE', $submitResult()?.items?.[resultIndex]?.correlationId!, actor.fullName)\">Preview Revoked email</li>\r\n }\r\n }\r\n </ul>\r\n }\r\n </div>\r\n }\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 (!!$submitErrors() && !!$submitErrors()!.length) {\r\n <pre>\r\n <span>{{ $submitErrors()![$index] }}</span>\r\n </pre>\r\n }\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 @if ($showEmailPreview()) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"email-preview\">\r\n <div class=\"email-header\">\r\n PREVIEW\r\n <div class=\"close-wrapper\">\r\n <i class=\"feather-x\" (click)=\"onCloseEmailPreview()\"></i>\r\n </div>\r\n </div>\r\n <div class=\"email-subject\" [innerHtml]=\"$emailSubject()\"></div>\r\n <div class=\"email-body\" [innerHtml]=\"$emailBody()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>", styles: [".routing-preview-container{font-size:13px;max-width:95vw}.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;display:flex;flex-direction:column;margin-right:8px;gap:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool{position:relative;display:flex;align-items:center;justify-content:center;width:40px;height:40px;background-color:#fff;border-radius:50%;cursor:pointer}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool i{width:24px;height:24px;font-size:24px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list{position:absolute;z-index:1;bottom:0;left:48px;display:block;width:210px;background-color:#fff;box-shadow:.4rem 0 2rem #0000002e;padding:0}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li{height:35px;display:flex;align-items:center}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li:before{content:\"\\e98a\";font-family:feather;display:inline-block;margin:8px}.routing-preview-container .workflow-wrapper .actor-card.d-flex .avatar-wrapper .actor-tool .actor-tool-list li:hover{color:#fff;background-color:#358ccb}.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\"}.routing-preview-container .email-preview .email-header{position:relative;display:flex;align-items:center;justify-content:center;height:35px;width:calc(100% + 30px);transform:translate(-15px,-15px)}.routing-preview-container .email-preview .email-header .close-wrapper{width:35px;height:35px;position:absolute;top:0;right:0;display:flex;align-items:center;justify-content:center;cursor:pointer}.routing-preview-container .email-preview .email-header .close-wrapper:hover{color:#fff;background-color:#848484;border:1px solid white}.routing-preview-container .email-preview .email-header .close-wrapper i{font-size:24px}.routing-preview-container .modal-content-root{overflow-x:hidden}\n"] }]
286
286
  }], ctorParameters: () => [{ type: MultiLanguageService }], propDecorators: { handleKeyDown: [{
287
287
  type: HostListener,
288
288
  args: ['document:keydown', ['$event']]
@@ -956,4 +956,4 @@ var liveForm_component = /*#__PURE__*/Object.freeze({
956
956
  });
957
957
 
958
958
  export { LiveFormComponent as L, RoutingPreviewPanelComponent as R, liveForm_component as l };
959
- //# sourceMappingURL=ngx-histaff-alpha-live-form.component-FW_M5cI5.mjs.map
959
+ //# sourceMappingURL=ngx-histaff-alpha-live-form.component-iX23HD-T.mjs.map