@acorex/core 6.5.70 → 6.5.72

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 (111) hide show
  1. package/README.md +6 -2
  2. package/esm2022/acorex-core.mjs +5 -0
  3. package/esm2022/index.mjs +44 -0
  4. package/esm2022/lib/classes/base-page.class.mjs +26 -0
  5. package/esm2022/lib/classes/color.class.mjs +49 -0
  6. package/esm2022/lib/classes/datetime.class.mjs +323 -0
  7. package/esm2022/lib/classes/menu.class.mjs +35 -0
  8. package/esm2022/lib/classes/navigator.class.mjs +2 -0
  9. package/esm2022/lib/classes/popup.class.mjs +2 -0
  10. package/esm2022/lib/classes/promise.class.mjs +21 -0
  11. package/esm2022/lib/classes/sectionlist.class.mjs +2 -0
  12. package/esm2022/lib/classes/select.class.mjs +8 -0
  13. package/esm2022/lib/core.module.mjs +27 -0
  14. package/esm2022/lib/error/error.class.mjs +2 -0
  15. package/esm2022/lib/error/error.module.mjs +19 -0
  16. package/esm2022/lib/error/error.service.mjs +22 -0
  17. package/esm2022/lib/events/keyboard.mjs +2 -0
  18. package/esm2022/lib/http/http-error.class.mjs +2 -0
  19. package/esm2022/lib/http/http-events.interceptor.mjs +3 -0
  20. package/esm2022/lib/http/http-request.class.mjs +2 -0
  21. package/esm2022/lib/http/http-result.class.mjs +25 -0
  22. package/esm2022/lib/http/http.module.mjs +35 -0
  23. package/esm2022/lib/http/http.service.mjs +148 -0
  24. package/{esm2020 → esm2022}/lib/locale/en.json +1 -1
  25. package/esm2022/lib/pipe/datetime.pipe.mjs +25 -0
  26. package/esm2022/lib/pipe/htmlToText.pipe.mjs +25 -0
  27. package/esm2022/lib/platform/index.mjs +2 -0
  28. package/esm2022/lib/platform/platform.service.mjs +152 -0
  29. package/esm2022/lib/services/config.mjs +29 -0
  30. package/esm2022/lib/services/event.service.mjs +34 -0
  31. package/esm2022/lib/services/navigator.service.mjs +10 -0
  32. package/esm2022/lib/services/storage.service.mjs +16 -0
  33. package/esm2022/lib/translator/translator.mjs +26 -0
  34. package/esm2022/lib/translator/translator.module.mjs +25 -0
  35. package/esm2022/lib/translator/translator.pipe.mjs +24 -0
  36. package/esm2022/lib/translator/translator.service.mjs +21 -0
  37. package/esm2022/lib/utils/array/array-util.mjs +133 -0
  38. package/esm2022/lib/utils/html/html-util.mjs +200 -0
  39. package/esm2022/lib/utils/html/html.module.mjs +19 -0
  40. package/esm2022/lib/utils/math/math-util.mjs +6 -0
  41. package/esm2022/lib/utils/object/object-util.mjs +83 -0
  42. package/esm2022/lib/utils/render/on-demand-preload-strategy.service.mjs +21 -0
  43. package/esm2022/lib/utils/render/render.service.mjs +109 -0
  44. package/esm2022/lib/utils/render/rendering.module.mjs +35 -0
  45. package/esm2022/lib/utils/scroll/scroll.directive.mjs +56 -0
  46. package/esm2022/lib/utils/scroll/scroll.module.mjs +19 -0
  47. package/esm2022/lib/utils/separator/separator.module.mjs +19 -0
  48. package/esm2022/lib/utils/separator/separator.pipe.mjs +33 -0
  49. package/{fesm2020 → fesm2022}/acorex-core.mjs +241 -196
  50. package/fesm2022/acorex-core.mjs.map +1 -0
  51. package/lib/classes/datetime.class.d.ts +4 -4
  52. package/lib/pipe/datetime.pipe.d.ts +1 -1
  53. package/lib/pipe/htmlToText.pipe.d.ts +1 -1
  54. package/lib/platform/platform.service.d.ts +4 -4
  55. package/lib/translator/translator.pipe.d.ts +1 -1
  56. package/lib/utils/html/html-util.d.ts +1 -1
  57. package/lib/utils/scroll/scroll.directive.d.ts +2 -2
  58. package/lib/utils/separator/separator.pipe.d.ts +1 -1
  59. package/package.json +14 -20
  60. package/acorex-core.d.ts +0 -5
  61. package/esm2020/acorex-core.mjs +0 -5
  62. package/esm2020/lib/classes/base-page.class.mjs +0 -28
  63. package/esm2020/lib/classes/color.class.mjs +0 -49
  64. package/esm2020/lib/classes/datetime.class.mjs +0 -314
  65. package/esm2020/lib/classes/menu.class.mjs +0 -27
  66. package/esm2020/lib/classes/navigator.class.mjs +0 -2
  67. package/esm2020/lib/classes/popup.class.mjs +0 -2
  68. package/esm2020/lib/classes/promise.class.mjs +0 -19
  69. package/esm2020/lib/classes/sectionlist.class.mjs +0 -2
  70. package/esm2020/lib/classes/select.class.mjs +0 -3
  71. package/esm2020/lib/core.module.mjs +0 -27
  72. package/esm2020/lib/error/error.class.mjs +0 -2
  73. package/esm2020/lib/error/error.module.mjs +0 -19
  74. package/esm2020/lib/error/error.service.mjs +0 -21
  75. package/esm2020/lib/events/keyboard.mjs +0 -2
  76. package/esm2020/lib/http/http-error.class.mjs +0 -2
  77. package/esm2020/lib/http/http-events.interceptor.mjs +0 -3
  78. package/esm2020/lib/http/http-request.class.mjs +0 -2
  79. package/esm2020/lib/http/http-result.class.mjs +0 -21
  80. package/esm2020/lib/http/http.module.mjs +0 -37
  81. package/esm2020/lib/http/http.service.mjs +0 -145
  82. package/esm2020/lib/pipe/datetime.pipe.mjs +0 -25
  83. package/esm2020/lib/pipe/htmlToText.pipe.mjs +0 -25
  84. package/esm2020/lib/platform/index.mjs +0 -2
  85. package/esm2020/lib/platform/platform.service.mjs +0 -150
  86. package/esm2020/lib/services/config.mjs +0 -29
  87. package/esm2020/lib/services/event.service.mjs +0 -36
  88. package/esm2020/lib/services/navigator.service.mjs +0 -10
  89. package/esm2020/lib/services/storage.service.mjs +0 -16
  90. package/esm2020/lib/translator/translator.mjs +0 -26
  91. package/esm2020/lib/translator/translator.module.mjs +0 -25
  92. package/esm2020/lib/translator/translator.pipe.mjs +0 -24
  93. package/esm2020/lib/translator/translator.service.mjs +0 -21
  94. package/esm2020/lib/utils/array/array-util.mjs +0 -133
  95. package/esm2020/lib/utils/html/html-util.mjs +0 -192
  96. package/esm2020/lib/utils/html/html.module.mjs +0 -19
  97. package/esm2020/lib/utils/math/math-util.mjs +0 -6
  98. package/esm2020/lib/utils/object/object-util.mjs +0 -83
  99. package/esm2020/lib/utils/render/on-demand-preload-strategy.service.mjs +0 -20
  100. package/esm2020/lib/utils/render/render.service.mjs +0 -103
  101. package/esm2020/lib/utils/render/rendering.module.mjs +0 -35
  102. package/esm2020/lib/utils/scroll/scroll.directive.mjs +0 -54
  103. package/esm2020/lib/utils/scroll/scroll.module.mjs +0 -19
  104. package/esm2020/lib/utils/separator/separator.module.mjs +0 -19
  105. package/esm2020/lib/utils/separator/separator.pipe.mjs +0 -33
  106. package/esm2020/public-api.mjs +0 -44
  107. package/fesm2015/acorex-core.mjs +0 -2274
  108. package/fesm2015/acorex-core.mjs.map +0 -1
  109. package/fesm2020/acorex-core.mjs.map +0 -1
  110. /package/{esm2020 → esm2022}/lib/locale/fa.json +0 -0
  111. /package/{public-api.d.ts → index.d.ts} +0 -0
@@ -0,0 +1,27 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { AXDateTimePipe } from './pipe/datetime.pipe';
3
+ import { AXEventService } from './services/event.service';
4
+ import { AXStorageService } from './services/storage.service';
5
+ import { AXScrollModule } from './utils/scroll/scroll.module';
6
+ import { AXTranslatorModule } from './translator/translator.module';
7
+ import * as i0 from "@angular/core";
8
+ const PIPES = [AXDateTimePipe];
9
+ const MODULES = [AXScrollModule, AXTranslatorModule];
10
+ const SERVICES = [AXEventService,
11
+ AXStorageService
12
+ ];
13
+ export class AXCoreModule {
14
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AXCoreModule, declarations: [AXDateTimePipe], imports: [AXScrollModule, AXTranslatorModule], exports: [AXDateTimePipe] });
16
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXCoreModule, providers: [...SERVICES], imports: [MODULES] });
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXCoreModule, decorators: [{
19
+ type: NgModule,
20
+ args: [{
21
+ declarations: [...PIPES],
22
+ imports: [...MODULES],
23
+ exports: [...PIPES],
24
+ providers: [...SERVICES]
25
+ }]
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jb3JlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQUVwRSxNQUFNLEtBQUssR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQy9CLE1BQU0sT0FBTyxHQUFHLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFDckQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxjQUFjO0lBQzlCLGdCQUFnQjtDQUNqQixDQUFDO0FBU0YsTUFBTSxPQUFPLFlBQVk7d0dBQVosWUFBWTt5R0FBWixZQUFZLGlCQWJWLGNBQWMsYUFDWixjQUFjLEVBQUUsa0JBQWtCLGFBRHBDLGNBQWM7eUdBYWhCLFlBQVksYUFGWixDQUFDLEdBQUcsUUFBUSxDQUFDLFlBRlgsT0FBTzs7NEZBSVQsWUFBWTtrQkFOeEIsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDeEIsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7b0JBQ3JCLE9BQU8sRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO29CQUNuQixTQUFTLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQVhEYXRlVGltZVBpcGUgfSBmcm9tICcuL3BpcGUvZGF0ZXRpbWUucGlwZSc7XG5pbXBvcnQgeyBBWEV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBWFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhTY3JvbGxNb2R1bGUgfSBmcm9tICcuL3V0aWxzL3Njcm9sbC9zY3JvbGwubW9kdWxlJztcbmltcG9ydCB7IEFYVHJhbnNsYXRvck1vZHVsZSB9IGZyb20gJy4vdHJhbnNsYXRvci90cmFuc2xhdG9yLm1vZHVsZSc7XG5cbmNvbnN0IFBJUEVTID0gW0FYRGF0ZVRpbWVQaXBlXTtcbmNvbnN0IE1PRFVMRVMgPSBbQVhTY3JvbGxNb2R1bGUsIEFYVHJhbnNsYXRvck1vZHVsZV07XG5jb25zdCBTRVJWSUNFUyA9IFtBWEV2ZW50U2VydmljZSxcbiAgQVhTdG9yYWdlU2VydmljZVxuXTtcblxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFsuLi5QSVBFU10sXG4gIGltcG9ydHM6IFsuLi5NT0RVTEVTXSxcbiAgZXhwb3J0czogWy4uLlBJUEVTXSxcbiAgcHJvdmlkZXJzOiBbLi4uU0VSVklDRVNdXG59KVxuZXhwb3J0IGNsYXNzIEFYQ29yZU1vZHVsZSB7IH1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9lcnJvci9lcnJvci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBBWEVycm9yIHtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgY29kZTogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,19 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { AXErrorService } from './error.service';
4
+ import * as i0 from "@angular/core";
5
+ export class AXErrorModule {
6
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXErrorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
7
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AXErrorModule, imports: [CommonModule] });
8
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXErrorModule, providers: [AXErrorService], imports: [CommonModule] });
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXErrorModule, decorators: [{
11
+ type: NgModule,
12
+ args: [{
13
+ declarations: [],
14
+ imports: [CommonModule],
15
+ exports: [],
16
+ providers: [AXErrorService],
17
+ }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3IubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZXJyb3IvZXJyb3IubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFRakQsTUFBTSxPQUFPLGFBQWE7d0dBQWIsYUFBYTt5R0FBYixhQUFhLFlBSlosWUFBWTt5R0FJYixhQUFhLGFBRlgsQ0FBQyxjQUFjLENBQUMsWUFGakIsWUFBWTs7NEZBSWIsYUFBYTtrQkFOekIsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixPQUFPLEVBQUUsRUFBRTtvQkFDWCxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUM7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBWEVycm9yU2VydmljZSB9IGZyb20gJy4vZXJyb3Iuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbXSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgICBleHBvcnRzOiBbXSxcbiAgICBwcm92aWRlcnM6IFtBWEVycm9yU2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIEFYRXJyb3JNb2R1bGUge1xuXG59XG4iXX0=
@@ -0,0 +1,22 @@
1
+ import { InjectionToken, Injectable, Injector } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export const AX_ERROR_DISPLAY_INTERCEPTOR = new InjectionToken('ax.error');
4
+ export class AXErrorService {
5
+ injector;
6
+ constructor(injector) {
7
+ this.injector = injector;
8
+ }
9
+ handle(message) {
10
+ const instance = this.injector.get(AX_ERROR_DISPLAY_INTERCEPTOR);
11
+ if (instance) {
12
+ instance.show(message);
13
+ }
14
+ }
15
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXErrorService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
16
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXErrorService, providedIn: 'root' });
17
+ }
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXErrorService, decorators: [{
19
+ type: Injectable,
20
+ args: [{ providedIn: 'root' }]
21
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3Iuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2Vycm9yL2Vycm9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUVyRSxNQUFNLENBQUMsTUFBTyw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBNEIsVUFBVSxDQUFDLENBQUM7QUFPdkcsTUFBTSxPQUFPLGNBQWM7SUFFSDtJQUFwQixZQUFvQixRQUFrQjtRQUFsQixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBRXRDLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBZTtRQUNsQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksUUFBUSxFQUFFO1lBQ1YsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQjtJQUNMLENBQUM7d0dBWFEsY0FBYzs0R0FBZCxjQUFjLGNBREYsTUFBTTs7NEZBQ2xCLGNBQWM7a0JBRDFCLFVBQVU7bUJBQUMsRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCAgQVhfRVJST1JfRElTUExBWV9JTlRFUkNFUFRPUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxBWEVycm9yRGlzcGxheUludGVyY2VwdG9yPignYXguZXJyb3InKTtcblxuZXhwb3J0IGludGVyZmFjZSBBWEVycm9yRGlzcGxheUludGVyY2VwdG9yIHtcbiAgICBzaG93KG1lc3NhZ2U6IHN0cmluZyk7XG59XG5cbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxuZXhwb3J0IGNsYXNzIEFYRXJyb3JTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7XG5cbiAgICB9XG5cbiAgICBoYW5kbGUobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbmplY3Rvci5nZXQoQVhfRVJST1JfRElTUExBWV9JTlRFUkNFUFRPUik7XG4gICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgaW5zdGFuY2Uuc2hvdyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Ym9hcmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9ldmVudHMva2V5Ym9hcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIlxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgQVhLZXlib2FyZEV2ZW50IGV4dGVuZHMgS2V5Ym9hcmRFdmVudCB7XG5cbn1cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1lcnJvci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2h0dHAvaHR0cC1lcnJvci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJSHR0cEVycm9yIHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIHN0YXR1cz86IG51bWJlcjtcbiAgICBjb2RlPzogc3RyaW5nO1xuICAgIGhhbmRsZWQ6IGJvb2xlYW47XG4gICAgZXJyb3I6IGFueSB8IG51bGxcbn0iXX0=
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const AX_HTTP_EVENT_INTERCEPTOR = new InjectionToken('ax.http.events');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1ldmVudHMuaW50ZXJjZXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9odHRwL2h0dHAtZXZlbnRzLmludGVyY2VwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxjQUFjLENBQXlCLGdCQUFnQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJSHR0cEVycm9yIH0gZnJvbSAnLi9odHRwLWVycm9yLmNsYXNzJztcbmltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWEh0dHBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4vaHR0cC1yZXF1ZXN0LmNsYXNzJztcblxuZXhwb3J0IGNvbnN0IEFYX0hUVFBfRVZFTlRfSU5URVJDRVBUT1IgPSBuZXcgSW5qZWN0aW9uVG9rZW48QVhIdHRwRXZlbnRJbnRlcmNlcHRvcj4oJ2F4Lmh0dHAuZXZlbnRzJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhIdHRwRXZlbnRJbnRlcmNlcHRvciB7XG4gICAgYmVnaW4ocmVxdWVzdDogQVhIdHRwUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPEFYSHR0cFJlcXVlc3RPcHRpb25zPjtcbiAgICBzdWNjZXNzKHJlcXVlc3Q6IEFYSHR0cFJlcXVlc3RPcHRpb25zLCByZXN1bHQ6IGFueSk6IFByb21pc2U8YW55PjtcbiAgICBjb21wbGV0ZShyZXF1ZXN0OiBBWEh0dHBSZXF1ZXN0T3B0aW9ucyk7XG4gICAgZXJyb3IocmVxdWVzdDogQVhIdHRwUmVxdWVzdE9wdGlvbnMsIGVycm9yOiBJSHR0cEVycm9yKTtcbn1cblxuXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXF1ZXN0LmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvaHR0cC9odHRwLXJlcXVlc3QuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQVhIdHRwUmVxdWVzdE9wdGlvbnMge1xuICAgIHVybD86IGFueSxcbiAgICBwYXJhbXM/OiB7XG4gICAgICAgIFtwYXJhbTogc3RyaW5nXTogYW55O1xuICAgIH0sXG4gICAgYm9keT86IHtcbiAgICAgICAgW3BhcmFtOiBzdHJpbmddOiBhbnk7XG4gICAgfSxcbiAgICBoZWFkZXJzPzoge1xuICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBhbnk7XG4gICAgfSxcbiAgICBtZXRob2Q/OiAnZ2V0JyB8ICdwb3N0JyB8ICdwdXQnIHwgJ2RlbGV0ZSc7XG4gICAgcmVzcG9uc2VUeXBlPzogYW55O1xufSJdfQ==
@@ -0,0 +1,25 @@
1
+ export class HttpResult {
2
+ _executor;
3
+ constructor(executor) {
4
+ this._executor = executor;
5
+ setTimeout(() => {
6
+ this._executor(this.resultAction, this.errorAction, this.completeAction);
7
+ }, 50);
8
+ }
9
+ resultAction;
10
+ errorAction;
11
+ completeAction;
12
+ result(action) {
13
+ this.resultAction = action;
14
+ return this;
15
+ }
16
+ error(action) {
17
+ this.errorAction = action;
18
+ return this;
19
+ }
20
+ complete(action) {
21
+ this.completeAction = action;
22
+ return this;
23
+ }
24
+ }
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1yZXN1bHQuY2xhc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9odHRwL2h0dHAtcmVzdWx0LmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxVQUFVO0lBQ1gsU0FBUyxDQUEyRjtJQUM1RyxZQUNJLFFBSVM7UUFFVCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxZQUFZLENBQWtCO0lBQzlCLFdBQVcsQ0FBMkI7SUFDdEMsY0FBYyxDQUFhO0lBRW5DLE1BQU0sQ0FBQyxNQUF1QjtRQUMxQixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsS0FBSyxDQUFDLE1BQWdDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1FBQzFCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxRQUFRLENBQUMsTUFBa0I7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUh0dHBFcnJvciB9IGZyb20gJy4vaHR0cC1lcnJvci5jbGFzcyc7XG5cbmV4cG9ydCBjbGFzcyBIdHRwUmVzdWx0PFQ+IHtcbiAgICBwcml2YXRlIF9leGVjdXRvcjogKHJlc3VsdDogKGU/OiBUKSA9PiB2b2lkLCBlcnJvcjogKGU/OiBJSHR0cEVycm9yKSA9PiB2b2lkLCBjb21wbGV0ZTogKCkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgZXhlY3V0b3I6IChcbiAgICAgICAgICAgIHJlc3VsdDogKGU/OiBUKSA9PiB2b2lkLFxuICAgICAgICAgICAgZXJyb3I6IChlPzogSUh0dHBFcnJvcikgPT4gdm9pZCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB2b2lkXG4gICAgICAgICkgPT4gdm9pZFxuICAgICkge1xuICAgICAgICB0aGlzLl9leGVjdXRvciA9IGV4ZWN1dG9yO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2V4ZWN1dG9yKHRoaXMucmVzdWx0QWN0aW9uLCB0aGlzLmVycm9yQWN0aW9uLCB0aGlzLmNvbXBsZXRlQWN0aW9uKTtcbiAgICAgICAgfSwgNTApO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdWx0QWN0aW9uOiAoZT86IFQpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBlcnJvckFjdGlvbjogKGU/OiBJSHR0cEVycm9yKSA9PiB2b2lkO1xuICAgIHByaXZhdGUgY29tcGxldGVBY3Rpb246ICgpID0+IHZvaWQ7XG5cbiAgICByZXN1bHQoYWN0aW9uOiAoZT86IFQpID0+IHZvaWQpOiBIdHRwUmVzdWx0PFQ+IHsgXG4gICAgICAgIHRoaXMucmVzdWx0QWN0aW9uID0gYWN0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXJyb3IoYWN0aW9uOiAoZT86IElIdHRwRXJyb3IpID0+IHZvaWQpOiBIdHRwUmVzdWx0PFQ+IHtcbiAgICAgICAgdGhpcy5lcnJvckFjdGlvbiA9IGFjdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNvbXBsZXRlKGFjdGlvbjogKCkgPT4gdm9pZCk6IEh0dHBSZXN1bHQ8VD4ge1xuICAgICAgICB0aGlzLmNvbXBsZXRlQWN0aW9uID0gYWN0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59Il19
@@ -0,0 +1,35 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { HttpClientModule } from '@angular/common/http';
4
+ import { AXHttpService } from './http.service';
5
+ import * as i0 from "@angular/core";
6
+ export class AXHttpModule {
7
+ static forRoot() {
8
+ return {
9
+ ngModule: AXHttpModule,
10
+ providers: [AXHttpService]
11
+ };
12
+ }
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXHttpModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
14
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AXHttpModule, imports: [CommonModule,
15
+ HttpClientModule], exports: [HttpClientModule] });
16
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXHttpModule, providers: [
17
+ AXHttpService
18
+ ], imports: [CommonModule,
19
+ HttpClientModule, HttpClientModule] });
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXHttpModule, decorators: [{
22
+ type: NgModule,
23
+ args: [{
24
+ declarations: [],
25
+ imports: [
26
+ CommonModule,
27
+ HttpClientModule
28
+ ],
29
+ exports: [HttpClientModule],
30
+ providers: [
31
+ AXHttpService
32
+ ]
33
+ }]
34
+ }] });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9odHRwL2h0dHAubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBYy9DLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLE1BQU0sQ0FBQyxPQUFPO1FBQ1osT0FBTztZQUNMLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztTQUMzQixDQUFDO0lBQ0osQ0FBQzt3R0FOVSxZQUFZO3lHQUFaLFlBQVksWUFSckIsWUFBWTtZQUNaLGdCQUFnQixhQUVSLGdCQUFnQjt5R0FLZixZQUFZLGFBSlo7WUFDVCxhQUFhO1NBQ2QsWUFOQyxZQUFZO1lBQ1osZ0JBQWdCLEVBRVIsZ0JBQWdCOzs0RkFLZixZQUFZO2tCQVh4QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7cUJBQ2pCO29CQUNELE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDO29CQUMzQixTQUFTLEVBQUU7d0JBQ1QsYUFBYTtxQkFDZDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEFYSHR0cFNlcnZpY2UgfSBmcm9tICcuL2h0dHAuc2VydmljZSc7XG5cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBIdHRwQ2xpZW50TW9kdWxlXG4gIF0sXG4gIGV4cG9ydHM6IFtIdHRwQ2xpZW50TW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgQVhIdHRwU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEFYSHR0cE1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhIdHRwTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBBWEh0dHBNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtBWEh0dHBTZXJ2aWNlXVxuICAgIH07XG4gIH1cbn0iXX0=
@@ -0,0 +1,148 @@
1
+ import { Injectable, Injector } from '@angular/core';
2
+ import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';
3
+ import { HttpResult } from './http-result.class';
4
+ import { AX_HTTP_EVENT_INTERCEPTOR } from './http-events.interceptor';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ // import { catchError, retry, retryWhen, mergeMap, delay, switchMap, scan, takeWhile, flatMap } from 'rxjs/operators';
8
+ // import { of, concat, throwError } from 'rxjs';
9
+ export class AXHttpService {
10
+ http;
11
+ injector;
12
+ interceptor;
13
+ constructor(http, injector) {
14
+ this.http = http;
15
+ this.injector = injector;
16
+ this.interceptor = this.injector.get(AX_HTTP_EVENT_INTERCEPTOR);
17
+ }
18
+ get(url, config = {}) {
19
+ config.url = url;
20
+ config.method = "get";
21
+ return this.request(config);
22
+ }
23
+ post(url, config = {}) {
24
+ config.url = url;
25
+ config.method = "post";
26
+ return this.request(config);
27
+ }
28
+ delete(url, config = {}) {
29
+ config.url = url;
30
+ config.method = "delete";
31
+ return this.request(config);
32
+ }
33
+ put(url, config = {}) {
34
+ config.url = url;
35
+ config.method = "put";
36
+ return this.request(config);
37
+ }
38
+ request(config) {
39
+ return new HttpResult((result, error, complete) => {
40
+ this.handleBegin(config).then(c => {
41
+ this.http
42
+ .request(config.method, config.url, this.mapOptions(config))
43
+ //.pipe(this.retry)
44
+ .subscribe(data => {
45
+ this.handleResult(data, result, complete, config);
46
+ }, c => {
47
+ this.handleError(c, error, complete, config);
48
+ });
49
+ });
50
+ });
51
+ }
52
+ handleResult(data, result, complete, config) {
53
+ if (this.interceptor) {
54
+ this.interceptor.success(config, data).then(c => {
55
+ if (result)
56
+ result(c);
57
+ this.handleComplete(complete, config);
58
+ });
59
+ }
60
+ else {
61
+ //
62
+ if (result)
63
+ result(data);
64
+ this.handleComplete(complete, config);
65
+ }
66
+ }
67
+ handleBegin(config) {
68
+ return new Promise((resolve) => {
69
+ if (!config.headers)
70
+ config.headers = {};
71
+ if (!config.params)
72
+ config.params = {};
73
+ //
74
+ if (this.interceptor) {
75
+ this.interceptor.begin(config).then(c => {
76
+ resolve(c);
77
+ });
78
+ }
79
+ else {
80
+ resolve(config);
81
+ }
82
+ });
83
+ }
84
+ handleComplete(complete, config) {
85
+ if (complete)
86
+ complete();
87
+ if (this.interceptor)
88
+ this.interceptor.complete(config);
89
+ }
90
+ handleError(c, error, complete, config) {
91
+ let r = {
92
+ message: c.message,
93
+ status: c.status,
94
+ code: c.status?.toString(),
95
+ handled: false,
96
+ error: c.error
97
+ };
98
+ if (error) {
99
+ error(r);
100
+ }
101
+ if (!r.handled) {
102
+ if (this.interceptor)
103
+ this.interceptor.error(config, r);
104
+ }
105
+ this.handleComplete(complete, config);
106
+ }
107
+ mapOptions(options) {
108
+ let headers = new HttpHeaders();
109
+ for (const key in options.headers) {
110
+ if (options.headers.hasOwnProperty(key)) {
111
+ const value = options.headers[key];
112
+ headers = headers.set(key, value);
113
+ }
114
+ }
115
+ let params = new HttpParams();
116
+ for (const key in options.params) {
117
+ if (options.params.hasOwnProperty(key)) {
118
+ const value = options.params[key];
119
+ params = params.set(key, value);
120
+ }
121
+ }
122
+ return {
123
+ headers: headers,
124
+ params: params,
125
+ body: options.body,
126
+ responseType: options.responseType || 'json'
127
+ };
128
+ // if (options.method == "get") {
129
+ // return {
130
+ // headers: headers,
131
+ // params: params
132
+ // };
133
+ // }
134
+ // else {
135
+ // return {
136
+ // headers: headers,
137
+ // params: params,
138
+ // body: options.body
139
+ // };
140
+ // }
141
+ }
142
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXHttpService, deps: [{ token: i1.HttpClient }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
143
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXHttpService });
144
+ }
145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXHttpService, decorators: [{
146
+ type: Injectable
147
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i0.Injector }]; } });
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvaHR0cC9odHRwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRCxPQUFPLEVBQ0gseUJBQXlCLEVBQzVCLE1BQU0sMkJBQTJCLENBQUM7OztBQUNuQyx1SEFBdUg7QUFDdkgsaURBQWlEO0FBSWpELE1BQU0sT0FBTyxhQUFhO0lBR0Y7SUFBMEI7SUFEdEMsV0FBVyxDQUF5QjtJQUM1QyxZQUFvQixJQUFnQixFQUFVLFFBQWtCO1FBQTVDLFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBR0QsR0FBRyxDQUFJLEdBQVcsRUFBRSxTQUErQixFQUFFO1FBQ2pELE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxDQUFJLEdBQVcsRUFBRSxTQUErQixFQUFFO1FBQ2xELE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFN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QyxDQUFBO2FBQ3BDO1NBQ0o7UUFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzlCLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUM5QixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNwQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDbkM7U0FDSjtRQUNELE9BQU87WUFDSCxPQUFPLEVBQUUsT0FBTztZQUNoQixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtZQUNsQixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksSUFBSSxNQUFNO1NBQy9DLENBQUM7UUFDRixpQ0FBaUM7UUFDakMsZUFBZTtRQUNmLDRCQUE0QjtRQUM1Qix5QkFBeUI7UUFDekIsU0FBUztRQUNULElBQUk7UUFDSixTQUFTO1FBQ1QsZUFBZTtRQUNmLDRCQUE0QjtRQUM1QiwwQkFBMEI7UUFDMUIsNkJBQTZCO1FBQzdCLFNBQVM7UUFDVCxJQUFJO0lBQ1IsQ0FBQzt3R0EvSVEsYUFBYTs0R0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIEluamVjdEZsYWdzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcywgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBIdHRwUmVzdWx0IH0gZnJvbSAnLi9odHRwLXJlc3VsdC5jbGFzcyc7XG5pbXBvcnQgeyBJSHR0cEVycm9yIH0gZnJvbSAnLi9odHRwLWVycm9yLmNsYXNzJztcbmltcG9ydCB7IEFYSHR0cFJlcXVlc3RPcHRpb25zIH0gZnJvbSAnLi9odHRwLXJlcXVlc3QuY2xhc3MnO1xuaW1wb3J0IHtcbiAgICBBWF9IVFRQX0VWRU5UX0lOVEVSQ0VQVE9SLCBBWEh0dHBFdmVudEludGVyY2VwdG9yXG59IGZyb20gJy4vaHR0cC1ldmVudHMuaW50ZXJjZXB0b3InO1xuLy8gaW1wb3J0IHsgY2F0Y2hFcnJvciwgcmV0cnksIHJldHJ5V2hlbiwgbWVyZ2VNYXAsIGRlbGF5LCBzd2l0Y2hNYXAsIHNjYW4sIHRha2VXaGlsZSwgZmxhdE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbi8vIGltcG9ydCB7IG9mLCBjb25jYXQsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQVhIdHRwU2VydmljZSB7XG5cbiAgICBwcml2YXRlIGludGVyY2VwdG9yOiBBWEh0dHBFdmVudEludGVyY2VwdG9yO1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgdGhpcy5pbnRlcmNlcHRvciA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFYX0hUVFBfRVZFTlRfSU5URVJDRVBUT1IpO1xuICAgIH1cblxuXG4gICAgZ2V0PFQ+KHVybDogc3RyaW5nLCBjb25maWc6IEFYSHR0cFJlcXVlc3RPcHRpb25zID0ge30pOiBIdHRwUmVzdWx0PFQ+IHtcbiAgICAgICAgY29uZmlnLnVybCA9IHVybDtcbiAgICAgICAgY29uZmlnLm1ldGhvZCA9IFwiZ2V0XCI7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoY29uZmlnKTtcbiAgICB9XG5cbiAgICBwb3N0PFQ+KHVybDogc3RyaW5nLCBjb25maWc6IEFYSHR0cFJlcXVlc3RPcHRpb25zID0ge30pOiBIdHRwUmVzdWx0PFQ+IHtcbiAgICAgICAgY29uZmlnLnVybCA9IHVybDtcbiAgICAgICAgY29uZmlnLm1ldGhvZCA9IFwicG9zdFwiO1xuICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZGVsZXRlPFQ+KHVybDogc3RyaW5nLCBjb25maWc6IEFYSHR0cFJlcXVlc3RPcHRpb25zID0ge30pOiBIdHRwUmVzdWx0PFQ+IHtcbiAgICAgICAgY29uZmlnLnVybCA9IHVybDtcbiAgICAgICAgY29uZmlnLm1ldGhvZCA9IFwiZGVsZXRlXCI7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoY29uZmlnKTtcbiAgICB9XG5cbiAgICBwdXQ8VD4odXJsOiBzdHJpbmcsIGNvbmZpZzogQVhIdHRwUmVxdWVzdE9wdGlvbnMgPSB7fSk6IEh0dHBSZXN1bHQ8VD4ge1xuICAgICAgICBjb25maWcudXJsID0gdXJsO1xuICAgICAgICBjb25maWcubWV0aG9kID0gXCJwdXRcIjtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChjb25maWcpO1xuICAgIH1cblxuXG4gICAgcmVxdWVzdDxUPihjb25maWc6IEFYSHR0cFJlcXVlc3RPcHRpb25zKTogSHR0cFJlc3VsdDxUPiB7XG4gICAgICAgIHJldHVybiBuZXcgSHR0cFJlc3VsdDxUPigocmVzdWx0PywgZXJyb3I/LCBjb21wbGV0ZT8pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmVnaW4oY29uZmlnKS50aGVuKGMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgICAgICAgICAgICAucmVxdWVzdDxUPihjb25maWcubWV0aG9kLCBjb25maWcudXJsLCB0aGlzLm1hcE9wdGlvbnMoY29uZmlnKSlcbiAgICAgICAgICAgICAgICAgICAgLy8ucGlwZSh0aGlzLnJldHJ5KVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXN1bHQoZGF0YSwgcmVzdWx0LCBjb21wbGV0ZSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgYyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGMsIGVycm9yLCBjb21wbGV0ZSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cblxuICAgIHByaXZhdGUgaGFuZGxlUmVzdWx0KGRhdGEsIHJlc3VsdCwgY29tcGxldGUsIGNvbmZpZzogQVhIdHRwUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJjZXB0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJjZXB0b3Iuc3VjY2Vzcyhjb25maWcsIGRhdGEpLnRoZW4oYyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0KGMpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGUoY29tcGxldGUsIGNvbmZpZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBpZiAocmVzdWx0KVxuICAgICAgICAgICAgICAgIHJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGUoY29tcGxldGUsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUJlZ2luKGNvbmZpZzogQVhIdHRwUmVxdWVzdE9wdGlvbnMpOiBQcm9taXNlPEFYSHR0cFJlcXVlc3RPcHRpb25zPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb25maWcuaGVhZGVycylcbiAgICAgICAgICAgICAgICBjb25maWcuaGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgaWYgKCFjb25maWcucGFyYW1zKVxuICAgICAgICAgICAgICAgIGNvbmZpZy5wYXJhbXMgPSB7fTtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcmNlcHRvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJjZXB0b3IuYmVnaW4oY29uZmlnKS50aGVuKGMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjb25maWcpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDb21wbGV0ZShjb21wbGV0ZTogRnVuY3Rpb24sIGNvbmZpZzogQVhIdHRwUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGNvbXBsZXRlKVxuICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJjZXB0b3IpXG4gICAgICAgICAgICB0aGlzLmludGVyY2VwdG9yLmNvbXBsZXRlKGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVFcnJvcihjOiBIdHRwRXJyb3JSZXNwb25zZSwgZXJyb3I6IEZ1bmN0aW9uLCBjb21wbGV0ZTogRnVuY3Rpb24sIGNvbmZpZzogQVhIdHRwUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAgICAgbGV0IHI6IElIdHRwRXJyb3IgPSB7XG4gICAgICAgICAgICBtZXNzYWdlOiBjLm1lc3NhZ2UsXG4gICAgICAgICAgICBzdGF0dXM6IGMuc3RhdHVzLFxuICAgICAgICAgICAgY29kZTogYy5zdGF0dXM/LnRvU3RyaW5nKCksXG4gICAgICAgICAgICBoYW5kbGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBjLmVycm9yXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBlcnJvcihyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXIuaGFuZGxlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW50ZXJjZXB0b3IpXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcmNlcHRvci5lcnJvcihjb25maWcsIHIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlQ29tcGxldGUoY29tcGxldGUsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYXBPcHRpb25zKG9wdGlvbnM6IEFYSHR0cFJlcXVlc3RPcHRpb25zKSB7XG4gICAgICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5oZWFkZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMuaGVhZGVyc1trZXldO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldChrZXksIHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zLnBhcmFtcykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMucGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnMucGFyYW1zW2tleV07XG4gICAgICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgYm9keTogb3B0aW9ucy5ib2R5LFxuICAgICAgICAgICAgcmVzcG9uc2VUeXBlOiBvcHRpb25zLnJlc3BvbnNlVHlwZSB8fCAnanNvbidcbiAgICAgICAgfTtcbiAgICAgICAgLy8gaWYgKG9wdGlvbnMubWV0aG9kID09IFwiZ2V0XCIpIHtcbiAgICAgICAgLy8gICAgIHJldHVybiB7XG4gICAgICAgIC8vICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgLy8gICAgICAgICBwYXJhbXM6IHBhcmFtc1xuICAgICAgICAvLyAgICAgfTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBlbHNlIHtcbiAgICAgICAgLy8gICAgIHJldHVybiB7XG4gICAgICAgIC8vICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgLy8gICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgLy8gICAgICAgICBib2R5OiBvcHRpb25zLmJvZHlcbiAgICAgICAgLy8gICAgIH07XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbn0iXX0=
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "common": {
3
- "search": "Search",
3
+ "search": "search",
4
4
  "yes": "yes",
5
5
  "no": "No",
6
6
  "confirm": "Confirm",
@@ -0,0 +1,25 @@
1
+ import { Pipe } from '@angular/core';
2
+ import { AXDateTime } from '../classes/datetime.class';
3
+ import * as i0 from "@angular/core";
4
+ export class AXDateTimePipe {
5
+ constructor() { }
6
+ transform(value, format) {
7
+ const date = AXDateTime.convert(value);
8
+ if (value == null) {
9
+ return '';
10
+ }
11
+ if (!format) {
12
+ return date.toString();
13
+ }
14
+ else {
15
+ return date.format(format);
16
+ }
17
+ }
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXDateTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
19
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AXDateTimePipe, name: "dt" });
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXDateTimePipe, decorators: [{
22
+ type: Pipe,
23
+ args: [{ name: 'dt' }]
24
+ }], ctorParameters: function () { return []; } });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXRpbWUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3BpcGUvZGF0ZXRpbWUucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBR3ZELE1BQU0sT0FBTyxjQUFjO0lBQ3ZCLGdCQUFnQixDQUFDO0lBRWpCLFNBQVMsQ0FBQyxLQUFVLEVBQUUsTUFBZTtRQUNqQyxNQUFNLElBQUksR0FBZSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNmLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDMUI7YUFDSTtZQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM5QjtJQUNMLENBQUM7d0dBZFEsY0FBYztzR0FBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUQxQixJQUFJO21CQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGVUcmFuc2Zvcm0sIFBpcGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYRGF0ZVRpbWUgfSBmcm9tICcuLi9jbGFzc2VzL2RhdGV0aW1lLmNsYXNzJztcblxuQFBpcGUoeyBuYW1lOiAnZHQnIH0pXG5leHBvcnQgY2xhc3MgQVhEYXRlVGltZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGZvcm1hdD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRhdGU6IEFYRGF0ZVRpbWUgPSBBWERhdGVUaW1lLmNvbnZlcnQodmFsdWUpO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZm9ybWF0KSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGUuZm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIH1cbiAgICB9XG59Il19
@@ -0,0 +1,25 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class AXHtmlToTextPipe {
4
+ transform(value) {
5
+ if (value) {
6
+ const regexHtml = /<\/?[^>]+>/gi;
7
+ const regexNbsp = /&nbsp;/gi;
8
+ const regexAmp = /&amp;/gi;
9
+ return value
10
+ .replace(regexHtml, '')
11
+ .replace(regexNbsp, '')
12
+ .replace(regexAmp, '');
13
+ }
14
+ else {
15
+ return '';
16
+ }
17
+ }
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXHtmlToTextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
19
+ static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: AXHtmlToTextPipe, name: "html2text" });
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXHtmlToTextPipe, decorators: [{
22
+ type: Pipe,
23
+ args: [{ name: 'html2text' }]
24
+ }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHRtbFRvVGV4dC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGlwZS9odG1sVG9UZXh0LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7O0FBR3BELE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsU0FBUyxDQUFDLEtBQWE7UUFDckIsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLFNBQVMsR0FBRyxjQUFjLENBQUM7WUFDakMsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQztZQUMzQixPQUFPLEtBQUs7aUJBQ1QsT0FBTyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7aUJBQ3RCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2lCQUN0QixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1NBQzFCO2FBQU07WUFDTCxPQUFPLEVBQUUsQ0FBQztTQUNYO0lBQ0gsQ0FBQzt3R0FiVSxnQkFBZ0I7c0dBQWhCLGdCQUFnQjs7NEZBQWhCLGdCQUFnQjtrQkFENUIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHsgbmFtZTogJ2h0bWwydGV4dCcgfSlcbmV4cG9ydCBjbGFzcyBBWEh0bWxUb1RleHRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBjb25zdCByZWdleEh0bWwgPSAvPFxcLz9bXj5dKz4vZ2k7XG4gICAgICBjb25zdCByZWdleE5ic3AgPSAvJm5ic3A7L2dpO1xuICAgICAgY29uc3QgcmVnZXhBbXAgPSAvJmFtcDsvZ2k7XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgLnJlcGxhY2UocmVnZXhIdG1sLCAnJylcbiAgICAgICAgLnJlcGxhY2UocmVnZXhOYnNwLCAnJylcbiAgICAgICAgLnJlcGxhY2UocmVnZXhBbXAsICcnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './platform.service';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wbGF0Zm9ybS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9wbGF0Zm9ybS5zZXJ2aWNlJzsiXX0=
@@ -0,0 +1,152 @@
1
+ import { Injectable } from "@angular/core";
2
+ import { fromEvent, Subject } from "rxjs";
3
+ import { debounceTime, distinctUntilChanged } from "rxjs/operators";
4
+ import * as i0 from "@angular/core";
5
+ const isChrome = (win) => testUserAgent(win, /Chrome/i);
6
+ const isFirefox = (win) => testUserAgent(win, /Firefox/i);
7
+ const isEdge = (win) => testUserAgent(win, /Edge/i);
8
+ const isSafari = (win) => testUserAgent(win, /Safari/i);
9
+ const isOpera = (win) => testUserAgent(win, /Opera/i) || testUserAgent(win, /OPR/i);
10
+ const isMSIE = (win) => testUserAgent(win, /MSIE/i) || testUserAgent(win, /Trident/i);
11
+ const isMobileWeb = (win) => isMobile(win) && !isHybrid(win);
12
+ const isIpad = (win) => {
13
+ // iOS 12 and below
14
+ if (testUserAgent(win, /iPad/i)) {
15
+ return true;
16
+ }
17
+ // iOS 13+
18
+ if (testUserAgent(win, /Macintosh/i) && isMobile(win)) {
19
+ return true;
20
+ }
21
+ return false;
22
+ };
23
+ const isIphone = (win) => testUserAgent(win, /iPhone/i);
24
+ const isIOS = (win) => testUserAgent(win, /iPhone|iPod/i) || isIpad(win);
25
+ const isAndroid = (win) => testUserAgent(win, /android|sink/i);
26
+ const isAndroidTablet = (win) => {
27
+ return isAndroid(win) && !testUserAgent(win, /mobile/i);
28
+ };
29
+ const isPhablet = (win) => {
30
+ const width = win.innerWidth;
31
+ const height = win.innerHeight;
32
+ const smallest = Math.min(width, height);
33
+ const largest = Math.max(width, height);
34
+ return (smallest > 390 && smallest < 520) &&
35
+ (largest > 620 && largest < 800);
36
+ };
37
+ const isTablet = (win) => {
38
+ const width = win.innerWidth;
39
+ const height = win.innerHeight;
40
+ const smallest = Math.min(width, height);
41
+ const largest = Math.max(width, height);
42
+ return (isIpad(win) ||
43
+ isAndroidTablet(win) ||
44
+ ((smallest > 460 && smallest < 820) &&
45
+ (largest > 780 && largest < 1400)));
46
+ };
47
+ const isMobile = (win) => matchMedia(win, '(any-pointer:coarse)');
48
+ const isTouch = (win) => matchMedia(win, '(any-pointer:coarse)');
49
+ const isDesktop = (win) => !isMobile(win);
50
+ const isHybrid = (win) => isCordova(win) || isCapacitorNative(win);
51
+ const isCordova = (win) => !!(win['cordova'] || win['phonegap'] || win['PhoneGap']);
52
+ const isCapacitorNative = (win) => {
53
+ const capacitor = win['Capacitor'];
54
+ return !!(capacitor && capacitor.isNative);
55
+ };
56
+ const isElectron = (win) => testUserAgent(win, /electron/i);
57
+ const isPWA = (win) => !!(win.matchMedia('(display-mode: standalone)').matches || win.navigator.standalone);
58
+ export const testUserAgent = (win, expr) => expr.test(win.navigator.userAgent);
59
+ const matchMedia = (win, query) => win.matchMedia(query).matches;
60
+ const isSMScreen = (win) => matchMedia(win, '(max-width: 640px)');
61
+ const isMDScreen = (win) => matchMedia(win, '(max-width: 768px)');
62
+ const isLGScreen = (win) => matchMedia(win, '(max-width: 1024px)');
63
+ const isXLScreen = (win) => matchMedia(win, '(max-width: 1280px)');
64
+ const is2XLScreen = (win) => matchMedia(win, '(max-width: 1536px)');
65
+ const PLATFORMS_MAP = {
66
+ 'Android': isAndroid,
67
+ 'iOS': isIOS,
68
+ 'Desktop': isDesktop,
69
+ 'Mobile': isMobile,
70
+ 'Touch': isTouch,
71
+ 'Chrome': isChrome,
72
+ 'Firefox': isFirefox,
73
+ 'Safari': isSafari,
74
+ 'Edge': isEdge,
75
+ 'Opera': isOpera,
76
+ 'Hybrid': isHybrid,
77
+ 'PWA': isPWA,
78
+ 'Electron': isElectron,
79
+ SM: isSMScreen,
80
+ MD: isMDScreen,
81
+ LG: isLGScreen,
82
+ XL: isXLScreen,
83
+ "2XL": is2XLScreen,
84
+ };
85
+ export class AXPlatformEvent {
86
+ nativeEvent;
87
+ source;
88
+ }
89
+ export class AXPlatform {
90
+ resize = new Subject();
91
+ click = new Subject();
92
+ scroll = new Subject();
93
+ isRtl() {
94
+ return document.dir == 'rtl' || document.body.dir == 'rtl' || document.body.style.direction == 'rtl';
95
+ }
96
+ isLandscape() {
97
+ return window.innerHeight < window.innerWidth;
98
+ }
99
+ isPortrate() {
100
+ return !this.isLandscape();
101
+ }
102
+ is(name) {
103
+ return PLATFORMS_MAP[name](window) || false;
104
+ }
105
+ switchDarkMode() {
106
+ const _html = document.getElementsByTagName("html")[0];
107
+ _html.classList.add('ax-dark');
108
+ }
109
+ switchLightMode() {
110
+ const _html = document.getElementsByTagName("html")[0];
111
+ _html.classList.remove('ax-dark');
112
+ }
113
+ _setFullHeightRatio() {
114
+ document.querySelector(':root').style.setProperty('--ax-vh', window.innerHeight / 100 + 'px');
115
+ }
116
+ constructor() {
117
+ fromEvent(window, 'resize')
118
+ .pipe(debounceTime(100))
119
+ .pipe(distinctUntilChanged())
120
+ .subscribe((e) => {
121
+ this.resize.next({
122
+ nativeEvent: e,
123
+ source: this
124
+ });
125
+ //
126
+ this._setFullHeightRatio();
127
+ });
128
+ document.addEventListener('click', (e) => {
129
+ this.click.next({
130
+ nativeEvent: e,
131
+ source: this
132
+ });
133
+ }, true);
134
+ document.addEventListener('scroll', (e) => {
135
+ this.scroll.next({
136
+ nativeEvent: e,
137
+ source: this
138
+ });
139
+ }, true);
140
+ // init functions
141
+ this._setFullHeightRatio();
142
+ }
143
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXPlatform, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
144
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXPlatform, providedIn: 'root' });
145
+ }
146
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AXPlatform, decorators: [{
147
+ type: Injectable,
148
+ args: [{
149
+ providedIn: 'root',
150
+ }]
151
+ }], ctorParameters: function () { return []; } });
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3BsYXRmb3JtL3BsYXRmb3JtLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVEsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBVXBFLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUUsQ0FDdEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUVsQyxNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3ZDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFFbkMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFXLEVBQVcsRUFBRSxDQUNwQyxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBRWhDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBVyxFQUFXLEVBQUUsQ0FDdEMsYUFBYSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUVsQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3JDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUUvRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFLENBQ3BDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksYUFBYSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUdsRSxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVcs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SSxTQUFTLENBQVUsTUFBTSxFQUFFLFFBQVEsQ0FBQzthQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2FBQzVCLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2IsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFDSCxFQUFFO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFHUCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ1osV0FBVyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7UUFDUCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFUixRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ2IsV0FBVyxFQUFFLENBQUM7Z0JBQ2QsTUFBTSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7UUFDUCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDVCxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDL0IsQ0FBQzt3R0FuRVEsVUFBVTs0R0FBVixVQUFVLGNBRlAsTUFBTTs7NEZBRVQsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IGZyb20sIGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5cblxuZXhwb3J0IHR5cGUgQVhQbGF0Zm9ybXMgPSAnQW5kcm9pZCcgfCAnRGVza3RvcCcgfCAnaU9TJyB8ICdNb2JpbGUnIHwgJyc7XG5leHBvcnQgdHlwZSBBWEJyb3dzZXJzID0gJ0Nocm9tZScgfCAnU2FmYXJpJyB8ICdFZGdlJyB8ICdGaXJlZm94JyB8ICdPcGVyYScgfCAnTVNJRSc7XG5leHBvcnQgdHlwZSBBWFRlY2hub2xvZ2llcyA9ICdQV0EnIHwgJ0h5YnJpZCcgfCAnRWxlY3Ryb24nO1xuZXhwb3J0IHR5cGUgQVhTY3JlZW5TaXplcyA9ICdTTScgfCAnTUQnIHwgJ0xHJyB8ICdYTCcgfCAnMlhMJztcblxuXG5cbmNvbnN0IGlzQ2hyb21lID0gKHdpbjogV2luZG93KTogYm9vbGVhbiA9PlxuICAgIHRlc3RVc2VyQWdlbnQod2luLCAvQ2hyb21lL2kpO1xuXG5jb25zdCBpc0ZpcmVmb3ggPSAod2luOiBXaW5kb3cpOiBib29sZWFuID0+XG4gICAgdGVzdFVzZXJBZ2VudCh3aW4sIC9GaXJlZm94L2kpO1xuXG5jb25zdCBpc0VkZ2UgPSAod2luOiBXaW5kb3cpOiBib29sZWFuID0+XG4gICAgdGVzdFVzZXJBZ2VudCh3aW4sIC9FZGdlL2kpO1xuXG5jb25zdCBpc1NhZmFyaSA9ICh3aW46IFdpbmRvdyk6IGJvb2xlYW4gPT5cbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL1NhZmFyaS9pKTtcblxuY29uc3QgaXNPcGVyYSA9ICh3aW46IFdpbmRvdyk6IGJvb2xlYW4gPT5cbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL09wZXJhL2kpIHx8IHRlc3RVc2VyQWdlbnQod2luLCAvT1BSL2kpO1xuXG5jb25zdCBpc01TSUUgPSAod2luOiBXaW5kb3cpOiBib29sZWFuID0+XG4gICAgdGVzdFVzZXJBZ2VudCh3aW4sIC9NU0lFL2kpIHx8IHRlc3RVc2VyQWdlbnQod2luLCAvVHJpZGVudC9pKTtcblxuXG5jb25zdCBpc01vYmlsZVdlYiA9ICh3aW46IFdpbmRvdyk6IGJvb2xlYW4gPT5cbiAgICBpc01vYmlsZSh3aW4pICYmICFpc0h5YnJpZCh3aW4pO1xuXG5jb25zdCBpc0lwYWQgPSAod2luOiBXaW5kb3cpID0+IHtcbiAgICAvLyBpT1MgMTIgYW5kIGJlbG93XG4gICAgaWYgKHRlc3RVc2VyQWdlbnQod2luLCAvaVBhZC9pKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBpT1MgMTMrXG4gICAgaWYgKHRlc3RVc2VyQWdlbnQod2luLCAvTWFjaW50b3NoL2kpICYmIGlzTW9iaWxlKHdpbikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuY29uc3QgaXNJcGhvbmUgPSAod2luOiBXaW5kb3cpID0+XG4gICAgdGVzdFVzZXJBZ2VudCh3aW4sIC9pUGhvbmUvaSk7XG5cbmNvbnN0IGlzSU9TID0gKHdpbjogV2luZG93KSA9PlxuICAgIHRlc3RVc2VyQWdlbnQod2luLCAvaVBob25lfGlQb2QvaSkgfHwgaXNJcGFkKHdpbik7XG5cbmNvbnN0IGlzQW5kcm9pZCA9ICh3aW46IFdpbmRvdykgPT5cbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL2FuZHJvaWR8c2luay9pKTtcblxuY29uc3QgaXNBbmRyb2lkVGFibGV0ID0gKHdpbjogV2luZG93KSA9PiB7XG4gICAgcmV0dXJuIGlzQW5kcm9pZCh3aW4pICYmICF0ZXN0VXNlckFnZW50KHdpbiwgL21vYmlsZS9pKTtcbn07XG5cbmNvbnN0IGlzUGhhYmxldCA9ICh3aW46IFdpbmRvdykgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gd2luLmlubmVyV2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0O1xuICAgIGNvbnN0IHNtYWxsZXN0ID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCk7XG4gICAgY29uc3QgbGFyZ2VzdCA9IE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgcmV0dXJuIChzbWFsbGVzdCA+IDM5MCAmJiBzbWFsbGVzdCA8IDUyMCkgJiZcbiAgICAgICAgKGxhcmdlc3QgPiA2MjAgJiYgbGFyZ2VzdCA8IDgwMCk7XG59O1xuXG5jb25zdCBpc1RhYmxldCA9ICh3aW46IFdpbmRvdykgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gd2luLmlubmVyV2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gd2luLmlubmVySGVpZ2h0O1xuICAgIGNvbnN0IHNtYWxsZXN0ID0gTWF0aC5taW4od2lkdGgsIGhlaWdodCk7XG4gICAgY29uc3QgbGFyZ2VzdCA9IE1hdGgubWF4KHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgaXNJcGFkKHdpbikgfHxcbiAgICAgICAgaXNBbmRyb2lkVGFibGV0KHdpbikgfHxcbiAgICAgICAgKFxuICAgICAgICAgICAgKHNtYWxsZXN0ID4gNDYwICYmIHNtYWxsZXN0IDwgODIwKSAmJlxuICAgICAgICAgICAgKGxhcmdlc3QgPiA3ODAgJiYgbGFyZ2VzdCA8IDE0MDApXG4gICAgICAgIClcbiAgICApO1xufTtcblxuY29uc3QgaXNNb2JpbGUgPSAod2luOiBXaW5kb3cpID0+XG4gICAgbWF0Y2hNZWRpYSh3aW4sICcoYW55LXBvaW50ZXI6Y29hcnNlKScpO1xuXG5jb25zdCBpc1RvdWNoID0gKHdpbjogV2luZG93KSA9PiBtYXRjaE1lZGlhKHdpbiwgJyhhbnktcG9pbnRlcjpjb2Fyc2UpJyk7XG5cbmNvbnN0IGlzRGVza3RvcCA9ICh3aW46IFdpbmRvdykgPT5cbiAgICAhaXNNb2JpbGUod2luKTtcblxuY29uc3QgaXNIeWJyaWQgPSAod2luOiBXaW5kb3cpID0+XG4gICAgaXNDb3Jkb3ZhKHdpbikgfHwgaXNDYXBhY2l0b3JOYXRpdmUod2luKTtcblxuY29uc3QgaXNDb3Jkb3ZhID0gKHdpbjogYW55KTogYm9vbGVhbiA9PlxuICAgICEhKHdpblsnY29yZG92YSddIHx8IHdpblsncGhvbmVnYXAnXSB8fCB3aW5bJ1Bob25lR2FwJ10pO1xuXG5jb25zdCBpc0NhcGFjaXRvck5hdGl2ZSA9ICh3aW46IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGNhcGFjaXRvciA9IHdpblsnQ2FwYWNpdG9yJ107XG4gICAgcmV0dXJuICEhKGNhcGFjaXRvciAmJiBjYXBhY2l0b3IuaXNOYXRpdmUpO1xufTtcblxuY29uc3QgaXNFbGVjdHJvbiA9ICh3aW46IFdpbmRvdyk6IGJvb2xlYW4gPT5cbiAgICB0ZXN0VXNlckFnZW50KHdpbiwgL2VsZWN0cm9uL2kpO1xuXG5jb25zdCBpc1BXQSA9ICh3aW46IFdpbmRvdyk6IGJvb2xlYW4gPT5cbiAgICAhISh3aW4ubWF0Y2hNZWRpYSgnKGRpc3BsYXktbW9kZTogc3RhbmRhbG9uZSknKS5tYXRjaGVzIHx8ICh3aW4ubmF2aWdhdG9yIGFzIGFueSkuc3RhbmRhbG9uZSk7XG5cbmV4cG9ydCBjb25zdCB0ZXN0VXNlckFnZW50ID0gKHdpbjogV2luZG93LCBleHByOiBSZWdFeHApID0+XG4gICAgZXhwci50ZXN0KHdpbi5uYXZpZ2F0b3IudXNlckFnZW50KTtcblxuY29uc3QgbWF0Y2hNZWRpYSA9ICh3aW46IFdpbmRvdywgcXVlcnk6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICB3aW4ubWF0Y2hNZWRpYShxdWVyeSkubWF0Y2hlcztcblxuY29uc3QgaXNTTVNjcmVlbiA9ICh3aW46IFdpbmRvdykgPT4gbWF0Y2hNZWRpYSh3aW4sICcobWF4LXdpZHRoOiA2NDBweCknKTtcbmNvbnN0IGlzTURTY3JlZW4gPSAod2luOiBXaW5kb3cpID0+IG1hdGNoTWVkaWEod2luLCAnKG1heC13aWR0aDogNzY4cHgpJyk7XG5jb25zdCBpc0xHU2NyZWVuID0gKHdpbjogV2luZG93KSA9PiBtYXRjaE1lZGlhKHdpbiwgJyhtYXgtd2lkdGg6IDEwMjRweCknKTtcbmNvbnN0IGlzWExTY3JlZW4gPSAod2luOiBXaW5kb3cpID0+IG1hdGNoTWVkaWEod2luLCAnKG1heC13aWR0aDogMTI4MHB4KScpO1xuY29uc3QgaXMyWExTY3JlZW4gPSAod2luOiBXaW5kb3cpID0+IG1hdGNoTWVkaWEod2luLCAnKG1heC13aWR0aDogMTUzNnB4KScpO1xuXG5jb25zdCBQTEFURk9STVNfTUFQID0ge1xuICAgICdBbmRyb2lkJzogaXNBbmRyb2lkLFxuICAgICdpT1MnOiBpc0lPUyxcbiAgICAnRGVza3RvcCc6IGlzRGVza3RvcCxcbiAgICAnTW9iaWxlJzogaXNNb2JpbGUsXG4gICAgJ1RvdWNoJzogaXNUb3VjaCxcbiAgICAnQ2hyb21lJzogaXNDaHJvbWUsXG4gICAgJ0ZpcmVmb3gnOiBpc0ZpcmVmb3gsXG4gICAgJ1NhZmFyaSc6IGlzU2FmYXJpLFxuICAgICdFZGdlJzogaXNFZGdlLFxuICAgICdPcGVyYSc6IGlzT3BlcmEsXG4gICAgJ0h5YnJpZCc6IGlzSHlicmlkLFxuICAgICdQV0EnOiBpc1BXQSxcbiAgICAnRWxlY3Ryb24nOiBpc0VsZWN0cm9uLFxuICAgIFNNOiBpc1NNU2NyZWVuLFxuICAgIE1EOiBpc01EU2NyZWVuLFxuICAgIExHOiBpc0xHU2NyZWVuLFxuICAgIFhMOiBpc1hMU2NyZWVuLFxuICAgIFwiMlhMXCI6IGlzMlhMU2NyZWVuLFxufTtcblxuXG5leHBvcnQgY2xhc3MgQVhQbGF0Zm9ybUV2ZW50IHtcbiAgICBuYXRpdmVFdmVudDogVUlFdmVudCB8IEV2ZW50O1xuICAgIHNvdXJjZTogQVhQbGF0Zm9ybVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBsYXRmb3JtIHtcbiAgICByZXNpemU6IFN1YmplY3Q8QVhQbGF0Zm9ybUV2ZW50PiA9IG5ldyBTdWJqZWN0PEFYUGxhdGZvcm1FdmVudD4oKTtcbiAgICBjbGljazogU3ViamVjdDxBWFBsYXRmb3JtRXZlbnQ+ID0gbmV3IFN1YmplY3Q8QVhQbGF0Zm9ybUV2ZW50PigpXG4gICAgc2Nyb2xsOiBTdWJqZWN0PEFYUGxhdGZvcm1FdmVudD4gPSBuZXcgU3ViamVjdDxBWFBsYXRmb3JtRXZlbnQ+KClcblxuICAgIGlzUnRsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZGlyID09ICdydGwnIHx8IGRvY3VtZW50LmJvZHkuZGlyID09ICdydGwnIHx8IGRvY3VtZW50LmJvZHkuc3R5bGUuZGlyZWN0aW9uID09ICdydGwnO1xuICAgIH1cblxuXG4gICAgaXNMYW5kc2NhcGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuaW5uZXJIZWlnaHQgPCB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICB9XG5cbiAgICBpc1BvcnRyYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNMYW5kc2NhcGUoKVxuICAgIH1cblxuICAgIGlzKG5hbWU6IEFYUGxhdGZvcm1zIHwgQVhCcm93c2VycyB8IEFYVGVjaG5vbG9naWVzIHwgQVhTY3JlZW5TaXplcyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gUExBVEZPUk1TX01BUFtuYW1lXSh3aW5kb3cpIHx8IGZhbHNlO1xuICAgIH1cblxuICAgIHN3aXRjaERhcmtNb2RlKCkge1xuICAgICAgICBjb25zdCBfaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaHRtbFwiKVswXTtcbiAgICAgICAgX2h0bWwuY2xhc3NMaXN0LmFkZCgnYXgtZGFyaycpXG5cbiAgICB9XG5cbiAgICBzd2l0Y2hMaWdodE1vZGUoKSB7XG4gICAgICAgIGNvbnN0IF9odG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJodG1sXCIpWzBdO1xuICAgICAgICBfaHRtbC5jbGFzc0xpc3QucmVtb3ZlKCdheC1kYXJrJylcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zZXRGdWxsSGVpZ2h0UmF0aW8oKSB7XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCc6cm9vdCcpLnN0eWxlLnNldFByb3BlcnR5KCctLWF4LXZoJywgd2luZG93LmlubmVySGVpZ2h0IC8gMTAwICsgJ3B4Jyk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG5cbiAgICAgICAgZnJvbUV2ZW50PFVJRXZlbnQ+KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcbiAgICAgICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemUubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBlLFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEZ1bGxIZWlnaHRSYXRpbygpO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrLm5leHQoe1xuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBlLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRydWUpXG5cbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsLm5leHQoe1xuICAgICAgICAgICAgICAgIG5hdGl2ZUV2ZW50OiBlLFxuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICAvLyBpbml0IGZ1bmN0aW9uc1xuICAgICAgICB0aGlzLl9zZXRGdWxsSGVpZ2h0UmF0aW8oKTtcbiAgICB9XG59Il19