ngx-histaff-alpha 6.6.4 → 6.6.7

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 (92) hide show
  1. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-JXH8uW2J.mjs → ngx-histaff-alpha-ai-hint-for-table.component-CN312QCn.mjs} +2 -2
  2. package/fesm2022/{ngx-histaff-alpha-ai-hint-for-table.component-JXH8uW2J.mjs.map → ngx-histaff-alpha-ai-hint-for-table.component-CN312QCn.mjs.map} +1 -1
  3. package/fesm2022/{ngx-histaff-alpha-core-form-design.component-Cy_mOM1n.mjs → ngx-histaff-alpha-core-form-design.component-D6TrPmpG.mjs} +24 -7
  4. package/fesm2022/ngx-histaff-alpha-core-form-design.component-D6TrPmpG.mjs.map +1 -0
  5. package/fesm2022/{ngx-histaff-alpha-core-sys-action.component-DSjGTh1K.mjs → ngx-histaff-alpha-core-sys-action.component-YqAEn6iz.mjs} +2 -2
  6. package/fesm2022/{ngx-histaff-alpha-core-sys-action.component-DSjGTh1K.mjs.map → ngx-histaff-alpha-core-sys-action.component-YqAEn6iz.mjs.map} +1 -1
  7. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-D1XlpSNr.mjs → ngx-histaff-alpha-core-template-editor.component-CvJChUao.mjs} +2 -2
  8. package/fesm2022/{ngx-histaff-alpha-core-template-editor.component-D1XlpSNr.mjs.map → ngx-histaff-alpha-core-template-editor.component-CvJChUao.mjs.map} +1 -1
  9. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-ClmryTzj.mjs → ngx-histaff-alpha-core-toast-loading.component-DYxZA2xa.mjs} +2 -2
  10. package/fesm2022/{ngx-histaff-alpha-core-toast-loading.component-ClmryTzj.mjs.map → ngx-histaff-alpha-core-toast-loading.component-DYxZA2xa.mjs.map} +1 -1
  11. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-DV84nxOo.mjs → ngx-histaff-alpha-core-workflow-consume.component-K-_atwQM.mjs} +2 -2
  12. package/fesm2022/{ngx-histaff-alpha-core-workflow-consume.component-DV84nxOo.mjs.map → ngx-histaff-alpha-core-workflow-consume.component-K-_atwQM.mjs.map} +1 -1
  13. package/fesm2022/{ngx-histaff-alpha-db-settings.component-AwS6B8Ne.mjs → ngx-histaff-alpha-db-settings.component-D0JhoiHQ.mjs} +5 -5
  14. package/fesm2022/{ngx-histaff-alpha-db-settings.component-AwS6B8Ne.mjs.map → ngx-histaff-alpha-db-settings.component-D0JhoiHQ.mjs.map} +1 -1
  15. package/fesm2022/{ngx-histaff-alpha-design-wrapper.component-C_EM0bEs.mjs → ngx-histaff-alpha-design-wrapper.component-C7SJCccg.mjs} +131 -82
  16. package/fesm2022/ngx-histaff-alpha-design-wrapper.component-C7SJCccg.mjs.map +1 -0
  17. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-DIZLQKWJ.mjs → ngx-histaff-alpha-design-wrapper.route-DVdapOzd.mjs} +5 -5
  18. package/fesm2022/{ngx-histaff-alpha-design-wrapper.route-DIZLQKWJ.mjs.map → ngx-histaff-alpha-design-wrapper.route-DVdapOzd.mjs.map} +1 -1
  19. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-DPqZBYnx.mjs → ngx-histaff-alpha-hrm-schema.component-BTzEGNfX.mjs} +2 -2
  20. package/fesm2022/{ngx-histaff-alpha-hrm-schema.component-DPqZBYnx.mjs.map → ngx-histaff-alpha-hrm-schema.component-BTzEGNfX.mjs.map} +1 -1
  21. package/fesm2022/{ngx-histaff-alpha-live-form.component-CatM7zte.mjs → ngx-histaff-alpha-live-form.component-CYB3NnkR.mjs} +2 -2
  22. package/fesm2022/{ngx-histaff-alpha-live-form.component-CatM7zte.mjs.map → ngx-histaff-alpha-live-form.component-CYB3NnkR.mjs.map} +1 -1
  23. package/fesm2022/{ngx-histaff-alpha-ngx-histaff-alpha-BZdzGBj5.mjs → ngx-histaff-alpha-ngx-histaff-alpha-BsbSArBq.mjs} +1221 -51
  24. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-BsbSArBq.mjs.map +1 -0
  25. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-CQvQzfwA.mjs → ngx-histaff-alpha-simple-chat.component-CWWWy9FV.mjs} +2 -2
  26. package/fesm2022/{ngx-histaff-alpha-simple-chat.component-CQvQzfwA.mjs.map → ngx-histaff-alpha-simple-chat.component-CWWWy9FV.mjs.map} +1 -1
  27. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client-edit.component-DQyeSL3y.mjs → ngx-histaff-alpha-sys-smtp-client-edit.component-Cn1CYwCF.mjs} +2 -2
  28. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client-edit.component-DQyeSL3y.mjs.map → ngx-histaff-alpha-sys-smtp-client-edit.component-Cn1CYwCF.mjs.map} +1 -1
  29. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client.component-5f4Hm6sZ.mjs → ngx-histaff-alpha-sys-smtp-client.component-CtRfWRoX.mjs} +2 -2
  30. package/fesm2022/{ngx-histaff-alpha-sys-smtp-client.component-5f4Hm6sZ.mjs.map → ngx-histaff-alpha-sys-smtp-client.component-CtRfWRoX.mjs.map} +1 -1
  31. package/fesm2022/{ngx-histaff-alpha-template-list.component-Hxk1mvGh.mjs → ngx-histaff-alpha-template-list.component-TYq8bPtG.mjs} +2 -2
  32. package/fesm2022/{ngx-histaff-alpha-template-list.component-Hxk1mvGh.mjs.map → ngx-histaff-alpha-template-list.component-TYq8bPtG.mjs.map} +1 -1
  33. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-Dhp9w826.mjs → ngx-histaff-alpha-tracker-studio.component-BEMXswAW.mjs} +2 -2
  34. package/fesm2022/{ngx-histaff-alpha-tracker-studio.component-Dhp9w826.mjs.map → ngx-histaff-alpha-tracker-studio.component-BEMXswAW.mjs.map} +1 -1
  35. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-ClY5trbS.mjs → ngx-histaff-alpha-wf-form-assign.component-Bck-IKZX.mjs} +2 -2
  36. package/fesm2022/{ngx-histaff-alpha-wf-form-assign.component-ClY5trbS.mjs.map → ngx-histaff-alpha-wf-form-assign.component-Bck-IKZX.mjs.map} +1 -1
  37. package/fesm2022/{ngx-histaff-alpha-wf-global-config.component-Cr5x7Ejg.mjs → ngx-histaff-alpha-wf-global-config.component-DhTw3REl.mjs} +15 -5
  38. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-DhTw3REl.mjs.map +1 -0
  39. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-BIvdd1YN.mjs → ngx-histaff-alpha-wf-instance-status.component-D-KD7Veu.mjs} +2 -2
  40. package/fesm2022/{ngx-histaff-alpha-wf-instance-status.component-BIvdd1YN.mjs.map → ngx-histaff-alpha-wf-instance-status.component-D-KD7Veu.mjs.map} +1 -1
  41. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-1yYa-SfK.mjs → ngx-histaff-alpha-wf-instance-step-react.component-DE5sJiVw.mjs} +3 -3
  42. package/fesm2022/{ngx-histaff-alpha-wf-instance-step-react.component-1yYa-SfK.mjs.map → ngx-histaff-alpha-wf-instance-step-react.component-DE5sJiVw.mjs.map} +1 -1
  43. package/fesm2022/{ngx-histaff-alpha-wf-lab.component-mbJjrJ6v.mjs → ngx-histaff-alpha-wf-lab.component-DoFDdaIu.mjs} +2 -2
  44. package/fesm2022/{ngx-histaff-alpha-wf-lab.component-mbJjrJ6v.mjs.map → ngx-histaff-alpha-wf-lab.component-DoFDdaIu.mjs.map} +1 -1
  45. package/fesm2022/ngx-histaff-alpha.mjs +1 -1
  46. package/lib/app/enum/EnumFormBaseContolType.d.ts +2 -1
  47. package/lib/app/libraries/core-button-group-vns/core-button-group-vns/EnumCoreButtonVNSCode.d.ts +1 -0
  48. package/lib/app/libraries/core-dom-decision-editor/core-dom-decision-editor.component.d.ts +37 -0
  49. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/action-code.enum.d.ts +17 -0
  50. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/intent-descriptor.model.d.ts +64 -0
  51. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/intent-descriptor.registry.d.ts +3 -0
  52. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/intent-draft.model.d.ts +6 -0
  53. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/omega-decision.d.ts +6 -0
  54. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/omega-intent.d.ts +7 -0
  55. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/omega-projection.vm.d.ts +13 -0
  56. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/others.d.ts +10 -0
  57. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/r-code.enum.d.ts +15 -0
  58. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/CREATE_O.d.ts +2 -0
  59. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/CREATE_S.d.ts +2 -0
  60. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/CREATE_TREE.d.ts +2 -0
  61. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/DECLARE_SNAPSHOT.d.ts +2 -0
  62. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/LINK_O_O.d.ts +2 -0
  63. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/LINK_P_S_INTERNAL.d.ts +2 -0
  64. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/LINK_S_O.d.ts +2 -0
  65. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/LINK_S_S.d.ts +2 -0
  66. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SET_O_ATTR.d.ts +2 -0
  67. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SET_P_ATTR.d.ts +2 -0
  68. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SET_S_ATTR.d.ts +2 -0
  69. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SHORTEN_O_O.d.ts +2 -0
  70. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SHORTEN_S_O.d.ts +2 -0
  71. package/lib/app/libraries/core-dom-decision-editor/enum-interfaces/registries/SHORTEN_S_S.d.ts +2 -0
  72. package/lib/app/libraries/core-dom-decision-editor/intent-composer/intent-composer.component.d.ts +39 -0
  73. package/lib/app/libraries/core-form/core-form/enum-interfaces.d.ts +4 -0
  74. package/lib/app/libraries/core-form/core-form-array/core-form-array.component.d.ts +21 -2
  75. package/lib/app/libraries/core-form-design/core-form-design.component.d.ts +1 -1
  76. package/lib/app/libraries/core-form-design/core-form-group-editor.component.d.ts +1 -1
  77. package/lib/app/libraries/core-rule-set/core-rule-set.component.d.ts +7 -0
  78. package/lib/app/libraries/core-table/EnumCoreTablePipeType.d.ts +2 -1
  79. package/lib/app/libraries/core-timezone/core-timezone.component.d.ts +15 -0
  80. package/lib/app/libraries/core-tree-reference/core-tree-reference.component.d.ts +12 -0
  81. package/lib/app/libraries/core-tree-reference/core-tree-reference.node.d.ts +6 -0
  82. package/lib/app/libraries/core-tree-reference/moke.data.d.ts +2 -0
  83. package/lib/app/libraries/core-workflow-builder/core-workflow.service.d.ts +0 -11
  84. package/lib/app/libraries/core-workflow-builder/interfaces/IUiDelegation.d.ts +1 -0
  85. package/lib/app/libraries/core-workflow-builder/wf-delegation/wf-delegation.component.d.ts +5 -0
  86. package/lib/app/services/app-config.service.d.ts +1 -0
  87. package/package.json +2 -2
  88. package/public-api.d.ts +2 -0
  89. package/fesm2022/ngx-histaff-alpha-core-form-design.component-Cy_mOM1n.mjs.map +0 -1
  90. package/fesm2022/ngx-histaff-alpha-design-wrapper.component-C_EM0bEs.mjs.map +0 -1
  91. package/fesm2022/ngx-histaff-alpha-ngx-histaff-alpha-BZdzGBj5.mjs.map +0 -1
  92. package/fesm2022/ngx-histaff-alpha-wf-global-config.component-Cr5x7Ejg.mjs.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Injectable, Pipe, Directive, ViewChild, forwardRef, HostListener, inject, Input, isDevMode, Inject, signal, InjectionToken, computed, effect, Injector, EventEmitter, Output, ViewContainerRef, ApplicationRef, EnvironmentInjector, createComponent, ViewEncapsulation, ChangeDetectorRef, input, ChangeDetectionStrategy, output, ViewChildren, viewChild, viewChildren, TemplateRef, NgModule, DestroyRef, ElementRef, Renderer2 } from '@angular/core';
2
+ import { Component, Injectable, Pipe, Directive, ViewChild, forwardRef, HostListener, inject, Input, isDevMode, Inject, signal, InjectionToken, computed, effect, Injector, EventEmitter, Output, ViewContainerRef, ApplicationRef, EnvironmentInjector, createComponent, ViewEncapsulation, ChangeDetectorRef, input, ChangeDetectionStrategy, output, ViewChildren, viewChild, viewChildren, ElementRef, TemplateRef, NgModule, DestroyRef, Renderer2 } from '@angular/core';
3
3
  import * as i1 from '@angular/platform-browser';
4
4
  import { DomSanitizer } from '@angular/platform-browser';
5
5
  import { of, BehaviorSubject, Subject, filter, Observable, catchError as catchError$1, distinctUntilChanged, zip, tap as tap$1, throwError, take, switchMap, finalize as finalize$1, map as map$1, interval, concat, buffer, debounceTime, combineLatestWith, fromEvent, skip, delay, Subscription, takeUntil, combineLatest } from 'rxjs';
@@ -10,7 +10,7 @@ import { last, map, catchError, tap, finalize, first, filter as filter$1, deboun
10
10
  import * as i3 from '@angular/common';
11
11
  import { CommonModule, NgTemplateOutlet, JsonPipe, NgStyle, UpperCasePipe, AsyncPipe, NgClass, LowerCasePipe, NgIf, NgFor } from '@angular/common';
12
12
  import * as i1$4 from '@angular/forms';
13
- import { NG_VALUE_ACCESSOR, Validators, FormControl, FormGroup, FormArray, NgControl, ControlContainer, FormsModule, ReactiveFormsModule } from '@angular/forms';
13
+ import { NG_VALUE_ACCESSOR, Validators, FormControl, FormGroup, FormArray, NgControl, ControlContainer, FormsModule, ReactiveFormsModule, FormBuilder } from '@angular/forms';
14
14
  import * as i1$2 from '@angular/router';
15
15
  import { Router, RouterModule, ActivatedRoute, NavigationStart, NavigationEnd, NavigationCancel, NavigationError, RouteConfigLoadEnd, RoutesRecognized, RouterOutlet } from '@angular/router';
16
16
  import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
@@ -1017,6 +1017,7 @@ var EnumCoreButtonVNSCode;
1017
1017
  EnumCoreButtonVNSCode["HEADER_TERMINATE"] = "HEADER_TERMINATE";
1018
1018
  EnumCoreButtonVNSCode["HEADER_REVOKE"] = "HEADER_REVOKE";
1019
1019
  EnumCoreButtonVNSCode["HEADER_DEBUG"] = "HEADER_DEBUG";
1020
+ EnumCoreButtonVNSCode["HEADER_APPROVE_SEND_OTP"] = "HEADER_APPROVE_SEND_OTP";
1020
1021
  //
1021
1022
  // CÁC NÚT CỦA PHẦN FORM - KHÔNG LIÊN QUAN TỚI PHÂN QUYỀN
1022
1023
  // NONE_HEADER_ category
@@ -1884,6 +1885,7 @@ var EnumFormBaseContolType;
1884
1885
  EnumFormBaseContolType["LIQUID_WYSIWYG"] = "LIQUID_WYSIWYG";
1885
1886
  EnumFormBaseContolType["STICKER_COLLECTION"] = "STICKER_COLLECTION";
1886
1887
  EnumFormBaseContolType["RULE_SET"] = "RULE_SET";
1888
+ EnumFormBaseContolType["DOM_DECISION_EDITOR"] = "DOM_DECISION_EDITOR";
1887
1889
  })(EnumFormBaseContolType || (EnumFormBaseContolType = {}));
1888
1890
 
1889
1891
  class HubConnectionService {
@@ -3930,11 +3932,12 @@ class AppInitializationService {
3930
3932
  if (window.opener && window.opener.globalPopupId) {
3931
3933
  //alert(window.opener.globalPopupId);
3932
3934
  }
3933
- fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, APP_UIID, ALLOW_IN_APP_NOTIFICATION, SHOW_LOGIN_NOTIFICATION, FEDERATION_COM_PARTY_ENABLED, IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION, IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER, USE_BUILTIN_OTP, USE_CAPTCHA, BASE_URL, BASE_URL_FOR_STATISTIC, GOLIVE_URL, DEBUG_ENABLED, EVOLUTION_UseSysActionOrderNum, EVOLUTION_UseQueryOrgWithPositionsAndQuotas, UI_VERSION_OrgChart, USE_DEMO_AVATAR, LOGO_LOGIN, LOGO_HEADER, HOME_BACKGROUND_IMAGE, FORM_CONTROL_REQUIRED_HIGHLIGHT_COLOR, OAUTH2_OIDC_ENABLED, OAUTH2_OIDC_CLIENT_ID, OAUTH2_OIDC_LOGIN_URI, OAUTH2_OIDC_REDIRECT_URI, OAUTH2_OIDC_SCOPE, OFFICE365_DEV, OFFICE365_PROD, SAML2ADFS_ENABLED, SAML2ADFS_IDP, SAML2ADFS_IDENTIFIER, SAML2ADFS_WA_SIGNIN, SAML2ADFS_WA_SIGNOUT, SAML2ADFS_WREPLY, HANGFIRE_PATH, STATIC_FOLDER, WORKFLOW_ENABLE_DEBUG_MODE, }) => {
3935
+ fetch('../../assets/app.config.json').then(res => res.json()).then(({ APP_TYPE, APP_UIID, ALLOW_IN_APP_NOTIFICATION, SHOW_LOGIN_NOTIFICATION, DEFAULT_IANA_TIMEZONE_ID, FEDERATION_COM_PARTY_ENABLED, IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION, IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER, USE_BUILTIN_OTP, USE_CAPTCHA, BASE_URL, BASE_URL_FOR_STATISTIC, GOLIVE_URL, DEBUG_ENABLED, EVOLUTION_UseSysActionOrderNum, EVOLUTION_UseQueryOrgWithPositionsAndQuotas, UI_VERSION_OrgChart, USE_DEMO_AVATAR, LOGO_LOGIN, LOGO_HEADER, HOME_BACKGROUND_IMAGE, FORM_CONTROL_REQUIRED_HIGHLIGHT_COLOR, OAUTH2_OIDC_ENABLED, OAUTH2_OIDC_CLIENT_ID, OAUTH2_OIDC_LOGIN_URI, OAUTH2_OIDC_REDIRECT_URI, OAUTH2_OIDC_SCOPE, OFFICE365_DEV, OFFICE365_PROD, SAML2ADFS_ENABLED, SAML2ADFS_IDP, SAML2ADFS_IDENTIFIER, SAML2ADFS_WA_SIGNIN, SAML2ADFS_WA_SIGNOUT, SAML2ADFS_WREPLY, HANGFIRE_PATH, STATIC_FOLDER, WORKFLOW_ENABLE_DEBUG_MODE, }) => {
3934
3936
  this.appConfigService.APP_TYPE = APP_TYPE;
3935
3937
  this.appConfigService.APP_UIID = APP_UIID;
3936
3938
  this.appConfigService.ALLOW_IN_APP_NOTIFICATION = ALLOW_IN_APP_NOTIFICATION;
3937
3939
  this.appConfigService.SHOW_LOGIN_NOTIFICATION = SHOW_LOGIN_NOTIFICATION;
3940
+ this.appConfigService.DEFAULT_IANA_TIMEZONE_ID = DEFAULT_IANA_TIMEZONE_ID;
3938
3941
  this.appConfigService.FEDERATION_COM_PARTY_ENABLED = FEDERATION_COM_PARTY_ENABLED;
3939
3942
  this.appConfigService.IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION = IGNORE_PARTIAL_URL_MATCH_FOR_FUNCTION;
3940
3943
  this.appConfigService.IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER = IGNORE_PARTIAL_URL_MATCH_FOR_PROFILE_CENTER;
@@ -8846,17 +8849,6 @@ class CoreWorkflowService {
8846
8849
  this.$showStepConfig = signal(false);
8847
8850
  this.$stepUpdated = signal(0); // force trigger for watchers
8848
8851
  this.standardConnectorHeight = 90;
8849
- /**
8850
- id: string;
8851
- name: string;
8852
- branchId: string;
8853
- type: EnumWorkflowStepType;
8854
- label: string;
8855
- config?: IStepConfig;
8856
- branches?: IWorkflowBranch[];
8857
- isPseudo?: boolean;
8858
- isInFallbackBranch?: boolean;
8859
- */
8860
8852
  this.$currentSteps = signal([
8861
8853
  {
8862
8854
  id: crypto.randomUUID(),
@@ -9340,7 +9332,11 @@ class CoreWorkflowService {
9340
9332
  const currentFlow = this.$currentFlow();
9341
9333
  if (!!currentFlow) {
9342
9334
  currentFlow.processDefinition = this.$stepsJsonPreview();
9335
+ currentFlow.delegationJson = this.$currentDelegationJson();
9336
+ currentFlow.uiDelegation = this.delegationForm.getRawValue();
9343
9337
  }
9338
+ this.$currentFlow.set(currentFlow);
9339
+ console.log(this.$currentFlow());
9344
9340
  return this.appService.post('/api/WfWorkflow/Publish', this.$currentFlow());
9345
9341
  }
9346
9342
  getById(id) {
@@ -9713,7 +9709,6 @@ class CoreDatetimeService {
9713
9709
  }
9714
9710
  //Load full IANA time zones (browser-supported)
9715
9711
  loadFullTimezones() {
9716
- const result = [];
9717
9712
  // 1. Load full IANA time zones (browser-supported)
9718
9713
  const timeZones = Intl.supportedValuesOf("timeZone");
9719
9714
  this.$timeZones.set(timeZones);
@@ -11603,6 +11598,7 @@ var EnumCoreTablePipeType;
11603
11598
  EnumCoreTablePipeType["NORMALIZE_HUMAN_NAME"] = "NORMALIZE_HUMAN_NAME";
11604
11599
  EnumCoreTablePipeType["UPLOADED_FILENAME_CUT_OFF"] = "UPLOADED_FILENAME_CUT_OFF";
11605
11600
  EnumCoreTablePipeType["TRIM"] = "TRIM";
11601
+ EnumCoreTablePipeType["UNDEFINED_TO_EMPTY_STRING"] = "UNDEFINED_TO_EMPTY_STRING";
11606
11602
  })(EnumCoreTablePipeType || (EnumCoreTablePipeType = {}));
11607
11603
 
11608
11604
  const normalizeHumanName = (value) => {
@@ -11679,6 +11675,7 @@ class TableCellPipe {
11679
11675
  EnumCoreTablePipeType.DECIMAL_TO_FIX_5,
11680
11676
  EnumCoreTablePipeType.UPLOADED_FILENAME_CUT_OFF,
11681
11677
  EnumCoreTablePipeType.TRIM,
11678
+ EnumCoreTablePipeType.UNDEFINED_TO_EMPTY_STRING
11682
11679
  ];
11683
11680
  if (!!!availableTypes.includes(pipe))
11684
11681
  return value;
@@ -11856,6 +11853,13 @@ class TableCellPipe {
11856
11853
  else {
11857
11854
  return value;
11858
11855
  }
11856
+ case EnumCoreTablePipeType.UNDEFINED_TO_EMPTY_STRING:
11857
+ if (value === undefined) {
11858
+ return '';
11859
+ }
11860
+ else {
11861
+ return value;
11862
+ }
11859
11863
  default:
11860
11864
  return value;
11861
11865
  }
@@ -12191,6 +12195,7 @@ class CoreIosSwitcherComponent extends CoreFormControlBaseComponent {
12191
12195
  this.width = 80;
12192
12196
  this.height = 28;
12193
12197
  this.readonly = false;
12198
+ this.value = false;
12194
12199
  this.subscriptions = [];
12195
12200
  this.truelyText = 'on';
12196
12201
  this.falsyText = 'off';
@@ -12237,7 +12242,7 @@ class CoreIosSwitcherComponent extends CoreFormControlBaseComponent {
12237
12242
  {
12238
12243
  provide: NG_VALUE_ACCESSOR,
12239
12244
  multi: true,
12240
- useExisting: CoreIosSwitcherComponent
12245
+ useExisting: forwardRef(() => CoreIosSwitcherComponent)
12241
12246
  }
12242
12247
  ], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<input type=\"checkbox\" [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\">\r\n\r\n<label #container class=\"core-ios-switcher-container\">\r\n\r\n @if (!!readonly) {\r\n <div class=\"outer\" [class.truely]=\"value\">\r\n <div class=\"circle\"></div>\r\n <label [class.opacity0]=\"!showOnOffText\">{{ labelText }}</label>\r\n </div>\r\n } @else {\r\n <div class=\"outer\" [class.truely]=\"value\" (click)=\"onClick()\">\r\n <div class=\"circle\"></div>\r\n <label [class.opacity0]=\"!showOnOffText\">{{ labelText }}</label>\r\n </div>\r\n }\r\n\r\n</label>\r\n", styles: ["input{display:none}.core-ios-switcher-container{--outer-width: 80px;--outer-height: 28px;--outer-falsy-border: solid #E9E9EB;--outer-truely-border: solid #FFA427;--outer-border-width: 2px;--outer-falsy-bg-color: #E9E9EB;--outer-falsy-color: black;--outer-truely-bg-color: #FFA427;--outer-truely-color: white;--outer-font-size: 14px;--circle-bg-color: white;--checkbox-size: 18px;--checkbox-border-color: #B9B9B9;--checkbox-hover-bg: #B9B9B9;--checkbox-bg: #FFFFFF;--checkbox-checked-bg: #358ccb;--checkbox-color: #FFFFFF;--font-size: 15px;--text-color: gray;display:flex;align-items:center;justify-content:flex-start;position:relative;font-size:var(--outer-font-size);font-weight:400;color:var(--text-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.core-ios-switcher-container .outer{box-sizing:border-box;display:flex;align-items:center;justify-content:center;width:var(--outer-width);height:var(--outer-height);border:var(--outer-falsy-border);border-width:var(--outer-border-width);border-radius:var(--outer-height);background-color:var(--outer-falsy-bg-color);color:var(--outer-falsy-color);cursor:pointer;transition:.5s ease-out}.core-ios-switcher-container .outer .circle{width:21px;height:21px;border-radius:50%;display:block;position:absolute;background-color:var(--circle-bg-color);cursor:pointer;left:var(--outer-border-width);transition:left .5s ease-out!important}.core-ios-switcher-container .outer label{cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:var(--font-size);padding-left:var(--outer-height);padding-right:0}.core-ios-switcher-container .truely{border:solid var(--outer-truely-border);background-color:var(--outer-truely-bg-color)!important;color:var(--outer-truely-color)!important;transition:.5s ease-out}.core-ios-switcher-container .truely label{padding-left:0!important;padding-right:var(--outer-height)!important;transition:.5s ease-out}.core-ios-switcher-container .truely .circle{left:calc(var(--outer-width) - var(--outer-border-width) - 21px)!important;transition:left .5s ease-out!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }] }); }
12243
12248
  }
@@ -12252,7 +12257,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
12252
12257
  {
12253
12258
  provide: NG_VALUE_ACCESSOR,
12254
12259
  multi: true,
12255
- useExisting: CoreIosSwitcherComponent
12260
+ useExisting: forwardRef(() => CoreIosSwitcherComponent)
12256
12261
  }
12257
12262
  ], template: "<input type=\"checkbox\" [(ngModel)]=\"value\" (ngModelChange)=\"onValueChange($event)\">\r\n\r\n<label #container class=\"core-ios-switcher-container\">\r\n\r\n @if (!!readonly) {\r\n <div class=\"outer\" [class.truely]=\"value\">\r\n <div class=\"circle\"></div>\r\n <label [class.opacity0]=\"!showOnOffText\">{{ labelText }}</label>\r\n </div>\r\n } @else {\r\n <div class=\"outer\" [class.truely]=\"value\" (click)=\"onClick()\">\r\n <div class=\"circle\"></div>\r\n <label [class.opacity0]=\"!showOnOffText\">{{ labelText }}</label>\r\n </div>\r\n }\r\n\r\n</label>\r\n", styles: ["input{display:none}.core-ios-switcher-container{--outer-width: 80px;--outer-height: 28px;--outer-falsy-border: solid #E9E9EB;--outer-truely-border: solid #FFA427;--outer-border-width: 2px;--outer-falsy-bg-color: #E9E9EB;--outer-falsy-color: black;--outer-truely-bg-color: #FFA427;--outer-truely-color: white;--outer-font-size: 14px;--circle-bg-color: white;--checkbox-size: 18px;--checkbox-border-color: #B9B9B9;--checkbox-hover-bg: #B9B9B9;--checkbox-bg: #FFFFFF;--checkbox-checked-bg: #358ccb;--checkbox-color: #FFFFFF;--font-size: 15px;--text-color: gray;display:flex;align-items:center;justify-content:flex-start;position:relative;font-size:var(--outer-font-size);font-weight:400;color:var(--text-color);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.core-ios-switcher-container .outer{box-sizing:border-box;display:flex;align-items:center;justify-content:center;width:var(--outer-width);height:var(--outer-height);border:var(--outer-falsy-border);border-width:var(--outer-border-width);border-radius:var(--outer-height);background-color:var(--outer-falsy-bg-color);color:var(--outer-falsy-color);cursor:pointer;transition:.5s ease-out}.core-ios-switcher-container .outer .circle{width:21px;height:21px;border-radius:50%;display:block;position:absolute;background-color:var(--circle-bg-color);cursor:pointer;left:var(--outer-border-width);transition:left .5s ease-out!important}.core-ios-switcher-container .outer label{cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:var(--font-size);padding-left:var(--outer-height);padding-right:0}.core-ios-switcher-container .truely{border:solid var(--outer-truely-border);background-color:var(--outer-truely-bg-color)!important;color:var(--outer-truely-color)!important;transition:.5s ease-out}.core-ios-switcher-container .truely label{padding-left:0!important;padding-right:var(--outer-height)!important;transition:.5s ease-out}.core-ios-switcher-container .truely .circle{left:calc(var(--outer-width) - var(--outer-border-width) - 21px)!important;transition:left .5s ease-out!important}\n"] }]
12258
12263
  }], ctorParameters: () => [{ type: MultiLanguageService }], propDecorators: { bgColor: [{
@@ -21335,7 +21340,7 @@ class CoreDropdownComponent extends CoreFormControlBaseComponent {
21335
21340
  //getByIdObject$
21336
21341
  if (!!!this.getByIdObject$ && isDevMode() && !!!this.warningDisable) {
21337
21342
  this.alertService.error(`CoreDropdownComponent Error: Required inputs:
21338
- getByIdObject$: BehaviorSubject&lt;any&gt; (for '${this.ngControl.name}')`);
21343
+ getByIdObject$: BehaviorSubject&lt;any&gt; (for '${this.ngControl?.name ?? "-"}')`);
21339
21344
  }
21340
21345
  if (!!!this.shownFrom && isDevMode() && !!!this.warningDisable) {
21341
21346
  this.alertService.error(`CoreDropdownComponent Error: Required inputs:
@@ -23323,13 +23328,20 @@ class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent {
23323
23328
  /* END: CHECK INPUTS */
23324
23329
  this.subscriptions.push(this.getByIdObject$?.subscribe(x => {
23325
23330
  if (!!x) {
23326
- if (!!!this.multiMode) {
23331
+ if (!this.multiMode) {
23327
23332
  this.valueToShow = x[this.shownFrom];
23328
23333
  this.enrichment.register(this.form, this.fieldName, x[this.shownFrom]);
23334
+ if (!!this.alsoBindTo) {
23335
+ this.alsoBindTo.forEach(a => {
23336
+ this.form.patchValue({
23337
+ [a.bindTo]: x[a.takeFrom]
23338
+ });
23339
+ });
23340
+ }
23329
23341
  }
23330
23342
  }
23331
23343
  else {
23332
- if (!!!this.multiMode) {
23344
+ if (!this.multiMode) {
23333
23345
  this.valueToShow = "";
23334
23346
  this.enrichment.register(this.form, this.fieldName, "");
23335
23347
  }
@@ -26449,11 +26461,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
26449
26461
  class CoreRuleSetComponent extends CoreFormControlBaseComponent {
26450
26462
  constructor() {
26451
26463
  super();
26464
+ this.$container = viewChild('container');
26452
26465
  this.value = null;
26453
26466
  this.$open = signal(false);
26454
26467
  this.crts = inject(CoreRuleTreeService);
26468
+ this.el = inject((ElementRef));
26455
26469
  this.ruleTreeForm = this.crts.createGroupForm();
26456
26470
  this.wfs = inject(CoreWorkflowService);
26471
+ this.ds = inject(DomService);
26472
+ effect(() => {
26473
+ const container = this.$container()?.nativeElement;
26474
+ if (!container)
26475
+ return;
26476
+ container.style.setProperty('--popup-z-index', this.ds.getMaxZIndex() + 1);
26477
+ });
26457
26478
  }
26458
26479
  onToggleOpen() {
26459
26480
  this.$open.update(x => !x);
@@ -26463,14 +26484,23 @@ class CoreRuleSetComponent extends CoreFormControlBaseComponent {
26463
26484
  this.onChange(e);
26464
26485
  this.markAsTouched();
26465
26486
  }
26487
+ onDocumentClick(event) {
26488
+ const clickedInside = this.el.nativeElement.contains(event.target);
26489
+ if (!clickedInside) {
26490
+ this.onClickOutside();
26491
+ }
26492
+ }
26493
+ onClickOutside() {
26494
+ this.$open.set(false);
26495
+ }
26466
26496
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRuleSetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26467
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: CoreRuleSetComponent, isStandalone: true, selector: "core-rule-set", providers: [
26497
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.2.5", type: CoreRuleSetComponent, isStandalone: true, selector: "core-rule-set", host: { listeners: { "document:click": "onDocumentClick($event)" } }, providers: [
26468
26498
  {
26469
26499
  provide: NG_VALUE_ACCESSOR,
26470
26500
  multi: true,
26471
26501
  useExisting: forwardRef(() => CoreRuleSetComponent)
26472
26502
  }
26473
- ], usesInheritance: true, ngImport: i0, template: "<div class=\"core-rule-set-container\">\r\n <button type=\"button\" class=\"btn btn-primary form-control\" (click)=\"onToggleOpen()\">Rule set</button>\r\n <div class=\"rule-set-popup\" [class.open]=\"$open()\">\r\n <core-rule-tree \r\n [$totalCols]=\"wfs.$availableCols()\"\r\n [$mainForm]=\"ruleTreeForm\"\r\n ($jsonEmitter)=\"onRuleTreeJsonChange($event)\"\r\n />\r\n </div>\r\n</div>\r\n", styles: [".core-rule-set-container{position:relative}.core-rule-set-container .rule-set-popup{display:none;background-color:#fff;position:absolute;left:0;top:100%;width:360px;height:fit-content;box-shadow:.4rem 0 2rem #0000002e;padding:15px 15px 0}.core-rule-set-container .rule-set-popup.open{display:block}\n"], dependencies: [{ kind: "component", type: CoreRuleTreeComponent, selector: "core-rule-tree", inputs: ["$totalCols", "$mainForm", "$filterStringInput", "$expressionInput", "$form", "$field"], outputs: ["$jsonEmitter"] }] }); }
26503
+ ], viewQueries: [{ propertyName: "$container", first: true, predicate: ["container"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-rule-set-container\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onToggleOpen()\" [class.disabled]=\"disabled\">Rule set</button>\r\n <div class=\"rule-set-popup\" [class.open]=\"$open()\">\r\n <core-rule-tree \r\n [$totalCols]=\"wfs.$availableCols()\"\r\n [$mainForm]=\"ruleTreeForm\"\r\n ($jsonEmitter)=\"onRuleTreeJsonChange($event)\"\r\n />\r\n </div>\r\n</div>\r\n", styles: [".core-rule-set-container{--popup-z-index: 1;position:relative}.core-rule-set-container .form-control{line-height:unset}.core-rule-set-container .rule-set-popup{display:none;background-color:#fff;position:absolute;left:0;top:100%;width:360px;height:fit-content;box-shadow:.4rem 0 2rem #0000002e;padding:15px 15px 0;z-index:var(--popup-z-index)}.core-rule-set-container .rule-set-popup.open{display:block}\n"], dependencies: [{ kind: "component", type: CoreRuleTreeComponent, selector: "core-rule-tree", inputs: ["$totalCols", "$mainForm", "$filterStringInput", "$expressionInput", "$form", "$field"], outputs: ["$jsonEmitter"] }] }); }
26474
26504
  }
26475
26505
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreRuleSetComponent, decorators: [{
26476
26506
  type: Component,
@@ -26482,7 +26512,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
26482
26512
  multi: true,
26483
26513
  useExisting: forwardRef(() => CoreRuleSetComponent)
26484
26514
  }
26485
- ], template: "<div class=\"core-rule-set-container\">\r\n <button type=\"button\" class=\"btn btn-primary form-control\" (click)=\"onToggleOpen()\">Rule set</button>\r\n <div class=\"rule-set-popup\" [class.open]=\"$open()\">\r\n <core-rule-tree \r\n [$totalCols]=\"wfs.$availableCols()\"\r\n [$mainForm]=\"ruleTreeForm\"\r\n ($jsonEmitter)=\"onRuleTreeJsonChange($event)\"\r\n />\r\n </div>\r\n</div>\r\n", styles: [".core-rule-set-container{position:relative}.core-rule-set-container .rule-set-popup{display:none;background-color:#fff;position:absolute;left:0;top:100%;width:360px;height:fit-content;box-shadow:.4rem 0 2rem #0000002e;padding:15px 15px 0}.core-rule-set-container .rule-set-popup.open{display:block}\n"] }]
26515
+ ], host: {
26516
+ '(document:click)': 'onDocumentClick($event)'
26517
+ }, template: "<div #container class=\"core-rule-set-container\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onToggleOpen()\" [class.disabled]=\"disabled\">Rule set</button>\r\n <div class=\"rule-set-popup\" [class.open]=\"$open()\">\r\n <core-rule-tree \r\n [$totalCols]=\"wfs.$availableCols()\"\r\n [$mainForm]=\"ruleTreeForm\"\r\n ($jsonEmitter)=\"onRuleTreeJsonChange($event)\"\r\n />\r\n </div>\r\n</div>\r\n", styles: [".core-rule-set-container{--popup-z-index: 1;position:relative}.core-rule-set-container .form-control{line-height:unset}.core-rule-set-container .rule-set-popup{display:none;background-color:#fff;position:absolute;left:0;top:100%;width:360px;height:fit-content;box-shadow:.4rem 0 2rem #0000002e;padding:15px 15px 0;z-index:var(--popup-z-index)}.core-rule-set-container .rule-set-popup.open{display:block}\n"] }]
26486
26518
  }], ctorParameters: () => [] });
26487
26519
 
26488
26520
  class CoreControlNoFormArrayComponent extends BaseComponent {
@@ -26659,14 +26691,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
26659
26691
  }] } });
26660
26692
 
26661
26693
  class CoreFormArrayComponent extends CoreFormControlBaseComponent {
26694
+ // --- System field names (framework contract) ---
26695
+ static { this.SYSTEM_DELETE_FIELD = 'formArrayItemDeleted'; }
26662
26696
  constructor() {
26663
26697
  super();
26698
+ this.formArrayIdentityField = 'id';
26664
26699
  this.addNewMode$ = new BehaviorSubject(false);
26665
26700
  this.lang = signal('vi');
26666
26701
  this.controlGroups = signal([]);
26667
26702
  this.subscriptions = [];
26668
26703
  //enrichment = inject(CoreFormEnrichmentService);
26669
26704
  this.cfs = inject(CoreFormService);
26705
+ this.removeCache = new WeakMap();
26670
26706
  const mls = inject(MultiLanguageService);
26671
26707
  this.subscriptions.push(mls.lang$.subscribe(x => this.lang.set(x)));
26672
26708
  // Optional: log whenever groups change
@@ -26705,26 +26741,91 @@ class CoreFormArrayComponent extends CoreFormControlBaseComponent {
26705
26741
  updateControlGroups() {
26706
26742
  this.controlGroups.set(this.formArray.controls);
26707
26743
  }
26744
+ canRemove(group) {
26745
+ if (this.removeCache.has(group)) {
26746
+ return this.removeCache.get(group);
26747
+ }
26748
+ const result = this.evaluateCanRemove(group);
26749
+ this.removeCache.set(group, result);
26750
+ return result;
26751
+ }
26752
+ clearRemoveCache() {
26753
+ this.removeCache = new WeakMap();
26754
+ }
26755
+ evaluateCanRemove(group) {
26756
+ const rule = this.removeDisabledIf;
26757
+ if (!rule)
26758
+ return true;
26759
+ const control = group.get(rule.field);
26760
+ if (!control)
26761
+ return true;
26762
+ const controlValue = control.value;
26763
+ if ('notNull' in rule) {
26764
+ // disable remove nếu value NOT NULL
26765
+ return controlValue == null;
26766
+ }
26767
+ if ('equals' in rule) {
26768
+ // disable remove nếu value === equals
26769
+ return controlValue !== rule.equals;
26770
+ }
26771
+ if ('in' in rule) {
26772
+ // disable remove nếu value nằm trong list
26773
+ return !rule.in.includes(controlValue);
26774
+ }
26775
+ return true;
26776
+ }
26777
+ evaluateCanHideRemoveButton(group) {
26778
+ if (group.get("formArrayItemDeleted")?.value === true) {
26779
+ return true;
26780
+ }
26781
+ return false;
26782
+ }
26708
26783
  addItem() {
26709
26784
  const group = this.cfs.buildGroupFromConfig(this.config);
26710
26785
  this.formArray.push(group);
26711
26786
  this.updateControlGroups();
26712
26787
  }
26713
- removeItem(index) {
26714
- this.formArray.removeAt(index);
26788
+ removeItem(index, group) {
26789
+ if (!this.evaluateCanRemove(group)) {
26790
+ this.as.info(this.removeDisabledIfMessage ?? 'This row can not be removed', alertOptions);
26791
+ return;
26792
+ }
26793
+ //this.formArray.removeAt(index);
26794
+ //this.updateControlGroups();
26795
+ const identityField = this.formArrayIdentityField;
26796
+ const deleteField = CoreFormArrayComponent.SYSTEM_DELETE_FIELD;
26797
+ // 🔴 Dev-only invariant check
26798
+ if (!group.contains(deleteField)) {
26799
+ if (isDevMode()) {
26800
+ this.as.error(`[CoreFormArray] Missing system delete field '${deleteField}'.`, alertOptions);
26801
+ }
26802
+ }
26803
+ const identityValue = identityField
26804
+ ? group.get(identityField)?.value
26805
+ : null;
26806
+ // 🟢 A. Transient item (no identity) → physical remove
26807
+ if (!identityValue) {
26808
+ this.formArray.removeAt(index);
26809
+ this.updateControlGroups();
26810
+ return;
26811
+ }
26812
+ // 🔵 B. Persisted item → soft delete (change-tracked)
26813
+ group.patchValue({ [deleteField]: true }, { emitEvent: true });
26814
+ // Optional: lock editing after delete intent
26815
+ group.disable({ emitEvent: false });
26715
26816
  this.updateControlGroups();
26716
26817
  }
26717
26818
  ngOnDestroy() {
26718
26819
  this.subscriptions.forEach(x => x?.unsubscribe());
26719
26820
  }
26720
26821
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreFormArrayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26721
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreFormArrayComponent, isStandalone: true, selector: "core-form-array", inputs: { formArrayName: "formArrayName", parentFormGroup: "parentFormGroup", formArray: "formArray", config: "config", checkError$: "checkError$", addNewMode$: "addNewMode$", readonly: "readonly", disabled: "disabled" }, providers: [
26822
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreFormArrayComponent, isStandalone: true, selector: "core-form-array", inputs: { formArrayName: "formArrayName", parentFormGroup: "parentFormGroup", formArray: "formArray", config: "config", checkError$: "checkError$", formArrayIdentityField: "formArrayIdentityField", addNewMode$: "addNewMode$", readonly: "readonly", disabled: "disabled", removeDisabledIf: "removeDisabledIf", removeDisabledIfMessage: "removeDisabledIfMessage" }, providers: [
26722
26823
  {
26723
26824
  provide: NG_VALUE_ACCESSOR,
26724
26825
  multi: true,
26725
26826
  useExisting: forwardRef(() => CoreFormArrayComponent),
26726
26827
  }
26727
- ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-form-array-container\">\r\n\r\n\r\n @for (group of controlGroups(); track $index; let i = $index) {\r\n <!-- \u2705 Parent owns the formGroup context -->\r\n <div class=\"form-array-item\" [formGroup]=\"group\">\r\n\r\n <div class=\"form-array-content\">\r\n @for (section of config; track $index) {\r\n @if (!section.hidden) {\r\n <div class=\"section\">\r\n <!-- @if (section.caption) {\r\n <div class=\"section-caption\">{{ section.caption }}</div>\r\n } -->\r\n\r\n @for (row of section.rows; track $index) {\r\n <div class=\"row mb15\">\r\n @for (col of row; track $index) {\r\n <div [class]=\"'col-md-' + col.flexSize\" [class.d-none]=\"col.flexSize === 0\">\r\n <!-- no [form] needed -->\r\n <core-control-no-form-array \r\n [control]=\"col\" \r\n [readonly]=\"!!disabled || !!col.readonly\"\r\n [disabled]=\"!!disabled || !!col.disabled\"\r\n [checkError$]=\"checkError$\">\r\n </core-control-no-form-array>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-toolbar\">\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\" (click)=\"removeItem(i)\"\r\n [appTooltip]=\"'Remove group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-footer\">\r\n <button type=\"button\" class=\"btn btn-success btn-sm feather-file-plus\" (click)=\"addItem()\"\r\n [appTooltip]=\"'Add group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n }\r\n</div>", styles: [".core-form-array-container{padding:15px;border:1px solid #ced4da}.core-form-array-container .form-array-item{display:flex;align-items:flex-start}.core-form-array-container .form-array-item>*{display:inline-block!important}.core-form-array-container .form-array-item .form-array-content{width:calc(100% - 46px)}.core-form-array-container .form-array-item .form-array-toolbar{width:14px;padding-left:12px;transform:translateY(25px)}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreControlNoFormArrayComponent, selector: "core-control-no-form-array", inputs: ["control", "checkError$", "rangeLimit", "readonly", "disabled"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
26828
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-form-array-container\">\r\n\r\n\r\n @for (group of controlGroups(); track $index; let i = $index) {\r\n <!-- \u2705 Parent owns the formGroup context -->\r\n <div class=\"form-array-item\" [formGroup]=\"group\">\r\n\r\n <div class=\"form-array-content\">\r\n @for (section of config; track $index) {\r\n @if (!section.hidden) {\r\n <div class=\"section\">\r\n <!-- @if (section.caption) {\r\n <div class=\"section-caption\">{{ section.caption }}</div>\r\n } -->\r\n\r\n @for (row of section.rows; track $index) {\r\n <div class=\"row mb15\">\r\n @for (col of row; track $index) {\r\n <div [class]=\"'col-md-' + col.flexSize\" [class.d-none]=\"col.flexSize === 0\">\r\n <!-- no [form] needed -->\r\n <core-control-no-form-array \r\n [control]=\"col\" \r\n [readonly]=\"!!disabled || !!col.readonly\"\r\n [disabled]=\"!!disabled || !!col.disabled\"\r\n [checkError$]=\"checkError$\">\r\n </core-control-no-form-array>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-toolbar\">\r\n @let canRemoveRow = canRemove(group);\r\n <!-- @if (evaluateCanHideRemoveButton(group)) { -->\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\" (click)=\"removeItem(i, group)\"\r\n [class.used]=\"!canRemoveRow\"\r\n [appTooltip]=\"canRemoveRow ? 'Remove group' : removeDisabledIfMessage \" [showAnyway]=\"true\"></button>\r\n <!-- } -->\r\n </div>\r\n }\r\n </div>\r\n <hr />\r\n }\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-footer\">\r\n <button type=\"button\" class=\"btn btn-success btn-sm feather-file-plus\" (click)=\"addItem()\"\r\n [appTooltip]=\"'Add group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n }\r\n</div>", styles: [".core-form-array-container{padding:15px;border:1px solid #ced4da}.core-form-array-container .form-array-item{display:flex;align-items:flex-start;margin-bottom:15px}.core-form-array-container .form-array-item>*{display:inline-block!important}.core-form-array-container .form-array-item .form-array-content{width:calc(100% - 46px)}.core-form-array-container .form-array-item .form-array-toolbar{width:14px;padding-left:12px;transform:translateY(25px)}.core-form-array-container .form-array-item .form-array-toolbar button.used{opacity:.5}\n"], dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreControlNoFormArrayComponent, selector: "core-control-no-form-array", inputs: ["control", "checkError$", "rangeLimit", "readonly", "disabled"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }] }); }
26728
26829
  }
26729
26830
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreFormArrayComponent, decorators: [{
26730
26831
  type: Component,
@@ -26740,7 +26841,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
26740
26841
  TooltipDirective,
26741
26842
  CoreControlNoFormArrayComponent,
26742
26843
  ReactiveFormsModule
26743
- ], template: "<div class=\"core-form-array-container\">\r\n\r\n\r\n @for (group of controlGroups(); track $index; let i = $index) {\r\n <!-- \u2705 Parent owns the formGroup context -->\r\n <div class=\"form-array-item\" [formGroup]=\"group\">\r\n\r\n <div class=\"form-array-content\">\r\n @for (section of config; track $index) {\r\n @if (!section.hidden) {\r\n <div class=\"section\">\r\n <!-- @if (section.caption) {\r\n <div class=\"section-caption\">{{ section.caption }}</div>\r\n } -->\r\n\r\n @for (row of section.rows; track $index) {\r\n <div class=\"row mb15\">\r\n @for (col of row; track $index) {\r\n <div [class]=\"'col-md-' + col.flexSize\" [class.d-none]=\"col.flexSize === 0\">\r\n <!-- no [form] needed -->\r\n <core-control-no-form-array \r\n [control]=\"col\" \r\n [readonly]=\"!!disabled || !!col.readonly\"\r\n [disabled]=\"!!disabled || !!col.disabled\"\r\n [checkError$]=\"checkError$\">\r\n </core-control-no-form-array>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-toolbar\">\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\" (click)=\"removeItem(i)\"\r\n [appTooltip]=\"'Remove group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-footer\">\r\n <button type=\"button\" class=\"btn btn-success btn-sm feather-file-plus\" (click)=\"addItem()\"\r\n [appTooltip]=\"'Add group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n }\r\n</div>", styles: [".core-form-array-container{padding:15px;border:1px solid #ced4da}.core-form-array-container .form-array-item{display:flex;align-items:flex-start}.core-form-array-container .form-array-item>*{display:inline-block!important}.core-form-array-container .form-array-item .form-array-content{width:calc(100% - 46px)}.core-form-array-container .form-array-item .form-array-toolbar{width:14px;padding-left:12px;transform:translateY(25px)}\n"] }]
26844
+ ], template: "<div class=\"core-form-array-container\">\r\n\r\n\r\n @for (group of controlGroups(); track $index; let i = $index) {\r\n <!-- \u2705 Parent owns the formGroup context -->\r\n <div class=\"form-array-item\" [formGroup]=\"group\">\r\n\r\n <div class=\"form-array-content\">\r\n @for (section of config; track $index) {\r\n @if (!section.hidden) {\r\n <div class=\"section\">\r\n <!-- @if (section.caption) {\r\n <div class=\"section-caption\">{{ section.caption }}</div>\r\n } -->\r\n\r\n @for (row of section.rows; track $index) {\r\n <div class=\"row mb15\">\r\n @for (col of row; track $index) {\r\n <div [class]=\"'col-md-' + col.flexSize\" [class.d-none]=\"col.flexSize === 0\">\r\n <!-- no [form] needed -->\r\n <core-control-no-form-array \r\n [control]=\"col\" \r\n [readonly]=\"!!disabled || !!col.readonly\"\r\n [disabled]=\"!!disabled || !!col.disabled\"\r\n [checkError$]=\"checkError$\">\r\n </core-control-no-form-array>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-toolbar\">\r\n @let canRemoveRow = canRemove(group);\r\n <!-- @if (evaluateCanHideRemoveButton(group)) { -->\r\n <button type=\"button\" class=\"btn btn-danger btn-sm feather-trash-2\" (click)=\"removeItem(i, group)\"\r\n [class.used]=\"!canRemoveRow\"\r\n [appTooltip]=\"canRemoveRow ? 'Remove group' : removeDisabledIfMessage \" [showAnyway]=\"true\"></button>\r\n <!-- } -->\r\n </div>\r\n }\r\n </div>\r\n <hr />\r\n }\r\n\r\n @if (!disabled && !readonly) {\r\n <div class=\"form-array-footer\">\r\n <button type=\"button\" class=\"btn btn-success btn-sm feather-file-plus\" (click)=\"addItem()\"\r\n [appTooltip]=\"'Add group'\" [showAnyway]=\"true\"></button>\r\n </div>\r\n }\r\n</div>", styles: [".core-form-array-container{padding:15px;border:1px solid #ced4da}.core-form-array-container .form-array-item{display:flex;align-items:flex-start;margin-bottom:15px}.core-form-array-container .form-array-item>*{display:inline-block!important}.core-form-array-container .form-array-item .form-array-content{width:calc(100% - 46px)}.core-form-array-container .form-array-item .form-array-toolbar{width:14px;padding-left:12px;transform:translateY(25px)}.core-form-array-container .form-array-item .form-array-toolbar button.used{opacity:.5}\n"] }]
26744
26845
  }], ctorParameters: () => [], propDecorators: { formArrayName: [{
26745
26846
  type: Input,
26746
26847
  args: [{ required: true }]
@@ -26756,12 +26857,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
26756
26857
  }], checkError$: [{
26757
26858
  type: Input,
26758
26859
  args: [{ required: true }]
26860
+ }], formArrayIdentityField: [{
26861
+ type: Input
26759
26862
  }], addNewMode$: [{
26760
26863
  type: Input
26761
26864
  }], readonly: [{
26762
26865
  type: Input
26763
26866
  }], disabled: [{
26764
26867
  type: Input
26868
+ }], removeDisabledIf: [{
26869
+ type: Input
26870
+ }], removeDisabledIfMessage: [{
26871
+ type: Input
26765
26872
  }] } });
26766
26873
 
26767
26874
  class CoreDocgenToolbarComponent {
@@ -27661,6 +27768,1068 @@ var coreStickerCollection_component = /*#__PURE__*/Object.freeze({
27661
27768
  CoreStickerCollectionComponent: CoreStickerCollectionComponent
27662
27769
  });
27663
27770
 
27771
+ var EnumActionCode;
27772
+ (function (EnumActionCode) {
27773
+ EnumActionCode["CREATE_TREE"] = "CREATE_TREE";
27774
+ EnumActionCode["CREATE_O"] = "CREATE_O";
27775
+ EnumActionCode["CREATE_S"] = "CREATE_S";
27776
+ EnumActionCode["LINK_O_O"] = "LINK_O_O";
27777
+ EnumActionCode["SHORTEN_O_O"] = "SHORTEN_O_O";
27778
+ EnumActionCode["LINK_S_O"] = "LINK_S_O";
27779
+ EnumActionCode["SHORTEN_S_O"] = "SHORTEN_S_O";
27780
+ EnumActionCode["LINK_S_S"] = "LINK_S_S";
27781
+ EnumActionCode["SHORTEN_S_S"] = "SHORTEN_S_S";
27782
+ EnumActionCode["LINK_P_S_INTERNAL"] = "LINK_P_S_INTERNAL";
27783
+ EnumActionCode["SHORTEN_P_S"] = "SHORTEN_P_S";
27784
+ EnumActionCode["SET_O_ATTR"] = "SET_O_ATTR";
27785
+ EnumActionCode["SET_S_ATTR"] = "SET_S_ATTR";
27786
+ EnumActionCode["SET_P_ATTR"] = "SET_P_ATTR";
27787
+ EnumActionCode["DECLARE_SNAPSHOT"] = "DECLARE_SNAPSHOT";
27788
+ })(EnumActionCode || (EnumActionCode = {}));
27789
+
27790
+ const CREATE_TREE = {
27791
+ actionCode: EnumActionCode.CREATE_TREE,
27792
+ label: 'Tạo không gian tổ chức',
27793
+ description: 'Tạo một không gian tổ chức mới trong DOM.',
27794
+ category: 'Organization',
27795
+ quickEmoji: '🌳',
27796
+ inputs: [
27797
+ {
27798
+ key: 'TREE_NAME',
27799
+ label: 'Tên cây',
27800
+ kind: 'string',
27801
+ validators: {
27802
+ required: true,
27803
+ minLength: 3,
27804
+ maxLength: 255
27805
+ },
27806
+ row: 1
27807
+ },
27808
+ {
27809
+ key: 'IS_HR',
27810
+ label: 'Là không gian nhân sự chính thống (ngành ngang)',
27811
+ kind: 'boolean',
27812
+ defaultValue: true,
27813
+ validators: {
27814
+ required: true
27815
+ },
27816
+ row: 2
27817
+ },
27818
+ ],
27819
+ };
27820
+
27821
+ const CREATE_O = {
27822
+ actionCode: EnumActionCode.CREATE_O,
27823
+ label: 'Tạo tổ chức',
27824
+ description: 'Tạo một tổ chức mới trong DOM.',
27825
+ category: 'Organization',
27826
+ quickEmoji: '🏗️',
27827
+ inputs: [
27828
+ {
27829
+ key: 'ID',
27830
+ label: 'ID',
27831
+ kind: 'string',
27832
+ defaultValue: crypto.randomUUID(),
27833
+ disabled: true
27834
+ },
27835
+ {
27836
+ key: 'ORIGINAL_NAME',
27837
+ label: 'Tên chính danh lịch sử của tổ chức',
27838
+ kind: 'string',
27839
+ validators: {
27840
+ required: true,
27841
+ minLength: 3,
27842
+ maxLength: 255
27843
+ }
27844
+ },
27845
+ {
27846
+ key: 'CODE',
27847
+ label: 'Mã hệ thống',
27848
+ kind: 'string',
27849
+ defaultValue: crypto.randomUUID(),
27850
+ validators: {
27851
+ required: true,
27852
+ minLength: 3,
27853
+ maxLength: 255
27854
+ },
27855
+ hidden: true
27856
+ },
27857
+ {
27858
+ key: 'SHORT_CODE',
27859
+ label: 'Mã giao diện (ghép sau tên gốc)',
27860
+ kind: 'string',
27861
+ validators: {
27862
+ required: true,
27863
+ minLength: 3,
27864
+ maxLength: 255
27865
+ },
27866
+ disabled: true
27867
+ },
27868
+ {
27869
+ key: 'TREE_ID',
27870
+ label: 'Cây tổ chức',
27871
+ kind: 'treeId',
27872
+ defaultValue: true,
27873
+ validators: {
27874
+ required: true
27875
+ }
27876
+ },
27877
+ {
27878
+ key: 'IS_ROOT',
27879
+ label: 'Là đơn vị gốc',
27880
+ kind: 'boolean',
27881
+ defaultValue: false,
27882
+ validators: {
27883
+ required: true
27884
+ }
27885
+ },
27886
+ {
27887
+ key: 'AVAILABLE_UTC',
27888
+ label: 'Khả dụng từ',
27889
+ kind: 'date',
27890
+ validators: {
27891
+ required: true
27892
+ }
27893
+ },
27894
+ {
27895
+ key: 'TIMEZONE_ID',
27896
+ label: 'Múi giờ',
27897
+ kind: 'timezoneId',
27898
+ defaultValue: 'Asia/Saigon',
27899
+ validators: {
27900
+ required: true
27901
+ },
27902
+ errorMessages: {
27903
+ required: 'Phải xác định múi giờ nghiệp vụ'
27904
+ },
27905
+ row: 2,
27906
+ flexSize: 4
27907
+ }
27908
+ ],
27909
+ };
27910
+
27911
+ var EnumRCodeForward;
27912
+ (function (EnumRCodeForward) {
27913
+ EnumRCodeForward["O_IS_PART_OF_O"] = "O_IS_PART_OF_O";
27914
+ EnumRCodeForward["S_BELONGS_TO_O"] = "S_BELONGS_TO_O";
27915
+ EnumRCodeForward["P_OCCUPIES_S"] = "P_OCCUPIES_S";
27916
+ EnumRCodeForward["S_WORKS_UNDER_S"] = "S_WORKS_UNDER_S";
27917
+ EnumRCodeForward["S_REPORTS_TO_S"] = "S_REPORTS_TO_S";
27918
+ })(EnumRCodeForward || (EnumRCodeForward = {}));
27919
+ var EnumRCodeOneBackward;
27920
+ (function (EnumRCodeOneBackward) {
27921
+ EnumRCodeOneBackward["O_HAS_PART_O"] = "O_HAS_PART_O";
27922
+ EnumRCodeOneBackward["O_HAS_SEAT_S"] = "O_HAS_SEAT_S";
27923
+ EnumRCodeOneBackward["S_IS_OCCUPIED_BY_P"] = "S_IS_OCCUPIED_BY_P";
27924
+ EnumRCodeOneBackward["S_MANAGES_S"] = "S_MANAGES_S";
27925
+ EnumRCodeOneBackward["S_REPORTED_BY_S"] = "S_REPORTED_BY_S";
27926
+ })(EnumRCodeOneBackward || (EnumRCodeOneBackward = {}));
27927
+ const RCODE_FORWARD_VALUES = Object.values(EnumRCodeForward);
27928
+
27929
+ const LINK_O_O = {
27930
+ actionCode: EnumActionCode.LINK_O_O,
27931
+ label: 'Thiết lập quan hệ tổ chức',
27932
+ description: 'Thiết lập quan hệ hiệu lực giữa hai tổ chức.',
27933
+ category: 'Organization',
27934
+ quickEmoji: '🔗🏢',
27935
+ inputs: [
27936
+ {
27937
+ key: 'VF_UTC',
27938
+ label: 'Hiệu lực từ',
27939
+ kind: 'date',
27940
+ validators: { required: true },
27941
+ errorMessages: {
27942
+ required: 'Phải xác định thời điểm bắt đầu hiệu lực'
27943
+ },
27944
+ hint: 'Thời điểm được hiểu theo múi giờ nghiệp vụ bên dưới',
27945
+ row: 1,
27946
+ flexSize: 4
27947
+ },
27948
+ {
27949
+ key: 'A_ID', label: 'Tổ chức con', kind: 'orgGardenReference', validators: {
27950
+ required: true
27951
+ },
27952
+ row: 1,
27953
+ flexSize: 4
27954
+ },
27955
+ {
27956
+ key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.O_IS_PART_OF_O, hidden: true
27957
+ },
27958
+ {
27959
+ key: 'B_ID', label: 'Tổ chức cha', kind: 'orgGardenReference', validators: {
27960
+ required: true
27961
+ },
27962
+ row: 1,
27963
+ flexSize: 4
27964
+ },
27965
+ {
27966
+ key: 'VT_UTC',
27967
+ label: 'Hiệu lực đến',
27968
+ kind: 'date',
27969
+ defaultValue: new Date(9999, 11, 31),
27970
+ row: 2,
27971
+ flexSize: 4
27972
+ },
27973
+ {
27974
+ key: 'TIMEZONE_ID',
27975
+ label: 'Múi giờ',
27976
+ kind: 'timezoneId',
27977
+ defaultValue: 'Asia/Saigon',
27978
+ validators: {
27979
+ required: true
27980
+ },
27981
+ errorMessages: {
27982
+ required: 'Phải xác định múi giờ nghiệp vụ'
27983
+ },
27984
+ row: 2,
27985
+ flexSize: 4
27986
+ }
27987
+ ],
27988
+ };
27989
+
27990
+ const SHORTEN_O_O = {
27991
+ actionCode: EnumActionCode.SHORTEN_O_O,
27992
+ label: 'Rút ngắn hiệu lực quan hệ tổ chức',
27993
+ description: 'Rút ngắn hiệu lực quan hệ tổ chức.',
27994
+ category: 'Organization',
27995
+ quickEmoji: '✂️🏢',
27996
+ inputs: [
27997
+ {
27998
+ key: 'VF_UTC',
27999
+ label: 'Hiệu lực từ',
28000
+ kind: 'date',
28001
+ validators: { required: true },
28002
+ errorMessages: {
28003
+ required: 'Phải xác định thời điểm bắt đầu hiệu lực'
28004
+ }
28005
+ },
28006
+ {
28007
+ key: 'A_ID', label: 'Tổ chức con', kind: 'reference', validators: {
28008
+ required: true
28009
+ }
28010
+ },
28011
+ {
28012
+ key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.O_IS_PART_OF_O, hidden: true
28013
+ },
28014
+ {
28015
+ key: 'B_ID', label: 'Tổ chức cha', kind: 'reference', validators: {
28016
+ required: true
28017
+ }
28018
+ },
28019
+ {
28020
+ key: 'VT_UTC',
28021
+ label: 'Hiệu lực đến',
28022
+ kind: 'date',
28023
+ defaultValue: new Date(9999, 11, 31)
28024
+ },
28025
+ {
28026
+ key: 'TIMEZONE_ID',
28027
+ label: 'Múi giờ',
28028
+ kind: 'timezoneId',
28029
+ defaultValue: 'Asia/Saigon',
28030
+ validators: {
28031
+ required: true
28032
+ },
28033
+ errorMessages: {
28034
+ required: 'Phải xác định múi giờ nghiệp vụ'
28035
+ }
28036
+ }
28037
+ ],
28038
+ };
28039
+
28040
+ const CREATE_S = {
28041
+ actionCode: EnumActionCode.CREATE_S,
28042
+ label: 'Tạo ghế',
28043
+ description: 'Tạo một ghế (seat) mới trong tổ chức.',
28044
+ category: 'Seat',
28045
+ quickEmoji: '🪑',
28046
+ inputs: [
28047
+ {
28048
+ key: 'CODE', label: 'Mã ghế', kind: 'string', validators: {
28049
+ required: true
28050
+ }
28051
+ },
28052
+ ],
28053
+ };
28054
+
28055
+ const LINK_S_O = {
28056
+ actionCode: EnumActionCode.LINK_S_O,
28057
+ label: 'Gắn ghế vào tổ chức',
28058
+ description: 'Gắn một ghế vào một tổ chức.',
28059
+ category: 'Seat',
28060
+ quickEmoji: '📎🪑🏢',
28061
+ inputs: [
28062
+ {
28063
+ key: 'A_ID', label: 'Ghế', kind: 'reference', validators: {
28064
+ required: true
28065
+ }
28066
+ },
28067
+ {
28068
+ key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.S_BELONGS_TO_O, hidden: true
28069
+ },
28070
+ {
28071
+ key: 'B_ID', label: 'Tổ chức', kind: 'reference', validators: {
28072
+ required: true
28073
+ }
28074
+ },
28075
+ ],
28076
+ };
28077
+
28078
+ const SHORTEN_S_O = {
28079
+ actionCode: EnumActionCode.SHORTEN_S_O,
28080
+ label: 'Rút ngắn hiệu lực ghế–tổ chức',
28081
+ description: 'Rút ngắn hiệu lực ghế–tổ chức.',
28082
+ category: 'Seat',
28083
+ quickEmoji: '✂️🪑🏢',
28084
+ inputs: [
28085
+ {
28086
+ key: 'A_ID', label: 'Ghế', kind: 'reference', validators: {
28087
+ required: true
28088
+ }
28089
+ },
28090
+ {
28091
+ key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.S_BELONGS_TO_O, hidden: true
28092
+ },
28093
+ {
28094
+ key: 'B_ID', label: 'Tổ chức', kind: 'reference', validators: {
28095
+ required: true
28096
+ }
28097
+ },
28098
+ ],
28099
+ };
28100
+
28101
+ const LINK_S_S = {
28102
+ actionCode: EnumActionCode.LINK_S_S,
28103
+ label: 'Mở hiệu lực tuyến quyền lực',
28104
+ description: 'Mở hiệu lực điều phối giữa hai ghế.',
28105
+ category: 'PowerLine',
28106
+ quickEmoji: '🧭🪑➡️🪑',
28107
+ inputs: [
28108
+ {
28109
+ key: 'A_ID', label: 'Ghế nguồn', kind: 'reference', validators: {
28110
+ required: true
28111
+ }
28112
+ },
28113
+ {
28114
+ key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.S_WORKS_UNDER_S, hidden: true
28115
+ },
28116
+ {
28117
+ key: 'B_ID', label: 'Ghế đích', kind: 'reference', validators: {
28118
+ required: true
28119
+ }
28120
+ },
28121
+ ],
28122
+ };
28123
+
28124
+ const SHORTEN_S_S = {
28125
+ actionCode: EnumActionCode.SHORTEN_S_S,
28126
+ label: 'Rút ngắn hiệu lực tuyến quyền lực',
28127
+ description: 'Rút ngắn hiệu lực tuyến quyền lực giữa hai ghế.',
28128
+ category: 'PowerLine',
28129
+ quickEmoji: '⛔🧭🪑➡️🪑',
28130
+ inputs: [
28131
+ {
28132
+ key: 'A_ID', label: 'Ghế nguồn', kind: 'reference', validators: {
28133
+ required: true
28134
+ }
28135
+ },
28136
+ {
28137
+ key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.S_WORKS_UNDER_S, hidden: true
28138
+ },
28139
+ {
28140
+ key: 'B_ID', label: 'Ghế đích', kind: 'reference', validators: {
28141
+ required: true
28142
+ }
28143
+ }
28144
+ ],
28145
+ };
28146
+
28147
+ const LINK_P_S_INTERNAL = {
28148
+ actionCode: EnumActionCode.LINK_P_S_INTERNAL,
28149
+ label: 'Gán người vào ghế (quyết định nội bộ)',
28150
+ description: 'OM chủ động gán người ngoài HR vào ghế trong ngành dọc.',
28151
+ category: 'Assignment',
28152
+ quickEmoji: '👤➡️🪑',
28153
+ inputs: [
28154
+ {
28155
+ key: 'A_ID', label: 'Người', kind: 'reference', validators: {
28156
+ required: true
28157
+ }
28158
+ },
28159
+ {
28160
+ key: 'R_CODE', label: 'Mã quan hệ', kind: 'rCode', defaultValue: EnumRCodeForward.P_OCCUPIES_S, hidden: true
28161
+ },
28162
+ {
28163
+ key: 'ROLE', label: 'Vai trò', kind: 'role'
28164
+ },
28165
+ {
28166
+ key: 'B_ID', label: 'Ghế', kind: 'reference', validators: {
28167
+ required: true
28168
+ }
28169
+ },
28170
+ ],
28171
+ };
28172
+
28173
+ const SET_O_ATTR = {
28174
+ actionCode: EnumActionCode.SET_O_ATTR,
28175
+ label: 'Ghi thuộc tính tổ chức (có hiệu lực)',
28176
+ description: 'Ghi diễn giải / thuộc tính cho tổ chức (có hiệu lực).',
28177
+ category: 'Attribute',
28178
+ quickEmoji: '→ 📝🏢',
28179
+ inputs: [
28180
+ {
28181
+ key: 'ID', label: 'Tổ chức', kind: 'reference', validators: {
28182
+ required: true
28183
+ }
28184
+ },
28185
+ {
28186
+ key: 'ATTRIBUTE_NAME', label: 'Thuộc tính', kind: 'orgAttributeName', validators: {
28187
+ required: true
28188
+ }
28189
+ }
28190
+ ],
28191
+ };
28192
+
28193
+ const SET_S_ATTR = {
28194
+ actionCode: EnumActionCode.SET_S_ATTR,
28195
+ label: 'Ghi thuộc tính ghế',
28196
+ description: 'Ghi diễn giải / thuộc tính cho ghế.',
28197
+ category: 'Attribute',
28198
+ quickEmoji: '→ 📝🪑',
28199
+ inputs: [
28200
+ {
28201
+ key: 'A_ID', label: 'Ghế', kind: 'reference', validators: {
28202
+ required: true
28203
+ }
28204
+ },
28205
+ {
28206
+ key: 'ATTRIBUTE_NAME', label: 'Thuộc tính', kind: 'seatAttributeName', validators: {
28207
+ required: true
28208
+ }
28209
+ }
28210
+ ],
28211
+ };
28212
+
28213
+ const SET_P_ATTR = {
28214
+ actionCode: EnumActionCode.SET_P_ATTR,
28215
+ label: 'Ghi thuộc tính người ngoài HR',
28216
+ description: 'Ghi diễn giải / thuộc tính cho người ngoài HR.',
28217
+ category: 'Attribute',
28218
+ quickEmoji: '→ 📝👤',
28219
+ inputs: [
28220
+ {
28221
+ key: 'ID', label: 'Người', kind: 'reference', validators: {
28222
+ required: true
28223
+ }
28224
+ },
28225
+ {
28226
+ key: 'ATTRIBUTE_NAME', label: 'Thuộc tính', kind: 'personAttributeName', validators: {
28227
+ required: true
28228
+ }
28229
+ }
28230
+ ],
28231
+ };
28232
+
28233
+ const DECLARE_SNAPSHOT = {
28234
+ actionCode: EnumActionCode.DECLARE_SNAPSHOT,
28235
+ label: 'Khai báo mốc tổ chức',
28236
+ description: 'Khai báo mốc tổ chức phục vụ audit / snapshot.',
28237
+ category: 'Snapshot',
28238
+ quickEmoji: '→ 🕰️',
28239
+ inputs: [
28240
+ {
28241
+ key: 'NOTE', label: 'Ghi chú mốc', kind: 'string', validators: {
28242
+ required: true
28243
+ }
28244
+ },
28245
+ ],
28246
+ };
28247
+
28248
+ const TEMPORAL_INTENT_INPUTS = [
28249
+ {
28250
+ key: 'VF_UTC',
28251
+ label: 'Hiệu lực từ',
28252
+ kind: 'date',
28253
+ validators: { required: true },
28254
+ errorMessages: {
28255
+ required: 'Phải xác định thời điểm bắt đầu hiệu lực'
28256
+ }
28257
+ },
28258
+ {
28259
+ key: 'VT_UTC',
28260
+ label: 'Hiệu lực đến',
28261
+ kind: 'date',
28262
+ defaultValue: new Date(9999, 11, 31)
28263
+ },
28264
+ {
28265
+ key: 'TIMEZONE_ID',
28266
+ label: 'Múi giờ',
28267
+ kind: 'timezoneId',
28268
+ defaultValue: 'Asia/Saigon',
28269
+ validators: {
28270
+ required: true
28271
+ },
28272
+ errorMessages: {
28273
+ required: 'Phải xác định múi giờ nghiệp vụ'
28274
+ }
28275
+ }
28276
+ ];
28277
+ const INTENT_DESCRIPTOR_REGISTRY = [
28278
+ /* =========================
28279
+ * ORGANIZATION (O)
28280
+ * ========================= */
28281
+ CREATE_TREE,
28282
+ CREATE_O,
28283
+ LINK_O_O,
28284
+ SHORTEN_O_O,
28285
+ /* =========================
28286
+ * SEAT / POSITION (S)
28287
+ * ========================= */
28288
+ CREATE_S,
28289
+ LINK_S_O,
28290
+ SHORTEN_S_O,
28291
+ /* =========================
28292
+ * POWER LINE (S ↔ S)
28293
+ * ========================= */
28294
+ LINK_S_S,
28295
+ SHORTEN_S_S,
28296
+ /* =========================
28297
+ * PERSON ↔ SEAT (P ↔ S)
28298
+ * ========================= */
28299
+ LINK_P_S_INTERNAL,
28300
+ /* =========================
28301
+ * ATTRIBUTE
28302
+ * ========================= */
28303
+ SET_O_ATTR,
28304
+ SET_S_ATTR,
28305
+ SET_P_ATTR,
28306
+ /* =========================
28307
+ * SNAPSHOT / MILESTONE
28308
+ * ========================= */
28309
+ DECLARE_SNAPSHOT
28310
+ ];
28311
+
28312
+ class CoreTimezoneComponent extends CoreFormControlBaseComponent {
28313
+ constructor() {
28314
+ super(...arguments);
28315
+ this.cdts = inject(CoreDatetimeService);
28316
+ this.dropdownOptions$ = new BehaviorSubject([]);
28317
+ this.value = Intl.DateTimeFormat().resolvedOptions().timeZone;
28318
+ }
28319
+ ngAfterViewInit() {
28320
+ setTimeout(() => {
28321
+ this.dropdownOptions$.next(this.cdts.$timeZones().map(x => ({
28322
+ value: x, text: x
28323
+ })));
28324
+ });
28325
+ }
28326
+ onValueChange(e) {
28327
+ this.markAsTouched();
28328
+ this.onChange(e);
28329
+ }
28330
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreTimezoneComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
28331
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: CoreTimezoneComponent, isStandalone: true, selector: "core-timezone", providers: [
28332
+ {
28333
+ provide: NG_VALUE_ACCESSOR,
28334
+ multi: true,
28335
+ useExisting: forwardRef(() => CoreTimezoneComponent),
28336
+ },
28337
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"core-timezone-container\">\r\n <core-dropdown \r\n [options$]=\"dropdownOptions$\"\r\n [warningDisable]=\"true\"\r\n [(ngModel)]=\"value\"\r\n (ngModelOnchange)=\"onValueChange($event)\"\r\n />\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: CoreDropdownComponent, selector: "core-dropdown", inputs: ["getByIdObject$", "paramMode", "shownFrom", "options$", "height", "placeholder", "loading", "warningDisable", "clearDisable", "fitHeightWithItemCount", "itemHeight", "optionApiDriven", "optionApi", "optionHttpVerb", "optionHttpPayload", "optionValueFrom", "optionTextFrom"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
28338
+ }
28339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreTimezoneComponent, decorators: [{
28340
+ type: Component,
28341
+ args: [{ selector: 'core-timezone', imports: [
28342
+ CoreDropdownComponent,
28343
+ FormsModule,
28344
+ ], providers: [
28345
+ {
28346
+ provide: NG_VALUE_ACCESSOR,
28347
+ multi: true,
28348
+ useExisting: forwardRef(() => CoreTimezoneComponent),
28349
+ },
28350
+ ], template: "<div class=\"core-timezone-container\">\r\n <core-dropdown \r\n [options$]=\"dropdownOptions$\"\r\n [warningDisable]=\"true\"\r\n [(ngModel)]=\"value\"\r\n (ngModelOnchange)=\"onValueChange($event)\"\r\n />\r\n</div>\r\n" }]
28351
+ }] });
28352
+
28353
+ class CoreTreeReferenceComponent extends CoreFormControlBaseComponent {
28354
+ constructor() {
28355
+ super(...arguments);
28356
+ this.$data = input.required();
28357
+ this.$itemTemplateRef = input();
28358
+ this.selected = output();
28359
+ }
28360
+ onSelect(node) {
28361
+ this.selected.emit(node);
28362
+ this.value = node.id;
28363
+ console.log("onSelect", this.value);
28364
+ }
28365
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreTreeReferenceComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
28366
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreTreeReferenceComponent, isStandalone: true, selector: "core-tree-reference", inputs: { $data: { classPropertyName: "$data", publicName: "$data", isSignal: true, isRequired: true, transformFunction: null }, $itemTemplateRef: { classPropertyName: "$itemTemplateRef", publicName: "$itemTemplateRef", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, providers: [
28367
+ {
28368
+ provide: NG_VALUE_ACCESSOR,
28369
+ multi: true,
28370
+ useExisting: forwardRef(() => CoreTreeReferenceComponent),
28371
+ },
28372
+ ], usesInheritance: true, ngImport: i0, template: "<ul class=\"core-tree-root\">\r\n @for (node of $data(); track node.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"nodeWrapperTpl\"\r\n [ngTemplateOutletContext]=\"{ node: node, level: 0 }\">\r\n </ng-container>\r\n }\r\n</ul>\r\n\r\n<ng-template #nodeWrapperTpl let-node=\"node\" let-level=\"level\">\r\n <li\r\n class=\"core-tree-node\"\r\n [style.paddingLeft.px]=\"level * 16\"\r\n (click)=\"onSelect(node)\"\r\n >\r\n <!-- CH\u1EC8 render n\u1ED9i dung -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"$itemTemplateRef() ?? defaultItemTpl\"\r\n [ngTemplateOutletContext]=\"{ node: node, level: level }\">\r\n </ng-container>\r\n </li>\r\n\r\n @if (node.children?.length) {\r\n @for (child of node.children; track child.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"nodeWrapperTpl\"\r\n [ngTemplateOutletContext]=\"{ node: child, level: level + 1 }\">\r\n </ng-container>\r\n }\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultItemTpl let-node=\"node\">\r\n <span class=\"node-label\">{{ node.label }}</span>\r\n</ng-template>\r\n", styles: [".core-tree-root{list-style:none;margin:0;padding:0}.core-tree-node{display:flex;align-items:center;gap:8px;padding:4px 8px;cursor:pointer;border-radius:4px}.core-tree-node:hover{background-color:#f3f5f7}.node-label{font-size:14px;color:#1f2937}.node-hint{font-size:11px;color:#6b7280;opacity:.7}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] }); }
28373
+ }
28374
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreTreeReferenceComponent, decorators: [{
28375
+ type: Component,
28376
+ args: [{ selector: 'core-tree-reference', imports: [
28377
+ NgTemplateOutlet
28378
+ ], providers: [
28379
+ {
28380
+ provide: NG_VALUE_ACCESSOR,
28381
+ multi: true,
28382
+ useExisting: forwardRef(() => CoreTreeReferenceComponent),
28383
+ },
28384
+ ], template: "<ul class=\"core-tree-root\">\r\n @for (node of $data(); track node.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"nodeWrapperTpl\"\r\n [ngTemplateOutletContext]=\"{ node: node, level: 0 }\">\r\n </ng-container>\r\n }\r\n</ul>\r\n\r\n<ng-template #nodeWrapperTpl let-node=\"node\" let-level=\"level\">\r\n <li\r\n class=\"core-tree-node\"\r\n [style.paddingLeft.px]=\"level * 16\"\r\n (click)=\"onSelect(node)\"\r\n >\r\n <!-- CH\u1EC8 render n\u1ED9i dung -->\r\n <ng-container\r\n [ngTemplateOutlet]=\"$itemTemplateRef() ?? defaultItemTpl\"\r\n [ngTemplateOutletContext]=\"{ node: node, level: level }\">\r\n </ng-container>\r\n </li>\r\n\r\n @if (node.children?.length) {\r\n @for (child of node.children; track child.id) {\r\n <ng-container\r\n [ngTemplateOutlet]=\"nodeWrapperTpl\"\r\n [ngTemplateOutletContext]=\"{ node: child, level: level + 1 }\">\r\n </ng-container>\r\n }\r\n }\r\n</ng-template>\r\n\r\n<ng-template #defaultItemTpl let-node=\"node\">\r\n <span class=\"node-label\">{{ node.label }}</span>\r\n</ng-template>\r\n", styles: [".core-tree-root{list-style:none;margin:0;padding:0}.core-tree-node{display:flex;align-items:center;gap:8px;padding:4px 8px;cursor:pointer;border-radius:4px}.core-tree-node:hover{background-color:#f3f5f7}.node-label{font-size:14px;color:#1f2937}.node-hint{font-size:11px;color:#6b7280;opacity:.7}\n"] }]
28385
+ }] });
28386
+
28387
+ // Mock data for CoreTreeReferenceComponent
28388
+ // Demonstrates:
28389
+ // - Multiple root trees
28390
+ // - Horizontal (HR) vs Vertical (Project/Committee) structures
28391
+ // - Core component neutrality (no domain assumption)
28392
+ const MOCK_DATA = [
28393
+ {
28394
+ id: '63c5046d-1c44-470e-a5b2-ee86249ae4a2',
28395
+ label: 'Headquarters',
28396
+ meta: {
28397
+ isRoot: true,
28398
+ isHr: true,
28399
+ hint: 'Green (Cây ngành ngang duy nhất)'
28400
+ },
28401
+ children: [
28402
+ {
28403
+ id: '0051c3a0-c481-47a4-b356-057ff5f333f1',
28404
+ label: 'R&D Division',
28405
+ children: [
28406
+ {
28407
+ id: 'ae0043c6-f304-48e1-8e74-4a4b727ab2ef',
28408
+ label: 'Backend Team',
28409
+ },
28410
+ {
28411
+ id: 'abef3813-d928-4cbc-93de-11059fa1f50b',
28412
+ label: 'Frontend Team',
28413
+ },
28414
+ {
28415
+ id: '0d6bb481-23f7-4bdb-b952-b9a9ba4083c6',
28416
+ label: 'QA Team',
28417
+ }
28418
+ ]
28419
+ },
28420
+ {
28421
+ id: '8c999b2f-9fa6-4212-b904-3d1bc95c3d34',
28422
+ label: 'Human Resources',
28423
+ children: [
28424
+ {
28425
+ id: '6143c4f7-3f4e-4e35-bcbb-d5529a66d3f0',
28426
+ label: 'HR Administration',
28427
+ },
28428
+ {
28429
+ id: '8847a41e-4f78-456e-816f-bd41076c771b',
28430
+ label: 'Payroll & Benefits',
28431
+ }
28432
+ ]
28433
+ },
28434
+ {
28435
+ id: '2c1e287a-b390-4ade-be37-c7121521456d',
28436
+ label: 'Sales Division',
28437
+ children: [
28438
+ {
28439
+ id: '1cce1776-1ebf-482f-bb34-39e9e488911e',
28440
+ label: 'Domestic Sales',
28441
+ },
28442
+ {
28443
+ id: '8aaa7acf-31ab-437f-bd57-e1e0454e337e',
28444
+ label: 'Global Sales',
28445
+ children: [
28446
+ {
28447
+ id: '94935ddb-bb47-4f1e-8ce6-7baabfc9fd8f',
28448
+ label: 'APAC Region',
28449
+ },
28450
+ {
28451
+ id: '44b4c0c9-cde8-4a5d-8f4a-b8041e01d511',
28452
+ label: 'EMEA Region',
28453
+ }
28454
+ ]
28455
+ }
28456
+ ]
28457
+ }
28458
+ ]
28459
+ },
28460
+ {
28461
+ id: 'f9e929f3-dadd-49f1-aa80-ac022d37dcbc',
28462
+ label: 'Project X',
28463
+ meta: {
28464
+ isRoot: true,
28465
+ isHr: false,
28466
+ hint: 'Red (Cây ngành dọc)'
28467
+ },
28468
+ children: [
28469
+ {
28470
+ id: '7a0a3f8d-ef7c-4e8f-9b5b-38fcd6a9c021',
28471
+ label: 'Steering Committee',
28472
+ },
28473
+ {
28474
+ id: '9b6b1b2e-0df0-4f6e-9e7c-8b8f6a7c0d11',
28475
+ label: 'Execution Team',
28476
+ children: [
28477
+ {
28478
+ id: 'b1c3e7a9-5f0a-4e7d-9c8a-6f4a2b9d0e31',
28479
+ label: 'Technical Lead',
28480
+ },
28481
+ {
28482
+ id: 'c4f9a2e1-7b6d-4a1e-9c0f-3a2b8d9e7f61',
28483
+ label: 'Business Coordinator',
28484
+ }
28485
+ ]
28486
+ }
28487
+ ]
28488
+ },
28489
+ {
28490
+ id: 'bd8c8633-9302-4510-ad7a-2eebc6e6a143',
28491
+ label: 'Committee Y',
28492
+ meta: {
28493
+ isRoot: true,
28494
+ isHr: false,
28495
+ hint: 'Red (Cây ngành dọc)'
28496
+ },
28497
+ children: [
28498
+ {
28499
+ id: 'a0c2f8d4-4e9b-4b6e-9f4d-5e6a1b7c9d21',
28500
+ label: 'Chairman Office',
28501
+ },
28502
+ {
28503
+ id: 'd9e8f7c6-5b4a-4e3d-9c2b-1a0f8e7d6c51',
28504
+ label: 'Advisory Panel',
28505
+ children: [
28506
+ {
28507
+ id: 'e3a7d9c8-4b5f-4a6e-9d0c-2f1b8e7a6c91',
28508
+ label: 'Legal Advisor',
28509
+ },
28510
+ {
28511
+ id: 'f2b1a0c9-8e7d-4f6a-9b5c-3d4e6a7c8b11',
28512
+ label: 'Financial Advisor',
28513
+ }
28514
+ ]
28515
+ }
28516
+ ]
28517
+ }
28518
+ ];
28519
+
28520
+ class IntentComposerComponent extends BaseComponent {
28521
+ constructor(mls) {
28522
+ super(mls);
28523
+ this.mls = mls;
28524
+ this.MOCK_DATA = MOCK_DATA;
28525
+ // ===== Inputs / Outputs =====
28526
+ this.$descriptor = input.required();
28527
+ this.$intentComposed = output();
28528
+ this.$cancelled = output();
28529
+ // ===== Local UI-only state =====
28530
+ this.$draftInput = signal({});
28531
+ this.$errors = signal([]);
28532
+ this.$checkError = signal(true);
28533
+ this.$defaultOrgItemTpl = viewChild('defaultOrgItemTpl');
28534
+ // ===== Services =====
28535
+ this.fb = inject(FormBuilder);
28536
+ this.as = inject(AlertService);
28537
+ this.form = this.fb.group({});
28538
+ this.$rowableInputs = computed(() => {
28539
+ const inputs = this.$descriptor().inputs ?? [];
28540
+ // Map<row, inputs[]>
28541
+ const rowMap = new Map();
28542
+ for (const input of inputs) {
28543
+ const row = input.row ?? 0;
28544
+ if (!rowMap.has(row)) {
28545
+ rowMap.set(row, []);
28546
+ }
28547
+ rowMap.get(row).push(input);
28548
+ }
28549
+ // Preserve row order (ascending)
28550
+ return Array
28551
+ .from(rowMap.entries())
28552
+ .sort(([a], [b]) => a - b)
28553
+ .map(([row, inputs]) => ({
28554
+ row,
28555
+ inputs
28556
+ }));
28557
+ });
28558
+ this.rCodeOptions$ = new BehaviorSubject(RCODE_FORWARD_VALUES.map(x => ({ value: x, text: x })));
28559
+ this.roleOptions$ = new BehaviorSubject([
28560
+ {
28561
+ value: 'MASTER',
28562
+ text: 'MASTER',
28563
+ },
28564
+ {
28565
+ value: 'CONCURRENT',
28566
+ text: 'CONCURRENT',
28567
+ },
28568
+ {
28569
+ value: 'INTERIM',
28570
+ text: 'INTERIM',
28571
+ },
28572
+ ]);
28573
+ this.treeIdOptions$ = new BehaviorSubject([
28574
+ {
28575
+ value: 'bddb5729-9da1-48f7-bfe4-98ce2d71eba1',
28576
+ text: 'HR'
28577
+ },
28578
+ ]);
28579
+ effect(() => {
28580
+ const descriptor = this.$descriptor();
28581
+ if (!descriptor)
28582
+ return;
28583
+ this.buildForm(descriptor);
28584
+ });
28585
+ }
28586
+ // ===== Methods =====
28587
+ buildForm(descriptor) {
28588
+ const controls = {};
28589
+ // Logical inputs
28590
+ for (const input of descriptor.inputs) {
28591
+ controls[input.key] = new FormControl(input.defaultValue ?? null, this.buildValidators(input.validators));
28592
+ if (input.disabled) {
28593
+ controls[input.key].disable();
28594
+ }
28595
+ }
28596
+ this.form = new FormGroup(controls);
28597
+ }
28598
+ onInputChange(key, value) {
28599
+ this.$draftInput.update(prev => ({
28600
+ ...prev,
28601
+ [key]: value,
28602
+ }));
28603
+ }
28604
+ onConfirm() {
28605
+ this.form.markAllAsTouched();
28606
+ this.rebuildErrors();
28607
+ if (this.$errors().length > 0) {
28608
+ return;
28609
+ }
28610
+ this.$intentComposed.emit({
28611
+ actionCode: this.$descriptor().actionCode,
28612
+ input: this.form.getRawValue()
28613
+ });
28614
+ }
28615
+ onCancel() {
28616
+ this.$cancelled.emit();
28617
+ }
28618
+ buildValidators(schema) {
28619
+ if (!schema)
28620
+ return [];
28621
+ const validators = [];
28622
+ if (schema.required) {
28623
+ validators.push(Validators.required);
28624
+ }
28625
+ if (schema.minLength !== undefined) {
28626
+ validators.push(Validators.minLength(schema.minLength));
28627
+ }
28628
+ if (schema.maxLength !== undefined) {
28629
+ validators.push(Validators.maxLength(schema.maxLength));
28630
+ }
28631
+ if (schema.min !== undefined) {
28632
+ validators.push(Validators.min(schema.min));
28633
+ }
28634
+ if (schema.max !== undefined) {
28635
+ validators.push(Validators.max(schema.max));
28636
+ }
28637
+ if (schema.pattern) {
28638
+ validators.push(Validators.pattern(schema.pattern));
28639
+ }
28640
+ return validators;
28641
+ }
28642
+ rebuildErrors() {
28643
+ this.$errors.set([]);
28644
+ if (!this.form)
28645
+ return;
28646
+ const descriptor = this.$descriptor();
28647
+ if (!descriptor)
28648
+ return;
28649
+ for (const input of descriptor.inputs) {
28650
+ const control = this.form.get(input.key);
28651
+ if (!control)
28652
+ continue;
28653
+ // Chỉ hiện lỗi khi user đã "dám chạm"
28654
+ if (!control.touched || !control.errors)
28655
+ continue;
28656
+ for (const errorCode of Object.keys(control.errors)) {
28657
+ const policyMessage = input.errorMessages?.[errorCode];
28658
+ const fallbackMessage = this.buildFallbackErrorMessage(input, errorCode, control.errors[errorCode]);
28659
+ this.$errors.update(c => {
28660
+ c.push({
28661
+ fieldKey: input.key,
28662
+ fieldLabel: input.label,
28663
+ errorCode,
28664
+ errorMessage: policyMessage ?? fallbackMessage
28665
+ });
28666
+ return [...c];
28667
+ });
28668
+ }
28669
+ }
28670
+ }
28671
+ // Fallback message (phòng khi descriptor không khai báo)
28672
+ buildFallbackErrorMessage(input, errorCode, errorData) {
28673
+ switch (errorCode) {
28674
+ case 'required':
28675
+ return `${input.label} là bắt buộc`;
28676
+ case 'minLength':
28677
+ case 'minlength':
28678
+ return `${input.label} phải có ít nhất ${errorData.requiredLength} ký tự`;
28679
+ case 'maxLength':
28680
+ case 'maxlength':
28681
+ return `${input.label} không được vượt quá ${errorData.requiredLength} ký tự`;
28682
+ case 'min':
28683
+ return `${input.label} phải ≥ ${errorData.min}`;
28684
+ case 'max':
28685
+ return `${input.label} phải ≤ ${errorData.max}`;
28686
+ case 'pattern':
28687
+ return `${input.label} không đúng định dạng`;
28688
+ default:
28689
+ return `${input.label} không hợp lệ`;
28690
+ }
28691
+ }
28692
+ getErrorsOfField(fieldKey) {
28693
+ return this.$errors().filter(e => e.fieldKey === fieldKey);
28694
+ }
28695
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IntentComposerComponent, deps: [{ token: MultiLanguageService }], target: i0.ɵɵFactoryTarget.Component }); }
28696
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: IntentComposerComponent, isStandalone: true, selector: "intent-composer", inputs: { $descriptor: { classPropertyName: "$descriptor", publicName: "$descriptor", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { $intentComposed: "$intentComposed", $cancelled: "$cancelled" }, viewQueries: [{ propertyName: "$defaultOrgItemTpl", first: true, predicate: ["defaultOrgItemTpl"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<!--\r\n IntentComposerComponent\r\n Purpose:\r\n - Collect human input for a single OM intent\r\n - Emit IntentDraft only\r\n Must NOT:\r\n - Mutate Omega\r\n - Modify IntentChain\r\n-->\r\n@if (form) {\r\n<form\r\n class=\"intent-composer-container\"\r\n [formGroup]=\"form\"\r\n (ngSubmit)=\"onConfirm()\"\r\n autocomplete=\"off\"\r\n>\r\n\r\n <!-- Header -->\r\n <h3>{{ $descriptor().label }}</h3>\r\n <p class=\"desc\">{{ $descriptor().quickEmoji }} | {{ $descriptor().description }}</p>\r\n\r\n <!-- Inputs -->\r\n <div class=\"intent-inputs\">\r\n\r\n\r\n @for (row of $rowableInputs(); track $index) {\r\n\r\n <div class=\"intent-row\">\r\n @for (input of row.inputs; track $index) {\r\n <div\r\n class=\"intent-cell\"\r\n [style.flex]=\"input.flexSize ?? 1\"\r\n [class.hidden]=\"input.hidden\"\r\n >\r\n\r\n <div class=\"intent-input\">\r\n\r\n <label [class.required]=\"input.validators?.required\">\r\n {{ input.label }}\r\n </label>\r\n\r\n @switch (input.kind) {\r\n\r\n @case ('string') {\r\n <input\r\n class=\"form-control\"\r\n [formControlName]=\"input.key\"\r\n type=\"text\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\" />\r\n }\r\n\r\n @case ('treeId') {\r\n <core-dropdown\r\n [options$]=\"treeIdOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('boolean') {\r\n <core-ios-switcher [formControlName]=\"input.key\" [showOnOffText]=\"false\" [width]=\"66\" />\r\n <!-- <input\r\n type=\"text\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\" /> -->\r\n }\r\n\r\n @case ('number') {\r\n <input\r\n [formControlName]=\"input.key\"\r\n type=\"number\"\r\n (input)=\"onInputChange(input.key, $event.target.valueAsNumber)\" />\r\n }\r\n\r\n @case ('date') {\r\n <core-date-picker \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('dropdown') {\r\n <core-date-picker \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('timezoneId') {\r\n <core-timezone \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('orgGardenReference') {\r\n <!-- <core-tree-reference \r\n [formControlName]=\"input.key\"\r\n [$data]=\"MOCK_DATA\"\r\n [$itemTemplateRef]=\"$defaultOrgItemTpl()\"\r\n /> -->\r\n <core-tree-reference \r\n [formControlName]=\"input.key\"\r\n [$data]=\"MOCK_DATA\"\r\n /> \r\n }\r\n\r\n @case ('rCode') {\r\n <core-dropdown\r\n [options$]=\"rCodeOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('role') {\r\n <core-dropdown\r\n [options$]=\"roleOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('reference') {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline\"\r\n (click)=\"onInputChange(input.key, '__REF__')\">\r\n Ch\u1ECDn \u0111\u1ED1i t\u01B0\u1EE3ng\u2026\r\n </button>\r\n }\r\n\r\n @case ('object') {\r\n <textarea\r\n [formControlName]=\"input.key\"\r\n rows=\"3\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\">\r\n </textarea>\r\n }\r\n\r\n @default {\r\n <em class=\"unsupported\">\r\n Ki\u1EC3u input ch\u01B0a \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3\r\n </em>\r\n }\r\n\r\n }\r\n\r\n <!-- START: ERROR SESSION -->\r\n @for (error of getErrorsOfField(input.key); track $index) {\r\n <div class=\"form-control-error\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n }\r\n @if (!getErrorsOfField(input.key).length && !!$checkError()) {\r\n <div>&nbsp;</div>\r\n }\r\n <!-- END: ERROR SESSION -->\r\n\r\n </div> \r\n\r\n </div>\r\n }\r\n </div> \r\n\r\n }\r\n\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"composer-actions\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary\"\r\n (click)=\"onCancel()\">\r\n Quay l\u1EA1i\r\n </button>\r\n\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n >\r\n X\u00E1c nh\u1EADn\r\n </button>\r\n </div>\r\n\r\n</form>\r\n}\r\n\r\n<ng-template #defaultOrgItemTpl let-node=\"node\" let-level=\"level\">\r\n <div class=\"test-itemTemplateRef\">\r\n {{ node.label }}\r\n </div>\r\n</ng-template>", styles: [".intent-composer-container .intent-inputs .intent-row{display:flex;gap:12px}.intent-composer-container .intent-inputs .intent-row .intent-cell.hidden{display:none}.intent-composer-container .intent-inputs .intent-row .intent-input{display:flex;flex-direction:column;margin-top:15px;margin-bottom:15px}.intent-composer-container .intent-inputs .intent-row .intent-input label{color:#464646}.intent-composer-container .intent-inputs .intent-row .intent-input label.required:after{content:\"*\";color:#ff040b}.intent-composer-container .composer-actions{display:flex;justify-content:space-between}.test-itemTemplateRef{padding:15px;background-color:#6495ed;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$4.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$4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "height", "readonly"] }, { kind: "component", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: ["enableTimeZoneConverter", "showPlaceholder", "popupWidth", "popupXPadding", "popupAlign", "rangeLimit", "placeholder", "readonly", "disabled"] }, { kind: "component", type: CoreDropdownComponent, selector: "core-dropdown", inputs: ["getByIdObject$", "paramMode", "shownFrom", "options$", "height", "placeholder", "loading", "warningDisable", "clearDisable", "fitHeightWithItemCount", "itemHeight", "optionApiDriven", "optionApi", "optionHttpVerb", "optionHttpPayload", "optionValueFrom", "optionTextFrom"] }, { kind: "component", type: CoreTimezoneComponent, selector: "core-timezone" }, { kind: "component", type: CoreTreeReferenceComponent, selector: "core-tree-reference", inputs: ["$data", "$itemTemplateRef"], outputs: ["selected"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
28697
+ }
28698
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: IntentComposerComponent, decorators: [{
28699
+ type: Component,
28700
+ args: [{ selector: 'intent-composer', imports: [
28701
+ ReactiveFormsModule,
28702
+ HtmlTooltipDirective,
28703
+ CoreIosSwitcherComponent,
28704
+ CoreDatePickerComponent,
28705
+ CoreDropdownComponent,
28706
+ CoreTimezoneComponent,
28707
+ CoreTreeReferenceComponent,
28708
+ TranslatePipe,
28709
+ ], template: "<!--\r\n IntentComposerComponent\r\n Purpose:\r\n - Collect human input for a single OM intent\r\n - Emit IntentDraft only\r\n Must NOT:\r\n - Mutate Omega\r\n - Modify IntentChain\r\n-->\r\n@if (form) {\r\n<form\r\n class=\"intent-composer-container\"\r\n [formGroup]=\"form\"\r\n (ngSubmit)=\"onConfirm()\"\r\n autocomplete=\"off\"\r\n>\r\n\r\n <!-- Header -->\r\n <h3>{{ $descriptor().label }}</h3>\r\n <p class=\"desc\">{{ $descriptor().quickEmoji }} | {{ $descriptor().description }}</p>\r\n\r\n <!-- Inputs -->\r\n <div class=\"intent-inputs\">\r\n\r\n\r\n @for (row of $rowableInputs(); track $index) {\r\n\r\n <div class=\"intent-row\">\r\n @for (input of row.inputs; track $index) {\r\n <div\r\n class=\"intent-cell\"\r\n [style.flex]=\"input.flexSize ?? 1\"\r\n [class.hidden]=\"input.hidden\"\r\n >\r\n\r\n <div class=\"intent-input\">\r\n\r\n <label [class.required]=\"input.validators?.required\">\r\n {{ input.label }}\r\n </label>\r\n\r\n @switch (input.kind) {\r\n\r\n @case ('string') {\r\n <input\r\n class=\"form-control\"\r\n [formControlName]=\"input.key\"\r\n type=\"text\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\" />\r\n }\r\n\r\n @case ('treeId') {\r\n <core-dropdown\r\n [options$]=\"treeIdOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('boolean') {\r\n <core-ios-switcher [formControlName]=\"input.key\" [showOnOffText]=\"false\" [width]=\"66\" />\r\n <!-- <input\r\n type=\"text\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\" /> -->\r\n }\r\n\r\n @case ('number') {\r\n <input\r\n [formControlName]=\"input.key\"\r\n type=\"number\"\r\n (input)=\"onInputChange(input.key, $event.target.valueAsNumber)\" />\r\n }\r\n\r\n @case ('date') {\r\n <core-date-picker \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('dropdown') {\r\n <core-date-picker \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('timezoneId') {\r\n <core-timezone \r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('orgGardenReference') {\r\n <!-- <core-tree-reference \r\n [formControlName]=\"input.key\"\r\n [$data]=\"MOCK_DATA\"\r\n [$itemTemplateRef]=\"$defaultOrgItemTpl()\"\r\n /> -->\r\n <core-tree-reference \r\n [formControlName]=\"input.key\"\r\n [$data]=\"MOCK_DATA\"\r\n /> \r\n }\r\n\r\n @case ('rCode') {\r\n <core-dropdown\r\n [options$]=\"rCodeOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('role') {\r\n <core-dropdown\r\n [options$]=\"roleOptions$\"\r\n [warningDisable]=\"true\"\r\n [formControlName]=\"input.key\" \r\n />\r\n }\r\n\r\n @case ('reference') {\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-outline\"\r\n (click)=\"onInputChange(input.key, '__REF__')\">\r\n Ch\u1ECDn \u0111\u1ED1i t\u01B0\u1EE3ng\u2026\r\n </button>\r\n }\r\n\r\n @case ('object') {\r\n <textarea\r\n [formControlName]=\"input.key\"\r\n rows=\"3\"\r\n (input)=\"onInputChange(input.key, $event.target.value)\">\r\n </textarea>\r\n }\r\n\r\n @default {\r\n <em class=\"unsupported\">\r\n Ki\u1EC3u input ch\u01B0a \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3\r\n </em>\r\n }\r\n\r\n }\r\n\r\n <!-- START: ERROR SESSION -->\r\n @for (error of getErrorsOfField(input.key); track $index) {\r\n <div class=\"form-control-error\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n }\r\n @if (!getErrorsOfField(input.key).length && !!$checkError()) {\r\n <div>&nbsp;</div>\r\n }\r\n <!-- END: ERROR SESSION -->\r\n\r\n </div> \r\n\r\n </div>\r\n }\r\n </div> \r\n\r\n }\r\n\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"composer-actions\">\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-secondary\"\r\n (click)=\"onCancel()\">\r\n Quay l\u1EA1i\r\n </button>\r\n\r\n <button\r\n type=\"submit\"\r\n class=\"btn btn-primary\"\r\n >\r\n X\u00E1c nh\u1EADn\r\n </button>\r\n </div>\r\n\r\n</form>\r\n}\r\n\r\n<ng-template #defaultOrgItemTpl let-node=\"node\" let-level=\"level\">\r\n <div class=\"test-itemTemplateRef\">\r\n {{ node.label }}\r\n </div>\r\n</ng-template>", styles: [".intent-composer-container .intent-inputs .intent-row{display:flex;gap:12px}.intent-composer-container .intent-inputs .intent-row .intent-cell.hidden{display:none}.intent-composer-container .intent-inputs .intent-row .intent-input{display:flex;flex-direction:column;margin-top:15px;margin-bottom:15px}.intent-composer-container .intent-inputs .intent-row .intent-input label{color:#464646}.intent-composer-container .intent-inputs .intent-row .intent-input label.required:after{content:\"*\";color:#ff040b}.intent-composer-container .composer-actions{display:flex;justify-content:space-between}.test-itemTemplateRef{padding:15px;background-color:#6495ed;color:#fff}\n"] }]
28710
+ }], ctorParameters: () => [{ type: MultiLanguageService }] });
28711
+
28712
+ /**
28713
+ * CoreDomDecisionEditor
28714
+ *
28715
+ * Boundary UI for composing a single DOM-level organizational decision.
28716
+ * This component produces an immutable Omega string for approval.
28717
+ *
28718
+ * ❌ Not a workflow editor
28719
+ * ❌ Not a configuration screen
28720
+ * ❌ Not a live OM state editor
28721
+ *
28722
+ * Any intelligence must stop here.
28723
+ */
28724
+ class CoreDomDecisionEditorComponent extends CoreFormControlBaseComponent {
28725
+ constructor() {
28726
+ super(...arguments);
28727
+ this.$omega = signal({
28728
+ omegaVersion: '1.0',
28729
+ inputChain: []
28730
+ });
28731
+ this.value = '';
28732
+ this.INTENT_DESCRIPTOR_REGISTRY = INTENT_DESCRIPTOR_REGISTRY;
28733
+ // UI-only popup flag
28734
+ this.$showIntentComposer = signal(false);
28735
+ this.$selectedIntentDescriptor = signal(null);
28736
+ this.$projection = computed(() => {
28737
+ const omega = this.$omega();
28738
+ // Trường hợp cực đoan (chỉ khi anh vẫn cho omega nullable)
28739
+ if (!omega) {
28740
+ return {
28741
+ intentCount: 0,
28742
+ validityLabel: 'Chưa có quyết định',
28743
+ intents: [],
28744
+ outputs: [],
28745
+ };
28746
+ }
28747
+ return this.rebuildProjectionFromOmega(omega);
28748
+ });
28749
+ }
28750
+ writeValue(omega) {
28751
+ this.value = omega ?? '';
28752
+ //this.$projection.set(this.rebuildProjectionFromOmega(this.value));
28753
+ }
28754
+ rebuildProjectionFromOmega(omega) {
28755
+ const intents = omega.inputChain.map(intent => {
28756
+ const descriptor = INTENT_DESCRIPTOR_REGISTRY
28757
+ .find(d => d.actionCode === intent.actionCode);
28758
+ const actionLabel = descriptor?.label ?? intent.actionCode;
28759
+ return {
28760
+ seq: intent.seq,
28761
+ actionLabel,
28762
+ summary: "TO DO"
28763
+ };
28764
+ });
28765
+ return {
28766
+ intentCount: intents.length,
28767
+ validityLabel: intents.length === 0
28768
+ ? 'Chưa có quyết định'
28769
+ : 'Đang soạn thảo',
28770
+ intents,
28771
+ outputs: []
28772
+ };
28773
+ }
28774
+ onAddIntent() {
28775
+ // Entry point for intent composition
28776
+ // This method MUST NOT mutate Omega or projection directly
28777
+ // Actual intent creation will happen in a dedicated composer (modal / panel)
28778
+ this.$showIntentComposer.set(true);
28779
+ }
28780
+ onCloseIntentComposer() {
28781
+ this.$showIntentComposer.set(false);
28782
+ }
28783
+ onViewIntent(e) {
28784
+ }
28785
+ onRemoveIntent(e) {
28786
+ }
28787
+ onSelectIntent(descriptor) {
28788
+ this.$selectedIntentDescriptor.set(descriptor);
28789
+ }
28790
+ onCancelIntentCompose() {
28791
+ this.$selectedIntentDescriptor.set(null);
28792
+ }
28793
+ onIntentDrafted(draft) {
28794
+ this.$omega.update(omega => {
28795
+ const nextSeq = omega.inputChain.length + 1;
28796
+ return {
28797
+ ...omega,
28798
+ inputChain: [
28799
+ ...omega.inputChain,
28800
+ {
28801
+ seq: nextSeq,
28802
+ actionCode: draft.actionCode,
28803
+ input: draft.input
28804
+ }
28805
+ ]
28806
+ };
28807
+ });
28808
+ this.$showIntentComposer.set(false);
28809
+ }
28810
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreDomDecisionEditorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
28811
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreDomDecisionEditorComponent, isStandalone: true, selector: "core-dom-decision-editor", providers: [
28812
+ {
28813
+ provide: NG_VALUE_ACCESSOR,
28814
+ multi: true,
28815
+ useExisting: forwardRef(() => CoreDomDecisionEditorComponent),
28816
+ },
28817
+ ], usesInheritance: true, ngImport: i0, template: "<div class=\"core-dom-decision-editor-container\">\r\n\r\n <!-- ========================= -->\r\n <!-- Decision Overview / Header -->\r\n <!-- ========================= -->\r\n <header class=\"editor-header\">\r\n <div class=\"editor-title\">\r\n <h2>Quy\u1EBFt \u0111\u1ECBnh t\u1ED5 ch\u1EE9c</h2>\r\n <p class=\"editor-subtitle\">\r\n So\u1EA1n th\u1EA3o m\u1ED9t quy\u1EBFt \u0111\u1ECBnh OM b\u1EA5t bi\u1EBFn (Omega)\r\n </p>\r\n </div>\r\n\r\n <div class=\"editor-meta\">\r\n <!-- read-only meta derived from Omega -->\r\n <span class=\"meta-item\">\r\n Intent count:\r\n <strong>{{ $projection().intentCount }}</strong>\r\n </span>\r\n\r\n <span class=\"meta-item\">\r\n Tr\u1EA1ng th\u00E1i:\r\n <strong>{{ $projection().validityLabel }}</strong>\r\n </span>\r\n </div>\r\n </header>\r\n\r\n <!-- ========================= -->\r\n <!-- Intent Chain Projection -->\r\n <!-- ========================= -->\r\n <section class=\"intent-chain\">\r\n\r\n <h3>Chu\u1ED7i \u00FD \u0111\u1ECBnh (Intent Chain)</h3>\r\n\r\n @if ($projection().intents.length === 0) {\r\n <div class=\"empty-state\">\r\n <p>Ch\u01B0a c\u00F3 intent n\u00E0o trong quy\u1EBFt \u0111\u1ECBnh n\u00E0y.</p>\r\n <p class=\"hint\">\r\n B\u1EAFt \u0111\u1EA7u b\u1EB1ng c\u00E1ch th\u00EAm intent \u0111\u1EA7u ti\u00EAn.\r\n </p>\r\n </div>\r\n } @else {\r\n <ol class=\"intent-list\">\r\n @for (intent of $projection().intents; track $index) {\r\n <li class=\"intent-item\">\r\n <div class=\"intent-card\">\r\n\r\n <!-- Header -->\r\n <div class=\"intent-header\">\r\n <span class=\"intent-seq\">#{{ intent.seq }}</span>\r\n <span class=\"intent-label\">{{ intent.actionLabel }}</span>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"intent-body\">\r\n @if (intent.summary) {\r\n <div class=\"intent-summary\">\r\n {{ intent.summary }}\r\n </div>\r\n } @else {\r\n <div class=\"intent-summary muted\">\r\n (Ch\u01B0a c\u00F3 di\u1EC5n gi\u1EA3i chi ti\u1EBFt)\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"intent-footer\">\r\n <button type=\"button\" class=\"btn btn-ghost\">\r\n Xem\r\n </button>\r\n <button type=\"button\" class=\"btn btn-danger-ghost\">\r\n G\u1EE1\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </li>\r\n }\r\n </ol>\r\n\r\n }\r\n\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Add Intent Entry Point -->\r\n <!-- ========================= -->\r\n <section class=\"intent-actions-panel\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onAddIntent()\">\r\n + Th\u00EAm Intent\r\n </button>\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Output Preview (Derived) -->\r\n <!-- ========================= -->\r\n <section class=\"output-preview\">\r\n <h3>K\u1EBFt qu\u1EA3 d\u1EF1 ki\u1EBFn (Preview)</h3>\r\n\r\n <p class=\"hint\">\r\n K\u1EBFt qu\u1EA3 n\u00E0y \u0111\u01B0\u1EE3c suy ra t\u1EEB Intent Chain, kh\u00F4ng th\u1EC3 ch\u1EC9nh s\u1EEDa.\r\n </p>\r\n\r\n @if ($projection().outputs.length === 0) {\r\n <div class=\"empty-state\">\r\n <p>Ch\u01B0a c\u00F3 output n\u00E0o \u0111\u01B0\u1EE3c sinh ra.</p>\r\n </div>\r\n } @else {\r\n <ul class=\"output-list\">\r\n @for (output of $projection().outputs; track $index) {\r\n <li class=\"output-item\">\r\n <span class=\"output-key\">{{ output.key }}</span>\r\n <span class=\"output-desc\">{{ output.description }}</span>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Raw Omega (Optional / Debug) -->\r\n <!-- ========================= -->\r\n <details class=\"omega-raw\">\r\n <summary>Xem Omega (raw)</summary>\r\n <pre>{{ $omega() | json }}</pre>\r\n </details>\r\n\r\n @if ($showIntentComposer()) {\r\n <!--\r\n Intent Composer Popup\r\n Purpose: Enter intent composition mode only.\r\n MUST NOT:\r\n - Mutate Omega\r\n - Mutate projection\r\n - Execute OM logic\r\n -->\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"intent-composer-entry\">\r\n <p><strong>So\u1EA1n th\u1EA3o Intent m\u1EDBi</strong></p>\r\n\r\n @if ($selectedIntentDescriptor()) {\r\n\r\n <intent-composer\r\n [$descriptor]=\"$selectedIntentDescriptor()!\"\r\n ($intentComposed)=\"onIntentDrafted($event)\"\r\n ($cancelled)=\"onCancelIntentCompose()\">\r\n </intent-composer>\r\n\r\n } @else {\r\n\r\n <!-- N\u1ED9i dung composer s\u1EBD \u0111\u01B0\u1EE3c c\u1EAFm sau -->\r\n <ul class=\"intent-item-registry\">\r\n @for (intent of INTENT_DESCRIPTOR_REGISTRY; track $index) {\r\n <li class=\"intent-item-point\">\r\n <div class=\"intent-item\"\r\n (click)=\"onSelectIntent(intent)\">\r\n <object>{{ intent.actionCode }} | {{ intent.quickEmoji }}</object>\r\n <strong>{{ intent.label }}</strong>\r\n <p>{{ intent.description }}</p>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n\r\n }\r\n <hr />\r\n <div class=\"popup-actions\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"onCloseIntentComposer()\">\r\n H\u1EE7y\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>", styles: [".core-dom-decision-editor-container .modal-container{overflow:scroll}.core-dom-decision-editor-container .modal-container .modal-content-root{overflow:visible;max-height:unset}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry{padding-left:0;overflow-y:scroll;height:60vh}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry li.intent-item-point{cursor:pointer;padding:8px}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry li.intent-item-point:hover{color:#fff;background-color:#09f}.core-dom-decision-editor-container .intent-chain .intent-list{list-style:none;padding:0;margin:0}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item{margin-bottom:12px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card{border:1px solid #d0d7de;border-radius:4px;background:#fff;padding:10px 12px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header{display:flex;align-items:center;gap:8px;font-weight:600;margin-bottom:6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header .intent-seq{background:#e6f0ff;color:#084298;border-radius:3px;padding:2px 6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header .intent-label{color:#212529}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body{padding-left:28px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body .intent-summary{color:#495057}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body .intent-summary.muted{color:#adb5bd;font-style:italic}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer{display:flex;gap:8px;margin-top:8px;padding-left:28px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn{border:none;background:none;cursor:pointer;font-size:13px;padding:2px 6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-ghost{color:#0d6efd}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-ghost:hover{text-decoration:underline}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-danger-ghost{color:#dc3545}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-danger-ghost:hover{text-decoration:underline}\n"], dependencies: [{ kind: "component", type: IntentComposerComponent, selector: "intent-composer", inputs: ["$descriptor"], outputs: ["$intentComposed", "$cancelled"] }, { kind: "pipe", type: JsonPipe, name: "json" }] }); }
28818
+ }
28819
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreDomDecisionEditorComponent, decorators: [{
28820
+ type: Component,
28821
+ args: [{ selector: 'core-dom-decision-editor', imports: [
28822
+ IntentComposerComponent,
28823
+ JsonPipe,
28824
+ ], providers: [
28825
+ {
28826
+ provide: NG_VALUE_ACCESSOR,
28827
+ multi: true,
28828
+ useExisting: forwardRef(() => CoreDomDecisionEditorComponent),
28829
+ },
28830
+ ], template: "<div class=\"core-dom-decision-editor-container\">\r\n\r\n <!-- ========================= -->\r\n <!-- Decision Overview / Header -->\r\n <!-- ========================= -->\r\n <header class=\"editor-header\">\r\n <div class=\"editor-title\">\r\n <h2>Quy\u1EBFt \u0111\u1ECBnh t\u1ED5 ch\u1EE9c</h2>\r\n <p class=\"editor-subtitle\">\r\n So\u1EA1n th\u1EA3o m\u1ED9t quy\u1EBFt \u0111\u1ECBnh OM b\u1EA5t bi\u1EBFn (Omega)\r\n </p>\r\n </div>\r\n\r\n <div class=\"editor-meta\">\r\n <!-- read-only meta derived from Omega -->\r\n <span class=\"meta-item\">\r\n Intent count:\r\n <strong>{{ $projection().intentCount }}</strong>\r\n </span>\r\n\r\n <span class=\"meta-item\">\r\n Tr\u1EA1ng th\u00E1i:\r\n <strong>{{ $projection().validityLabel }}</strong>\r\n </span>\r\n </div>\r\n </header>\r\n\r\n <!-- ========================= -->\r\n <!-- Intent Chain Projection -->\r\n <!-- ========================= -->\r\n <section class=\"intent-chain\">\r\n\r\n <h3>Chu\u1ED7i \u00FD \u0111\u1ECBnh (Intent Chain)</h3>\r\n\r\n @if ($projection().intents.length === 0) {\r\n <div class=\"empty-state\">\r\n <p>Ch\u01B0a c\u00F3 intent n\u00E0o trong quy\u1EBFt \u0111\u1ECBnh n\u00E0y.</p>\r\n <p class=\"hint\">\r\n B\u1EAFt \u0111\u1EA7u b\u1EB1ng c\u00E1ch th\u00EAm intent \u0111\u1EA7u ti\u00EAn.\r\n </p>\r\n </div>\r\n } @else {\r\n <ol class=\"intent-list\">\r\n @for (intent of $projection().intents; track $index) {\r\n <li class=\"intent-item\">\r\n <div class=\"intent-card\">\r\n\r\n <!-- Header -->\r\n <div class=\"intent-header\">\r\n <span class=\"intent-seq\">#{{ intent.seq }}</span>\r\n <span class=\"intent-label\">{{ intent.actionLabel }}</span>\r\n </div>\r\n\r\n <!-- Body -->\r\n <div class=\"intent-body\">\r\n @if (intent.summary) {\r\n <div class=\"intent-summary\">\r\n {{ intent.summary }}\r\n </div>\r\n } @else {\r\n <div class=\"intent-summary muted\">\r\n (Ch\u01B0a c\u00F3 di\u1EC5n gi\u1EA3i chi ti\u1EBFt)\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"intent-footer\">\r\n <button type=\"button\" class=\"btn btn-ghost\">\r\n Xem\r\n </button>\r\n <button type=\"button\" class=\"btn btn-danger-ghost\">\r\n G\u1EE1\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </li>\r\n }\r\n </ol>\r\n\r\n }\r\n\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Add Intent Entry Point -->\r\n <!-- ========================= -->\r\n <section class=\"intent-actions-panel\">\r\n <button type=\"button\" class=\"btn btn-primary\" (click)=\"onAddIntent()\">\r\n + Th\u00EAm Intent\r\n </button>\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Output Preview (Derived) -->\r\n <!-- ========================= -->\r\n <section class=\"output-preview\">\r\n <h3>K\u1EBFt qu\u1EA3 d\u1EF1 ki\u1EBFn (Preview)</h3>\r\n\r\n <p class=\"hint\">\r\n K\u1EBFt qu\u1EA3 n\u00E0y \u0111\u01B0\u1EE3c suy ra t\u1EEB Intent Chain, kh\u00F4ng th\u1EC3 ch\u1EC9nh s\u1EEDa.\r\n </p>\r\n\r\n @if ($projection().outputs.length === 0) {\r\n <div class=\"empty-state\">\r\n <p>Ch\u01B0a c\u00F3 output n\u00E0o \u0111\u01B0\u1EE3c sinh ra.</p>\r\n </div>\r\n } @else {\r\n <ul class=\"output-list\">\r\n @for (output of $projection().outputs; track $index) {\r\n <li class=\"output-item\">\r\n <span class=\"output-key\">{{ output.key }}</span>\r\n <span class=\"output-desc\">{{ output.description }}</span>\r\n </li>\r\n }\r\n </ul>\r\n }\r\n </section>\r\n\r\n <!-- ========================= -->\r\n <!-- Raw Omega (Optional / Debug) -->\r\n <!-- ========================= -->\r\n <details class=\"omega-raw\">\r\n <summary>Xem Omega (raw)</summary>\r\n <pre>{{ $omega() | json }}</pre>\r\n </details>\r\n\r\n @if ($showIntentComposer()) {\r\n <!--\r\n Intent Composer Popup\r\n Purpose: Enter intent composition mode only.\r\n MUST NOT:\r\n - Mutate Omega\r\n - Mutate projection\r\n - Execute OM logic\r\n -->\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content-root\">\r\n <div class=\"intent-composer-entry\">\r\n <p><strong>So\u1EA1n th\u1EA3o Intent m\u1EDBi</strong></p>\r\n\r\n @if ($selectedIntentDescriptor()) {\r\n\r\n <intent-composer\r\n [$descriptor]=\"$selectedIntentDescriptor()!\"\r\n ($intentComposed)=\"onIntentDrafted($event)\"\r\n ($cancelled)=\"onCancelIntentCompose()\">\r\n </intent-composer>\r\n\r\n } @else {\r\n\r\n <!-- N\u1ED9i dung composer s\u1EBD \u0111\u01B0\u1EE3c c\u1EAFm sau -->\r\n <ul class=\"intent-item-registry\">\r\n @for (intent of INTENT_DESCRIPTOR_REGISTRY; track $index) {\r\n <li class=\"intent-item-point\">\r\n <div class=\"intent-item\"\r\n (click)=\"onSelectIntent(intent)\">\r\n <object>{{ intent.actionCode }} | {{ intent.quickEmoji }}</object>\r\n <strong>{{ intent.label }}</strong>\r\n <p>{{ intent.description }}</p>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n\r\n }\r\n <hr />\r\n <div class=\"popup-actions\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"onCloseIntentComposer()\">\r\n H\u1EE7y\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>", styles: [".core-dom-decision-editor-container .modal-container{overflow:scroll}.core-dom-decision-editor-container .modal-container .modal-content-root{overflow:visible;max-height:unset}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry{padding-left:0;overflow-y:scroll;height:60vh}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry li.intent-item-point{cursor:pointer;padding:8px}.core-dom-decision-editor-container .modal-container .modal-content-root ul.intent-item-registry li.intent-item-point:hover{color:#fff;background-color:#09f}.core-dom-decision-editor-container .intent-chain .intent-list{list-style:none;padding:0;margin:0}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item{margin-bottom:12px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card{border:1px solid #d0d7de;border-radius:4px;background:#fff;padding:10px 12px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header{display:flex;align-items:center;gap:8px;font-weight:600;margin-bottom:6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header .intent-seq{background:#e6f0ff;color:#084298;border-radius:3px;padding:2px 6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-header .intent-label{color:#212529}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body{padding-left:28px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body .intent-summary{color:#495057}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-body .intent-summary.muted{color:#adb5bd;font-style:italic}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer{display:flex;gap:8px;margin-top:8px;padding-left:28px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn{border:none;background:none;cursor:pointer;font-size:13px;padding:2px 6px}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-ghost{color:#0d6efd}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-ghost:hover{text-decoration:underline}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-danger-ghost{color:#dc3545}.core-dom-decision-editor-container .intent-chain .intent-list .intent-item .intent-card .intent-footer .btn-danger-ghost:hover{text-decoration:underline}\n"] }]
28831
+ }] });
28832
+
27664
28833
  class CoreControlComponent extends BaseComponent {
27665
28834
  constructor(mls, alertService) {
27666
28835
  super(mls);
@@ -27798,7 +28967,7 @@ class CoreControlComponent extends BaseComponent {
27798
28967
  }
27799
28968
  }
27800
28969
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreControlComponent, deps: [{ token: MultiLanguageService }, { token: AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
27801
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreControlComponent, isStandalone: true, selector: "core-control", inputs: { control: "control", form: "form", checkError$: "checkError$", rangeLimit: "rangeLimit" }, host: { listeners: { "window:click": "onWindowClick()" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"FORM_ARRAY\") {\r\n <core-form-array\r\n [formArrayName]=\"control.field!\"\r\n [parentFormGroup]=\"form\"\r\n [formArray]=\"formArray\"\r\n [config]=\"control.formArraySections! ?? []\"\r\n [disabled]=\"control.disabled!\"\r\n [readonly]=\"control.readonly!\"\r\n [addNewMode$]=\"control.addNewMode$!\"\r\n [checkError$]=\"checkError$\"\r\n >\r\n </core-form-array>\r\n }\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [class.required-highlight]=\"!!required\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [required]=\"required\" [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker [required]=\"required\" [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$ || !!control.optionApiDriven) {\r\n <core-dropdown \r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ | optionApiDriven detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list [required]=\"required\" [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist [required]=\"required\" [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader [required]=\"required\" [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n } @else {\r\n <div class=\"dev-declaration\">Please add uploadFileType</div>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [required]=\"required\" [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [required]=\"required\" [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [tableHeight]=\"control.tableHeight ?? 300\"\r\n [liteMode]=\"control.liteMode ?? false\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree [required]=\"required\" [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [required]=\"required\" [formControlName]=\"control.field\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker [required]=\"required\" [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case(\"STICKER_COLLECTION\") {\r\n <core-sticker-collection\r\n [formControlName]=\"control.field\"\r\n [required]=\"required\"\r\n [$items]=\"control.stickerCollectionItems!\"\r\n [$shownFrom]=\"control.stickerCollectionShownFrom!\"\r\n [$tooltipFrom]=\"control.stickerCollectionTooltipFrom!\"\r\n [$initialChecked]=\"control.stickerCollectionInitialChecked!\"\r\n >\r\n </core-sticker-collection>\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n @case (\"LIQUID_WYSIWYG\") {\r\n <core-liquid-wysiwyg\r\n [formControlName]=\"control.field\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [$liquidOptions]=\"control.liquidOptions!\"\r\n [$textareaRows]=\"control.textareaRows!\"\r\n [$showLiquidSourceOnly]=\"control.showLiquidSourceOnly!\"\r\n [$isForWorkflowEmail]=\"control.isForWorkflowEmail!\"\r\n />\r\n }\r\n }\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"control.controlType==='BUTTON'\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n <div *ngIf=\"!!errors!.length\">\r\n <div class=\"form-control-error\" *ngFor=\"let error of errors\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"!!!errors!.length && !!checkError$.value\">\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.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$4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreFormArrayComponent, selector: "core-form-array", inputs: ["formArrayName", "parentFormGroup", "formArray", "config", "checkError$", "addNewMode$", "readonly", "disabled"] }, { kind: "component", type: CoreDropdownComponent, selector: "core-dropdown", inputs: ["getByIdObject$", "paramMode", "shownFrom", "options$", "height", "placeholder", "loading", "warningDisable", "clearDisable", "fitHeightWithItemCount", "itemHeight", "optionApiDriven", "optionApi", "optionHttpVerb", "optionHttpPayload", "optionValueFrom", "optionTextFrom"] }, { kind: "component", type: CoreListComponent, selector: "core-list", inputs: ["title", "height", "options", "placeholder"] }, { kind: "component", type: CoreChecklistComponent, selector: "core-checklist", inputs: ["paramMode", "getByIdObject$", "shownFrom", "options$", "height", "placeholder", "loading", "readonly", "disabled"] }, { kind: "component", type: CoreFormControlSeekerComponent, selector: "core-form-control-seeker", inputs: ["title", "showPageHeader", "preDefinedOuterParam$", "preDefinedOuterFilter$", "click$", "getByIdObject$", "getByIdApi", "paramMode", "multiMode", "objectList$", "useTheseColumns", "hideOrgTree", "excludedColumns", "excludeExistingList", "placeholder", "sourceSpaceHeight", "indirectBinding", "bindGridIdTo", "multiModeExtendedColumns", "multiModeExtendedSections", "editBufferData$", "multiModeTableHeight", "multiModeRowHeight", "seekerSourceType", "boundFrom", "shownFrom", "alsoBindTo", "seekerVerifyIgnore", "disabledDoubleClick", "selfEnrichmentApiDriven", "selfEnrichmentApi", "selfEnrichmentHttpVerb", "selfEnrichmentHttpPayload", "selfEnrichmentShownFrom"], outputs: ["onDoubleClick", "selectedDataChange", "fullValueRowChange"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "component", type: CoreFileUploaderComponent, selector: "core-file-uploader", inputs: ["uploadFileType", "fileDataControlName", "fileNameControlName", "fileTypeControlName", "avatarSize", "defaultAvatar", "hidePreview", "verticalMode"] }, { kind: "component", type: CoreAttachmentComponent, selector: "core-attachment", inputs: ["assignTo", "readonly", "valueToShow", "placeholder", "upFlag$", "downFlag$"] }, { kind: "component", type: CoreGridBufferComponent, selector: "core-grid-buffer", inputs: ["padding", "placeholder", "tableHeight", "liteMode", "formSections", "gridColumns"], outputs: ["onBufferFormCreated"] }, { kind: "component", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: ["enableTimeZoneConverter", "showPlaceholder", "popupWidth", "popupXPadding", "popupAlign", "rangeLimit", "placeholder", "readonly", "disabled"] }, { kind: "component", type: CoreOrgTreeComponent, selector: "core-org-tree", inputs: ["lineColor", "fullWidthMode", "accessorMode", "searchMode", "fullRendering", "height", "disabledLoopExpand", "showCheckInheritance", "excludedIds$", "stateIsolated$"], outputs: ["itemDoubleClick", "itemClick"] }, { kind: "component", type: CoreRadioGroupComponent, selector: "core-radio-group", inputs: ["options$", "vertical", "columnCount", "gapY", "defaultValue"] }, { kind: "component", type: CoreMccComponent, selector: "core-mcc", inputs: ["height", "columns", "shownFrom", "apiDefinition", "getByIdApi", "outerParam$", "selectedRow$", "outerFilterOperators", "outerInOperators", "placeholder"] }, { kind: "component", type: CoreMonthSelectorComponent, selector: "core-month-selector", inputs: ["align", "placeholder"], outputs: ["onYearClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreCurrencyInputComponent, selector: "core-currency-input", inputs: ["currencySign", "placeholder"], outputs: ["onLeftFocus"] }, { kind: "component", type: CoreShiftCellComponent, selector: "core-shift-cell", inputs: ["$readOnly", "$hideStarterPlusSign", "$hideStickersWhileDragover", "$backgroundColor"] }, { kind: "component", type: CoreShiftCollectionComponent, selector: "core-shift-collection", inputs: ["height", "disabled", "relativeMode"] }, { kind: "component", type: CoreTopicPickerComponent, selector: "core-topic-picker", inputs: ["popupHeight", "getByIdApi"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "height", "readonly"] }, { kind: "component", type: CoreLiquidWysiwygComponent, selector: "core-liquid-wysiwyg", inputs: ["$liquidOptions", "$textareaRows", "$height", "$readonly", "$showLiquidSourceOnly", "$isForWorkflowEmail", "getByIdObject$", "placeholder"] }, { kind: "component", type: CoreStickerCollectionComponent, selector: "core-sticker-collection", inputs: ["$items", "$shownFrom", "$translateShownFrom", "$tooltipFrom", "$initialChecked", "$showMore", "$showMoreTooltip", "$hideShowMoreIfNotSelected", "$enableFilter", "$enableQuickCheck"], outputs: ["$checkedChange", "$onShowMore"] }, { kind: "directive", type: HtmlTooltipDirective, selector: "[htmlTooltip]", inputs: ["htmlTooltip", "tooltipContext", "maxWidthUnset", "color", "backgroundColor", "hold$"] }] }); }
28970
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.5", type: CoreControlComponent, isStandalone: true, selector: "core-control", inputs: { control: "control", form: "form", checkError$: "checkError$", rangeLimit: "rangeLimit" }, host: { listeners: { "window:click": "onWindowClick()" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"FORM_ARRAY\") {\r\n <core-form-array\r\n [formArrayName]=\"control.field!\"\r\n [parentFormGroup]=\"form\"\r\n [formArray]=\"formArray\"\r\n [formArrayIdentityField]=\"control.formArrayIdentityField ?? 'id'\"\r\n [config]=\"control.formArraySections! ?? []\"\r\n [disabled]=\"control.disabled!\"\r\n [readonly]=\"control.readonly!\"\r\n [addNewMode$]=\"control.addNewMode$!\"\r\n [removeDisabledIf]=\"control.removeDisabledIf!\"\r\n [removeDisabledIfMessage]=\"control.removeDisabledIfMessage!\"\r\n [checkError$]=\"checkError$\"\r\n >\r\n </core-form-array>\r\n }\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [class.required-highlight]=\"!!required\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [required]=\"required\" [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker [required]=\"required\" [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$ || !!control.optionApiDriven) {\r\n <core-dropdown \r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ | optionApiDriven detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list [required]=\"required\" [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist [required]=\"required\" [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader [required]=\"required\" [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n } @else {\r\n <div class=\"dev-declaration\">Please add uploadFileType</div>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [required]=\"required\" [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [required]=\"required\" [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [tableHeight]=\"control.tableHeight ?? 300\"\r\n [liteMode]=\"control.liteMode ?? false\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree [required]=\"required\" [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [required]=\"required\" [formControlName]=\"control.field\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker [required]=\"required\" [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case(\"STICKER_COLLECTION\") {\r\n <core-sticker-collection\r\n [formControlName]=\"control.field\"\r\n [required]=\"required\"\r\n [$items]=\"control.stickerCollectionItems!\"\r\n [$shownFrom]=\"control.stickerCollectionShownFrom!\"\r\n [$tooltipFrom]=\"control.stickerCollectionTooltipFrom!\"\r\n [$initialChecked]=\"control.stickerCollectionInitialChecked!\"\r\n >\r\n </core-sticker-collection>\r\n }\r\n @case (\"DOM_DECISION_EDITOR\") {\r\n <core-dom-decision-editor />\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n @case (\"LIQUID_WYSIWYG\") {\r\n <core-liquid-wysiwyg\r\n [formControlName]=\"control.field\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [$liquidOptions]=\"control.liquidOptions!\"\r\n [$textareaRows]=\"control.textareaRows!\"\r\n [$showLiquidSourceOnly]=\"control.showLiquidSourceOnly!\"\r\n [$isForWorkflowEmail]=\"control.isForWorkflowEmail!\"\r\n />\r\n }\r\n }\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"control.controlType==='BUTTON'\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n <div *ngIf=\"!!errors!.length\">\r\n <div class=\"form-control-error\" *ngFor=\"let error of errors\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"!!!errors!.length && !!checkError$.value\">\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$4.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$4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1$4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1$4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: TableCellPipe, name: "tableCell" }, { kind: "component", type: CoreFormArrayComponent, selector: "core-form-array", inputs: ["formArrayName", "parentFormGroup", "formArray", "config", "checkError$", "formArrayIdentityField", "addNewMode$", "readonly", "disabled", "removeDisabledIf", "removeDisabledIfMessage"] }, { kind: "component", type: CoreDropdownComponent, selector: "core-dropdown", inputs: ["getByIdObject$", "paramMode", "shownFrom", "options$", "height", "placeholder", "loading", "warningDisable", "clearDisable", "fitHeightWithItemCount", "itemHeight", "optionApiDriven", "optionApi", "optionHttpVerb", "optionHttpPayload", "optionValueFrom", "optionTextFrom"] }, { kind: "component", type: CoreListComponent, selector: "core-list", inputs: ["title", "height", "options", "placeholder"] }, { kind: "component", type: CoreChecklistComponent, selector: "core-checklist", inputs: ["paramMode", "getByIdObject$", "shownFrom", "options$", "height", "placeholder", "loading", "readonly", "disabled"] }, { kind: "component", type: CoreFormControlSeekerComponent, selector: "core-form-control-seeker", inputs: ["title", "showPageHeader", "preDefinedOuterParam$", "preDefinedOuterFilter$", "click$", "getByIdObject$", "getByIdApi", "paramMode", "multiMode", "objectList$", "useTheseColumns", "hideOrgTree", "excludedColumns", "excludeExistingList", "placeholder", "sourceSpaceHeight", "indirectBinding", "bindGridIdTo", "multiModeExtendedColumns", "multiModeExtendedSections", "editBufferData$", "multiModeTableHeight", "multiModeRowHeight", "seekerSourceType", "boundFrom", "shownFrom", "alsoBindTo", "seekerVerifyIgnore", "disabledDoubleClick", "selfEnrichmentApiDriven", "selfEnrichmentApi", "selfEnrichmentHttpVerb", "selfEnrichmentHttpPayload", "selfEnrichmentShownFrom"], outputs: ["onDoubleClick", "selectedDataChange", "fullValueRowChange"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "component", type: CoreFileUploaderComponent, selector: "core-file-uploader", inputs: ["uploadFileType", "fileDataControlName", "fileNameControlName", "fileTypeControlName", "avatarSize", "defaultAvatar", "hidePreview", "verticalMode"] }, { kind: "component", type: CoreAttachmentComponent, selector: "core-attachment", inputs: ["assignTo", "readonly", "valueToShow", "placeholder", "upFlag$", "downFlag$"] }, { kind: "component", type: CoreGridBufferComponent, selector: "core-grid-buffer", inputs: ["padding", "placeholder", "tableHeight", "liteMode", "formSections", "gridColumns"], outputs: ["onBufferFormCreated"] }, { kind: "component", type: CoreDatePickerComponent, selector: "core-date-picker", inputs: ["enableTimeZoneConverter", "showPlaceholder", "popupWidth", "popupXPadding", "popupAlign", "rangeLimit", "placeholder", "readonly", "disabled"] }, { kind: "component", type: CoreOrgTreeComponent, selector: "core-org-tree", inputs: ["lineColor", "fullWidthMode", "accessorMode", "searchMode", "fullRendering", "height", "disabledLoopExpand", "showCheckInheritance", "excludedIds$", "stateIsolated$"], outputs: ["itemDoubleClick", "itemClick"] }, { kind: "component", type: CoreRadioGroupComponent, selector: "core-radio-group", inputs: ["options$", "vertical", "columnCount", "gapY", "defaultValue"] }, { kind: "component", type: CoreMccComponent, selector: "core-mcc", inputs: ["height", "columns", "shownFrom", "apiDefinition", "getByIdApi", "outerParam$", "selectedRow$", "outerFilterOperators", "outerInOperators", "placeholder"] }, { kind: "component", type: CoreMonthSelectorComponent, selector: "core-month-selector", inputs: ["align", "placeholder"], outputs: ["onYearClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "color", "backgroundColor", "position"] }, { kind: "component", type: CoreCurrencyInputComponent, selector: "core-currency-input", inputs: ["currencySign", "placeholder"], outputs: ["onLeftFocus"] }, { kind: "component", type: CoreShiftCellComponent, selector: "core-shift-cell", inputs: ["$readOnly", "$hideStarterPlusSign", "$hideStickersWhileDragover", "$backgroundColor"] }, { kind: "component", type: CoreShiftCollectionComponent, selector: "core-shift-collection", inputs: ["height", "disabled", "relativeMode"] }, { kind: "component", type: CoreTopicPickerComponent, selector: "core-topic-picker", inputs: ["popupHeight", "getByIdApi"] }, { kind: "component", type: CoreIosSwitcherComponent, selector: "core-ios-switcher", inputs: ["bgColor", "showOnOffText", "width", "height", "readonly"] }, { kind: "component", type: CoreLiquidWysiwygComponent, selector: "core-liquid-wysiwyg", inputs: ["$liquidOptions", "$textareaRows", "$height", "$readonly", "$showLiquidSourceOnly", "$isForWorkflowEmail", "getByIdObject$", "placeholder"] }, { kind: "component", type: CoreStickerCollectionComponent, selector: "core-sticker-collection", inputs: ["$items", "$shownFrom", "$translateShownFrom", "$tooltipFrom", "$initialChecked", "$showMore", "$showMoreTooltip", "$hideShowMoreIfNotSelected", "$enableFilter", "$enableQuickCheck"], outputs: ["$checkedChange", "$onShowMore"] }, { kind: "component", type: CoreDomDecisionEditorComponent, selector: "core-dom-decision-editor" }, { kind: "directive", type: HtmlTooltipDirective, selector: "[htmlTooltip]", inputs: ["htmlTooltip", "tooltipContext", "maxWidthUnset", "color", "backgroundColor", "hold$"] }] }); }
27802
28971
  }
27803
28972
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: CoreControlComponent, decorators: [{
27804
28973
  type: Component,
@@ -27831,8 +29000,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
27831
29000
  CoreIosSwitcherComponent,
27832
29001
  CoreLiquidWysiwygComponent,
27833
29002
  CoreStickerCollectionComponent,
29003
+ CoreDomDecisionEditorComponent,
27834
29004
  HtmlTooltipDirective
27835
- ], template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"FORM_ARRAY\") {\r\n <core-form-array\r\n [formArrayName]=\"control.field!\"\r\n [parentFormGroup]=\"form\"\r\n [formArray]=\"formArray\"\r\n [config]=\"control.formArraySections! ?? []\"\r\n [disabled]=\"control.disabled!\"\r\n [readonly]=\"control.readonly!\"\r\n [addNewMode$]=\"control.addNewMode$!\"\r\n [checkError$]=\"checkError$\"\r\n >\r\n </core-form-array>\r\n }\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [class.required-highlight]=\"!!required\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [required]=\"required\" [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker [required]=\"required\" [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$ || !!control.optionApiDriven) {\r\n <core-dropdown \r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ | optionApiDriven detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list [required]=\"required\" [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist [required]=\"required\" [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader [required]=\"required\" [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n } @else {\r\n <div class=\"dev-declaration\">Please add uploadFileType</div>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [required]=\"required\" [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [required]=\"required\" [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [tableHeight]=\"control.tableHeight ?? 300\"\r\n [liteMode]=\"control.liteMode ?? false\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree [required]=\"required\" [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [required]=\"required\" [formControlName]=\"control.field\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker [required]=\"required\" [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case(\"STICKER_COLLECTION\") {\r\n <core-sticker-collection\r\n [formControlName]=\"control.field\"\r\n [required]=\"required\"\r\n [$items]=\"control.stickerCollectionItems!\"\r\n [$shownFrom]=\"control.stickerCollectionShownFrom!\"\r\n [$tooltipFrom]=\"control.stickerCollectionTooltipFrom!\"\r\n [$initialChecked]=\"control.stickerCollectionInitialChecked!\"\r\n >\r\n </core-sticker-collection>\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n @case (\"LIQUID_WYSIWYG\") {\r\n <core-liquid-wysiwyg\r\n [formControlName]=\"control.field\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [$liquidOptions]=\"control.liquidOptions!\"\r\n [$textareaRows]=\"control.textareaRows!\"\r\n [$showLiquidSourceOnly]=\"control.showLiquidSourceOnly!\"\r\n [$isForWorkflowEmail]=\"control.isForWorkflowEmail!\"\r\n />\r\n }\r\n }\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"control.controlType==='BUTTON'\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n <div *ngIf=\"!!errors!.length\">\r\n <div class=\"form-control-error\" *ngFor=\"let error of errors\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"!!!errors!.length && !!checkError$.value\">\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"] }]
29005
+ ], template: "<div class=\"core-control-container\">\r\n\r\n <div [formGroup]=\"form\" [class.hidden]=\"!!control.hidden\">\r\n\r\n @if (!control.headless!) {\r\n <label [class]=\"'control-label' + (required ? ' required' : '')\" [attr.for]=\"control.field\"\r\n [class.d-none]=\"!!control.hidden\"\r\n [class.avatar-label]=\"control.uploadFileType==='IMAGE_AVATAR'\" [appTooltip]=\"control.tooltip! | translate: lang\" \r\n [htmlTooltip]=\"control.htmlTooltip!\"\r\n [backgroundColor]=\"'white'\"\r\n [ngStyle]=\"{\r\n display: 'inline-block'\r\n }\">\r\n {{(control.controlType!=='CHECKBOX' && control.controlType!=='BUTTON') ? (control.label | translate: lang) : ''}}\r\n </label>\r\n\r\n @if (!!control.hint! && control.controlType !== 'CHECKBOX') {\r\n <i class=\"feather-help-circle\" [appTooltip]=\"control.hint!\" [showAnyway]=\"true\" [ngStyle]=\"{\r\n display: 'inline-block',\r\n marginLeft: '2px'\r\n }\" [class.d-none]=\"!!control.hidden\"></i>\r\n }\r\n }\r\n\r\n <!-- START: FORM-CONTROL SESSION-->\r\n\r\n <ng-container>\r\n @switch (control.controlType) {\r\n @case (\"FORM_ARRAY\") {\r\n <core-form-array\r\n [formArrayName]=\"control.field!\"\r\n [parentFormGroup]=\"form\"\r\n [formArray]=\"formArray\"\r\n [formArrayIdentityField]=\"control.formArrayIdentityField ?? 'id'\"\r\n [config]=\"control.formArraySections! ?? []\"\r\n [disabled]=\"control.disabled!\"\r\n [readonly]=\"control.readonly!\"\r\n [addNewMode$]=\"control.addNewMode$!\"\r\n [removeDisabledIf]=\"control.removeDisabledIf!\"\r\n [removeDisabledIfMessage]=\"control.removeDisabledIfMessage!\"\r\n [checkError$]=\"checkError$\"\r\n >\r\n </core-form-array>\r\n }\r\n @case (\"CALCULATED\") {\r\n <div class=\"calculated-view\" [htmlTooltip]=\"calculatedControlInfo\" [tooltipContext]=\"{control: control}\" [backgroundColor]=\"'#fff'\">\r\n <i class=\"feather-box\"></i><span>{{ control.field! }}</span>\r\n </div>\r\n }\r\n @case (\"TEXTBOX\") {\r\n\r\n <input *ngIf=\"control.type === 'date'\"\r\n [formControlName]=\"control.field\"\r\n type=\"date\"\r\n useValueAsDate\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'time'\"\r\n [formControlName]=\"control.field\"\r\n type=\"time\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"control.type === 'number'\"\r\n [formControlName]=\"control.field\"\r\n type=\"number\"\r\n step=\"{{ control.step || 1 }}\"\r\n class=\"form-control\"\r\n style=\"text-align: right;\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n \r\n <input *ngIf=\"['string', 'text', 'email', 'url', 'password'].includes(control.type || 'text')\"\r\n [formControlName]=\"control.field\"\r\n [type]=\"control.type\"\r\n class=\"form-control\"\r\n [readonly]=\"control.readonly\"\r\n [placeholder]=\"control.placeholder || ''\"\r\n [value]=\"form.get(control.field)?.value | tableCell: control.pipe : lang\"\r\n [attr.pattern]=\"getPattern(control) || null\"\r\n [appTooltip]=\"form.get(control.field)?.value\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n [class.required-highlight]=\"!!required\"\r\n [class.form-control-disabled]=\"!!control.disabled\" />\r\n }\r\n @case (\"CURRENCY\") {\r\n <core-currency-input [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-currency-input>\r\n }\r\n @case (\"TEXTAREA\") {\r\n <textarea [rows]=\"control.textareaRows?.toString() || '3'\" [ngStyle]=\"{ height: 'unset' }\"\r\n [class.required-highlight]=\"!!required\"\r\n [formControlName]=\"control.field\" class=\"form-control\" [readonly]=\"control.readonly\" [placeholder]=\"control.placeholder! || ''\"></textarea>\r\n }\r\n @case (\"CHECKBOX\") {\r\n <core-checkbox [formControlName]=\"control.field\" [text]=\"control.label\"\r\n [inputValue]=\"control.value\" [tooltip]=\"control.hint!\"></core-checkbox>\r\n }\r\n @case (\"IOS_SWITCHER\") {\r\n <div class=\"gap-for-ios-switcher\"></div>\r\n <core-ios-switcher [formControlName]=\"control.field\" />\r\n }\r\n @case (\"MCC\") {\r\n <core-mcc [required]=\"required\" [formControlName]=\"control.field\" [columns]=\"control.columns!\" [shownFrom]=\"control.shownFrom!\" \r\n [apiDefinition]=\"control.apiDefinition!\" [getByIdApi]=\"control.getByIdApi!\" [selectedRow$]=\"control.selectedRow$!\"\r\n [outerParam$]=\"control.outerParam$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-mcc>\r\n }\r\n @case (\"DATEPICKER\") {\r\n <core-date-picker [required]=\"required\" [formControlName]=\"control.field\" [showPlaceholder]=\"control.showPlaceholder!\" [rangeLimit]=\"control.rangeLimit!\" [popupAlign]=\"control.popupAlign!\" [placeholder]=\"control.placeholder! || ''\"></core-date-picker>\r\n }\r\n\r\n @case (\"DROPDOWN\") {\r\n @if (!!control.dropdownOptions$ || !!control.optionApiDriven) {\r\n <core-dropdown \r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" \r\n [options$]=\"control.dropdownOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" \r\n [shownFrom]=\"control.shownFrom!\" \r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [optionApiDriven]=\"control.optionApiDriven!\"\r\n [optionApi]=\"control.optionApi!\"\r\n [optionHttpVerb]=\"control.optionHttpVerb!\"\r\n [optionHttpPayload]=\"control.optionHttpPayload!\"\r\n [optionValueFrom]=\"control.optionValueFrom!\"\r\n [optionTextFrom]=\"control.optionTextFrom!\"\r\n ></core-dropdown>\r\n } @else {\r\n No dropdownOptions$ | optionApiDriven detected\r\n }\r\n }\r\n @case (\"LIST\") {\r\n <core-list [required]=\"required\" [formControlName]=\"control.field\" [options]=\"control.listOptions!\" [placeholder]=\"control.placeholder! || ''\"></core-list>\r\n }\r\n @case (\"CHECKLIST\") {\r\n @if (!!control.checklistOptions$) {\r\n <core-checklist [required]=\"required\" [formControlName]=\"control.field\" [options$]=\"control.checklistOptions$!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\" [shownFrom]=\"control.shownFrom!\" [placeholder]=\"control.placeholder! || ''\"></core-checklist>\r\n }\r\n }\r\n @case (\"FILEUPLOADER\") {\r\n @if (!!control.uploadFileType) {\r\n <core-file-uploader [required]=\"required\" [formControlName]=\"control.field\" [uploadFileType]=\"control.uploadFileType\"\r\n [fileDataControlName]=\"control.fileDataControlName!\"\r\n [fileNameControlName]=\"control.fileNameControlName!\"\r\n [fileTypeControlName]=\"control.fileTypeControlName!\"\r\n [verticalMode]=\"control.verticalMode!\"></core-file-uploader>\r\n } @else {\r\n <div class=\"dev-declaration\">Please add uploadFileType</div>\r\n }\r\n }\r\n @case (\"ATTACHMENT\") {\r\n <core-attachment ngDefaultControl [required]=\"required\" [formControlName]=\"control.field\" [assignTo]=\"control.assignTo!\"\r\n [valueToShow]=\"control.valueToShow!\" [placeholder]=\"control.placeholder! || ''\"></core-attachment>\r\n }\r\n @case (\"GRIDBUFFER\") {\r\n @if (!!control.gridBufferFormSections && !!control.gridBufferTableColumns) {\r\n <core-grid-buffer [required]=\"required\" [formControlName]=\"control.field\" [formSections]=\"control.gridBufferFormSections\"\r\n [gridColumns]=\"control.gridBufferTableColumns\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [tableHeight]=\"control.tableHeight ?? 300\"\r\n [liteMode]=\"control.liteMode ?? false\"\r\n (onBufferFormCreated)=\"!!control.onBufferFormCreated ? control.onBufferFormCreated($event) : null\"></core-grid-buffer>\r\n }\r\n }\r\n @case (\"ORGTREECHECK\") {\r\n <core-org-tree [required]=\"required\" [formControlName]=\"control.field\"\r\n [accessorMode]=\"coreOrgTreeDefaultAccessorMode\" [height]=\"control.height!\"></core-org-tree>\r\n }\r\n @case (\"RADIOGROUP\") {\r\n <core-radio-group [required]=\"required\" [formControlName]=\"control.field\"\r\n [options$]=\"control.radioGroupOptions$!\"\r\n [vertical]=\"control.verticalMode!\"\r\n ></core-radio-group>\r\n }\r\n @case (\"MONTHSELECTOR\") {\r\n <core-month-selector [required]=\"required\" [formControlName]=\"control.field\" [placeholder]=\"control.placeholder! || ''\"></core-month-selector>\r\n }\r\n @case (\"SHIFTCELL\") {\r\n <core-shift-cell [formControlName]=\"control.field\"></core-shift-cell>\r\n }\r\n @case (\"SHIFTCOLLECTION\") {\r\n <core-shift-collection [relativeMode]=\"true\" [height]=\"control.height || 800\"></core-shift-collection>\r\n }\r\n @case(\"TOPICPICKER\") {\r\n <core-topic-picker [required]=\"required\" [formControlName]=\"control.field\" [popupHeight]=\"control.popupHeight!\" [getByIdApi]=\"control.getByIdApi!\"></core-topic-picker>\r\n }\r\n @case(\"STICKER_COLLECTION\") {\r\n <core-sticker-collection\r\n [formControlName]=\"control.field\"\r\n [required]=\"required\"\r\n [$items]=\"control.stickerCollectionItems!\"\r\n [$shownFrom]=\"control.stickerCollectionShownFrom!\"\r\n [$tooltipFrom]=\"control.stickerCollectionTooltipFrom!\"\r\n [$initialChecked]=\"control.stickerCollectionInitialChecked!\"\r\n >\r\n </core-sticker-collection>\r\n }\r\n @case (\"DOM_DECISION_EDITOR\") {\r\n <core-dom-decision-editor />\r\n }\r\n @case (\"SEEKER\") {\r\n @switch(control.seekerSourceType) {\r\n @case(\"JOB_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"EMPLOYEE_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [editBufferData$]=\"control.editBufferData$!\"\r\n [indirectBinding]=\"control.indirectBinding!\"\r\n [bindGridIdTo]=\"control.bindGridIdTo!\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"CONTRACT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" [boundFrom]=\"control.boundFrom!\"\r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\" \r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [shownFrom]=\"control.shownFrom!\"\r\n [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WORKING_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\" [formControlName]=\"control.field\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"WAGE_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [formControlName]=\"control.field\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_SEEK\") {\r\n <core-form-control-seeker \r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [objectList$]=\"control.objectList$!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [seekerVerifyIgnore]=\"control.seekerVerifyIgnore!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"POSITION_CONCURRENT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"FORM_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [excludeExistingList]=\"control.excludeExistingList!\"\r\n [multiMode]=\"control.multiMode!\" [multiModeTableHeight]=\"control.multiModeTableHeight!\" [multiModeRowHeight]=\"control.multiModeRowHeight!\"\r\n [formControlName]=\"control.field\" [alsoBindTo]=\"control.alsoBindTo!\"\r\n [seekerSourceType]=\"control.seekerSourceType!\" \r\n [preDefinedOuterParam$]=\"control.preDefinedOuterParam$!\"\r\n [preDefinedOuterFilter$]=\"control.preDefinedOuterFilter$!\"\r\n [boundFrom]=\"control.boundFrom!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [multiModeExtendedColumns]=\"control.multiModeExtendedColumns!\"\r\n [multiModeExtendedSections]=\"control.multiModeExtendedSections!\"\r\n [multiModeTableHeight]=\"control.multiModeTableHeight!\"\r\n [click$]=\"control.click$\"\r\n [useTheseColumns]=\"control.useTheseColumns!\"\r\n [hideOrgTree]=\"control.hideOrgTree!\"\r\n [sourceSpaceHeight]=\"control.sourceSpaceHeight!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n\r\n [selfEnrichmentApiDriven]=\"control.selfEnrichmentApiDriven!\"\r\n [selfEnrichmentApi]=\"control.selfEnrichmentApi!\"\r\n [selfEnrichmentHttpVerb]=\"control.selfEnrichmentHttpVerb!\"\r\n [selfEnrichmentHttpPayload]=\"control.selfEnrichmentHttpPayload!\"\r\n [selfEnrichmentShownFrom]=\"control.selfEnrichmentShownFrom!\"\r\n\r\n (selectedDataChange)=\"selectedDataChange($event)\"\r\n (fullValueRowChange)=\"fullValueRowChange($event)\"\r\n ></core-form-control-seeker>\r\n }\r\n @case(\"ORGANIZATION_UNIT_SEEK\") {\r\n <core-form-control-seeker\r\n [required]=\"required\" \r\n [formControlName]=\"control.field\" [seekerSourceType]=\"control.seekerSourceType!\"\r\n [boundFrom]=\"control.boundFrom!\" [alsoBindTo]=\"control.alsoBindTo!\" [shownFrom]=\"control.shownFrom!\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [click$]=\"control.click$\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n ></core-form-control-seeker>\r\n }\r\n }\r\n }\r\n @case (\"LIQUID_WYSIWYG\") {\r\n <core-liquid-wysiwyg\r\n [formControlName]=\"control.field\"\r\n [getByIdObject$]=\"control.getByIdObject$!\"\r\n [placeholder]=\"control.placeholder! || ''\"\r\n [$liquidOptions]=\"control.liquidOptions!\"\r\n [$textareaRows]=\"control.textareaRows!\"\r\n [$showLiquidSourceOnly]=\"control.showLiquidSourceOnly!\"\r\n [$isForWorkflowEmail]=\"control.isForWorkflowEmail!\"\r\n />\r\n }\r\n }\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"control.controlType==='BUTTON'\">\r\n <button type=\"button\" class=\"btn btn-secondary text\" (click)=\"oHandleClick($event)\">{{control.label| translate: lang}}</button>\r\n </ng-container>\r\n <!-- END: FORM-CONTROL SESSION-->\r\n\r\n <!-- START: ERROR SESSION-->\r\n <div *ngIf=\"!!errors!.length\">\r\n <div class=\"form-control-error\" *ngFor=\"let error of errors\">\r\n {{ error.errorMessage | translate: lang }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"!!!errors!.length && !!checkError$.value\">\r\n <div>\r\n {{ '&nbsp;' }}\r\n </div>\r\n </div>\r\n <!-- END: ERROR SESSION-->\r\n\r\n </div>\r\n\r\n\r\n</div>\r\n\r\n<ng-template #calculatedControlInfo let-control=\"control\">\r\n <div class=\"calculated-tooltip-container\">\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Name:</span>\r\n <span class=\"value\">{{ control?.field || 'N/A' }}</span>\r\n </div> \r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Evaluation Mode:</span>\r\n <span class=\"value\">{{ control?.evaluationMode || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Return Type:</span>\r\n <span class=\"value\">{{ control?.returnType || 'N/A' }}</span>\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Depends On:</span>\r\n <span class=\"value\" *ngIf=\"control?.dependsOn?.length > 0; else noDepends\">\r\n <code *ngFor=\"let dep of control?.dependsOn; let last = last\">{{ dep }}<span *ngIf=\"!last\">, </span></code>\r\n </span>\r\n <ng-template #noDepends><em class=\"no-depends\">None</em></ng-template>\r\n </div>\r\n <div *ngIf=\"!!control?.isUnsafe\" class=\"warning\">\r\n \u26A0\uFE0F This script is marked as <strong>unsafe</strong> and will not be executed.\r\n </div>\r\n <div class=\"calculated-field-row\">\r\n <span class=\"label\">Script:</span>\r\n <pre class=\"code-block\">{{ control?.script || 'No script provided.' }}</pre>\r\n </div>\r\n </div>\r\n</ng-template>", styles: [".core-control-container{font-size:var(--typo-basic-font-size)!important}.core-control-container .control-label{color:#848484}.core-control-container>div.hidden{display:none}.core-control-container label{color:#464646}.core-control-container label.required:after{content:\"*\";color:#ff040b}.core-control-container label.avatar-label{width:var(--size-file-uploader);display:flex;align-items:center;justify-content:center}.core-control-container input[type=number]{padding-right:12px;position:relative}.core-control-container input[type=number]::-webkit-inner-spin-button{position:absolute;right:.3em;margin-left:.5em}.core-control-container input[type=number]{-moz-appearance:textfield}.core-control-container i.feather-help-circle{color:#848484}.core-control-container .gap-for-ios-switcher{height:5px}.core-control-container .calculated-view{-webkit-user-select:none;user-select:none;cursor:pointer;height:35px;width:160px;background-color:#d8f3dc;color:#1b4332;border:1px solid #95d5b2;border-radius:50px;font-size:14px;font-weight:500;display:flex;align-items:center;justify-content:flex-start;font-family:Segoe UI,sans-serif;letter-spacing:.5px;padding:8px}.core-control-container .calculated-view i{font-size:18px;width:18px;height:18px;margin-right:8px}.core-control-container .calculated-view span{width:calc(100% - 26px);overflow:hidden;text-overflow:ellipsis;text-wrap:nowrap}.calculated-tooltip-container{background-color:#fff;border:1px solid #ddd;padding:1rem;border-radius:6px;font-size:14px;color:#333;box-shadow:0 4px 10px #0000000d;max-width:360px}.calculated-tooltip-container .calculated-field-row{margin-bottom:.75rem}.calculated-tooltip-container .label{font-weight:500;color:#555!important;display:inline-block;min-width:140px}.calculated-tooltip-container .value{color:#222!important}.calculated-tooltip-container .warning{color:#b91c1c;background:#fef2f2;border:1px solid #fca5a5;padding:.5rem;border-radius:4px;margin-bottom:1rem;font-size:13px}.calculated-tooltip-container .code-block{background:#f8f9fa;border:1px solid #ddd;padding:.75rem;font-family:monospace;font-size:12px;white-space:pre-wrap;color:#111!important;border-radius:4px;overflow-x:auto}.calculated-tooltip-container .no-depends{color:#888;font-style:italic}.calculated-tooltip-container pre{overflow:hidden}.calculated-tooltip-container label.required~input:not([disabled]),.calculated-tooltip-container label.required~textarea:not([disabled]),.calculated-tooltip-container label.required~select:not([disabled]){background-color:#ff0!important}\n"] }]
27836
29006
  }], ctorParameters: () => [{ type: MultiLanguageService }, { type: AlertService }], propDecorators: { control: [{
27837
29007
  type: Input
27838
29008
  }], form: [{
@@ -32726,7 +33896,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
32726
33896
  const hrmSchemaRoutes = [
32727
33897
  {
32728
33898
  path: '',
32729
- loadComponent: () => import('./ngx-histaff-alpha-hrm-schema.component-DPqZBYnx.mjs').then(m => m.HrmSchemaComponent)
33899
+ loadComponent: () => import('./ngx-histaff-alpha-hrm-schema.component-BTzEGNfX.mjs').then(m => m.HrmSchemaComponent)
32730
33900
  }
32731
33901
  ];
32732
33902
 
@@ -34899,7 +36069,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
34899
36069
  const simpleChatRoutes = [
34900
36070
  {
34901
36071
  path: '',
34902
- loadComponent: () => import('./ngx-histaff-alpha-simple-chat.component-CQvQzfwA.mjs').then(m => m.SimpleChatComponent)
36072
+ loadComponent: () => import('./ngx-histaff-alpha-simple-chat.component-CWWWy9FV.mjs').then(m => m.SimpleChatComponent)
34903
36073
  }
34904
36074
  ];
34905
36075
 
@@ -35565,7 +36735,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
35565
36735
  const coreSysActionRoutes = [
35566
36736
  {
35567
36737
  path: "",
35568
- loadComponent: () => import('./ngx-histaff-alpha-core-sys-action.component-DSjGTh1K.mjs').then(m => m.CoreSysActionComponent),
36738
+ loadComponent: () => import('./ngx-histaff-alpha-core-sys-action.component-YqAEn6iz.mjs').then(m => m.CoreSysActionComponent),
35569
36739
  children: [
35570
36740
  {
35571
36741
  path: ":id",
@@ -36958,11 +38128,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
36958
38128
  const sysSmtpClientRoutes = [
36959
38129
  {
36960
38130
  path: '',
36961
- loadComponent: () => import('./ngx-histaff-alpha-sys-smtp-client.component-5f4Hm6sZ.mjs').then(m => m.SysSmtpClientComponent),
38131
+ loadComponent: () => import('./ngx-histaff-alpha-sys-smtp-client.component-CtRfWRoX.mjs').then(m => m.SysSmtpClientComponent),
36962
38132
  children: [
36963
38133
  {
36964
38134
  path: ':id',
36965
- loadComponent: () => import('./ngx-histaff-alpha-sys-smtp-client-edit.component-DQyeSL3y.mjs').then(m => m.SysSmtpClientEditComponent),
38135
+ loadComponent: () => import('./ngx-histaff-alpha-sys-smtp-client-edit.component-Cn1CYwCF.mjs').then(m => m.SysSmtpClientEditComponent),
36966
38136
  outlet: 'corePageListAux'
36967
38137
  }
36968
38138
  ]
@@ -38148,11 +39318,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
38148
39318
  const coreDocGenRoutes = [
38149
39319
  {
38150
39320
  path: 'template-list',
38151
- loadComponent: () => import('./ngx-histaff-alpha-template-list.component-Hxk1mvGh.mjs').then(m => m.TemplateListComponent),
39321
+ loadComponent: () => import('./ngx-histaff-alpha-template-list.component-TYq8bPtG.mjs').then(m => m.TemplateListComponent),
38152
39322
  },
38153
39323
  {
38154
39324
  path: ":id",
38155
- loadComponent: () => import('./ngx-histaff-alpha-core-template-editor.component-D1XlpSNr.mjs').then(m => m.CoreTemplateEditorComponent),
39325
+ loadComponent: () => import('./ngx-histaff-alpha-core-template-editor.component-CvJChUao.mjs').then(m => m.CoreTemplateEditorComponent),
38156
39326
  canDeactivate: [CanDeactivateGuard]
38157
39327
  },
38158
39328
  {
@@ -38181,7 +39351,7 @@ const coreFormDesignRoutes = [
38181
39351
  },
38182
39352
  {
38183
39353
  path: ':id',
38184
- loadComponent: () => import('./ngx-histaff-alpha-core-form-design.component-Cy_mOM1n.mjs').then(m => m.CoreFormDesignComponent)
39354
+ loadComponent: () => import('./ngx-histaff-alpha-core-form-design.component-D6TrPmpG.mjs').then(m => m.CoreFormDesignComponent)
38185
39355
  }
38186
39356
  ];
38187
39357
 
@@ -39092,7 +40262,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
39092
40262
  const coreNavigationTrackerRoutes = [
39093
40263
  {
39094
40264
  path: '',
39095
- loadComponent: () => import('./ngx-histaff-alpha-tracker-studio.component-Dhp9w826.mjs').then(m => m.TrackerStudioComponent)
40265
+ loadComponent: () => import('./ngx-histaff-alpha-tracker-studio.component-BEMXswAW.mjs').then(m => m.TrackerStudioComponent)
39096
40266
  }
39097
40267
  ];
39098
40268
 
@@ -42195,33 +43365,33 @@ const coreWorkflowRoutes = [
42195
43365
  {
42196
43366
  path: 'form-assign/:id',
42197
43367
  outlet: "formAssignAux",
42198
- loadComponent: () => import('./ngx-histaff-alpha-wf-form-assign.component-ClY5trbS.mjs').then(m => m.WfFormAssignComponent),
43368
+ loadComponent: () => import('./ngx-histaff-alpha-wf-form-assign.component-Bck-IKZX.mjs').then(m => m.WfFormAssignComponent),
42199
43369
  canDeactivate: [CanDeactivateGuard]
42200
43370
  }
42201
43371
  ]
42202
43372
  },
42203
43373
  {
42204
43374
  path: 'global-config',
42205
- loadComponent: () => import('./ngx-histaff-alpha-wf-global-config.component-Cr5x7Ejg.mjs').then(m => m.WfGlobalConfigComponent)
43375
+ loadComponent: () => import('./ngx-histaff-alpha-wf-global-config.component-DhTw3REl.mjs').then(m => m.WfGlobalConfigComponent)
42206
43376
  },
42207
43377
  {
42208
43378
  path: 'db-settings',
42209
- loadComponent: () => import('./ngx-histaff-alpha-db-settings.component-AwS6B8Ne.mjs').then(m => m.DbSettingsComponent)
43379
+ loadComponent: () => import('./ngx-histaff-alpha-db-settings.component-D0JhoiHQ.mjs').then(m => m.DbSettingsComponent)
42210
43380
  },
42211
43381
  {
42212
43382
  path: 'workflow-consume',
42213
- loadComponent: () => import('./ngx-histaff-alpha-core-workflow-consume.component-DV84nxOo.mjs').then(m => m.CoreWorkflowConsumeComponent),
43383
+ loadComponent: () => import('./ngx-histaff-alpha-core-workflow-consume.component-K-_atwQM.mjs').then(m => m.CoreWorkflowConsumeComponent),
42214
43384
  children: [
42215
43385
  {
42216
43386
  path: ':id',
42217
43387
  outlet: "workflowConsume",
42218
- loadComponent: () => import('./ngx-histaff-alpha-live-form.component-CatM7zte.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
43388
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-CYB3NnkR.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
42219
43389
  }
42220
43390
  ]
42221
43391
  },
42222
43392
  {
42223
43393
  path: 'workflow-consume/:id',
42224
- loadComponent: () => import('./ngx-histaff-alpha-live-form.component-CatM7zte.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
43394
+ loadComponent: () => import('./ngx-histaff-alpha-live-form.component-CYB3NnkR.mjs').then(function (n) { return n.l; }).then(m => m.LiveFormComponent),
42225
43395
  },
42226
43396
  {
42227
43397
  path: 'workflow-group-edit/:id',
@@ -42231,21 +43401,21 @@ const coreWorkflowRoutes = [
42231
43401
  },
42232
43402
  {
42233
43403
  path: 'design/:id',
42234
- loadChildren: () => import('./ngx-histaff-alpha-design-wrapper.route-DIZLQKWJ.mjs').then(m => m.wfDesignWrapperRoutes),
43404
+ loadChildren: () => import('./ngx-histaff-alpha-design-wrapper.route-DVdapOzd.mjs').then(m => m.wfDesignWrapperRoutes),
42235
43405
  },
42236
43406
  ]
42237
43407
  },
42238
43408
  {
42239
43409
  path: 'react/:id',
42240
- loadComponent: () => import('./ngx-histaff-alpha-wf-instance-step-react.component-1yYa-SfK.mjs').then(m => m.WfInstanceStepReactComponent)
43410
+ loadComponent: () => import('./ngx-histaff-alpha-wf-instance-step-react.component-DE5sJiVw.mjs').then(m => m.WfInstanceStepReactComponent)
42241
43411
  },
42242
43412
  {
42243
43413
  path: 'status/:id',
42244
- loadComponent: () => import('./ngx-histaff-alpha-wf-instance-status.component-BIvdd1YN.mjs').then(m => m.WfInstanceStatusComponent)
43414
+ loadComponent: () => import('./ngx-histaff-alpha-wf-instance-status.component-D-KD7Veu.mjs').then(m => m.WfInstanceStatusComponent)
42245
43415
  },
42246
43416
  {
42247
43417
  path: 'lab',
42248
- loadComponent: () => import('./ngx-histaff-alpha-wf-lab.component-mbJjrJ6v.mjs').then(m => m.WfLabComponent)
43418
+ loadComponent: () => import('./ngx-histaff-alpha-wf-lab.component-DoFDdaIu.mjs').then(m => m.WfLabComponent)
42249
43419
  }
42250
43420
  ];
42251
43421
 
@@ -44853,5 +46023,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
44853
46023
  * Generated bundle index. Do not edit.
44854
46024
  */
44855
46025
 
44856
- export { noneAutoClosedAlertOptions as $, AppService as A, BaseComponent as B, ChatService as C, DragReorderDirective as D, EnumFormBaseContolType as E, FullscreenModalLoaderComponent as F, DomService as G, EnumActorSourceType as H, ImageErrorResolverDirective as I, CoreParamControlComponent as J, CoreRadioGroupComponent as K, GptService as L, MultiLanguageService as M, CoreRuleTreeService as N, CoreRuleTreeComponent as O, CoreStickerCollectionComponent as P, ApplicationHelpService as Q, HotKeysDirective as R, StringHtmlPipe as S, TooltipDirective as T, CoreDatetimeService as U, EnumCorePageEditMode as V, CoreFormComponent as W, NavigatorService as X, JsonService as Y, EnumCoreButtonVNSCode as Z, READONLY_WORKFLOW_FIELDS as _, AppConfigService as a, EnumDeviceType as a$, CoreButtonGroupVnsComponent as a0, CoreDropdownComponent as a1, EnumFilterOperator as a2, HtmlTooltipDirective as a3, CoreControlNoFormArrayComponent as a4, EnumFormDesignMode as a5, CoreControlComponent as a6, JsonSafePipe as a7, CoreChecklistComponent as a8, CoreFormControlSeekerComponent as a9, EnumErrorType as aA, EnumIconClass as aB, EnumProfileInfoSector as aC, EnumSignalRType as aD, EnumSortDirection as aE, EnumStyleButtonClass as aF, CanActivateFunctionUrlMapperGuard as aG, InitializationCanActivateFn as aH, InitializationCanMatchFn as aI, httpInterceptorProviders as aJ, InterceptorSkipHeader as aK, appTypeInterceptor as aL, baseUrlInterceptor as aM, authInterceptor as aN, graphInterceptor as aO, tokenInterceptor as aP, responseInterceptor as aQ, timeZoneInterceptor as aR, cachingInterceptor as aS, langInterceptor as aT, OnlineUsersComponent as aU, ActionService as aV, AppInitializationService as aW, AuthService as aX, CacheService as aY, EnumSwUpdateVersionUpdatesEventType as aZ, CheckForUpdateService as a_, CoreAttachmentComponent as aa, CoreDatePickerComponent as ab, CoreMonthSelectorComponent as ac, CoreCurrencyInputComponent as ad, EnumImageResolverType as ae, NormalizeHumanNamePipe as af, CoreIosSwitcherComponent as ag, SunnyRotatingComponent as ah, MapAppdemoToServerPipePipe as ai, MapAttachmentToServerPipe as aj, MapNewsfeedMediaToServerPipe as ak, UploadedFilenameCutoffPipe as al, DialogStateComponent as am, FooterComponent as an, RightchatComponent as ao, WaittingScreenComponent as ap, longAlertOptions as aq, attachmentOptions as ar, CORE_VNS_BUTTONS as as, defaultPaging as at, DESKTOP_SCREEN_HEDER_HEIGHT as au, MOBILE_SCREEN_HEDER_HEIGHT as av, themeBlue as aw, DATE_VALUE_ACCESSOR as ax, DateValueAccessor as ay, EnumDragType as az, AlertService as b, LanguageComponent as b$, EnumBrowserType as b0, EnumOsType as b1, ClientService as b2, CommonHttpRequestService as b3, TLA_CONFIG as b4, ConfigService as b5, CoreLocalStorageService as b6, CoreTableService as b7, DndService as b8, DocxMergeService as b9, SsrsExpressService as bA, StatisticService as bB, StatisticAuthService as bC, SysMenuService as bD, TimeSheetService as bE, TopicPermissionService as bF, TopicTreeService as bG, UploadedFileService as bH, UrlService as bI, UserActivityService as bJ, EvaluateDialogService as bK, EnumWorkScheduleViewMode as bL, WorkShiftDndService as bM, AtShiftPatternComponent as bN, AtShiftPatternApplyComponent as bO, AtShiftPatternEditComponent as bP, AtWorksignComponent as bQ, AtWorksignService as bR, FunctionComponent as bS, IndividualScheduleApplyComponent as bT, FunctionEditComponent as bU, FunctionIgnoreComponent as bV, FunctionIgnoreEditComponent as bW, GroupFunctionComponent as bX, GroupFunctionEditComponent as bY, hrmSchemaRoutes as bZ, InMemoryComponent as b_, FilterKitService as ba, GrpcService as bb, HeaderService as bc, HistoryService as bd, HttpErrorHandler as be, HubConnectionService as bf, IpServiceService as bg, LayoutService as bh, LiquidJsService as bi, MapService as bj, MenuService as bk, MessageService as bl, ModalService as bm, OrganizationService as bn, PkceService as bo, PositionTransferService as bp, EnumNotificationDir as bq, NotificationActionType as br, PushNotificationService as bs, RandomAvatarService as bt, RequestCache as bu, RequestCacheWithMap as bv, ResponseService as bw, RoutingService as bx, EnumSsrsExpressFileExtension as by, EnumSsrsExpressExportFormat as bz, CoreTerminalSpinnerComponent as c, CoreContractSeekerComponent as c$, LanguageEditComponent as c0, MenuComponent as c1, MenuEditComponent as c2, MutationLogComponent as c3, MutationViewComponent as c4, PaSalaryPolicyComponent as c5, PaSalaryPolicyEditComponent as c6, PortalRouteComponent as c7, ScheduleOverviewComponent as c8, simpleChatRoutes as c9, ButtonGroupService as cA, ButtonGroupComponent as cB, EnumButtonCaptionCode as cC, CoreButtonComponent as cD, CoreAccordionComponent as cE, CoreAccordionService as cF, CoreActiveUserCountComponent as cG, NewlyCreatedTokenService as cH, CoreApiProgressComponent as cI, CoreButtonGroupComponent as cJ, EnumCoreButtonCode as cK, ActionSvgEditComponent as cL, CoreButtonGroupService as cM, CoreButtonVnsComponent as cN, CoreCommonParamKitComponent as cO, CoreCompareDbPipelineComponent as cP, CoreCompositionState as cQ, CoreCompositionService as cR, CoreCompositionComponent as cS, CoreConfirmDialogComponent as cT, ConfirmDialogStateComponent as cU, CoreLazyMountComponent as cV, CoreRootMenuItemPickerComponent as cW, CoreRootMenuItemPickerService as cX, ECoreTableToolCode as cY, ECoreTableToolClass as cZ, CoreTableComponent as c_, PortalRouteEditComponent as ca, SysOtherListComponent as cb, SysOtherListEditComponent as cc, SysOtherListTypeComponent as cd, SysOtherListTypeEditComponent as ce, coreSysActionRoutes as cf, SysActionComponent as cg, SysActionEditComponent as ch, SysFunctionActionComponent as ci, SysFunctionActionEditComponent as cj, SysFunctionActionMapperComponent as ck, SysFunctionUrlMapperComponent as cl, FunctionEditService as cm, SysModuleComponent as cn, SysModuleEditComponent as co, SysRouteAccessComponent as cp, sysSmtpClientRoutes as cq, liner_to_nested_array_script as cr, blob_to_base64_script as cs, AlertComponent as ct, EnumAlertType as cu, IAlertOptions as cv, AnimatedTextService as cw, AnimatedTextComponent as cx, BaseDropdownComponent as cy, ButtonGroupModule as cz, CorePageHeaderComponent as d, EnumCoreViewItemType as d$, CoreControlNoGridBufferComponent as d0, CoreControlNoSeekerComponent as d1, coreDocGenRoutes as d2, CoreDocgenToolbarComponent as d3, CoreEmployeeScheduleComponent as d4, CoreEmployeeSeekerComponent as d5, EnumCoreFileUploaderType as d6, CoreFileUploaderComponent as d7, CoreFilterHubComponent as d8, CoreFilterHubService as d9, CoreLoadingSurfaceComponent as dA, CoreMccComponent as dB, CoreMonthPickerComponent as dC, CoreNavigationTrackerComponent as dD, coreNavigationTrackerRoutes as dE, CoreOauthCallbackComponent as dF, CoreOauthCallbackOffice365Component as dG, EnumCoreOrgTreeaAccessorMode as dH, EnumCoreOrgTreeaSearchMode as dI, CoreOrgTreeComponent as dJ, CoreOrgTreeState as dK, CoreOrgTreeService as dL, CoreOrgUnitSeekerComponent as dM, CoreOrgchartflexComponent as dN, CARD_COLORS as dO, CoreOrgchartflexWrapperComponent as dP, coreOrgchartflexRoutes as dQ, CoreOrgParamComponent as dR, EnumCorePageEditBootstrapClass as dS, EnumCorePageEditFieldType as dT, CorePageEditService as dU, CorePageEditLiteComponent as dV, CorePageEditTabComponent as dW, EnumExType as dX, CorePageListService as dY, CorePageListState as dZ, CorePageListContentComponent as d_, ControlBase as da, Textbox as db, CoreControlService as dc, CustomValidators as dd, URL_PATTERN as de, coreFormDesignRoutes as df, CoreFormTabComponent as dg, CoreFormLiteComponent as dh, CoreFormControlBaseComponent as di, EnumCoreSeekerColumnJob as dj, EnumCoreSeekerColumnStaffProfile as dk, EnumCoreSeekerColumnContract as dl, EnumCoreSeekerColumnWorking as dm, EnumCoreSeekerColumnWage as dn, EnumCoreSeekerColumnPosition as dp, EnumCoreSeekerColumnPositionConcurrent as dq, EnumCoreSeekerColumnAutoForm as dr, SeekerService as ds, CoreGridBufferComponent as dt, CoreHeaderParamsComponent as du, CoreHelperComponent as dv, CoreLineComponent as dw, CoreLiquidWysiwygComponent as dx, CoreListComponent as dy, CoreListLazyComponent as dz, TranslatePipe as e, normalizeHumanName as e$, CorePageViewComponent as e0, CorePaginationComponent as e1, CorePaginationFullComponent as e2, CorePaginationFullService as e3, CoreFileFormatPickerComponent as e4, CorePermissionService as e5, EnumPermissionObjectType as e6, CorePermissionComponent as e7, CorePermissionActionsComponent as e8, CorePositionConcurrentSeekerComponent as e9, CoreWageSeekerComponent as eA, CoreWorkingSeekerComponent as eB, coreWorkflowRoutes as eC, CoreWorkflowBuilderComponent as eD, CoreWorkflowGroupEditComponent as eE, CoreYearPickerComponent as eF, CoreYearSelectorComponent as eG, EnumCoreD3ScaleType as eH, CoreD3Service as eI, CorePieComponent as eJ, CoreScatterPlotComponent as eK, EnumHrComparisonCode as eL, EnumICoreStatisticWidgetDataType as eM, CoreStatisticWidgetComponent as eN, DecisionComponent as eO, EvaluateDialogComponent as eP, HuconcurrentlyComponent as eQ, JobComponent as eR, LanguageChangerComponent as eS, DEFAULT_SVG as eT, ItemComponent as eU, NavigatorComponent as eV, OtpInputComponent as eW, OtpInputService as eX, PageTitleComponent as eY, PaginationComponent as eZ, FilterPipe as e_, CorePositionSeekerComponent as ea, CoreQrcodeComponent as eb, EnumOparator as ec, CoreQueryBuilderComponent as ed, CoreReducerIconComponent as ee, CoreRotatingTextComponent as ef, CoreRouteAccumulatorComponent as eg, CoreRoutingHistoryComponent as eh, CoreSalaryPolicyPickerComponent as ei, CoreScrollComponent as ej, CoreScrollLazyComponent as ek, CoreSeenByComponent as el, CoreShiftCardComponent as em, CoreShiftCellComponent as en, CoreShiftCollectionComponent as eo, CoreShiftStickerComponent as ep, STICKER_COLOR_SCHEMA as eq, CoreSubFormGroupComponent as er, CoreTabListComponent as es, CoreTagsComponent as et, CoreTopicPickerComponent as eu, EnumCoreArticleCategoryTreeaAccessorMode as ev, CoreTopicTreeComponent as ew, CoreTreeComponent as ex, EnumCoreTreeGridEditMode as ey, CoreTreeGridComponent as ez, CorePageListComponent as f, PositionComponent as f0, PositionEditService as f1, FileService as f2, LongTaskService as f3, EnumRecursiveFields as f4, RecursiveService as f5, StringService as f6, UnicodeService as f7, StaffProfileComponent as f8, ThreedotsComponent as f9, TooltipComponent as fa, UserActivityComponent as fb, WageComponent as fc, tooltip_directive as fd, coreStickerCollection_component as fe, dragReorder_directive as ff, CoreStatusStickerComponent as g, BaseEditComponent as h, DialogService as i, CorePageEditComponent as j, EnumCoreTablePipeType as k, CoreCheckboxComponent as l, CoreTabsComponent as m, CoreWorkflowService as n, EnumCoreFormControlSeekerSourceType as o, CoreFormService as p, DbService as q, AiHintForColumnComponent as r, CoreWorkflowListComponent as s, CanDeactivateGuard as t, TableCellPipe as u, MapAvatarToServerPipe as v, alertOptions as w, SocketService as x, CoreFormDesignService as y, EnumWorkflowStepType as z };
44857
- //# sourceMappingURL=ngx-histaff-alpha-ngx-histaff-alpha-BZdzGBj5.mjs.map
46026
+ export { noneAutoClosedAlertOptions as $, AppService as A, BaseComponent as B, ChatService as C, DragReorderDirective as D, EnumFormBaseContolType as E, FullscreenModalLoaderComponent as F, DomService as G, EnumActorSourceType as H, ImageErrorResolverDirective as I, CoreParamControlComponent as J, CoreRadioGroupComponent as K, GptService as L, MultiLanguageService as M, CoreRuleTreeService as N, CoreRuleTreeComponent as O, CoreStickerCollectionComponent as P, ApplicationHelpService as Q, HotKeysDirective as R, StringHtmlPipe as S, TooltipDirective as T, CoreDatetimeService as U, EnumCorePageEditMode as V, CoreFormComponent as W, NavigatorService as X, JsonService as Y, EnumCoreButtonVNSCode as Z, READONLY_WORKFLOW_FIELDS as _, AppConfigService as a, CheckForUpdateService as a$, CoreButtonGroupVnsComponent as a0, CoreDropdownComponent as a1, EnumFilterOperator as a2, CoreDomDecisionEditorComponent as a3, HtmlTooltipDirective as a4, CoreControlNoFormArrayComponent as a5, EnumFormDesignMode as a6, CoreControlComponent as a7, JsonSafePipe as a8, CoreChecklistComponent as a9, EnumDragType as aA, EnumErrorType as aB, EnumIconClass as aC, EnumProfileInfoSector as aD, EnumSignalRType as aE, EnumSortDirection as aF, EnumStyleButtonClass as aG, CanActivateFunctionUrlMapperGuard as aH, InitializationCanActivateFn as aI, InitializationCanMatchFn as aJ, httpInterceptorProviders as aK, InterceptorSkipHeader as aL, appTypeInterceptor as aM, baseUrlInterceptor as aN, authInterceptor as aO, graphInterceptor as aP, tokenInterceptor as aQ, responseInterceptor as aR, timeZoneInterceptor as aS, cachingInterceptor as aT, langInterceptor as aU, OnlineUsersComponent as aV, ActionService as aW, AppInitializationService as aX, AuthService as aY, CacheService as aZ, EnumSwUpdateVersionUpdatesEventType as a_, CoreFormControlSeekerComponent as aa, CoreAttachmentComponent as ab, CoreDatePickerComponent as ac, CoreMonthSelectorComponent as ad, CoreCurrencyInputComponent as ae, EnumImageResolverType as af, NormalizeHumanNamePipe as ag, CoreIosSwitcherComponent as ah, SunnyRotatingComponent as ai, MapAppdemoToServerPipePipe as aj, MapAttachmentToServerPipe as ak, MapNewsfeedMediaToServerPipe as al, UploadedFilenameCutoffPipe as am, DialogStateComponent as an, FooterComponent as ao, RightchatComponent as ap, WaittingScreenComponent as aq, longAlertOptions as ar, attachmentOptions as as, CORE_VNS_BUTTONS as at, defaultPaging as au, DESKTOP_SCREEN_HEDER_HEIGHT as av, MOBILE_SCREEN_HEDER_HEIGHT as aw, themeBlue as ax, DATE_VALUE_ACCESSOR as ay, DateValueAccessor as az, AlertService as b, InMemoryComponent as b$, EnumDeviceType as b0, EnumBrowserType as b1, EnumOsType as b2, ClientService as b3, CommonHttpRequestService as b4, TLA_CONFIG as b5, ConfigService as b6, CoreLocalStorageService as b7, CoreTableService as b8, DndService as b9, EnumSsrsExpressExportFormat as bA, SsrsExpressService as bB, StatisticService as bC, StatisticAuthService as bD, SysMenuService as bE, TimeSheetService as bF, TopicPermissionService as bG, TopicTreeService as bH, UploadedFileService as bI, UrlService as bJ, UserActivityService as bK, EvaluateDialogService as bL, EnumWorkScheduleViewMode as bM, WorkShiftDndService as bN, AtShiftPatternComponent as bO, AtShiftPatternApplyComponent as bP, AtShiftPatternEditComponent as bQ, AtWorksignComponent as bR, AtWorksignService as bS, FunctionComponent as bT, IndividualScheduleApplyComponent as bU, FunctionEditComponent as bV, FunctionIgnoreComponent as bW, FunctionIgnoreEditComponent as bX, GroupFunctionComponent as bY, GroupFunctionEditComponent as bZ, hrmSchemaRoutes as b_, DocxMergeService as ba, FilterKitService as bb, GrpcService as bc, HeaderService as bd, HistoryService as be, HttpErrorHandler as bf, HubConnectionService as bg, IpServiceService as bh, LayoutService as bi, LiquidJsService as bj, MapService as bk, MenuService as bl, MessageService as bm, ModalService as bn, OrganizationService as bo, PkceService as bp, PositionTransferService as bq, EnumNotificationDir as br, NotificationActionType as bs, PushNotificationService as bt, RandomAvatarService as bu, RequestCache as bv, RequestCacheWithMap as bw, ResponseService as bx, RoutingService as by, EnumSsrsExpressFileExtension as bz, CoreTerminalSpinnerComponent as c, CoreTableComponent as c$, LanguageComponent as c0, LanguageEditComponent as c1, MenuComponent as c2, MenuEditComponent as c3, MutationLogComponent as c4, MutationViewComponent as c5, PaSalaryPolicyComponent as c6, PaSalaryPolicyEditComponent as c7, PortalRouteComponent as c8, ScheduleOverviewComponent as c9, ButtonGroupModule as cA, ButtonGroupService as cB, ButtonGroupComponent as cC, EnumButtonCaptionCode as cD, CoreButtonComponent as cE, CoreAccordionComponent as cF, CoreAccordionService as cG, CoreActiveUserCountComponent as cH, NewlyCreatedTokenService as cI, CoreApiProgressComponent as cJ, CoreButtonGroupComponent as cK, EnumCoreButtonCode as cL, ActionSvgEditComponent as cM, CoreButtonGroupService as cN, CoreButtonVnsComponent as cO, CoreCommonParamKitComponent as cP, CoreCompareDbPipelineComponent as cQ, CoreCompositionState as cR, CoreCompositionService as cS, CoreCompositionComponent as cT, CoreConfirmDialogComponent as cU, ConfirmDialogStateComponent as cV, CoreLazyMountComponent as cW, CoreRootMenuItemPickerComponent as cX, CoreRootMenuItemPickerService as cY, ECoreTableToolCode as cZ, ECoreTableToolClass as c_, simpleChatRoutes as ca, PortalRouteEditComponent as cb, SysOtherListComponent as cc, SysOtherListEditComponent as cd, SysOtherListTypeComponent as ce, SysOtherListTypeEditComponent as cf, coreSysActionRoutes as cg, SysActionComponent as ch, SysActionEditComponent as ci, SysFunctionActionComponent as cj, SysFunctionActionEditComponent as ck, SysFunctionActionMapperComponent as cl, SysFunctionUrlMapperComponent as cm, FunctionEditService as cn, SysModuleComponent as co, SysModuleEditComponent as cp, SysRouteAccessComponent as cq, sysSmtpClientRoutes as cr, liner_to_nested_array_script as cs, blob_to_base64_script as ct, AlertComponent as cu, EnumAlertType as cv, IAlertOptions as cw, AnimatedTextService as cx, AnimatedTextComponent as cy, BaseDropdownComponent as cz, CorePageHeaderComponent as d, CorePageListContentComponent as d$, CoreContractSeekerComponent as d0, CoreControlNoGridBufferComponent as d1, CoreControlNoSeekerComponent as d2, coreDocGenRoutes as d3, CoreDocgenToolbarComponent as d4, CoreEmployeeScheduleComponent as d5, CoreEmployeeSeekerComponent as d6, EnumCoreFileUploaderType as d7, CoreFileUploaderComponent as d8, CoreFilterHubComponent as d9, CoreListLazyComponent as dA, CoreLoadingSurfaceComponent as dB, CoreMccComponent as dC, CoreMonthPickerComponent as dD, CoreNavigationTrackerComponent as dE, coreNavigationTrackerRoutes as dF, CoreOauthCallbackComponent as dG, CoreOauthCallbackOffice365Component as dH, EnumCoreOrgTreeaAccessorMode as dI, EnumCoreOrgTreeaSearchMode as dJ, CoreOrgTreeComponent as dK, CoreOrgTreeState as dL, CoreOrgTreeService as dM, CoreOrgUnitSeekerComponent as dN, CoreOrgchartflexComponent as dO, CARD_COLORS as dP, CoreOrgchartflexWrapperComponent as dQ, coreOrgchartflexRoutes as dR, CoreOrgParamComponent as dS, EnumCorePageEditBootstrapClass as dT, EnumCorePageEditFieldType as dU, CorePageEditService as dV, CorePageEditLiteComponent as dW, CorePageEditTabComponent as dX, EnumExType as dY, CorePageListService as dZ, CorePageListState as d_, CoreFilterHubService as da, ControlBase as db, Textbox as dc, CoreControlService as dd, CustomValidators as de, URL_PATTERN as df, coreFormDesignRoutes as dg, CoreFormTabComponent as dh, CoreFormLiteComponent as di, CoreFormControlBaseComponent as dj, EnumCoreSeekerColumnJob as dk, EnumCoreSeekerColumnStaffProfile as dl, EnumCoreSeekerColumnContract as dm, EnumCoreSeekerColumnWorking as dn, EnumCoreSeekerColumnWage as dp, EnumCoreSeekerColumnPosition as dq, EnumCoreSeekerColumnPositionConcurrent as dr, EnumCoreSeekerColumnAutoForm as ds, SeekerService as dt, CoreGridBufferComponent as du, CoreHeaderParamsComponent as dv, CoreHelperComponent as dw, CoreLineComponent as dx, CoreLiquidWysiwygComponent as dy, CoreListComponent as dz, TranslatePipe as e, PageTitleComponent as e$, EnumCoreViewItemType as e0, CorePageViewComponent as e1, CorePaginationComponent as e2, CorePaginationFullComponent as e3, CorePaginationFullService as e4, CoreFileFormatPickerComponent as e5, CorePermissionService as e6, EnumPermissionObjectType as e7, CorePermissionComponent as e8, CorePermissionActionsComponent as e9, EnumCoreTreeGridEditMode as eA, CoreTreeGridComponent as eB, CoreTreeReferenceComponent as eC, CoreWageSeekerComponent as eD, CoreWorkingSeekerComponent as eE, coreWorkflowRoutes as eF, CoreWorkflowBuilderComponent as eG, CoreWorkflowGroupEditComponent as eH, CoreYearPickerComponent as eI, CoreYearSelectorComponent as eJ, EnumCoreD3ScaleType as eK, CoreD3Service as eL, CorePieComponent as eM, CoreScatterPlotComponent as eN, EnumHrComparisonCode as eO, EnumICoreStatisticWidgetDataType as eP, CoreStatisticWidgetComponent as eQ, DecisionComponent as eR, EvaluateDialogComponent as eS, HuconcurrentlyComponent as eT, JobComponent as eU, LanguageChangerComponent as eV, DEFAULT_SVG as eW, ItemComponent as eX, NavigatorComponent as eY, OtpInputComponent as eZ, OtpInputService as e_, CorePositionConcurrentSeekerComponent as ea, CorePositionSeekerComponent as eb, CoreQrcodeComponent as ec, EnumOparator as ed, CoreQueryBuilderComponent as ee, CoreReducerIconComponent as ef, CoreRotatingTextComponent as eg, CoreRouteAccumulatorComponent as eh, CoreRoutingHistoryComponent as ei, CoreSalaryPolicyPickerComponent as ej, CoreScrollComponent as ek, CoreScrollLazyComponent as el, CoreSeenByComponent as em, CoreShiftCardComponent as en, CoreShiftCellComponent as eo, CoreShiftCollectionComponent as ep, CoreShiftStickerComponent as eq, STICKER_COLOR_SCHEMA as er, CoreSubFormGroupComponent as es, CoreTabListComponent as et, CoreTagsComponent as eu, CoreTopicPickerComponent as ev, EnumCoreArticleCategoryTreeaAccessorMode as ew, CoreTopicTreeComponent as ex, CoreTimezoneComponent as ey, CoreTreeComponent as ez, CorePageListComponent as f, PaginationComponent as f0, FilterPipe as f1, normalizeHumanName as f2, PositionComponent as f3, PositionEditService as f4, FileService as f5, LongTaskService as f6, EnumRecursiveFields as f7, RecursiveService as f8, StringService as f9, UnicodeService as fa, StaffProfileComponent as fb, ThreedotsComponent as fc, TooltipComponent as fd, UserActivityComponent as fe, WageComponent as ff, tooltip_directive as fg, coreStickerCollection_component as fh, dragReorder_directive as fi, CoreStatusStickerComponent as g, BaseEditComponent as h, DialogService as i, CorePageEditComponent as j, EnumCoreTablePipeType as k, CoreCheckboxComponent as l, CoreTabsComponent as m, CoreWorkflowService as n, EnumCoreFormControlSeekerSourceType as o, CoreFormService as p, DbService as q, AiHintForColumnComponent as r, CoreWorkflowListComponent as s, CanDeactivateGuard as t, TableCellPipe as u, MapAvatarToServerPipe as v, alertOptions as w, SocketService as x, CoreFormDesignService as y, EnumWorkflowStepType as z };
46027
+ //# sourceMappingURL=ngx-histaff-alpha-ngx-histaff-alpha-BsbSArBq.mjs.map