aril 2.0.1-dev.4 → 2.0.1

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 (192) hide show
  1. package/boot/config/apps/src/interfaces.d.ts +7 -1
  2. package/boot/config/apps/src/route-close.service.d.ts +8 -3
  3. package/boot/config/apps/src/route-permissions.d.ts +2 -2
  4. package/esm2022/boot/config/api/src/interfaces.mjs +3 -2
  5. package/esm2022/boot/config/apps/src/apps.service.mjs +2 -2
  6. package/esm2022/boot/config/apps/src/custom-route-reuse-strategy.class.mjs +4 -4
  7. package/esm2022/boot/config/apps/src/interfaces.mjs +2 -1
  8. package/esm2022/boot/config/apps/src/route-close.service.mjs +11 -4
  9. package/esm2022/boot/config/apps/src/route-permissions.mjs +24 -6
  10. package/esm2022/boot/config/plugins/src/plugins.service.mjs +7 -5
  11. package/esm2022/boot/host/src/bootstrap.mjs +5 -3
  12. package/esm2022/boot/mfe/src/bootstrap.mjs +11 -3
  13. package/esm2022/http/index.mjs +1 -2
  14. package/esm2022/http/src/serviceBase.mjs +4 -4
  15. package/esm2022/http/src/serviceStateMethods.mjs +9 -1
  16. package/esm2022/keycloak/src/auth.interceptor.mjs +5 -2
  17. package/esm2022/selection/aril-selection.mjs +5 -0
  18. package/esm2022/selection/index.mjs +2 -0
  19. package/esm2022/selection/src/interfaces.mjs +2 -0
  20. package/esm2022/selection/src/selection-group.service.mjs +195 -0
  21. package/esm2022/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.mjs +2 -2
  22. package/esm2022/theme/layout/index.mjs +4 -2
  23. package/esm2022/theme/layout/service/tab-session.service.mjs +1 -1
  24. package/esm2022/ui/button/index.mjs +1 -2
  25. package/esm2022/ui/button/src/button.component.mjs +5 -2
  26. package/esm2022/ui/charts/index.mjs +1 -11
  27. package/esm2022/ui/lib/index.mjs +1 -4
  28. package/esm2022/ui/lib/src/form/form-error-message.directive.mjs +9 -5
  29. package/esm2022/ui/multiSelect/src/multi-select.component.mjs +25 -25
  30. package/esm2022/ui/relativeDateSelector/src/relative-date-selector.component.mjs +2 -2
  31. package/esm2022/ui/selectBox/src/select-box.component.mjs +11 -34
  32. package/esm2022/ui/table/src/table.component.mjs +10 -5
  33. package/esm2022/ui/value/src/value.component.mjs +3 -2
  34. package/esm2022/ui-business/enumPicker/src/enum-picker.component.mjs +14 -6
  35. package/esm2022/util/activity/aril-util-activity.mjs +5 -0
  36. package/esm2022/util/activity/index.mjs +4 -0
  37. package/esm2022/util/activity/src/activity.constants.mjs +4 -0
  38. package/esm2022/util/activity/src/activity.service.mjs +218 -0
  39. package/esm2022/util/activity/src/activity.types.mjs +2 -0
  40. package/esm2022/util/block/src/block.mjs +9 -25
  41. package/esm2022/util/pub-sub/src/pub-sub.service.mjs +10 -5
  42. package/fesm2022/{aril-app.component-s14ruALV.mjs → aril-app.component-MjG_tPEe.mjs} +2 -1
  43. package/fesm2022/{aril-app.component-s14ruALV.mjs.map → aril-app.component-MjG_tPEe.mjs.map} +1 -1
  44. package/fesm2022/aril-boot-config-api.mjs +2 -1
  45. package/fesm2022/aril-boot-config-api.mjs.map +1 -1
  46. package/fesm2022/aril-boot-config-apps.mjs +36 -12
  47. package/fesm2022/aril-boot-config-apps.mjs.map +1 -1
  48. package/fesm2022/aril-boot-config-plugins.mjs +6 -4
  49. package/fesm2022/aril-boot-config-plugins.mjs.map +1 -1
  50. package/fesm2022/aril-boot-host.mjs +4 -2
  51. package/fesm2022/aril-boot-host.mjs.map +1 -1
  52. package/fesm2022/{aril-boot-mfe-app.component-oxzMhRXe.mjs → aril-boot-mfe-app.component-DtspQ3J8.mjs} +3 -2
  53. package/fesm2022/{aril-boot-mfe-app.component-oxzMhRXe.mjs.map → aril-boot-mfe-app.component-DtspQ3J8.mjs.map} +1 -1
  54. package/fesm2022/{aril-boot-mfe-aril-boot-mfe-CKOM61xb.mjs → aril-boot-mfe-aril-boot-mfe-lovoFcgw.mjs} +12 -4
  55. package/fesm2022/aril-boot-mfe-aril-boot-mfe-lovoFcgw.mjs.map +1 -0
  56. package/fesm2022/aril-boot-mfe.mjs +2 -1
  57. package/fesm2022/aril-boot-mfe.mjs.map +1 -1
  58. package/fesm2022/aril-http.mjs +11 -7
  59. package/fesm2022/aril-http.mjs.map +1 -1
  60. package/fesm2022/aril-keycloak.mjs +4 -1
  61. package/fesm2022/aril-keycloak.mjs.map +1 -1
  62. package/fesm2022/aril-selection.mjs +202 -0
  63. package/fesm2022/aril-selection.mjs.map +1 -0
  64. package/fesm2022/aril-theme-layout.mjs +4 -193
  65. package/fesm2022/aril-theme-layout.mjs.map +1 -1
  66. package/fesm2022/aril-ui-business-enumPicker.mjs +14 -6
  67. package/fesm2022/aril-ui-business-enumPicker.mjs.map +1 -1
  68. package/fesm2022/aril-ui-button.mjs +5 -17
  69. package/fesm2022/aril-ui-button.mjs.map +1 -1
  70. package/fesm2022/aril-ui-charts.mjs +4 -1302
  71. package/fesm2022/aril-ui-charts.mjs.map +1 -1
  72. package/fesm2022/aril-ui-lib.mjs +10 -98
  73. package/fesm2022/aril-ui-lib.mjs.map +1 -1
  74. package/fesm2022/aril-ui-multiSelect.mjs +24 -24
  75. package/fesm2022/aril-ui-multiSelect.mjs.map +1 -1
  76. package/fesm2022/aril-ui-relativeDateSelector.mjs +1 -1
  77. package/fesm2022/aril-ui-relativeDateSelector.mjs.map +1 -1
  78. package/fesm2022/aril-ui-selectBox.mjs +10 -33
  79. package/fesm2022/aril-ui-selectBox.mjs.map +1 -1
  80. package/fesm2022/aril-ui-table.mjs +9 -4
  81. package/fesm2022/aril-ui-table.mjs.map +1 -1
  82. package/fesm2022/aril-ui-value.mjs +2 -1
  83. package/fesm2022/aril-ui-value.mjs.map +1 -1
  84. package/fesm2022/aril-util-activity.mjs +228 -0
  85. package/fesm2022/aril-util-activity.mjs.map +1 -0
  86. package/fesm2022/aril-util-block.mjs +9 -25
  87. package/fesm2022/aril-util-block.mjs.map +1 -1
  88. package/fesm2022/aril-util-pub-sub.mjs +9 -4
  89. package/fesm2022/aril-util-pub-sub.mjs.map +1 -1
  90. package/fesm2022/aril.mjs +14 -5
  91. package/fesm2022/aril.mjs.map +1 -1
  92. package/http/index.d.ts +0 -1
  93. package/http/src/serviceStateMethods.d.ts +1 -0
  94. package/package.json +184 -208
  95. package/scripts/mf-shared.js +47 -47
  96. package/selection/index.d.ts +1 -0
  97. package/selection/src/interfaces.d.ts +8 -0
  98. package/{theme/layout/service → selection/src}/selection-group.service.d.ts +1 -1
  99. package/theme/layout/index.d.ts +1 -1
  100. package/theme/layout/index.ts +3 -1
  101. package/theme/layout/service/tab-session.service.ts +138 -138
  102. package/ui/button/index.d.ts +0 -1
  103. package/ui/button/src/button.component.d.ts +2 -0
  104. package/ui/charts/index.d.ts +0 -10
  105. package/ui/lib/index.d.ts +0 -3
  106. package/ui/lib/src/form/form-error-message.directive.d.ts +4 -3
  107. package/ui/multiSelect/src/multi-select.component.d.ts +4 -5
  108. package/ui/selectBox/src/select-box.component.d.ts +2 -7
  109. package/ui/table/src/table.component.d.ts +3 -2
  110. package/util/activity/index.d.ts +3 -0
  111. package/util/activity/src/activity.constants.d.ts +3 -0
  112. package/util/activity/src/activity.service.d.ts +35 -0
  113. package/util/activity/src/activity.types.d.ts +13 -0
  114. package/util/block/src/block.d.ts +4 -10
  115. package/util/pub-sub/src/pub-sub.service.d.ts +2 -2
  116. package/esm2022/http/src/serviceMockBase.mjs +0 -4
  117. package/esm2022/theme/layout/service/selection-group.service.mjs +0 -195
  118. package/esm2022/ui/button/src/split-button.component.mjs +0 -18
  119. package/esm2022/ui/charts/src/amCharts/column/column-chart.component.mjs +0 -124
  120. package/esm2022/ui/charts/src/amCharts/line/line-chart.component.mjs +0 -164
  121. package/esm2022/ui/charts/src/amCharts/pie/pie-chart.component.mjs +0 -116
  122. package/esm2022/ui/charts/src/highCharts/area/area-chart.component.mjs +0 -114
  123. package/esm2022/ui/charts/src/highCharts/bar/bar-chart.component.mjs +0 -100
  124. package/esm2022/ui/charts/src/highCharts/column/column-chart.component.mjs +0 -117
  125. package/esm2022/ui/charts/src/highCharts/heatmap/heatMap-chart.component.mjs +0 -252
  126. package/esm2022/ui/charts/src/highCharts/line/line-chart-series.component.mjs +0 -89
  127. package/esm2022/ui/charts/src/highCharts/line/line-chart.component.mjs +0 -82
  128. package/esm2022/ui/charts/src/highCharts/pie/pie-chart.component.mjs +0 -137
  129. package/esm2022/ui/charts/src/theme/theme.mjs +0 -54
  130. package/esm2022/ui/dxEditor/aril-ui-dxEditor.mjs +0 -5
  131. package/esm2022/ui/dxEditor/index.mjs +0 -2
  132. package/esm2022/ui/dxEditor/src/dx-editor.component.mjs +0 -26
  133. package/esm2022/ui/lib/src/form/form-field-builder.mjs +0 -23
  134. package/esm2022/ui/lib/src/input/common-input-validators.service.mjs +0 -49
  135. package/esm2022/ui/lib/src/input/input-disabled.directive.mjs +0 -25
  136. package/esm2022/ui/overlayPanel/aril-ui-overlayPanel.mjs +0 -5
  137. package/esm2022/ui/overlayPanel/index.mjs +0 -2
  138. package/esm2022/ui/overlayPanel/src/overlay-panel.component.mjs +0 -20
  139. package/esm2022/ui/tooltip/aril-ui-tooltip.mjs +0 -5
  140. package/esm2022/ui/tooltip/index.mjs +0 -2
  141. package/esm2022/ui/tooltip/src/tooltip-component.mjs +0 -23
  142. package/esm2022/ui/treeTable/aril-ui-treeTable.mjs +0 -5
  143. package/esm2022/ui/treeTable/index.mjs +0 -2
  144. package/esm2022/ui/treeTable/src/tree-table.component.mjs +0 -55
  145. package/esm2022/ui-business/operation-types-dialog/aril-ui-business-operation-types-dialog.mjs +0 -5
  146. package/esm2022/ui-business/operation-types-dialog/index.mjs +0 -2
  147. package/esm2022/ui-business/operation-types-dialog/src/operation-types-dialog.component.mjs +0 -76
  148. package/esm2022/util/unwrap/aril-util-unwrap.mjs +0 -5
  149. package/esm2022/util/unwrap/index.mjs +0 -2
  150. package/esm2022/util/unwrap/src/unwrap-tag.directive.mjs +0 -24
  151. package/fesm2022/aril-boot-mfe-aril-boot-mfe-CKOM61xb.mjs.map +0 -1
  152. package/fesm2022/aril-ui-business-operation-types-dialog.mjs +0 -83
  153. package/fesm2022/aril-ui-business-operation-types-dialog.mjs.map +0 -1
  154. package/fesm2022/aril-ui-dxEditor.mjs +0 -33
  155. package/fesm2022/aril-ui-dxEditor.mjs.map +0 -1
  156. package/fesm2022/aril-ui-overlayPanel.mjs +0 -27
  157. package/fesm2022/aril-ui-overlayPanel.mjs.map +0 -1
  158. package/fesm2022/aril-ui-tooltip.mjs +0 -30
  159. package/fesm2022/aril-ui-tooltip.mjs.map +0 -1
  160. package/fesm2022/aril-ui-treeTable.mjs +0 -62
  161. package/fesm2022/aril-ui-treeTable.mjs.map +0 -1
  162. package/fesm2022/aril-util-unwrap.mjs +0 -31
  163. package/fesm2022/aril-util-unwrap.mjs.map +0 -1
  164. package/http/src/serviceMockBase.d.ts +0 -6
  165. package/theme/layout/service/selection-group.service.ts +0 -209
  166. package/ui/button/src/split-button.component.d.ts +0 -8
  167. package/ui/charts/src/amCharts/column/column-chart.component.d.ts +0 -25
  168. package/ui/charts/src/amCharts/line/line-chart.component.d.ts +0 -26
  169. package/ui/charts/src/amCharts/pie/pie-chart.component.d.ts +0 -24
  170. package/ui/charts/src/highCharts/area/area-chart.component.d.ts +0 -20
  171. package/ui/charts/src/highCharts/bar/bar-chart.component.d.ts +0 -26
  172. package/ui/charts/src/highCharts/column/column-chart.component.d.ts +0 -28
  173. package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.d.ts +0 -32
  174. package/ui/charts/src/highCharts/line/line-chart-series.component.d.ts +0 -21
  175. package/ui/charts/src/highCharts/line/line-chart.component.d.ts +0 -21
  176. package/ui/charts/src/highCharts/pie/pie-chart.component.d.ts +0 -27
  177. package/ui/charts/src/theme/theme.d.ts +0 -5
  178. package/ui/dxEditor/index.d.ts +0 -1
  179. package/ui/dxEditor/src/dx-editor.component.d.ts +0 -11
  180. package/ui/lib/src/form/form-field-builder.d.ts +0 -8
  181. package/ui/lib/src/input/common-input-validators.service.d.ts +0 -20
  182. package/ui/lib/src/input/input-disabled.directive.d.ts +0 -9
  183. package/ui/overlayPanel/index.d.ts +0 -1
  184. package/ui/overlayPanel/src/overlay-panel.component.d.ts +0 -8
  185. package/ui/tooltip/index.d.ts +0 -1
  186. package/ui/tooltip/src/tooltip-component.d.ts +0 -14
  187. package/ui/treeTable/index.d.ts +0 -1
  188. package/ui/treeTable/src/tree-table.component.d.ts +0 -21
  189. package/ui-business/operation-types-dialog/index.d.ts +0 -1
  190. package/ui-business/operation-types-dialog/src/operation-types-dialog.component.d.ts +0 -28
  191. package/util/unwrap/index.d.ts +0 -1
  192. package/util/unwrap/src/unwrap-tag.directive.d.ts +0 -9
@@ -1,4 +1,4 @@
1
- import { AfterViewInit, ElementRef } from '@angular/core';
1
+ import { AfterViewInit, ElementRef, OnDestroy } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
3
  declare const KTBlockUI: any;
4
4
  interface BlockOptions {
@@ -6,23 +6,17 @@ interface BlockOptions {
6
6
  overlayClass?: string;
7
7
  message?: string;
8
8
  }
9
- export declare class Block implements AfterViewInit {
10
- private element;
9
+ export declare class Block implements AfterViewInit, OnDestroy {
10
+ private readonly element;
11
11
  constructor(element: ElementRef);
12
12
  arilBlock: import("@angular/core").InputSignal<boolean, boolean>;
13
13
  blockOptions: import("@angular/core").InputSignal<BlockOptions, BlockOptions>;
14
14
  blockUI: typeof KTBlockUI;
15
15
  target: import("@angular/core").WritableSignal<HTMLElement>;
16
16
  ngAfterViewInit(): void;
17
+ ngOnDestroy(): void;
17
18
  getTarget(element: ElementRef): HTMLElement;
18
19
  static ɵfac: i0.ɵɵFactoryDeclaration<Block, never>;
19
20
  static ɵdir: i0.ɵɵDirectiveDeclaration<Block, "[arilBlock]", never, { "arilBlock": { "alias": "arilBlock"; "required": true; "isSignal": true; }; "blockOptions": { "alias": "blockOptions"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
20
21
  }
21
- export declare class BlockPage {
22
- constructor();
23
- arilBlockPage: import("@angular/core").InputSignal<boolean, boolean>;
24
- blockOptions: import("@angular/core").InputSignal<BlockOptions, BlockOptions>;
25
- static ɵfac: i0.ɵɵFactoryDeclaration<BlockPage, never>;
26
- static ɵdir: i0.ɵɵDirectiveDeclaration<BlockPage, "[arilBlockPage]", never, { "arilBlockPage": { "alias": "arilBlockPage"; "required": true; "isSignal": true; }; "blockOptions": { "alias": "blockOptions"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
27
- }
28
22
  export {};
@@ -13,8 +13,8 @@ declare const PubSubEvents: {
13
13
  };
14
14
  export declare class PubSubService {
15
15
  publish(e: CustomEvent): void;
16
- subscribe(eventName: keyof typeof PubSubEvents, listener: (data: any) => void): void;
17
- unSubscribe(eventName: keyof typeof PubSubEvents, listener: () => void): void;
16
+ subscribe(eventName: keyof typeof PubSubEvents, listener: (data: any) => void): EventListener;
17
+ unSubscribe(eventName: keyof typeof PubSubEvents, handler: EventListener): void;
18
18
  static ɵfac: i0.ɵɵFactoryDeclaration<PubSubService, never>;
19
19
  static ɵprov: i0.ɵɵInjectableDeclaration<PubSubService>;
20
20
  }
@@ -1,4 +0,0 @@
1
- export function ServiceCallMock(httpMethod, proxy, serviceURL, mockAPI, message) {
2
- // return ServiceCall(httpMethod, proxy, serviceURL, message, mockAPI, true);
3
- }
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZU1vY2tCYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9odHRwL3NyYy9zZXJ2aWNlTW9ja0Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLGVBQWUsQ0FDOUIsVUFBdUIsRUFDdkIsS0FBaUIsRUFDakIsVUFBa0IsRUFDbEIsT0FBZSxFQUNmLE9BQW1FO0lBRW5FLDZFQUE2RTtBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSFRUUE1ldGhvZHMsIFByb3h5VHlwZXMgfSBmcm9tICcuLi9saWIvZW51bXMnO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FsbCB9IGZyb20gJy4vc2VydmljZUJhc2UnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFNlcnZpY2VDYWxsTW9jayhcclxuXHRodHRwTWV0aG9kOiBIVFRQTWV0aG9kcyxcclxuXHRwcm94eTogUHJveHlUeXBlcyxcclxuXHRzZXJ2aWNlVVJMOiBzdHJpbmcsXHJcblx0bW9ja0FQSTogc3RyaW5nLFxyXG5cdG1lc3NhZ2U/OiB7IHN1Y2Nlc3M/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nOyB1c2VEZWZhdWx0OiBib29sZWFuIH1cclxuKSB7XHJcblx0Ly8gcmV0dXJuIFNlcnZpY2VDYWxsKGh0dHBNZXRob2QsIHByb3h5LCBzZXJ2aWNlVVJMLCBtZXNzYWdlLCBtb2NrQVBJLCB0cnVlKTtcclxufVxyXG4iXX0=
@@ -1,195 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { take } from 'rxjs';
3
- import { bridge } from 'aril/boot/bridge';
4
- import { API_CONFIGS } from 'aril/boot/config/api';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/common/http";
7
- // Key başına maksimum ardışık fetch hatası: limit aşılınca o key oturum boyu yeniden denenmez.
8
- // Sınırsız retry'da kalıcı hata veren bir grup (örn. silinmiş grup → 404), diğer grupların her
9
- // başarılı yüklemesinde (map güncellemesi tüm enum computed'larını yeniden çalıştırır) yeniden
10
- // POST edilirdi → istek/console fırtınası.
11
- const MAX_FETCH_FAILURES = 3;
12
- export class SelectionGroupService {
13
- constructor(http) {
14
- this.http = http;
15
- // State cross-MFE paylaşımlı: bridge globalThis-singleton'ında yaşar (bkz. mfe-bridge.ts).
16
- // Servis instance'ı MFE/tab başına çoğalsa da tüm okuma/yazma tek bridge state'ine gider.
17
- this.selectionGroups = bridge.selectionGroups;
18
- this.loading = bridge.selectionLoading;
19
- this.loaded = bridge.selectionLoaded;
20
- this.failures = bridge.selectionFailures;
21
- // loadStates + invalidate yalnızca ilk instance'ta (cross-MFE bir kez): tek localStorage
22
- // yüklemesi, tek `/versions` çağrısı. effect her instance'ta kurulur ama hepsi aynı paylaşılan
23
- // state'i yazdığından ezme olmaz.
24
- if (!bridge.selectionInitialized) {
25
- bridge.selectionInitialized = true;
26
- this.loadStatesFromLocalStorage();
27
- this.invalidateStaleGroups();
28
- }
29
- }
30
- // localStorage'a slim cache yazar. `effect` YERİNE bilinçli olarak doğrudan çağrılır: signal'i
31
- // değiştiren her yer (fetchEnum, invalidateStaleGroups) persist'i açıkça tetikler. NOT: webpack MF
32
- // config'iyle `@angular/core` artık singleton shared olduğundan effect-tabanlı persist de çalışırdı;
33
- // yine de açık/öngörülebilir olması (effect içinde gizli signal-write + NG0600 riski olmaması) için
34
- // doğrudan çağrı tercih edildi.
35
- persistToLocalStorage() {
36
- try {
37
- const slim = this.slimForStorage(this.selectionGroups());
38
- localStorage.setItem('selection-groups', btoa(encodeURI(JSON.stringify(slim))));
39
- }
40
- catch {
41
- // QuotaExceededError vb. → eski cache'i koru, yeni yazımı sessizce atla.
42
- }
43
- }
44
- loadStatesFromLocalStorage() {
45
- const selectionGroups = localStorage.getItem('selection-groups');
46
- if (selectionGroups) {
47
- try {
48
- const decodedData = decodeURI(atob(selectionGroups));
49
- // Dynamic gruplar zaten persist edilmiyor (slimForStorage onları atlar) → ekstra
50
- // filtre gerekmez; localStorage içeriği yalnızca Fixed gruplardır.
51
- const restored = JSON.parse(decodedData);
52
- this.selectionGroups.set(restored);
53
- // Restore edilen gruplar loaded sayılır: aksi halde koşulsuz fetchEnum çağıran
54
- // consumer'lar guard'ı geçip her oturum yeniden çeker (cache faydası kaybolur).
55
- // Stale'lik kontrolü invalidateStaleGroups'un işi. null entry'ler (legacy) loaded
56
- // işaretlenmez — işaretlenirse o grup bir daha hiç yüklenemezdi.
57
- Object.entries(restored).forEach(([key, group]) => {
58
- if (group)
59
- this.loaded.set(key, true);
60
- });
61
- }
62
- catch (e) {
63
- console.error(e);
64
- }
65
- }
66
- }
67
- // Dynamic grupları atlar + Fixed grupları yalnızca render (value/table/picker/export) ve invalidate
68
- // için gerekli alanlara indirger. localStorage'da audit/id/açıklama gibi kullanılmayan alanları tutmaz.
69
- slimForStorage(groups) {
70
- const out = {};
71
- for (const [key, group] of Object.entries(groups)) {
72
- if (!group || group.loadStrategy === 'Dynamic')
73
- continue;
74
- out[key] = {
75
- version: group.version,
76
- selectionItems: (group.selectionItems ?? []).map((it) => ({
77
- selectionKey: it.selectionKey,
78
- selectionDisplay: it.selectionDisplay,
79
- selectionMultiLanguageDisplays: it.selectionMultiLanguageDisplays,
80
- showOrder: it.showOrder,
81
- parentSelectionKey: it.parentSelectionKey
82
- }))
83
- };
84
- }
85
- return out;
86
- }
87
- // App init'te enum version'larını çekip localStorage'daki stale grupları temizler.
88
- // Silinen grup, tüketici component'lerin `if (!selectionGroup) fetchEnum()` guard'ıyla yeniden yüklenir.
89
- invalidateStaleGroups() {
90
- // App-init snapshot: yalnızca localStorage'dan yüklenen gruplar kontrol edilir. Yanıt gelene
91
- // kadar consumer'ların fetchEnum ile yüklediği taze gruplar taranmaz/silinmez (aksi halde
92
- // taze grup silinir ve kalıcı per-component fetch guard'ları onu bir daha çekmeyebilir).
93
- const keysToCheck = Object.keys(this.selectionGroups());
94
- if (keysToCheck.length === 0)
95
- return;
96
- const hostApi = API_CONFIGS.api.replace(/\/[^\/]+\/v1$/, `/host/v1`);
97
- this.http
98
- .get(hostApi + '/selection-group/versions')
99
- .pipe(take(1))
100
- .subscribe({
101
- next: (versions) => {
102
- // Boş/bozuk yanıt güvenlik şeridi: aşağıdaki "listede olmayanı sil" kuralı
103
- // boş listeyle tüm cache'i yanlışlıkla boşaltmasın.
104
- if (!versions?.length)
105
- return;
106
- const latest = new Map(versions.map((v) => [v.groupName, v.version]));
107
- let changed = false;
108
- const next = { ...this.selectionGroups() };
109
- keysToCheck.forEach((key) => {
110
- const group = next[key];
111
- if (!group)
112
- return;
113
- const separatorIndex = key.indexOf('~');
114
- if (separatorIndex === -1)
115
- return;
116
- const serverVersion = latest.get(key.substring(0, separatorIndex));
117
- // serverVersion == null: grup /versions listesinde yok → sunucudan silinmiş /
118
- // yeniden adlandırılmış demektir (endpoint Fixed grupların tam listesini döner)
119
- // → o da evict edilir; kalırsa kaldırılmış enum değerleri süresiz render edilir.
120
- if (serverVersion == null || serverVersion !== group.version) {
121
- delete next[key];
122
- this.loaded.delete(key);
123
- this.failures.delete(key);
124
- // Uçuştaki fetch'in flag'i korunur: silinirse ikinci bir consumer guard'ı
125
- // geçip duplicate /load atar ve export-overlay'in isLoading poll'ü grubu
126
- // beklemeden erken geçer. Yanıt geldiğinde flag'i fetchEnum kendisi yönetir.
127
- if (!this.loading.get(key)) {
128
- this.loading.delete(key);
129
- }
130
- changed = true;
131
- }
132
- });
133
- if (changed) {
134
- this.selectionGroups.set(next);
135
- this.persistToLocalStorage();
136
- }
137
- },
138
- error: () => {
139
- // versions endpoint yok/erişilemez: sessizce mevcut cache ile devam.
140
- }
141
- });
142
- }
143
- fetchEnum(groupName, parentSelectionKey = 'ALL') {
144
- const key = groupName + '~' + parentSelectionKey;
145
- if (this.loaded.get(key) || this.loading.get(key))
146
- return;
147
- if ((this.failures.get(key) ?? 0) >= MAX_FETCH_FAILURES)
148
- return;
149
- const payload = {
150
- groupName,
151
- parentSelectionKey
152
- };
153
- this.loading.set(key, true);
154
- this.loaded.set(key, false);
155
- const hostApi = API_CONFIGS.api.replace(/\/[^\/]+\/v1$/, `/host/v1`);
156
- this.http
157
- .post(hostApi + '/selection-group/load', payload)
158
- .pipe(take(1))
159
- .subscribe({
160
- next: (selectionGroup) => {
161
- this.loading.set(key, false);
162
- this.loaded.set(key, true);
163
- this.failures.delete(key);
164
- this.selectionGroups.update((groups) => ({
165
- ...groups,
166
- [key]: selectionGroup
167
- }));
168
- this.persistToLocalStorage();
169
- },
170
- // HTTP hatasında loading'i sıfırla: aksi halde guard (loaded/loading) bu enum'u
171
- // kilitler. loading/loaded bridge'de cross-MFE SHARED olduğundan, tek bir anlık hata
172
- // bu enum'u TÜM remote'larda hard-reload'a kadar bir daha çekilemez yapardı. loading=false
173
- // → sonraki fetchEnum (component init/retry) yeniden deneyebilir. loaded zaten false kalır.
174
- // Deneme sayısı MAX_FETCH_FAILURES ile sınırlı: kalıcı hatada sonsuz retry önlenir.
175
- error: () => {
176
- this.loading.set(key, false);
177
- this.failures.set(key, (this.failures.get(key) ?? 0) + 1);
178
- }
179
- });
180
- }
181
- // key formatı: `groupName~parentSelectionKey` (fetchEnum'daki composite key ile aynı).
182
- // Direkt olarak groupName geçilirse Map'te eşleşme olmaz ve her zaman false döner.
183
- isLoading(key) {
184
- return this.loading.get(key) ?? false;
185
- }
186
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectionGroupService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
187
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectionGroupService, providedIn: 'root' }); }
188
- }
189
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectionGroupService, decorators: [{
190
- type: Injectable,
191
- args: [{
192
- providedIn: 'root'
193
- }]
194
- }], ctorParameters: () => [{ type: i1.HttpClient }] });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWdyb3VwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3RoZW1lL2xheW91dC9zZXJ2aWNlL3NlbGVjdGlvbi1ncm91cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFJbkQsK0ZBQStGO0FBQy9GLCtGQUErRjtBQUMvRiwrRkFBK0Y7QUFDL0YsMkNBQTJDO0FBQzNDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBSzdCLE1BQU0sT0FBTyxxQkFBcUI7SUFTakMsWUFBNkIsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQVI3QywyRkFBMkY7UUFDM0YsMEZBQTBGO1FBQzFGLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUV4QixZQUFPLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDO1FBQ2xDLFdBQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDO1FBQ2hDLGFBQVEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7UUFHcEQseUZBQXlGO1FBQ3pGLCtGQUErRjtRQUMvRixrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDbkMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNGLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0Ys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Q0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDM0QsQ0FBQztTQUNELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx1RkFBdUY7SUFDdkYsbUZBQW1GO0lBQ25GLFNBQVMsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQ3ZDLENBQUM7OEdBNUxXLHFCQUFxQjtrSEFBckIscUJBQXFCLGNBRnJCLE1BQU07OzJGQUVOLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBicmlkZ2UgfSBmcm9tICdhcmlsL2Jvb3QvYnJpZGdlJztcclxuaW1wb3J0IHsgQVBJX0NPTkZJR1MgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwaSc7XHJcblxyXG5pbXBvcnQgeyBTZWxlY3Rpb25Hcm91cERUTywgU2VsZWN0aW9uR3JvdXBWZXJzaW9uRFRPLCBTZWxlY3Rpb25SZXF1ZXN0RFRPIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2ludGVyZmFjZXMnO1xyXG5cclxuLy8gS2V5IGJhxZ/EsW5hIG1ha3NpbXVtIGFyZMSxxZ/EsWsgZmV0Y2ggaGF0YXPEsTogbGltaXQgYcWfxLFsxLFuY2EgbyBrZXkgb3R1cnVtIGJveXUgeWVuaWRlbiBkZW5lbm1lei5cclxuLy8gU8SxbsSxcnPEsXogcmV0cnknZGEga2FsxLFjxLEgaGF0YSB2ZXJlbiBiaXIgZ3J1cCAow7Zybi4gc2lsaW5tacWfIGdydXAg4oaSIDQwNCksIGRpxJ9lciBncnVwbGFyxLFuIGhlclxyXG4vLyBiYcWfYXLEsWzEsSB5w7xrbGVtZXNpbmRlIChtYXAgZ8O8bmNlbGxlbWVzaSB0w7xtIGVudW0gY29tcHV0ZWQnbGFyxLFuxLEgeWVuaWRlbiDDp2FsxLHFn3TEsXLEsXIpIHllbmlkZW5cclxuLy8gUE9TVCBlZGlsaXJkaSDihpIgaXN0ZWsvY29uc29sZSBmxLFydMSxbmFzxLEuXHJcbmNvbnN0IE1BWF9GRVRDSF9GQUlMVVJFUyA9IDM7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcblx0cHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25Hcm91cFNlcnZpY2Uge1xyXG5cdC8vIFN0YXRlIGNyb3NzLU1GRSBwYXlsYcWfxLFtbMSxOiBicmlkZ2UgZ2xvYmFsVGhpcy1zaW5nbGV0b24nxLFuZGEgeWHFn2FyIChia3ouIG1mZS1icmlkZ2UudHMpLlxyXG5cdC8vIFNlcnZpcyBpbnN0YW5jZSfEsSBNRkUvdGFiIGJhxZ/EsW5hIMOnb8SfYWxzYSBkYSB0w7xtIG9rdW1hL3lhem1hIHRlayBicmlkZ2Ugc3RhdGUnaW5lIGdpZGVyLlxyXG5cdHNlbGVjdGlvbkdyb3VwcyA9IGJyaWRnZS5zZWxlY3Rpb25Hcm91cHM7XHJcblxyXG5cdHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZyA9IGJyaWRnZS5zZWxlY3Rpb25Mb2FkaW5nO1xyXG5cdHByaXZhdGUgcmVhZG9ubHkgbG9hZGVkID0gYnJpZGdlLnNlbGVjdGlvbkxvYWRlZDtcclxuXHRwcml2YXRlIHJlYWRvbmx5IGZhaWx1cmVzID0gYnJpZGdlLnNlbGVjdGlvbkZhaWx1cmVzO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQpIHtcclxuXHRcdC8vIGxvYWRTdGF0ZXMgKyBpbnZhbGlkYXRlIHlhbG7EsXpjYSBpbGsgaW5zdGFuY2UndGEgKGNyb3NzLU1GRSBiaXIga2V6KTogdGVrIGxvY2FsU3RvcmFnZVxyXG5cdFx0Ly8gecO8a2xlbWVzaSwgdGVrIGAvdmVyc2lvbnNgIMOnYcSfcsSxc8SxLiBlZmZlY3QgaGVyIGluc3RhbmNlJ3RhIGt1cnVsdXIgYW1hIGhlcHNpIGF5bsSxIHBheWxhxZ/EsWxhblxyXG5cdFx0Ly8gc3RhdGUnaSB5YXpkxLHEn8SxbmRhbiBlem1lIG9sbWF6LlxyXG5cdFx0aWYgKCFicmlkZ2Uuc2VsZWN0aW9uSW5pdGlhbGl6ZWQpIHtcclxuXHRcdFx0YnJpZGdlLnNlbGVjdGlvbkluaXRpYWxpemVkID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5sb2FkU3RhdGVzRnJvbUxvY2FsU3RvcmFnZSgpO1xyXG5cdFx0XHR0aGlzLmludmFsaWRhdGVTdGFsZUdyb3VwcygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gbG9jYWxTdG9yYWdlJ2Egc2xpbSBjYWNoZSB5YXphci4gYGVmZmVjdGAgWUVSxLBORSBiaWxpbsOnbGkgb2xhcmFrIGRvxJ9ydWRhbiDDp2HEn3LEsWzEsXI6IHNpZ25hbCdpXHJcblx0Ly8gZGXEn2nFn3RpcmVuIGhlciB5ZXIgKGZldGNoRW51bSwgaW52YWxpZGF0ZVN0YWxlR3JvdXBzKSBwZXJzaXN0J2kgYcOnxLFrw6dhIHRldGlrbGVyLiBOT1Q6IHdlYnBhY2sgTUZcclxuXHQvLyBjb25maWcnaXlsZSBgQGFuZ3VsYXIvY29yZWAgYXJ0xLFrIHNpbmdsZXRvbiBzaGFyZWQgb2xkdcSfdW5kYW4gZWZmZWN0LXRhYmFubMSxIHBlcnNpc3QgZGUgw6dhbMSxxZ/EsXJkxLE7XHJcblx0Ly8geWluZSBkZSBhw6fEsWsvw7ZuZ8O2csO8bGViaWxpciBvbG1hc8SxIChlZmZlY3QgacOnaW5kZSBnaXpsaSBzaWduYWwtd3JpdGUgKyBORzA2MDAgcmlza2kgb2xtYW1hc8SxKSBpw6dpblxyXG5cdC8vIGRvxJ9ydWRhbiDDp2HEn3LEsSB0ZXJjaWggZWRpbGRpLlxyXG5cdHByaXZhdGUgcGVyc2lzdFRvTG9jYWxTdG9yYWdlKCkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3Qgc2xpbSA9IHRoaXMuc2xpbUZvclN0b3JhZ2UodGhpcy5zZWxlY3Rpb25Hcm91cHMoKSk7XHJcblx0XHRcdGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzZWxlY3Rpb24tZ3JvdXBzJywgYnRvYShlbmNvZGVVUkkoSlNPTi5zdHJpbmdpZnkoc2xpbSkpKSk7XHJcblx0XHR9IGNhdGNoIHtcclxuXHRcdFx0Ly8gUXVvdGFFeGNlZWRlZEVycm9yIHZiLiDihpIgZXNraSBjYWNoZSdpIGtvcnUsIHllbmkgeWF6xLFtxLEgc2Vzc2l6Y2UgYXRsYS5cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbG9hZFN0YXRlc0Zyb21Mb2NhbFN0b3JhZ2UoKSB7XHJcblx0XHRjb25zdCBzZWxlY3Rpb25Hcm91cHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2VsZWN0aW9uLWdyb3VwcycpO1xyXG5cclxuXHRcdGlmIChzZWxlY3Rpb25Hcm91cHMpIHtcclxuXHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRjb25zdCBkZWNvZGVkRGF0YSA9IGRlY29kZVVSSShhdG9iKHNlbGVjdGlvbkdyb3VwcykpO1xyXG5cdFx0XHRcdC8vIER5bmFtaWMgZ3J1cGxhciB6YXRlbiBwZXJzaXN0IGVkaWxtaXlvciAoc2xpbUZvclN0b3JhZ2Ugb25sYXLEsSBhdGxhcikg4oaSIGVrc3RyYVxyXG5cdFx0XHRcdC8vIGZpbHRyZSBnZXJla21lejsgbG9jYWxTdG9yYWdlIGnDp2VyacSfaSB5YWxuxLF6Y2EgRml4ZWQgZ3J1cGxhcmTEsXIuXHJcblx0XHRcdFx0Y29uc3QgcmVzdG9yZWQ6IHsgW2tleTogc3RyaW5nXTogU2VsZWN0aW9uR3JvdXBEVE8gfCBudWxsIH0gPSBKU09OLnBhcnNlKGRlY29kZWREYXRhKTtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGlvbkdyb3Vwcy5zZXQocmVzdG9yZWQpO1xyXG5cclxuXHRcdFx0XHQvLyBSZXN0b3JlIGVkaWxlbiBncnVwbGFyIGxvYWRlZCBzYXnEsWzEsXI6IGFrc2kgaGFsZGUga2/Fn3Vsc3V6IGZldGNoRW51bSDDp2HEn8SxcmFuXHJcblx0XHRcdFx0Ly8gY29uc3VtZXInbGFyIGd1YXJkJ8SxIGdlw6dpcCBoZXIgb3R1cnVtIHllbmlkZW4gw6dla2VyIChjYWNoZSBmYXlkYXPEsSBrYXlib2x1cikuXHJcblx0XHRcdFx0Ly8gU3RhbGUnbGlrIGtvbnRyb2zDvCBpbnZhbGlkYXRlU3RhbGVHcm91cHMndW4gacWfaS4gbnVsbCBlbnRyeSdsZXIgKGxlZ2FjeSkgbG9hZGVkXHJcblx0XHRcdFx0Ly8gacWfYXJldGxlbm1leiDigJQgacWfYXJldGxlbmlyc2UgbyBncnVwIGJpciBkYWhhIGhpw6cgecO8a2xlbmVtZXpkaS5cclxuXHRcdFx0XHRPYmplY3QuZW50cmllcyhyZXN0b3JlZCkuZm9yRWFjaCgoW2tleSwgZ3JvdXBdKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoZ3JvdXApIHRoaXMubG9hZGVkLnNldChrZXksIHRydWUpO1xyXG5cdFx0XHRcdH0pO1xyXG5cdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0Ly8gRHluYW1pYyBncnVwbGFyxLEgYXRsYXIgKyBGaXhlZCBncnVwbGFyxLEgeWFsbsSxemNhIHJlbmRlciAodmFsdWUvdGFibGUvcGlja2VyL2V4cG9ydCkgdmUgaW52YWxpZGF0ZVxyXG5cdC8vIGnDp2luIGdlcmVrbGkgYWxhbmxhcmEgaW5kaXJnZXIuIGxvY2FsU3RvcmFnZSdkYSBhdWRpdC9pZC9hw6fEsWtsYW1hIGdpYmkga3VsbGFuxLFsbWF5YW4gYWxhbmxhcsSxIHR1dG1hei5cclxuXHRwcml2YXRlIHNsaW1Gb3JTdG9yYWdlKGdyb3VwczogeyBba2V5OiBzdHJpbmddOiBTZWxlY3Rpb25Hcm91cERUTyB8IG51bGwgfSk6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9IHtcclxuXHRcdGNvbnN0IG91dDogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7fTtcclxuXHRcdGZvciAoY29uc3QgW2tleSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKGdyb3VwcykpIHtcclxuXHRcdFx0aWYgKCFncm91cCB8fCBncm91cC5sb2FkU3RyYXRlZ3kgPT09ICdEeW5hbWljJykgY29udGludWU7XHJcblx0XHRcdG91dFtrZXldID0ge1xyXG5cdFx0XHRcdHZlcnNpb246IGdyb3VwLnZlcnNpb24sXHJcblx0XHRcdFx0c2VsZWN0aW9uSXRlbXM6IChncm91cC5zZWxlY3Rpb25JdGVtcyA/PyBbXSkubWFwKChpdCkgPT4gKHtcclxuXHRcdFx0XHRcdHNlbGVjdGlvbktleTogaXQuc2VsZWN0aW9uS2V5LFxyXG5cdFx0XHRcdFx0c2VsZWN0aW9uRGlzcGxheTogaXQuc2VsZWN0aW9uRGlzcGxheSxcclxuXHRcdFx0XHRcdHNlbGVjdGlvbk11bHRpTGFuZ3VhZ2VEaXNwbGF5czogaXQuc2VsZWN0aW9uTXVsdGlMYW5ndWFnZURpc3BsYXlzLFxyXG5cdFx0XHRcdFx0c2hvd09yZGVyOiBpdC5zaG93T3JkZXIsXHJcblx0XHRcdFx0XHRwYXJlbnRTZWxlY3Rpb25LZXk6IGl0LnBhcmVudFNlbGVjdGlvbktleVxyXG5cdFx0XHRcdH0pKVxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG91dDtcclxuXHR9XHJcblxyXG5cdC8vIEFwcCBpbml0J3RlIGVudW0gdmVyc2lvbidsYXLEsW7EsSDDp2VraXAgbG9jYWxTdG9yYWdlJ2Rha2kgc3RhbGUgZ3J1cGxhcsSxIHRlbWl6bGVyLlxyXG5cdC8vIFNpbGluZW4gZ3J1cCwgdMO8a2V0aWNpIGNvbXBvbmVudCdsZXJpbiBgaWYgKCFzZWxlY3Rpb25Hcm91cCkgZmV0Y2hFbnVtKClgIGd1YXJkJ8SxeWxhIHllbmlkZW4gecO8a2xlbmlyLlxyXG5cdHByaXZhdGUgaW52YWxpZGF0ZVN0YWxlR3JvdXBzKCkge1xyXG5cdFx0Ly8gQXBwLWluaXQgc25hcHNob3Q6IHlhbG7EsXpjYSBsb2NhbFN0b3JhZ2UnZGFuIHnDvGtsZW5lbiBncnVwbGFyIGtvbnRyb2wgZWRpbGlyLiBZYW7EsXQgZ2VsZW5lXHJcblx0XHQvLyBrYWRhciBjb25zdW1lcidsYXLEsW4gZmV0Y2hFbnVtIGlsZSB5w7xrbGVkacSfaSB0YXplIGdydXBsYXIgdGFyYW5tYXovc2lsaW5tZXogKGFrc2kgaGFsZGVcclxuXHRcdC8vIHRhemUgZ3J1cCBzaWxpbmlyIHZlIGthbMSxY8SxIHBlci1jb21wb25lbnQgZmV0Y2ggZ3VhcmQnbGFyxLEgb251IGJpciBkYWhhIMOnZWttZXllYmlsaXIpLlxyXG5cdFx0Y29uc3Qga2V5c1RvQ2hlY2sgPSBPYmplY3Qua2V5cyh0aGlzLnNlbGVjdGlvbkdyb3VwcygpKTtcclxuXHRcdGlmIChrZXlzVG9DaGVjay5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBob3N0QXBpID0gQVBJX0NPTkZJR1MuYXBpLnJlcGxhY2UoL1xcL1teXFwvXStcXC92MSQvLCBgL2hvc3QvdjFgKTtcclxuXHJcblx0XHR0aGlzLmh0dHBcclxuXHRcdFx0LmdldDxTZWxlY3Rpb25Hcm91cFZlcnNpb25EVE9bXT4oaG9zdEFwaSArICcvc2VsZWN0aW9uLWdyb3VwL3ZlcnNpb25zJylcclxuXHRcdFx0LnBpcGUodGFrZSgxKSlcclxuXHRcdFx0LnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHZlcnNpb25zKSA9PiB7XHJcblx0XHRcdFx0XHQvLyBCb8WfL2JvenVrIHlhbsSxdCBnw7x2ZW5saWsgxZ9lcmlkaTogYcWfYcSfxLFkYWtpIFwibGlzdGVkZSBvbG1heWFuxLEgc2lsXCIga3VyYWzEsVxyXG5cdFx0XHRcdFx0Ly8gYm/FnyBsaXN0ZXlsZSB0w7xtIGNhY2hlJ2kgeWFubMSxxZ9sxLFrbGEgYm/Fn2FsdG1hc8Sxbi5cclxuXHRcdFx0XHRcdGlmICghdmVyc2lvbnM/Lmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuXHRcdFx0XHRcdGNvbnN0IGxhdGVzdCA9IG5ldyBNYXAodmVyc2lvbnMubWFwKCh2KSA9PiBbdi5ncm91cE5hbWUsIHYudmVyc2lvbl0gYXMgW3N0cmluZywgbnVtYmVyXSkpO1xyXG5cclxuXHRcdFx0XHRcdGxldCBjaGFuZ2VkID0gZmFsc2U7XHJcblx0XHRcdFx0XHRjb25zdCBuZXh0ID0geyAuLi50aGlzLnNlbGVjdGlvbkdyb3VwcygpIH07XHJcblxyXG5cdFx0XHRcdFx0a2V5c1RvQ2hlY2suZm9yRWFjaCgoa2V5KSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGdyb3VwID0gbmV4dFtrZXldO1xyXG5cdFx0XHRcdFx0XHRpZiAoIWdyb3VwKSByZXR1cm47XHJcblxyXG5cdFx0XHRcdFx0XHRjb25zdCBzZXBhcmF0b3JJbmRleCA9IGtleS5pbmRleE9mKCd+Jyk7XHJcblx0XHRcdFx0XHRcdGlmIChzZXBhcmF0b3JJbmRleCA9PT0gLTEpIHJldHVybjtcclxuXHJcblx0XHRcdFx0XHRcdGNvbnN0IHNlcnZlclZlcnNpb24gPSBsYXRlc3QuZ2V0KGtleS5zdWJzdHJpbmcoMCwgc2VwYXJhdG9ySW5kZXgpKTtcclxuXHJcblx0XHRcdFx0XHRcdC8vIHNlcnZlclZlcnNpb24gPT0gbnVsbDogZ3J1cCAvdmVyc2lvbnMgbGlzdGVzaW5kZSB5b2sg4oaSIHN1bnVjdWRhbiBzaWxpbm1pxZ8gL1xyXG5cdFx0XHRcdFx0XHQvLyB5ZW5pZGVuIGFkbGFuZMSxcsSxbG3EscWfIGRlbWVrdGlyIChlbmRwb2ludCBGaXhlZCBncnVwbGFyxLFuIHRhbSBsaXN0ZXNpbmkgZMO2bmVyKVxyXG5cdFx0XHRcdFx0XHQvLyDihpIgbyBkYSBldmljdCBlZGlsaXI7IGthbMSxcnNhIGthbGTEsXLEsWxtxLHFnyBlbnVtIGRlxJ9lcmxlcmkgc8O8cmVzaXogcmVuZGVyIGVkaWxpci5cclxuXHRcdFx0XHRcdFx0aWYgKHNlcnZlclZlcnNpb24gPT0gbnVsbCB8fCBzZXJ2ZXJWZXJzaW9uICE9PSBncm91cC52ZXJzaW9uKSB7XHJcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIG5leHRba2V5XTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmxvYWRlZC5kZWxldGUoa2V5KTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmZhaWx1cmVzLmRlbGV0ZShrZXkpO1xyXG5cdFx0XHRcdFx0XHRcdC8vIFXDp3XFn3Rha2kgZmV0Y2gnaW4gZmxhZydpIGtvcnVudXI6IHNpbGluaXJzZSBpa2luY2kgYmlyIGNvbnN1bWVyIGd1YXJkJ8SxXHJcblx0XHRcdFx0XHRcdFx0Ly8gZ2XDp2lwIGR1cGxpY2F0ZSAvbG9hZCBhdGFyIHZlIGV4cG9ydC1vdmVybGF5J2luIGlzTG9hZGluZyBwb2xsJ8O8IGdydWJ1XHJcblx0XHRcdFx0XHRcdFx0Ly8gYmVrbGVtZWRlbiBlcmtlbiBnZcOnZXIuIFlhbsSxdCBnZWxkacSfaW5kZSBmbGFnJ2kgZmV0Y2hFbnVtIGtlbmRpc2kgecO2bmV0aXIuXHJcblx0XHRcdFx0XHRcdFx0aWYgKCF0aGlzLmxvYWRpbmcuZ2V0KGtleSkpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMubG9hZGluZy5kZWxldGUoa2V5KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHRcdGlmIChjaGFuZ2VkKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc2VsZWN0aW9uR3JvdXBzLnNldChuZXh0KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5wZXJzaXN0VG9Mb2NhbFN0b3JhZ2UoKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoKSA9PiB7XHJcblx0XHRcdFx0XHQvLyB2ZXJzaW9ucyBlbmRwb2ludCB5b2svZXJpxZ9pbGVtZXo6IHNlc3NpemNlIG1ldmN1dCBjYWNoZSBpbGUgZGV2YW0uXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGZldGNoRW51bShncm91cE5hbWU6IHN0cmluZywgcGFyZW50U2VsZWN0aW9uS2V5OiBzdHJpbmcgPSAnQUxMJykge1xyXG5cdFx0Y29uc3Qga2V5ID0gZ3JvdXBOYW1lICsgJ34nICsgcGFyZW50U2VsZWN0aW9uS2V5O1xyXG5cclxuXHRcdGlmICh0aGlzLmxvYWRlZC5nZXQoa2V5KSB8fCB0aGlzLmxvYWRpbmcuZ2V0KGtleSkpIHJldHVybjtcclxuXHRcdGlmICgodGhpcy5mYWlsdXJlcy5nZXQoa2V5KSA/PyAwKSA+PSBNQVhfRkVUQ0hfRkFJTFVSRVMpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBwYXlsb2FkOiBTZWxlY3Rpb25SZXF1ZXN0RFRPID0ge1xyXG5cdFx0XHRncm91cE5hbWUsXHJcblx0XHRcdHBhcmVudFNlbGVjdGlvbktleVxyXG5cdFx0fTtcclxuXHJcblx0XHR0aGlzLmxvYWRpbmcuc2V0KGtleSwgdHJ1ZSk7XHJcblx0XHR0aGlzLmxvYWRlZC5zZXQoa2V5LCBmYWxzZSk7XHJcblxyXG5cdFx0Y29uc3QgaG9zdEFwaSA9IEFQSV9DT05GSUdTLmFwaS5yZXBsYWNlKC9cXC9bXlxcL10rXFwvdjEkLywgYC9ob3N0L3YxYCk7XHJcblxyXG5cdFx0dGhpcy5odHRwXHJcblx0XHRcdC5wb3N0PFNlbGVjdGlvbkdyb3VwRFRPPihob3N0QXBpICsgJy9zZWxlY3Rpb24tZ3JvdXAvbG9hZCcsIHBheWxvYWQpXHJcblx0XHRcdC5waXBlKHRha2UoMSkpXHJcblx0XHRcdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChzZWxlY3Rpb25Hcm91cCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5sb2FkaW5nLnNldChrZXksIGZhbHNlKTtcclxuXHRcdFx0XHRcdHRoaXMubG9hZGVkLnNldChrZXksIHRydWUpO1xyXG5cdFx0XHRcdFx0dGhpcy5mYWlsdXJlcy5kZWxldGUoa2V5KTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLnNlbGVjdGlvbkdyb3Vwcy51cGRhdGUoKGdyb3VwcykgPT4gKHtcclxuXHRcdFx0XHRcdFx0Li4uZ3JvdXBzLFxyXG5cdFx0XHRcdFx0XHRba2V5XTogc2VsZWN0aW9uR3JvdXBcclxuXHRcdFx0XHRcdH0pKTtcclxuXHJcblx0XHRcdFx0XHR0aGlzLnBlcnNpc3RUb0xvY2FsU3RvcmFnZSgpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0Ly8gSFRUUCBoYXRhc8SxbmRhIGxvYWRpbmcnaSBzxLFmxLFybGE6IGFrc2kgaGFsZGUgZ3VhcmQgKGxvYWRlZC9sb2FkaW5nKSBidSBlbnVtJ3VcclxuXHRcdFx0XHQvLyBraWxpdGxlci4gbG9hZGluZy9sb2FkZWQgYnJpZGdlJ2RlIGNyb3NzLU1GRSBTSEFSRUQgb2xkdcSfdW5kYW4sIHRlayBiaXIgYW5sxLFrIGhhdGFcclxuXHRcdFx0XHQvLyBidSBlbnVtJ3UgVMOcTSByZW1vdGUnbGFyZGEgaGFyZC1yZWxvYWQnYSBrYWRhciBiaXIgZGFoYSDDp2VraWxlbWV6IHlhcGFyZMSxLiBsb2FkaW5nPWZhbHNlXHJcblx0XHRcdFx0Ly8g4oaSIHNvbnJha2kgZmV0Y2hFbnVtIChjb21wb25lbnQgaW5pdC9yZXRyeSkgeWVuaWRlbiBkZW5leWViaWxpci4gbG9hZGVkIHphdGVuIGZhbHNlIGthbMSxci5cclxuXHRcdFx0XHQvLyBEZW5lbWUgc2F5xLFzxLEgTUFYX0ZFVENIX0ZBSUxVUkVTIGlsZSBzxLFuxLFybMSxOiBrYWzEsWPEsSBoYXRhZGEgc29uc3V6IHJldHJ5IMO2bmxlbmlyLlxyXG5cdFx0XHRcdGVycm9yOiAoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmxvYWRpbmcuc2V0KGtleSwgZmFsc2UpO1xyXG5cdFx0XHRcdFx0dGhpcy5mYWlsdXJlcy5zZXQoa2V5LCAodGhpcy5mYWlsdXJlcy5nZXQoa2V5KSA/PyAwKSArIDEpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvLyBrZXkgZm9ybWF0xLE6IGBncm91cE5hbWV+cGFyZW50U2VsZWN0aW9uS2V5YCAoZmV0Y2hFbnVtJ2Rha2kgY29tcG9zaXRlIGtleSBpbGUgYXluxLEpLlxyXG5cdC8vIERpcmVrdCBvbGFyYWsgZ3JvdXBOYW1lIGdlw6dpbGlyc2UgTWFwJ3RlIGXFn2xlxZ9tZSBvbG1heiB2ZSBoZXIgemFtYW4gZmFsc2UgZMO2bmVyLlxyXG5cdGlzTG9hZGluZyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMubG9hZGluZy5nZXQoa2V5KSA/PyBmYWxzZTtcclxuXHR9XHJcbn1cclxuIl19
@@ -1,18 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, input } from '@angular/core';
2
- import { SplitButtonModule } from 'primeng/splitbutton';
3
- import { ButtonComponent } from './button.component';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "primeng/splitbutton";
6
- export class SplitButtonComponent extends ButtonComponent {
7
- constructor() {
8
- super(...arguments);
9
- this.menu = input.required();
10
- }
11
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SplitButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
12
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.1.2", type: SplitButtonComponent, isStandalone: true, selector: "aril-split-button", inputs: { menu: { classPropertyName: "menu", publicName: "menu", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<p-splitButton [label]=\"label()\" [icon]=\"_icon()\" [styleClass]=\"_styleClass()\" [model]=\"menu()\" [disabled]=\"disabled()\">\r\n</p-splitButton>\r\n", dependencies: [{ kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i1.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13
- }
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SplitButtonComponent, decorators: [{
15
- type: Component,
16
- args: [{ standalone: true, selector: 'aril-split-button', imports: [SplitButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-splitButton [label]=\"label()\" [icon]=\"_icon()\" [styleClass]=\"_styleClass()\" [model]=\"menu()\" [disabled]=\"disabled()\">\r\n</p-splitButton>\r\n" }]
17
- }] });
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdWkvYnV0dG9uL3NyYy9zcGxpdC1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS9idXR0b24vc3JjL3NwbGl0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQVNyRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZUFBZTtJQVB6RDs7UUFRQyxTQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBYyxDQUFDO0tBQ3BDOzhHQUZZLG9CQUFvQjtrR0FBcEIsb0JBQW9CLG9PQ2RqQyw0SkFFQSwyQ0RTVyxpQkFBaUI7OzJGQUdmLG9CQUFvQjtrQkFQaEMsU0FBUztpQ0FDRyxJQUFJLFlBQ04sbUJBQW1CLFdBRXBCLENBQUMsaUJBQWlCLENBQUMsbUJBQ1gsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgU3BsaXRCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3NwbGl0YnV0dG9uJztcclxuXHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vYnV0dG9uLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHNlbGVjdG9yOiAnYXJpbC1zcGxpdC1idXR0b24nLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9zcGxpdC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG5cdGltcG9ydHM6IFtTcGxpdEJ1dHRvbk1vZHVsZV0sXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwbGl0QnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgQnV0dG9uQ29tcG9uZW50IHtcclxuXHRtZW51ID0gaW5wdXQucmVxdWlyZWQ8TWVudUl0ZW1bXT4oKTtcclxufVxyXG4iLCI8cC1zcGxpdEJ1dHRvbiBbbGFiZWxdPVwibGFiZWwoKVwiIFtpY29uXT1cIl9pY29uKClcIiBbc3R5bGVDbGFzc109XCJfc3R5bGVDbGFzcygpXCIgW21vZGVsXT1cIm1lbnUoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCI+XHJcbjwvcC1zcGxpdEJ1dHRvbj5cclxuIl19
@@ -1,124 +0,0 @@
1
- import { NgClass } from '@angular/common';
2
- import { isPlatformBrowser } from '@angular/common';
3
- import { ChangeDetectionStrategy, Component, Inject, PLATFORM_ID, input } from '@angular/core';
4
- import * as am5 from '@amcharts/amcharts5';
5
- import am5themes_Animated from '@amcharts/amcharts5/themes/Animated';
6
- import * as am5xy from '@amcharts/amcharts5/xy';
7
- import { ChartThemes } from '../../theme/theme';
8
- import * as i0 from "@angular/core";
9
- // EXAMPLE CHART DATA
10
- // testChartData = [
11
- // {
12
- // label: "col1",
13
- // value: 100000
14
- // },
15
- // {
16
- // label: "col2",
17
- // value: 160000
18
- // },
19
- // {
20
- // label: "col3",
21
- // value: 80000
22
- // }
23
- // ];
24
- export class ColumnChartComponent {
25
- constructor(platformId, zone) {
26
- this.platformId = platformId;
27
- this.zone = zone;
28
- this.data = input.required();
29
- this.chartId = input.required(); // must be given unique names for all charts. Its because angular and am5 rendering methods needs unique id to draw different canvas
30
- this.appName = input('yeap');
31
- this.chartHeight = input.required();
32
- this.chartColorSet = [];
33
- }
34
- browserOnly(f) {
35
- if (isPlatformBrowser(this.platformId)) {
36
- this.zone.runOutsideAngular(() => {
37
- f();
38
- });
39
- }
40
- }
41
- ngAfterViewInit() {
42
- // Chart code goes in here
43
- this.browserOnly(() => {
44
- switch (this.appName()) {
45
- case 'yeap':
46
- this.chartColorSet = ChartThemes.getYeapAppColors();
47
- break;
48
- case 'thor':
49
- this.chartColorSet = ChartThemes.getThorAppColors();
50
- break;
51
- case 'lena':
52
- this.chartColorSet = ChartThemes.getLenaAppColors();
53
- break;
54
- case 'billing':
55
- this.chartColorSet = ChartThemes.getThorAppColors();
56
- break;
57
- default:
58
- this.chartColorSet = ChartThemes.getYeapAppColors();
59
- break;
60
- }
61
- const root = am5.Root.new(this.chartId());
62
- root._logo?.dispose();
63
- root.setThemes([am5themes_Animated.new(root)]);
64
- const chart = root.container.children.push(am5xy.XYChart.new(root, {
65
- panY: false,
66
- layout: root.verticalLayout
67
- }));
68
- const yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
69
- renderer: am5xy.AxisRendererY.new(root, {})
70
- }));
71
- const xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, {
72
- renderer: am5xy.AxisRendererX.new(root, {}),
73
- categoryField: 'label'
74
- }));
75
- xAxis.data.setAll(this.data());
76
- const series = chart.series.push(am5xy.ColumnSeries.new(root, {
77
- xAxis: xAxis,
78
- yAxis: yAxis,
79
- valueYField: 'value',
80
- categoryXField: 'label',
81
- stacked: true
82
- }));
83
- series.data.setAll(this.data());
84
- xAxis.data.setAll(this.data());
85
- series.columns.template.setAll({
86
- stroke: am5.color(0xffffff),
87
- strokeWidth: 2
88
- });
89
- series.columns.template.adapters.add('fill', (fill, target) => {
90
- const dataContext = target.dataItem?.dataContext;
91
- if (dataContext) {
92
- const index = this.data().findIndex((item) => item.label === dataContext.label);
93
- return am5.color(this.chartColorSet[index % this.chartColorSet.length]); // Sıralı renk seçimi
94
- }
95
- return fill;
96
- });
97
- });
98
- }
99
- ngOnDestroy() {
100
- // Clean up chart when the component is removed
101
- this.browserOnly(() => {
102
- if (this.root) {
103
- this.root.dispose();
104
- }
105
- });
106
- }
107
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ColumnChartComponent, deps: [{ token: PLATFORM_ID }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
108
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.1.2", type: ColumnChartComponent, isStandalone: true, selector: "aril-column-chart", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, chartId: { classPropertyName: "chartId", publicName: "chartId", isSignal: true, isRequired: true, transformFunction: null }, appName: { classPropertyName: "appName", publicName: "appName", isSignal: true, isRequired: false, transformFunction: null }, chartHeight: { classPropertyName: "chartHeight", publicName: "chartHeight", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `<div style="width: 100%; height:{{ chartHeight() }}px;" id="{{ chartId() }}"></div>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
109
- }
110
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ColumnChartComponent, decorators: [{
111
- type: Component,
112
- args: [{
113
- standalone: true,
114
- selector: 'aril-column-chart',
115
- // templateUrl: './column-chart.component.html',
116
- template: `<div style="width: 100%; height:{{ chartHeight() }}px;" id="{{ chartId() }}"></div>`,
117
- imports: [NgClass],
118
- changeDetection: ChangeDetectionStrategy.OnPush
119
- }]
120
- }], ctorParameters: () => [{ type: Object, decorators: [{
121
- type: Inject,
122
- args: [PLATFORM_ID]
123
- }] }, { type: i0.NgZone }] });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdWkvY2hhcnRzL3NyYy9hbUNoYXJ0cy9jb2x1bW4vY29sdW1uLWNoYXJ0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV2RyxPQUFPLEtBQUssR0FBRyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sa0JBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFDckUsT0FBTyxLQUFLLEtBQUssTUFBTSx3QkFBd0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBVWhELHFCQUFxQjtBQUNyQixvQkFBb0I7QUFDcEIsS0FBSztBQUNMLG1CQUFtQjtBQUNuQixrQkFBa0I7QUFDbEIsTUFBTTtBQUNOLEtBQUs7QUFDTCxtQkFBbUI7QUFDbkIsa0JBQWtCO0FBQ2xCLE1BQU07QUFDTixLQUFLO0FBQ0wsbUJBQW1CO0FBQ25CLGlCQUFpQjtBQUNqQixLQUFLO0FBQ0wsS0FBSztBQVVMLE1BQU0sT0FBTyxvQkFBb0I7SUFHaEMsWUFBeUMsVUFBa0IsRUFBVSxJQUFZO1FBQXhDLGVBQVUsR0FBVixVQUFVLENBQVE7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBRWpGLFNBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFlLENBQUM7UUFDckMsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVUsQ0FBQyxDQUFDLG9JQUFvSTtRQUN4SyxZQUFPLEdBQUcsS0FBSyxDQUFXLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLGdCQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBQ3ZDLGtCQUFhLEdBQWEsRUFBRSxDQUFDO0lBTnVELENBQUM7SUFRckYsV0FBVyxDQUFDLENBQWE7UUFDeEIsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtnQkFDaEMsQ0FBQyxFQUFFLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUM7SUFDRixDQUFDO0lBRUQsZUFBZTtRQUNkLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNyQixRQUFRLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLE1BQU07b0JBQ1YsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDcEQsTUFBTTtnQkFDUCxLQUFLLE1BQU07b0JBQ1YsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDcEQsTUFBTTtnQkFDUCxLQUFLLE1BQU07b0JBQ1YsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDcEQsTUFBTTtnQkFDUCxLQUFLLFNBQVM7b0JBQ2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDcEQsTUFBTTtnQkFDUDtvQkFDQyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUNwRCxNQUFNO1lBQ1IsQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZCLElBQUksRUFBRSxLQUFLO2dCQUNYLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYzthQUMzQixDQUFDLENBQ0YsQ0FBQztZQUVGLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUM3QixLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pCLFFBQVEsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2FBQzNDLENBQUMsQ0FDRixDQUFDO1lBRUYsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQzdCLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDNUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQzNDLGFBQWEsRUFBRSxPQUFPO2FBQ3RCLENBQUMsQ0FDRixDQUFDO1lBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFFL0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQy9CLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDNUIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osS0FBSyxFQUFFLEtBQUs7Z0JBQ1osV0FBVyxFQUFFLE9BQU87Z0JBQ3BCLGNBQWMsRUFBRSxPQUFPO2dCQUN2QixPQUFPLEVBQUUsSUFBSTthQUNiLENBQUMsQ0FDRixDQUFDO1lBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFFL0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUM5QixNQUFNLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQzNCLFdBQVcsRUFBRSxDQUFDO2FBQ2QsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUU7Z0JBQzdELE1BQU0sV0FBVyxHQUFRLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDO2dCQUN0RCxJQUFJLFdBQVcsRUFBRSxDQUFDO29CQUNqQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDaEYsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtnQkFDL0YsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQztZQUNiLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNWLCtDQUErQztRQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JCLENBQUM7UUFDRixDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7OEdBcEdXLG9CQUFvQixrQkFHWixXQUFXO2tHQUhuQixvQkFBb0IsaWxCQUp0QixxRkFBcUY7OzJGQUluRixvQkFBb0I7a0JBUmhDLFNBQVM7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLGdEQUFnRDtvQkFDaEQsUUFBUSxFQUFFLHFGQUFxRjtvQkFDL0YsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0M7OzBCQUlhLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEluamVjdCwgTmdab25lLCBQTEFURk9STV9JRCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCAqIGFzIGFtNSBmcm9tICdAYW1jaGFydHMvYW1jaGFydHM1JztcclxuaW1wb3J0IGFtNXRoZW1lc19BbmltYXRlZCBmcm9tICdAYW1jaGFydHMvYW1jaGFydHM1L3RoZW1lcy9BbmltYXRlZCc7XHJcbmltcG9ydCAqIGFzIGFtNXh5IGZyb20gJ0BhbWNoYXJ0cy9hbWNoYXJ0czUveHknO1xyXG5cclxuaW1wb3J0IHsgQ2hhcnRUaGVtZXMgfSBmcm9tICcuLi8uLi90aGVtZS90aGVtZSc7XHJcblxyXG5pbnRlcmZhY2UgZGF0YUl0ZW1zIHtcclxuXHRsYWJlbDogc3RyaW5nOyAvLyB0aGlzIGZpZWxkIGNhbiB1c2UgYXMgY2F0ZWdvcnlcclxuXHR2YWx1ZTogbnVtYmVyO1xyXG5cdHZhbHVlMj86IG51bWJlcjtcclxufVxyXG5cclxudHlwZSBhcHBOYW1lcyA9ICd0aG9yJyB8ICdsZW5hJyB8ICdiaWxsaW5nJyB8ICd5ZWFwJztcclxuXHJcbi8vIEVYQU1QTEUgQ0hBUlQgREFUQVxyXG4vLyB0ZXN0Q2hhcnREYXRhID0gW1xyXG4vLyBcdHtcclxuLy8gXHRcdGxhYmVsOiBcImNvbDFcIixcclxuLy8gXHRcdHZhbHVlOiAxMDAwMDBcclxuLy8gXHR9LFxyXG4vLyBcdHtcclxuLy8gXHRcdGxhYmVsOiBcImNvbDJcIixcclxuLy8gXHRcdHZhbHVlOiAxNjAwMDBcclxuLy8gXHR9LFxyXG4vLyBcdHtcclxuLy8gXHRcdGxhYmVsOiBcImNvbDNcIixcclxuLy8gXHRcdHZhbHVlOiA4MDAwMFxyXG4vLyBcdH1cclxuLy8gXTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0c2VsZWN0b3I6ICdhcmlsLWNvbHVtbi1jaGFydCcsXHJcblx0Ly8gdGVtcGxhdGVVcmw6ICcuL2NvbHVtbi1jaGFydC5jb21wb25lbnQuaHRtbCcsXHJcblx0dGVtcGxhdGU6IGA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDp7eyBjaGFydEhlaWdodCgpIH19cHg7XCIgaWQ9XCJ7eyBjaGFydElkKCkgfX1cIj48L2Rpdj5gLFxyXG5cdGltcG9ydHM6IFtOZ0NsYXNzXSxcclxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29sdW1uQ2hhcnRDb21wb25lbnQge1xyXG5cdHByaXZhdGUgcm9vdCE6IGFtNS5Sb290O1xyXG5cclxuXHRjb25zdHJ1Y3RvcihASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdCwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHt9XHJcblxyXG5cdGRhdGEgPSBpbnB1dC5yZXF1aXJlZDxkYXRhSXRlbXNbXT4oKTtcclxuXHRjaGFydElkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpOyAvLyBtdXN0IGJlIGdpdmVuIHVuaXF1ZSBuYW1lcyBmb3IgYWxsIGNoYXJ0cy4gSXRzIGJlY2F1c2UgYW5ndWxhciBhbmQgYW01IHJlbmRlcmluZyBtZXRob2RzIG5lZWRzIHVuaXF1ZSBpZCB0byBkcmF3IGRpZmZlcmVudCBjYW52YXNcclxuXHRhcHBOYW1lID0gaW5wdXQ8YXBwTmFtZXM+KCd5ZWFwJyk7XHJcblx0Y2hhcnRIZWlnaHQgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XHJcblx0Y2hhcnRDb2xvclNldDogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0YnJvd3Nlck9ubHkoZjogKCkgPT4gdm9pZCkge1xyXG5cdFx0aWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcclxuXHRcdFx0dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcclxuXHRcdFx0XHRmKCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bmdBZnRlclZpZXdJbml0KCkge1xyXG5cdFx0Ly8gQ2hhcnQgY29kZSBnb2VzIGluIGhlcmVcclxuXHRcdHRoaXMuYnJvd3Nlck9ubHkoKCkgPT4ge1xyXG5cdFx0XHRzd2l0Y2ggKHRoaXMuYXBwTmFtZSgpKSB7XHJcblx0XHRcdFx0Y2FzZSAneWVhcCc6XHJcblx0XHRcdFx0XHR0aGlzLmNoYXJ0Q29sb3JTZXQgPSBDaGFydFRoZW1lcy5nZXRZZWFwQXBwQ29sb3JzKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlICd0aG9yJzpcclxuXHRcdFx0XHRcdHRoaXMuY2hhcnRDb2xvclNldCA9IENoYXJ0VGhlbWVzLmdldFRob3JBcHBDb2xvcnMoKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgJ2xlbmEnOlxyXG5cdFx0XHRcdFx0dGhpcy5jaGFydENvbG9yU2V0ID0gQ2hhcnRUaGVtZXMuZ2V0TGVuYUFwcENvbG9ycygpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0Y2FzZSAnYmlsbGluZyc6XHJcblx0XHRcdFx0XHR0aGlzLmNoYXJ0Q29sb3JTZXQgPSBDaGFydFRoZW1lcy5nZXRUaG9yQXBwQ29sb3JzKCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdFx0dGhpcy5jaGFydENvbG9yU2V0ID0gQ2hhcnRUaGVtZXMuZ2V0WWVhcEFwcENvbG9ycygpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3Qgcm9vdCA9IGFtNS5Sb290Lm5ldyh0aGlzLmNoYXJ0SWQoKSk7XHJcblx0XHRcdHJvb3QuX2xvZ28/LmRpc3Bvc2UoKTtcclxuXHRcdFx0cm9vdC5zZXRUaGVtZXMoW2FtNXRoZW1lc19BbmltYXRlZC5uZXcocm9vdCldKTtcclxuXHJcblx0XHRcdGNvbnN0IGNoYXJ0ID0gcm9vdC5jb250YWluZXIuY2hpbGRyZW4ucHVzaChcclxuXHRcdFx0XHRhbTV4eS5YWUNoYXJ0Lm5ldyhyb290LCB7XHJcblx0XHRcdFx0XHRwYW5ZOiBmYWxzZSxcclxuXHRcdFx0XHRcdGxheW91dDogcm9vdC52ZXJ0aWNhbExheW91dFxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRjb25zdCB5QXhpcyA9IGNoYXJ0LnlBeGVzLnB1c2goXHJcblx0XHRcdFx0YW01eHkuVmFsdWVBeGlzLm5ldyhyb290LCB7XHJcblx0XHRcdFx0XHRyZW5kZXJlcjogYW01eHkuQXhpc1JlbmRlcmVyWS5uZXcocm9vdCwge30pXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdGNvbnN0IHhBeGlzID0gY2hhcnQueEF4ZXMucHVzaChcclxuXHRcdFx0XHRhbTV4eS5DYXRlZ29yeUF4aXMubmV3KHJvb3QsIHtcclxuXHRcdFx0XHRcdHJlbmRlcmVyOiBhbTV4eS5BeGlzUmVuZGVyZXJYLm5ldyhyb290LCB7fSksXHJcblx0XHRcdFx0XHRjYXRlZ29yeUZpZWxkOiAnbGFiZWwnXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdFx0eEF4aXMuZGF0YS5zZXRBbGwodGhpcy5kYXRhKCkpO1xyXG5cclxuXHRcdFx0Y29uc3Qgc2VyaWVzID0gY2hhcnQuc2VyaWVzLnB1c2goXHJcblx0XHRcdFx0YW01eHkuQ29sdW1uU2VyaWVzLm5ldyhyb290LCB7XHJcblx0XHRcdFx0XHR4QXhpczogeEF4aXMsXHJcblx0XHRcdFx0XHR5QXhpczogeUF4aXMsXHJcblx0XHRcdFx0XHR2YWx1ZVlGaWVsZDogJ3ZhbHVlJyxcclxuXHRcdFx0XHRcdGNhdGVnb3J5WEZpZWxkOiAnbGFiZWwnLFxyXG5cdFx0XHRcdFx0c3RhY2tlZDogdHJ1ZVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHRzZXJpZXMuZGF0YS5zZXRBbGwodGhpcy5kYXRhKCkpO1xyXG5cdFx0XHR4QXhpcy5kYXRhLnNldEFsbCh0aGlzLmRhdGEoKSk7XHJcblxyXG5cdFx0XHRzZXJpZXMuY29sdW1ucy50ZW1wbGF0ZS5zZXRBbGwoe1xyXG5cdFx0XHRcdHN0cm9rZTogYW01LmNvbG9yKDB4ZmZmZmZmKSxcclxuXHRcdFx0XHRzdHJva2VXaWR0aDogMlxyXG5cdFx0XHR9KTtcclxuXHJcblx0XHRcdHNlcmllcy5jb2x1bW5zLnRlbXBsYXRlLmFkYXB0ZXJzLmFkZCgnZmlsbCcsIChmaWxsLCB0YXJnZXQpID0+IHtcclxuXHRcdFx0XHRjb25zdCBkYXRhQ29udGV4dDogYW55ID0gdGFyZ2V0LmRhdGFJdGVtPy5kYXRhQ29udGV4dDtcclxuXHRcdFx0XHRpZiAoZGF0YUNvbnRleHQpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGluZGV4ID0gdGhpcy5kYXRhKCkuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmxhYmVsID09PSBkYXRhQ29udGV4dC5sYWJlbCk7XHJcblx0XHRcdFx0XHRyZXR1cm4gYW01LmNvbG9yKHRoaXMuY2hhcnRDb2xvclNldFtpbmRleCAlIHRoaXMuY2hhcnRDb2xvclNldC5sZW5ndGhdKTsgLy8gU8SxcmFsxLEgcmVuayBzZcOnaW1pXHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHJldHVybiBmaWxsO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHQvLyBDbGVhbiB1cCBjaGFydCB3aGVuIHRoZSBjb21wb25lbnQgaXMgcmVtb3ZlZFxyXG5cdFx0dGhpcy5icm93c2VyT25seSgoKSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLnJvb3QpIHtcclxuXHRcdFx0XHR0aGlzLnJvb3QuZGlzcG9zZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIl19