ng-zenduit 1.0.0

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 (117) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/breadcrumbs/zendu-breadcrumbs.component.mjs +37 -0
  3. package/esm2020/lib/card-block/zendu-card-block.component.mjs +21 -0
  4. package/esm2020/lib/checkbox/zendu-checkbox.component.mjs +44 -0
  5. package/esm2020/lib/colorpicker/zendu-colorpicker.component.mjs +106 -0
  6. package/esm2020/lib/column-configuration/columnState.mjs +2 -0
  7. package/esm2020/lib/column-configuration/zendu-column-configuration.component.mjs +118 -0
  8. package/esm2020/lib/datepicker/date-picker-day.mjs +2 -0
  9. package/esm2020/lib/datepicker/date-picker-hint.mjs +2 -0
  10. package/esm2020/lib/datepicker/datepicker.mjs +9 -0
  11. package/esm2020/lib/datepicker/zendu-datepicker.component.mjs +434 -0
  12. package/esm2020/lib/doc-scanner/zendu-doc-scanner.component.mjs +628 -0
  13. package/esm2020/lib/file-upload/zendu-file-upload.component.mjs +107 -0
  14. package/esm2020/lib/filter/dateRange.mjs +2 -0
  15. package/esm2020/lib/filter/filtersConfig.mjs +2 -0
  16. package/esm2020/lib/filter/numberRange.mjs +2 -0
  17. package/esm2020/lib/filter/zendu-filter.component.mjs +461 -0
  18. package/esm2020/lib/icon/zendu-icon.component.mjs +24 -0
  19. package/esm2020/lib/local.lock.mjs +33 -0
  20. package/esm2020/lib/location-search/location.address.mjs +2 -0
  21. package/esm2020/lib/location-search/zendu-location-search.component.mjs +129 -0
  22. package/esm2020/lib/map/map.types.mjs +2 -0
  23. package/esm2020/lib/map/zendu-map.component.mjs +129 -0
  24. package/esm2020/lib/map-preview/zendu-map-preview.component.mjs +30 -0
  25. package/esm2020/lib/ng-zenduit.module.mjs +158 -0
  26. package/esm2020/lib/pagination-bar/pageItem.mjs +2 -0
  27. package/esm2020/lib/pagination-bar/zendu-pagination-bar.component.mjs +71 -0
  28. package/esm2020/lib/phone-input/zendu-phone-input.component.mjs +141 -0
  29. package/esm2020/lib/progress/zendu-progress.component.mjs +29 -0
  30. package/esm2020/lib/radio-button/radio-button.component.mjs +48 -0
  31. package/esm2020/lib/search-box/zendu-search-box.component.mjs +124 -0
  32. package/esm2020/lib/select/templates/zendu-select-option.directive.mjs +16 -0
  33. package/esm2020/lib/select/templates/zendu-select-value.directive.mjs +16 -0
  34. package/esm2020/lib/select/zendu-select.component.mjs +303 -0
  35. package/esm2020/lib/services/geoconding.service.mjs +61 -0
  36. package/esm2020/lib/services/map.service.mjs +181 -0
  37. package/esm2020/lib/services/opencv.service.mjs +109 -0
  38. package/esm2020/lib/services/zendu-notify.service.mjs +92 -0
  39. package/esm2020/lib/sort-header/zendu-sort-header.component.mjs +36 -0
  40. package/esm2020/lib/spinner/zendu-spinner.component.mjs +11 -0
  41. package/esm2020/lib/toggle/zendu-toggle.component.mjs +32 -0
  42. package/esm2020/lib/toggle-slide/zendu-toggle-slide.component.mjs +27 -0
  43. package/esm2020/lib/util.mjs +93 -0
  44. package/esm2020/ng-zenduit.mjs +5 -0
  45. package/esm2020/public-api.mjs +42 -0
  46. package/fesm2015/ng-zenduit.mjs +3768 -0
  47. package/fesm2015/ng-zenduit.mjs.map +1 -0
  48. package/fesm2020/ng-zenduit.mjs +3735 -0
  49. package/fesm2020/ng-zenduit.mjs.map +1 -0
  50. package/icons/arrow-down-small.svg +3 -0
  51. package/icons/arrow-up-small.svg +3 -0
  52. package/icons/calendar.svg +6 -0
  53. package/icons/cross.svg +3 -0
  54. package/icons/date.svg +3 -0
  55. package/icons/expand.svg +3 -0
  56. package/icons/filter.svg +3 -0
  57. package/icons/play.svg +10 -0
  58. package/icons/redo.svg +3 -0
  59. package/icons/rotate.svg +3 -0
  60. package/icons/time.svg +4 -0
  61. package/icons/undo.svg +3 -0
  62. package/index.d.ts +5 -0
  63. package/lib/breadcrumbs/zendu-breadcrumbs.component.d.ts +22 -0
  64. package/lib/card-block/zendu-card-block.component.d.ts +9 -0
  65. package/lib/checkbox/zendu-checkbox.component.d.ts +17 -0
  66. package/lib/colorpicker/zendu-colorpicker.component.d.ts +28 -0
  67. package/lib/column-configuration/columnState.d.ts +7 -0
  68. package/lib/column-configuration/zendu-column-configuration.component.d.ts +43 -0
  69. package/lib/datepicker/date-picker-day.d.ts +8 -0
  70. package/lib/datepicker/date-picker-hint.d.ts +5 -0
  71. package/lib/datepicker/datepicker.d.ts +7 -0
  72. package/lib/datepicker/zendu-datepicker.component.d.ts +94 -0
  73. package/lib/doc-scanner/zendu-doc-scanner.component.d.ts +82 -0
  74. package/lib/file-upload/zendu-file-upload.component.d.ts +28 -0
  75. package/lib/filter/dateRange.d.ts +4 -0
  76. package/lib/filter/filtersConfig.d.ts +88 -0
  77. package/lib/filter/numberRange.d.ts +4 -0
  78. package/lib/filter/zendu-filter.component.d.ts +59 -0
  79. package/lib/icon/zendu-icon.component.d.ts +10 -0
  80. package/lib/local.lock.d.ts +8 -0
  81. package/lib/location-search/location.address.d.ts +12 -0
  82. package/lib/location-search/zendu-location-search.component.d.ts +32 -0
  83. package/lib/map/map.types.d.ts +33 -0
  84. package/lib/map/zendu-map.component.d.ts +23 -0
  85. package/lib/map-preview/zendu-map-preview.component.d.ts +11 -0
  86. package/lib/ng-zenduit.module.d.ts +34 -0
  87. package/lib/pagination-bar/pageItem.d.ts +4 -0
  88. package/lib/pagination-bar/zendu-pagination-bar.component.d.ts +25 -0
  89. package/lib/phone-input/zendu-phone-input.component.d.ts +39 -0
  90. package/lib/progress/zendu-progress.component.d.ts +14 -0
  91. package/lib/radio-button/radio-button.component.d.ts +18 -0
  92. package/lib/search-box/zendu-search-box.component.d.ts +26 -0
  93. package/lib/select/templates/zendu-select-option.directive.d.ts +8 -0
  94. package/lib/select/templates/zendu-select-value.directive.d.ts +8 -0
  95. package/lib/select/zendu-select.component.d.ts +107 -0
  96. package/lib/services/geoconding.service.d.ts +23 -0
  97. package/lib/services/map.service.d.ts +22 -0
  98. package/lib/services/opencv.service.d.ts +46 -0
  99. package/lib/services/zendu-notify.service.d.ts +10 -0
  100. package/lib/sort-header/zendu-sort-header.component.d.ts +10 -0
  101. package/lib/spinner/zendu-spinner.component.d.ts +5 -0
  102. package/lib/toggle/zendu-toggle.component.d.ts +14 -0
  103. package/lib/toggle-slide/zendu-toggle-slide.component.d.ts +13 -0
  104. package/lib/util.d.ts +11 -0
  105. package/package.json +36 -0
  106. package/public-api.d.ts +38 -0
  107. package/styles/action-menu.scss +127 -0
  108. package/styles/all.scss +11 -0
  109. package/styles/button.scss +188 -0
  110. package/styles/colors.scss +125 -0
  111. package/styles/common-form.scss +159 -0
  112. package/styles/extenal.scss +2 -0
  113. package/styles/ghost.scss +38 -0
  114. package/styles/global-restyle.scss +25 -0
  115. package/styles/page-layout.scss +82 -0
  116. package/styles/snackbar.scss +91 -0
  117. package/styles/table.scss +107 -0
@@ -0,0 +1,61 @@
1
+ import { Injectable } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class GeocodingService {
4
+ setAPIKey(apiKey) {
5
+ this._platform = new H.service.Platform({
6
+ apikey: apiKey
7
+ });
8
+ }
9
+ async geocode(searchText) {
10
+ return new Promise((resolve, reject) => {
11
+ if (!this._platform) {
12
+ reject("API KEY NOT SET");
13
+ return;
14
+ }
15
+ const geocoder = this._platform.getGeocodingService();
16
+ geocoder.geocode({ searchText: searchText }, (res) => {
17
+ let locations = res.Response.View[0] ? res.Response.View[0].Result : [];
18
+ let outItems = new Array();
19
+ let boxOffset = 0.001;
20
+ for (let location of locations) {
21
+ let lat = location.Location.DisplayPosition.Latitude;
22
+ let lng = location.Location.DisplayPosition.Longitude;
23
+ let p1 = new H.geo.Point(lat - boxOffset, lng - boxOffset);
24
+ let p2 = new H.geo.Point(lat + boxOffset, lng + boxOffset);
25
+ let bounds = H.geo.Rect.coverPoints([p1, p2]);
26
+ let street = location.Location.Address.Street;
27
+ if (location.Location.Address.HouseNumber) {
28
+ street += " " + location.Location.Address.HouseNumber;
29
+ }
30
+ outItems.push({
31
+ name: location.Location.Address.Label,
32
+ city: location.Location.Address.City,
33
+ country: location.Location.Address.Country,
34
+ postalCode: location.Location.Address.PostalCode,
35
+ state: location.Location.Address.State,
36
+ street: street,
37
+ bounds: {
38
+ xmin: bounds.getLeft(),
39
+ xmax: bounds.getRight(),
40
+ ymin: Math.min(bounds.getBottom(), bounds.getTop()),
41
+ ymax: Math.max(bounds.getBottom(), bounds.getTop())
42
+ }
43
+ });
44
+ }
45
+ resolve(outItems);
46
+ }, (e) => {
47
+ console.warn(e);
48
+ resolve([]);
49
+ });
50
+ });
51
+ }
52
+ }
53
+ GeocodingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: GeocodingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
54
+ GeocodingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: GeocodingService, providedIn: 'root' });
55
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: GeocodingService, decorators: [{
56
+ type: Injectable,
57
+ args: [{
58
+ providedIn: 'root'
59
+ }]
60
+ }] });
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvY29uZGluZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctemVuZHVpdC9zcmMvbGliL3NlcnZpY2VzL2dlb2NvbmRpbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQXFCM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUdsQixTQUFTLENBQUMsTUFBYztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDcEMsTUFBTSxFQUFFLE1BQU07U0FDakIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBa0I7UUFDbkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDakIsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzFCLE9BQU87YUFDVjtZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN0RCxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUN2QyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUNULElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtnQkFFdkUsSUFBSSxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQWlCLENBQUM7Z0JBQzFDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDdEIsS0FBSyxJQUFJLFFBQVEsSUFBSSxTQUFTLEVBQUU7b0JBQzVCLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQztvQkFDckQsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO29CQUN0RCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxTQUFTLEVBQUUsR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDO29CQUMzRCxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxTQUFTLEVBQUUsR0FBRyxHQUFHLFNBQVMsQ0FBQyxDQUFDO29CQUMzRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFFOUMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO29CQUM5QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTt3QkFDdkMsTUFBTSxJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7cUJBQ3pEO29CQUVELFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQ1YsSUFBSSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUs7d0JBQ3JDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJO3dCQUNwQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTzt3QkFDMUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVU7d0JBQ2hELEtBQUssRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLO3dCQUN0QyxNQUFNLEVBQUUsTUFBTTt3QkFDZCxNQUFNLEVBQUU7NEJBQ0osSUFBSSxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUU7NEJBQ3RCLElBQUksRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFOzRCQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUNuRCxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO3lCQUN0RDtxQkFDSixDQUFDLENBQUM7aUJBQ047Z0JBRUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RCLENBQUMsRUFDRCxDQUFDLENBQU0sRUFBRSxFQUFFO2dCQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQ0osQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs7OEdBMURRLGdCQUFnQjtrSEFBaEIsZ0JBQWdCLGNBRmIsTUFBTTs0RkFFVCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmludGVyZmFjZSBJR2VvY29kaW5nUmVzIHtcbiAgICBuYW1lOiBzdHJpbmc7XG5cbiAgICBjaXR5OiBzdHJpbmc7XG5cbiAgICBjb3VudHJ5OiBzdHJpbmc7XG5cbiAgICBwb3N0YWxDb2RlOiBzdHJpbmc7XG5cbiAgICBzdHJlZXQ6IHN0cmluZztcblxuICAgIHN0YXRlOiBzdHJpbmc7XG5cbiAgICBib3VuZHM6IHsgeG1pbjogbnVtYmVyLCB5bWluOiBudW1iZXIsIHhtYXg6IG51bWJlciwgeW1heDogbnVtYmVyIH07XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgR2VvY29kaW5nU2VydmljZSB7XG4gICAgcHJpdmF0ZSBfcGxhdGZvcm06IEguc2VydmljZS5QbGF0Zm9ybTtcblxuICAgIHB1YmxpYyBzZXRBUElLZXkoYXBpS2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fcGxhdGZvcm0gPSBuZXcgSC5zZXJ2aWNlLlBsYXRmb3JtKHtcbiAgICAgICAgICAgIGFwaWtleTogYXBpS2V5XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZW9jb2RlKHNlYXJjaFRleHQ6IHN0cmluZyk6IFByb21pc2U8QXJyYXk8SUdlb2NvZGluZ1Jlcz4+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fcGxhdGZvcm0pIHtcbiAgICAgICAgICAgICAgICByZWplY3QoXCJBUEkgS0VZIE5PVCBTRVRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZ2VvY29kZXIgPSB0aGlzLl9wbGF0Zm9ybS5nZXRHZW9jb2RpbmdTZXJ2aWNlKCk7XG4gICAgICAgICAgICBnZW9jb2Rlci5nZW9jb2RlKHsgc2VhcmNoVGV4dDogc2VhcmNoVGV4dCB9LFxuICAgICAgICAgICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbG9jYXRpb25zID0gcmVzLlJlc3BvbnNlLlZpZXdbMF0gPyByZXMuUmVzcG9uc2UuVmlld1swXS5SZXN1bHQgOiBbXVxuXG4gICAgICAgICAgICAgICAgICAgIGxldCBvdXRJdGVtcyA9IG5ldyBBcnJheTxJR2VvY29kaW5nUmVzPigpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgYm94T2Zmc2V0ID0gMC4wMDE7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvY2F0aW9uIG9mIGxvY2F0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhdCA9IGxvY2F0aW9uLkxvY2F0aW9uLkRpc3BsYXlQb3NpdGlvbi5MYXRpdHVkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsbmcgPSBsb2NhdGlvbi5Mb2NhdGlvbi5EaXNwbGF5UG9zaXRpb24uTG9uZ2l0dWRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHAxID0gbmV3IEguZ2VvLlBvaW50KGxhdCAtIGJveE9mZnNldCwgbG5nIC0gYm94T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwMiA9IG5ldyBILmdlby5Qb2ludChsYXQgKyBib3hPZmZzZXQsIGxuZyArIGJveE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYm91bmRzID0gSC5nZW8uUmVjdC5jb3ZlclBvaW50cyhbcDEsIHAyXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJlZXQgPSBsb2NhdGlvbi5Mb2NhdGlvbi5BZGRyZXNzLlN0cmVldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbi5Mb2NhdGlvbi5BZGRyZXNzLkhvdXNlTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWV0ICs9IFwiIFwiICsgbG9jYXRpb24uTG9jYXRpb24uQWRkcmVzcy5Ib3VzZU51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbG9jYXRpb24uTG9jYXRpb24uQWRkcmVzcy5MYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXR5OiBsb2NhdGlvbi5Mb2NhdGlvbi5BZGRyZXNzLkNpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRyeTogbG9jYXRpb24uTG9jYXRpb24uQWRkcmVzcy5Db3VudHJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RhbENvZGU6IGxvY2F0aW9uLkxvY2F0aW9uLkFkZHJlc3MuUG9zdGFsQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZTogbG9jYXRpb24uTG9jYXRpb24uQWRkcmVzcy5TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlZXQ6IHN0cmVldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1pbjogYm91bmRzLmdldExlZnQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1heDogYm91bmRzLmdldFJpZ2h0KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHltaW46IE1hdGgubWluKGJvdW5kcy5nZXRCb3R0b20oKSwgYm91bmRzLmdldFRvcCgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeW1heDogTWF0aC5tYXgoYm91bmRzLmdldEJvdHRvbSgpLCBib3VuZHMuZ2V0VG9wKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG91dEl0ZW1zKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGUpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgIH1cblxufSAiXX0=
@@ -0,0 +1,181 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class MapService {
4
+ createDeviceMarker(device, minZoom) {
5
+ const contentHtml = this.getDeviceContent(device);
6
+ const lat = Math.max(Math.min(device.latitude, 180), -180);
7
+ const lng = Math.max(Math.min(device.longitude, 180), -180);
8
+ const deviceMarker = new H.map.DomMarker(new H.geo.Point(lat, lng), {
9
+ zIndex: 10,
10
+ icon: new H.map.DomIcon(contentHtml),
11
+ data: device,
12
+ min: minZoom ? minZoom : 0
13
+ });
14
+ return deviceMarker;
15
+ }
16
+ getDeviceContent(device) {
17
+ let devIcon = "";
18
+ if (device.icon) {
19
+ devIcon = device.icon;
20
+ }
21
+ else {
22
+ // Default icon
23
+ devIcon = "https://storage.googleapis.com/ng-zenduit/icon/car.svg";
24
+ }
25
+ let isDriving = device.isDriving || false;
26
+ let driveClass = "";
27
+ if (isDriving) {
28
+ driveClass = "driving-marker";
29
+ }
30
+ let directionSvg = 'https://storage.googleapis.com/ng-zenduit/icon/device_direction.svg';
31
+ let displayDirection = isDriving ? "block" : "none";
32
+ let classList = isDriving ? "moving" : "stopped";
33
+ const lblContent = `<div class='gotrax-label ${classList}'>` +
34
+ ` <span>${device.name}</span>` +
35
+ ` <div class='gotrax-speed-label'></div>` +
36
+ `</div>`;
37
+ const bearing = device.bearing || 0;
38
+ let contentHtml = `<div>` +
39
+ `<div class='g-marker-vehilce-wrapper'>` +
40
+ `<div class='g-marker-vehilce'>` +
41
+ `<div class='${driveClass} gotrax-img'>
42
+ ${lblContent}
43
+ <div class='g-marker-icon ${classList}'><img class="g-marker-img svg-color white" src=${devIcon} />
44
+ <div class="direction-arrow" style="display: ${displayDirection};transform: rotate(${bearing}deg); background-image: url('${directionSvg}');"></div>
45
+ </div></div>` +
46
+ `</div>` + // close g-marker-vehilce
47
+ `</div>` + // close g-marker-vehilce-wrapper
48
+ `</div>`;
49
+ return contentHtml;
50
+ }
51
+ zoomToBounds(map, bounds) {
52
+ if (!bounds || bounds.isEmpty()) {
53
+ return;
54
+ }
55
+ if (isNaN(bounds.getCenter().lat) ||
56
+ isNaN(bounds.getCenter().lng)) {
57
+ return;
58
+ }
59
+ this.zoomToLatLngs(map, [bounds.getTopLeft(), bounds.getBottomRight()]);
60
+ }
61
+ zoomToLatLngs(map, pnts, zoom = 15) {
62
+ if (!pnts || pnts.length == 0) {
63
+ return;
64
+ }
65
+ if (pnts.length == 1) {
66
+ map.setZoom(zoom);
67
+ map.setCenter(new H.geo.Point(pnts[0].lat, pnts[0].lng));
68
+ return;
69
+ }
70
+ const latLngs = [];
71
+ pnts.forEach(p => latLngs.push(p.lat, p.lng, 0));
72
+ const bounds = H.geo.Rect.coverLatLngAlts(latLngs);
73
+ const minSize = 0.001;
74
+ if (bounds.getWidth() < minSize &&
75
+ bounds.getHeight() < minSize) {
76
+ map.setCenter(bounds.getCenter());
77
+ map.setZoom(17);
78
+ }
79
+ else {
80
+ const p1 = bounds.getBottomRight();
81
+ const p2 = bounds.getTopLeft();
82
+ const width = Math.max(bounds.getWidth(), minSize);
83
+ const height = Math.max(bounds.getHeight(), minSize);
84
+ // add offset for zooming
85
+ const targetBox = H.geo.Rect.coverLatLngAlts([
86
+ p1.lat - (height * 0.15),
87
+ p2.lng - (width * 0.15),
88
+ 0,
89
+ p2.lat + (height * 0.15),
90
+ p1.lng + (width * 0.15),
91
+ 0
92
+ ]);
93
+ map.getViewPort().resize();
94
+ map.getViewModel().setLookAtData({ bounds: targetBox });
95
+ }
96
+ }
97
+ /**
98
+ * Create polylines for given trip and date range.
99
+ * Method create separte polylines for logs outside the date range.
100
+ */
101
+ createTripPolyline(trip, map, theme) {
102
+ let result = {};
103
+ let coords = new Array();
104
+ trip.logs.forEach(log => {
105
+ let latLng = new H.geo.Point(log.latitude, log.longitude);
106
+ coords.push(latLng.lat, latLng.lng);
107
+ });
108
+ if (coords.length < 2) {
109
+ // Skip the empty path
110
+ return result;
111
+ }
112
+ if (theme == "black") {
113
+ const pl = this.createPl(coords, "#000000", 2);
114
+ pl.setZIndex(1);
115
+ result.polyline = pl;
116
+ map.addObject(pl);
117
+ }
118
+ else {
119
+ const pl = this.createPl(coords, "#9510e6", 5);
120
+ pl.setZIndex(1);
121
+ result.polyline = pl;
122
+ let arrow = this.createArrow(coords);
123
+ result.arrows = arrow;
124
+ map.addObjects([pl, arrow]);
125
+ // store additional information about polyline
126
+ pl.setData({ type: "trip", trip: trip });
127
+ arrow.setData({ type: "trip", trip: trip });
128
+ }
129
+ return result;
130
+ }
131
+ createPl(coords, color, strokeWeight) {
132
+ const pl = new H.map.Polyline(H.geo.LineString.fromLatLngArray(coords), {
133
+ style: {
134
+ strokeColor: color,
135
+ lineWidth: strokeWeight
136
+ },
137
+ arrows: {
138
+ fillColor: "#ffffff"
139
+ },
140
+ zIndex: 0
141
+ });
142
+ return pl;
143
+ }
144
+ createArrow(coords) {
145
+ return new H.map.Polyline(H.geo.LineString.fromLatLngArray(coords), {
146
+ style: {
147
+ lineWidth: 5,
148
+ fillColor: 'white',
149
+ strokeColor: 'rgba(255, 255, 255, 1)',
150
+ lineDash: [0, 5],
151
+ lineTailCap: 'arrow-tail',
152
+ lineHeadCap: 'arrow-head'
153
+ },
154
+ zIndex: 1
155
+ });
156
+ }
157
+ createStopMarker(map, log, stopIdx, tag, theme) {
158
+ let icon;
159
+ if (theme == "black") {
160
+ const src = "https://storage.googleapis.com/ng-zenduit/icon/stop-icon-black.svg";
161
+ icon = new H.map.DomIcon(`<div class="g-stop-img"><img src="${src}"/></div>`);
162
+ }
163
+ else {
164
+ // deafault
165
+ icon = new H.map.DomIcon(`<div class="g-stop"><label>${stopIdx}</label></div>`);
166
+ }
167
+ let stop = new H.map.DomMarker(new H.geo.Point(log.latitude, log.longitude), {
168
+ icon: icon,
169
+ zIndex: 2
170
+ });
171
+ map.addObject(stop);
172
+ stop.setData(tag);
173
+ return stop;
174
+ }
175
+ }
176
+ MapService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MapService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
177
+ MapService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MapService });
178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MapService, decorators: [{
179
+ type: Injectable
180
+ }] });
181
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvc2VydmljZXMvbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0MsTUFBTSxPQUFPLFVBQVU7SUFFWixrQkFBa0IsQ0FBQyxNQUFpQixFQUFFLE9BQWdCO1FBQ3pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ3pCO1lBQ0ksTUFBTSxFQUFFLEVBQUU7WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDcEMsSUFBSSxFQUFFLE1BQU07WUFDWixHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0IsQ0FBQyxDQUFDO1FBRVAsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQWlCO1FBQ3RDLElB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LFdBQVcsRUFBRSxZQUFZO2FBQ3JCO1lBQ1IsTUFBTSxFQUFFLENBQUM7U0FDWixDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBVSxFQUFFLEdBQWlCLEVBQUUsT0FBZSxFQUFFLEdBQVEsRUFBRSxLQUFrQjtRQUVoRyxJQUFJLElBQW1CLENBQUM7UUFDeEIsSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFO1lBQ2xCLE1BQU0sR0FBRyxHQUFHLG9FQUFvRSxDQUFDO1lBQ2pGLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHFDQUFxQyxHQUFHLFdBQVcsQ0FBQyxDQUFBO1NBQ2hGO2FBQ0k7WUFDRCxXQUFXO1lBQ1gsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsOEJBQThCLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQTtTQUNsRjtRQUVELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQzFCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQzVDO1lBQ0ksSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUNQLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzt3R0ExT1EsVUFBVTs0R0FBVixVQUFVOzRGQUFWLFVBQVU7a0JBRHRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBaZW5EZXZpY2UsIFplbkxvZ1JlY29yZCwgWmVuTWFwVGhlbWUsIFplblRyaXAgfSBmcm9tICcuLi9tYXAvbWFwLnR5cGVzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1hcFNlcnZpY2Uge1xuXG4gICAgcHVibGljIGNyZWF0ZURldmljZU1hcmtlcihkZXZpY2U6IFplbkRldmljZSwgbWluWm9vbT86IG51bWJlcik6IEgubWFwLkRvbU1hcmtlciB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRIdG1sID0gdGhpcy5nZXREZXZpY2VDb250ZW50KGRldmljZSk7XG5cbiAgICAgICAgY29uc3QgbGF0ID0gTWF0aC5tYXgoTWF0aC5taW4oZGV2aWNlLmxhdGl0dWRlLCAxODApLCAtMTgwKTtcbiAgICAgICAgY29uc3QgbG5nID0gTWF0aC5tYXgoTWF0aC5taW4oZGV2aWNlLmxvbmdpdHVkZSwgMTgwKSwgLTE4MCk7XG5cbiAgICAgICAgY29uc3QgZGV2aWNlTWFya2VyID0gbmV3IEgubWFwLkRvbU1hcmtlcihcbiAgICAgICAgICAgIG5ldyBILmdlby5Qb2ludChsYXQsIGxuZyksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgekluZGV4OiAxMCxcbiAgICAgICAgICAgICAgICBpY29uOiBuZXcgSC5tYXAuRG9tSWNvbihjb250ZW50SHRtbCksXG4gICAgICAgICAgICAgICAgZGF0YTogZGV2aWNlLFxuICAgICAgICAgICAgICAgIG1pbjogbWluWm9vbSA/IG1pblpvb20gOiAwXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZGV2aWNlTWFya2VyO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGV2aWNlQ29udGVudChkZXZpY2U6IFplbkRldmljZSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBkZXZJY29uID0gXCJcIjtcblxuICAgICAgICBpZiAoZGV2aWNlLmljb24pIHtcbiAgICAgICAgICAgIGRldkljb24gPSBkZXZpY2UuaWNvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIERlZmF1bHQgaWNvblxuICAgICAgICAgICAgZGV2SWNvbiA9IFwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL25nLXplbmR1aXQvaWNvbi9jYXIuc3ZnXCI7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaXNEcml2aW5nID0gZGV2aWNlLmlzRHJpdmluZyB8fCBmYWxzZTtcbiAgICAgICAgbGV0IGRyaXZlQ2xhc3MgPSBcIlwiO1xuICAgICAgICBpZiAoaXNEcml2aW5nKSB7XG4gICAgICAgICAgICBkcml2ZUNsYXNzID0gXCJkcml2aW5nLW1hcmtlclwiO1xuICAgICAgICB9XG5cblxuICAgICAgICBsZXQgZGlyZWN0aW9uU3ZnID0gJ2h0dHBzOi8vc3RvcmFnZS5nb29nbGVhcGlzLmNvbS9uZy16ZW5kdWl0L2ljb24vZGV2aWNlX2RpcmVjdGlvbi5zdmcnO1xuXG4gICAgICAgIGxldCBkaXNwbGF5RGlyZWN0aW9uID0gaXNEcml2aW5nID8gXCJibG9ja1wiIDogXCJub25lXCI7XG5cbiAgICAgICAgbGV0IGNsYXNzTGlzdCA9IGlzRHJpdmluZyA/IFwibW92aW5nXCIgOiBcInN0b3BwZWRcIjtcblxuICAgICAgICBjb25zdCBsYmxDb250ZW50ID1cbiAgICAgICAgICAgIGA8ZGl2IGNsYXNzPSdnb3RyYXgtbGFiZWwgJHtjbGFzc0xpc3R9Jz5gICtcbiAgICAgICAgICAgIGAgIDxzcGFuPiR7ZGV2aWNlLm5hbWV9PC9zcGFuPmAgK1xuICAgICAgICAgICAgYCAgPGRpdiBjbGFzcz0nZ290cmF4LXNwZWVkLWxhYmVsJz48L2Rpdj5gICtcbiAgICAgICAgICAgIGA8L2Rpdj5gO1xuXG4gICAgICAgIGNvbnN0IGJlYXJpbmcgPSBkZXZpY2UuYmVhcmluZyB8fCAwO1xuXG4gICAgICAgIGxldCBjb250ZW50SHRtbCA9XG4gICAgICAgICAgICBgPGRpdj5gICtcbiAgICAgICAgICAgIGA8ZGl2IGNsYXNzPSdnLW1hcmtlci12ZWhpbGNlLXdyYXBwZXInPmAgK1xuICAgICAgICAgICAgYDxkaXYgY2xhc3M9J2ctbWFya2VyLXZlaGlsY2UnPmAgK1xuICAgICAgICAgICAgYDxkaXYgY2xhc3M9JyR7ZHJpdmVDbGFzc30gZ290cmF4LWltZyc+XG4gICAgICAgICAgICAke2xibENvbnRlbnR9XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSdnLW1hcmtlci1pY29uICR7Y2xhc3NMaXN0fSc+PGltZyBjbGFzcz1cImctbWFya2VyLWltZyBzdmctY29sb3Igd2hpdGVcIiBzcmM9JHtkZXZJY29ufSAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpcmVjdGlvbi1hcnJvd1wiIHN0eWxlPVwiZGlzcGxheTogJHtkaXNwbGF5RGlyZWN0aW9ufTt0cmFuc2Zvcm06IHJvdGF0ZSgke2JlYXJpbmd9ZGVnKTsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcke2RpcmVjdGlvblN2Z30nKTtcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PjwvZGl2PmAgK1xuICAgICAgICAgICAgYDwvZGl2PmAgKy8vIGNsb3NlIGctbWFya2VyLXZlaGlsY2VcbiAgICAgICAgICAgIGA8L2Rpdj5gICsgLy8gY2xvc2UgZy1tYXJrZXItdmVoaWxjZS13cmFwcGVyXG4gICAgICAgICAgICBgPC9kaXY+YDtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRIdG1sO1xuICAgIH1cblxuXG4gICAgcHVibGljIHpvb21Ub0JvdW5kcyhtYXA6IEguTWFwLCBib3VuZHM6IEguZ2VvLlJlY3QpIHtcbiAgICAgICAgaWYgKCFib3VuZHMgfHwgYm91bmRzLmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmFOKGJvdW5kcy5nZXRDZW50ZXIoKS5sYXQpIHx8XG4gICAgICAgICAgICBpc05hTihib3VuZHMuZ2V0Q2VudGVyKCkubG5nKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy56b29tVG9MYXRMbmdzKG1hcCwgW2JvdW5kcy5nZXRUb3BMZWZ0KCksIGJvdW5kcy5nZXRCb3R0b21SaWdodCgpXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB6b29tVG9MYXRMbmdzKG1hcDogSC5NYXAsIHBudHM6IEFycmF5PHsgbGF0OiBudW1iZXIsIGxuZzogbnVtYmVyIH0+LCB6b29tOiBudW1iZXIgPSAxNSkge1xuXG4gICAgICAgIGlmICghcG50cyB8fCBwbnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBudHMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIG1hcC5zZXRab29tKHpvb20pO1xuICAgICAgICAgICAgbWFwLnNldENlbnRlcihuZXcgSC5nZW8uUG9pbnQocG50c1swXS5sYXQsIHBudHNbMF0ubG5nKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXRMbmdzOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBwbnRzLmZvckVhY2gocCA9PiBsYXRMbmdzLnB1c2gocC5sYXQsIHAubG5nLCAwKSk7XG5cbiAgICAgICAgY29uc3QgYm91bmRzID0gSC5nZW8uUmVjdC5jb3ZlckxhdExuZ0FsdHMobGF0TG5ncykgYXMgSC5nZW8uUmVjdDtcblxuICAgICAgICBjb25zdCBtaW5TaXplID0gMC4wMDE7XG5cbiAgICAgICAgaWYgKGJvdW5kcy5nZXRXaWR0aCgpIDwgbWluU2l6ZSAmJlxuICAgICAgICAgICAgYm91bmRzLmdldEhlaWdodCgpIDwgbWluU2l6ZSkge1xuICAgICAgICAgICAgbWFwLnNldENlbnRlcihib3VuZHMuZ2V0Q2VudGVyKCkpO1xuICAgICAgICAgICAgbWFwLnNldFpvb20oMTcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcDEgPSBib3VuZHMuZ2V0Qm90dG9tUmlnaHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHAyID0gYm91bmRzLmdldFRvcExlZnQoKTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoYm91bmRzLmdldFdpZHRoKCksIG1pblNpemUpO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5tYXgoYm91bmRzLmdldEhlaWdodCgpLCBtaW5TaXplKTtcblxuICAgICAgICAgICAgLy8gYWRkIG9mZnNldCBmb3Igem9vbWluZ1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0Qm94ID0gSC5nZW8uUmVjdC5jb3ZlckxhdExuZ0FsdHMoXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBwMS5sYXQgLSAoaGVpZ2h0ICogMC4xNSksXG4gICAgICAgICAgICAgICAgICAgIHAyLmxuZyAtICh3aWR0aCAqIDAuMTUpLFxuICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICBwMi5sYXQgKyAoaGVpZ2h0ICogMC4xNSksXG4gICAgICAgICAgICAgICAgICAgIHAxLmxuZyArICh3aWR0aCAqIDAuMTUpLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKSBhcyBILmdlby5SZWN0O1xuXG4gICAgICAgICAgICBtYXAuZ2V0Vmlld1BvcnQoKS5yZXNpemUoKTtcbiAgICAgICAgICAgIG1hcC5nZXRWaWV3TW9kZWwoKS5zZXRMb29rQXREYXRhKHsgYm91bmRzOiB0YXJnZXRCb3ggfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgcG9seWxpbmVzIGZvciBnaXZlbiB0cmlwIGFuZCBkYXRlIHJhbmdlLlxuICAgICAqIE1ldGhvZCBjcmVhdGUgc2VwYXJ0ZSBwb2x5bGluZXMgZm9yIGxvZ3Mgb3V0c2lkZSB0aGUgZGF0ZSByYW5nZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlVHJpcFBvbHlsaW5lKHRyaXA6IFplblRyaXAsIG1hcDogSC5NYXAsIHRoZW1lOiBaZW5NYXBUaGVtZSk6IHtcbiAgICAgICAgcG9seWxpbmU6IEgubWFwLlBvbHlsaW5lLFxuICAgICAgICBhcnJvd3M6IEgubWFwLlBvbHlsaW5lXG4gICAgfSB7XG5cbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcbiAgICAgICAgfSBhcyB7XG4gICAgICAgICAgICBwb2x5bGluZTogSC5tYXAuUG9seWxpbmUsXG4gICAgICAgICAgICBhcnJvd3M6IEgubWFwLlBvbHlsaW5lXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IGNvb3JkcyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG5cbiAgICAgICAgdHJpcC5sb2dzLmZvckVhY2gobG9nID0+IHtcbiAgICAgICAgICAgIGxldCBsYXRMbmcgPSBuZXcgSC5nZW8uUG9pbnQobG9nLmxhdGl0dWRlLCBsb2cubG9uZ2l0dWRlKTtcblxuICAgICAgICAgICAgY29vcmRzLnB1c2gobGF0TG5nLmxhdCwgbGF0TG5nLmxuZyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChjb29yZHMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgLy8gU2tpcCB0aGUgZW1wdHkgcGF0aFxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGVtZSA9PSBcImJsYWNrXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHBsID0gdGhpcy5jcmVhdGVQbChjb29yZHMsIFwiIzAwMDAwMFwiLCAyKTtcbiAgICAgICAgICAgIHBsLnNldFpJbmRleCgxKTtcbiAgICAgICAgICAgIHJlc3VsdC5wb2x5bGluZSA9IHBsO1xuXG4gICAgICAgICAgICBtYXAuYWRkT2JqZWN0KHBsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBsID0gdGhpcy5jcmVhdGVQbChjb29yZHMsIFwiIzk1MTBlNlwiLCA1KTtcbiAgICAgICAgICAgIHBsLnNldFpJbmRleCgxKTtcbiAgICAgICAgICAgIHJlc3VsdC5wb2x5bGluZSA9IHBsO1xuXG4gICAgICAgICAgICBsZXQgYXJyb3cgPSB0aGlzLmNyZWF0ZUFycm93KGNvb3Jkcyk7XG4gICAgICAgICAgICByZXN1bHQuYXJyb3dzID0gYXJyb3c7XG5cbiAgICAgICAgICAgIG1hcC5hZGRPYmplY3RzKFtwbCwgYXJyb3ddKTtcblxuICAgICAgICAgICAgLy8gc3RvcmUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCBwb2x5bGluZVxuICAgICAgICAgICAgcGwuc2V0RGF0YSh7IHR5cGU6IFwidHJpcFwiLCB0cmlwOiB0cmlwIH0pO1xuICAgICAgICAgICAgYXJyb3cuc2V0RGF0YSh7IHR5cGU6IFwidHJpcFwiLCB0cmlwOiB0cmlwIH0pO1xuICAgICAgICB9XG5cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUGwoY29vcmRzOiBBcnJheTxudW1iZXI+LCBjb2xvcjogc3RyaW5nLCBzdHJva2VXZWlnaHQ6IG51bWJlcik6IEgubWFwLlBvbHlsaW5lIHtcbiAgICAgICAgY29uc3QgcGwgPSBuZXcgSC5tYXAuUG9seWxpbmUoXG4gICAgICAgICAgICBILmdlby5MaW5lU3RyaW5nLmZyb21MYXRMbmdBcnJheShjb29yZHMpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZUNvbG9yOiBjb2xvcixcbiAgICAgICAgICAgICAgICAgICAgbGluZVdpZHRoOiBzdHJva2VXZWlnaHRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGFycm93czoge1xuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I6IFwiI2ZmZmZmZlwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB6SW5kZXg6IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVBcnJvdyhjb29yZHM6IEFycmF5PG51bWJlcj4pOiBILm1hcC5Qb2x5bGluZSB7XG4gICAgICAgIHJldHVybiBuZXcgSC5tYXAuUG9seWxpbmUoXG4gICAgICAgICAgICBILmdlby5MaW5lU3RyaW5nLmZyb21MYXRMbmdBcnJheShjb29yZHMpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aDogNSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VDb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMSknLFxuICAgICAgICAgICAgICAgICAgICBsaW5lRGFzaDogWzAsIDVdLFxuICAgICAgICAgICAgICAgICAgICBsaW5lVGFpbENhcDogJ2Fycm93LXRhaWwnLFxuICAgICAgICAgICAgICAgICAgICBsaW5lSGVhZENhcDogJ2Fycm93LWhlYWQnXG4gICAgICAgICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgICAgICAgekluZGV4OiAxXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlU3RvcE1hcmtlcihtYXA6IEguTWFwLCBsb2c6IFplbkxvZ1JlY29yZCwgc3RvcElkeDogbnVtYmVyLCB0YWc6IGFueSwgdGhlbWU6IFplbk1hcFRoZW1lKSB7XG5cbiAgICAgICAgbGV0IGljb246IEgubWFwLkRvbUljb247XG4gICAgICAgIGlmICh0aGVtZSA9PSBcImJsYWNrXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IFwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL25nLXplbmR1aXQvaWNvbi9zdG9wLWljb24tYmxhY2suc3ZnXCI7XG4gICAgICAgICAgICBpY29uID0gbmV3IEgubWFwLkRvbUljb24oYDxkaXYgY2xhc3M9XCJnLXN0b3AtaW1nXCI+PGltZyBzcmM9XCIke3NyY31cIi8+PC9kaXY+YClcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRlYWZhdWx0XG4gICAgICAgICAgICBpY29uID0gbmV3IEgubWFwLkRvbUljb24oYDxkaXYgY2xhc3M9XCJnLXN0b3BcIj48bGFiZWw+JHtzdG9wSWR4fTwvbGFiZWw+PC9kaXY+YClcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdG9wID0gbmV3IEgubWFwLkRvbU1hcmtlcihcbiAgICAgICAgICAgIG5ldyBILmdlby5Qb2ludChsb2cubGF0aXR1ZGUsIGxvZy5sb25naXR1ZGUpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgICAgICAgekluZGV4OiAyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgbWFwLmFkZE9iamVjdChzdG9wKTtcbiAgICAgICAgc3RvcC5zZXREYXRhKHRhZyk7XG4gICAgICAgIHJldHVybiBzdG9wO1xuICAgIH1cbn0iXX0=
@@ -0,0 +1,109 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { LocalLock } from '../local.lock';
3
+ import { Util } from '../util';
4
+ import * as i0 from "@angular/core";
5
+ export class OpenCVService {
6
+ /**
7
+ * extract paper from the image
8
+ * @returns
9
+ */
10
+ async extractPaper(options) {
11
+ // load open cv
12
+ await this.loadOpenCv();
13
+ const htmlImage = await this.loadImage(options.src);
14
+ console.log("image is ready");
15
+ const scanner = new window["jscanify"];
16
+ return scanner.extractPaper(htmlImage, options.height, options.width, options.corners);
17
+ }
18
+ /**
19
+ * Get the paper corners from the specific image
20
+ * @param src
21
+ * @returns
22
+ */
23
+ async getPaperCorners(src, height, width) {
24
+ // load opencv
25
+ await this.loadOpenCv();
26
+ const cv = this.getCVInternal();
27
+ const htmlImage = await this.loadImage(src);
28
+ console.log("image is ready", htmlImage);
29
+ const scanner = new window["jscanify"];
30
+ const img = cv.imread(htmlImage);
31
+ const maxContour = scanner.findPaperContour(img);
32
+ if (!maxContour) {
33
+ return null;
34
+ }
35
+ const res = scanner.getCornerPoints(maxContour, img);
36
+ return res;
37
+ }
38
+ loadImage(src) {
39
+ return new Promise((resolve) => {
40
+ const image = new Image();
41
+ image.src = src;
42
+ image.onload = function () {
43
+ resolve(image);
44
+ };
45
+ });
46
+ }
47
+ async loadOpenCv() {
48
+ try {
49
+ await OpenCVService._lock.lock();
50
+ if (OpenCVService._isOpenCVLoaded) {
51
+ return;
52
+ }
53
+ console.log("load opencv...");
54
+ // Storage bucket available here:
55
+ // https://console.cloud.google.com/storage/browser/ng-zenduit/scripts?project=zendu-one
56
+ // load open cv script
57
+ this.loadScript("https://storage.googleapis.com/ng-zenduit/scripts/opencv_4.7.0.js");
58
+ await this.waitInitalization("cv");
59
+ // load jscanify script
60
+ this.loadScript("https://storage.googleapis.com/ng-zenduit/scripts/jscanify_1.2.0.js");
61
+ await this.waitInitalization("jscanify");
62
+ console.log("OpenCV is ready");
63
+ OpenCVService._isOpenCVLoaded = true;
64
+ }
65
+ finally {
66
+ OpenCVService._lock.release();
67
+ }
68
+ }
69
+ loadScript(src) {
70
+ const script = document.createElement('script');
71
+ script.setAttribute('type', 'text/javascript');
72
+ script.src = src;
73
+ // insert script to document
74
+ const node = document.getElementsByTagName('script')[0];
75
+ if (node) {
76
+ node.parentNode.insertBefore(script, node);
77
+ }
78
+ else {
79
+ document.head.appendChild(script);
80
+ }
81
+ }
82
+ async waitInitalization(globalVarName) {
83
+ const timeout = Date.now() + 60000;
84
+ // wait cv first
85
+ while (true) {
86
+ if (window[globalVarName]) {
87
+ break;
88
+ }
89
+ await Util.sleep(1000);
90
+ if (Date.now() > timeout) {
91
+ throw `Failed initalize OpenCV. Reason: timeout`;
92
+ }
93
+ }
94
+ }
95
+ getCVInternal() {
96
+ return window["cv"];
97
+ }
98
+ }
99
+ OpenCVService._isOpenCVLoaded = false;
100
+ OpenCVService._lock = new LocalLock();
101
+ OpenCVService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: OpenCVService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
102
+ OpenCVService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: OpenCVService, providedIn: 'root' });
103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: OpenCVService, decorators: [{
104
+ type: Injectable,
105
+ args: [{
106
+ providedIn: 'root'
107
+ }]
108
+ }] });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmN2LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvc2VydmljZXMvb3BlbmN2LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBYS9CLE1BQU0sT0FBTyxhQUFhO0lBTXRCOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FLekI7UUFDRyxlQUFlO1FBQ2YsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFeEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFOUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkMsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLGVBQWUsQ0FBQyxHQUFXLEVBQUMsTUFBYSxFQUFFLEtBQVk7UUFDaEUsY0FBYztRQUNkLE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXhCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVoQyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMs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QUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFO2dCQUN0QixNQUFNLDBDQUEwQyxDQUFBO2FBQ25EO1NBQ0o7SUFDTCxDQUFDO0lBRU8sYUFBYTtRQUNqQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QixDQUFDOztBQTlIYyw2QkFBZSxHQUFHLEtBQU0sQ0FBQTtBQUV4QixtQkFBSyxHQUFHLElBQUksU0FBUyxFQUFHLENBQUE7MkdBSjlCLGFBQWE7K0dBQWIsYUFBYSxjQUZWLE1BQU07NEZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhbExvY2sgfSBmcm9tICcuLi9sb2NhbC5sb2NrJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGludGVyZmFjZSBTY2FuaWZ5Q29ybmVycyB7XG4gICAgdG9wTGVmdENvcm5lcjogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9O1xuICAgIHRvcFJpZ2h0Q29ybmVyOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH07XG4gICAgYm90dG9tTGVmdENvcm5lcjogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9O1xuICAgIGJvdHRvbVJpZ2h0Q29ybmVyOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH07XG59XG5cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBPcGVuQ1ZTZXJ2aWNlIHtcblxuICAgIHByaXZhdGUgc3RhdGljIF9pc09wZW5DVkxvYWRlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgX2xvY2sgPSBuZXcgTG9jYWxMb2NrKCk7XG5cbiAgICAvKipcbiAgICAgKiBleHRyYWN0IHBhcGVyIGZyb20gdGhlIGltYWdlXG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBwdWJsaWMgYXN5bmMgZXh0cmFjdFBhcGVyKG9wdGlvbnM6IHtcbiAgICAgICAgc3JjOiBzdHJpbmc7XG4gICAgICAgIGhlaWdodDogbnVtYmVyO1xuICAgICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgICBjb3JuZXJzOiBTY2FuaWZ5Q29ybmVycztcbiAgICB9KTogUHJvbWlzZTxIVE1MQ2FudmFzRWxlbWVudD4ge1xuICAgICAgICAvLyBsb2FkIG9wZW4gY3ZcbiAgICAgICAgYXdhaXQgdGhpcy5sb2FkT3BlbkN2KCk7XG5cbiAgICAgICAgY29uc3QgaHRtbEltYWdlID0gYXdhaXQgdGhpcy5sb2FkSW1hZ2Uob3B0aW9ucy5zcmMpO1xuICAgICAgICBjb25zb2xlLmxvZyhcImltYWdlIGlzIHJlYWR5XCIpO1xuXG4gICAgICAgIGNvbnN0IHNjYW5uZXIgPSBuZXcgd2luZG93W1wianNjYW5pZnlcIl07XG5cbiAgICAgICAgcmV0dXJuIHNjYW5uZXIuZXh0cmFjdFBhcGVyKGh0bWxJbWFnZSwgb3B0aW9ucy5oZWlnaHQsIG9wdGlvbnMud2lkdGgsIG9wdGlvbnMuY29ybmVycyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBwYXBlciBjb3JuZXJzIGZyb20gdGhlIHNwZWNpZmljIGltYWdlXG4gICAgICogQHBhcmFtIHNyY1xuICAgICAqIEByZXR1cm5zXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGdldFBhcGVyQ29ybmVycyhzcmM6IHN0cmluZyxoZWlnaHQ6bnVtYmVyLCB3aWR0aDpudW1iZXIpOiBQcm9taXNlPFNjYW5pZnlDb3JuZXJzPiB7XG4gICAgICAgIC8vIGxvYWQgb3BlbmN2XG4gICAgICAgIGF3YWl0IHRoaXMubG9hZE9wZW5DdigpO1xuXG4gICAgICAgIGNvbnN0IGN2ID0gdGhpcy5nZXRDVkludGVybmFsKCk7XG5cbiAgICAgICAgY29uc3QgaHRtbEltYWdlID0gYXdhaXQgdGhpcy5sb2FkSW1hZ2Uoc3JjKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJpbWFnZSBpcyByZWFkeVwiLCBodG1sSW1hZ2UpO1xuXG4gICAgICAgIGNvbnN0IHNjYW5uZXIgPSBuZXcgd2luZG93W1wianNjYW5pZnlcIl07XG5cbiAgICAgICAgY29uc3QgaW1nID0gY3YuaW1yZWFkKGh0bWxJbWFnZSk7XG5cbiAgICAgICAgY29uc3QgbWF4Q29udG91ciA9IHNjYW5uZXIuZmluZFBhcGVyQ29udG91cihpbWcpO1xuICAgICAgICBpZiAoIW1heENvbnRvdXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzID0gc2Nhbm5lci5nZXRDb3JuZXJQb2ludHMobWF4Q29udG91ciwgaW1nKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRJbWFnZShzcmM6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICBpbWFnZS5zcmMgPSBzcmM7XG4gICAgICAgICAgICBpbWFnZS5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShpbWFnZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBsb2FkT3BlbkN2KCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgT3BlbkNWU2VydmljZS5fbG9jay5sb2NrKCk7XG5cbiAgICAgICAgICAgIGlmIChPcGVuQ1ZTZXJ2aWNlLl9pc09wZW5DVkxvYWRlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJsb2FkIG9wZW5jdi4uLlwiKVxuXG4gICAgICAgICAgICAvLyBTdG9yYWdlIGJ1Y2tldCBhdmFpbGFibGUgaGVyZTpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vY29uc29sZS5jbG91ZC5nb29nbGUuY29tL3N0b3JhZ2UvYnJvd3Nlci9uZy16ZW5kdWl0L3NjcmlwdHM/cHJvamVjdD16ZW5kdS1vbmVcblxuICAgICAgICAgICAgLy8gbG9hZCBvcGVuIGN2IHNjcmlwdFxuICAgICAgICAgICAgdGhpcy5sb2FkU2NyaXB0KFwiaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL25nLXplbmR1aXQvc2NyaXB0cy9vcGVuY3ZfNC43LjAuanNcIik7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLndhaXRJbml0YWxpemF0aW9uKFwiY3ZcIik7XG5cbiAgICAgICAgICAgIC8vIGxvYWQganNjYW5pZnkgc2NyaXB0XG4gICAgICAgICAgICB0aGlzLmxvYWRTY3JpcHQoXCJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vbmctemVuZHVpdC9zY3JpcHRzL2pzY2FuaWZ5XzEuMi4wLmpzXCIpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy53YWl0SW5pdGFsaXphdGlvbihcImpzY2FuaWZ5XCIpO1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIk9wZW5DViBpcyByZWFkeVwiKVxuXG4gICAgICAgICAgICBPcGVuQ1ZTZXJ2aWNlLl9pc09wZW5DVkxvYWRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBPcGVuQ1ZTZXJ2aWNlLl9sb2NrLnJlbGVhc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFNjcmlwdChzcmM6IHN0cmluZykge1xuICAgICAgICBjb25zdCBzY3JpcHQgPSA8SFRNTFNjcmlwdEVsZW1lbnQ+ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICAgIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCAndGV4dC9qYXZhc2NyaXB0Jyk7XG5cbiAgICAgICAgc2NyaXB0LnNyYyA9IHNyYztcbiAgICAgICAgLy8gaW5zZXJ0IHNjcmlwdCB0byBkb2N1bWVudFxuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdO1xuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzY3JpcHQsIG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB3YWl0SW5pdGFsaXphdGlvbihnbG9iYWxWYXJOYW1lOiBzdHJpbmcpIHtcblxuICAgICAgICBjb25zdCB0aW1lb3V0ID0gRGF0ZS5ub3coKSArIDYwMDAwO1xuXG4gICAgICAgIC8vIHdhaXQgY3YgZmlyc3RcbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgIGlmICh3aW5kb3dbZ2xvYmFsVmFyTmFtZV0pIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IFV0aWwuc2xlZXAoMTAwMCk7XG5cbiAgICAgICAgICAgIGlmIChEYXRlLm5vdygpID4gdGltZW91dCkge1xuICAgICAgICAgICAgICAgIHRocm93IGBGYWlsZWQgaW5pdGFsaXplIE9wZW5DVi4gUmVhc29uOiB0aW1lb3V0YFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDVkludGVybmFsKCkge1xuICAgICAgICByZXR1cm4gd2luZG93W1wiY3ZcIl07XG4gICAgfVxufVxuIl19
@@ -0,0 +1,92 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { show as showSnackbar } from "node-snackbar";
3
+ import * as i0 from "@angular/core";
4
+ export class ZenNotifyService {
5
+ info(msg, duration = 5000, hasDismiss = true) {
6
+ console.log(msg);
7
+ showSnackbar({
8
+ pos: "top-center",
9
+ text: msg,
10
+ textColor: "white",
11
+ duration: duration,
12
+ actionText: "dismiss",
13
+ actionTextColor: "white",
14
+ showAction: hasDismiss
15
+ });
16
+ }
17
+ success(msg, duration = 5000, hasDismiss = true) {
18
+ console.log(msg);
19
+ showSnackbar({
20
+ pos: "top-center",
21
+ text: msg,
22
+ textColor: "white",
23
+ backgroundColor: "#5cbb3a",
24
+ duration: duration,
25
+ actionText: "dismiss",
26
+ actionTextColor: "white",
27
+ showAction: hasDismiss
28
+ });
29
+ }
30
+ warn(msg, duration = 5000, hasDismiss = true) {
31
+ console.warn(msg);
32
+ showSnackbar({
33
+ pos: "top-center",
34
+ text: msg,
35
+ textColor: "white",
36
+ backgroundColor: "#f1b10b",
37
+ duration: duration,
38
+ actionText: "dismiss",
39
+ actionTextColor: "white",
40
+ showAction: hasDismiss
41
+ });
42
+ }
43
+ error(err, duration = 5000, hasDismiss = true) {
44
+ console.error(err);
45
+ showSnackbar({
46
+ pos: "top-center",
47
+ text: this.getErrorMessage(err),
48
+ textColor: "white",
49
+ backgroundColor: "#dc3e33",
50
+ duration: duration,
51
+ actionText: "dismiss",
52
+ actionTextColor: "white",
53
+ showAction: hasDismiss
54
+ });
55
+ }
56
+ getErrorMessage(ex) {
57
+ if (!ex) {
58
+ return '';
59
+ }
60
+ if (typeof ex === 'string') {
61
+ return ex;
62
+ }
63
+ else if (typeof ex.error === 'string') {
64
+ return ex.error;
65
+ }
66
+ else if (ex.error && ex.error.message) {
67
+ return ex.error.message;
68
+ }
69
+ else if (ex.message) {
70
+ return ex.message;
71
+ }
72
+ else if (ex.status && ex.statusText) {
73
+ return `Http error ${ex.status} ${ex.statusText}`;
74
+ }
75
+ else if (ex.statusText) {
76
+ return ex.statusText;
77
+ }
78
+ else {
79
+ console.warn('Can\'t extract error message from object:', ex);
80
+ return '';
81
+ }
82
+ }
83
+ }
84
+ ZenNotifyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenNotifyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
85
+ ZenNotifyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenNotifyService, providedIn: 'root' });
86
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenNotifyService, decorators: [{
87
+ type: Injectable,
88
+ args: [{
89
+ providedIn: 'root'
90
+ }]
91
+ }] });
92
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtbm90aWZ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvc2VydmljZXMvemVuZHUtbm90aWZ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxJQUFJLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQTs7QUFLcEQsTUFBTSxPQUFPLGdCQUFnQjtJQUVsQixJQUFJLENBQ1AsR0FBVyxFQUNYLFdBQW1CLElBQUksRUFDdkIsYUFBc0IsSUFBSTtRQUUxQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWpCLFlBQVksQ0FBQztZQUNULEdBQUcsRUFBRSxZQUFZO1lBQ2pCLElBQUksRUFBRSxHQUFHO1lBQ1QsU0FBUyxFQUFFLE9BQU87WUFDbEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsVUFBVSxFQUFFLFNBQVM7WUFDckIsZUFBZSxFQUFFLE9BQU87WUFDeEIsVUFBVSxFQUFFLFVBQVU7U0FDekIsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVNLE9BQU8sQ0FDVixHQUFXLEVBQ1gsV0FBbUIsSUFBSSxFQUN2QixhQUFzQixJQUFJO1FBRTFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsWUFBWSxDQUFDO1lBQ1QsR0FBRyxFQUFFLFlBQVk7WUFDakIsSUFBSSxFQUFFLEdBQUc7WUFDVCxTQUFTLEVBQUUsT0FBTztZQUNsQixlQUFlLEVBQUUsU0FBUztZQUMxQixRQUFRLEVBQUUsUUFBUTtZQUNsQixVQUFVLEVBQUUsU0FBUztZQUNyQixlQUFlLEVBQUUsT0FBTztZQUN4QixVQUFVLEVBQUUsVUFBVTtTQUN6QixDQUFDLENBQUE7SUFDTixDQUFDO0lBRU0sSUFBSSxDQUNQLEdBQVcsRUFDWCxXQUFtQixJQUFJLEVBQ3ZCLGFBQXNCLElBQUk7UUFFMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixZQUFZLENBQUM7WUFDVCxHQUFHLEVBQUUsWUFBWTtZQUNqQixJQUFJLEVBQUUsR0FBRztZQUNULFNBQVMsRUFBRSxPQUFPO1lBQ2xCLGVBQWUsRUFBRSxTQUFTO1lBQzFCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGVBQWUsRUFBRSxPQUFPO1lBQ3hCLFVBQVUsRUFBRSxVQUFVO1NBQ3pCLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFTSxLQUFLLENBQ1IsR0FBWSxFQUNaLFdBQW1CLElBQUksRUFDdkIsYUFBc0IsSUFBSTtRQUUxQixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLFlBQVksQ0FBQztZQUNULEdBQUcsRUFBRSxZQUFZO1lBQ2pCLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQztZQUMvQixTQUFTLEVBQUUsT0FBTztZQUNsQixlQUFlLEVBQUUsU0FBUztZQUMxQixRQUFRLEVBQUUsUUFBUTtZQUNsQixVQUFVLEVBQUUsU0FBUztZQUNyQixlQUFlLEVBQUUsT0FBTztZQUN4QixVQUFVLEVBQUUsVUFBVTtTQUN6QixDQUFDLENBQUE7SUFDTixDQUFDO0lBRU8sZUFBZSxDQUFDLEVBQU87UUFDM0IsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNMLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRTtZQUN4QixPQUFPLEVBQUUsQ0FBQztTQUNiO2FBQ0ksSUFBSSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQ25DLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQztTQUNuQjthQUNJLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUNuQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1NBQzNCO2FBQ0ksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFO1lBQ2pCLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztTQUNyQjthQUNJLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFO1lBQ2pDLE9BQU8sY0FBYyxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNyRDthQUNJLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRTtZQUNwQixPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUM7U0FDeEI7YUFDSTtZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUQsT0FBTyxFQUFFLENBQUM7U0FDYjtJQUNMLENBQUM7OzhHQXJHUSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQUZiLE1BQU07NEZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2hvdyBhcyBzaG93U25hY2tiYXIgfSBmcm9tIFwibm9kZS1zbmFja2JhclwiXG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgWmVuTm90aWZ5U2VydmljZSB7XG5cbiAgICBwdWJsaWMgaW5mbyhcbiAgICAgICAgbXNnOiBzdHJpbmcsXG4gICAgICAgIGR1cmF0aW9uOiBudW1iZXIgPSA1MDAwLFxuICAgICAgICBoYXNEaXNtaXNzOiBib29sZWFuID0gdHJ1ZVxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xuXG4gICAgICAgIHNob3dTbmFja2Jhcih7XG4gICAgICAgICAgICBwb3M6IFwidG9wLWNlbnRlclwiLFxuICAgICAgICAgICAgdGV4dDogbXNnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXG4gICAgICAgICAgICBhY3Rpb25UZXh0OiBcImRpc21pc3NcIixcbiAgICAgICAgICAgIGFjdGlvblRleHRDb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgICAgICAgc2hvd0FjdGlvbjogaGFzRGlzbWlzc1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHB1YmxpYyBzdWNjZXNzKFxuICAgICAgICBtc2c6IHN0cmluZyxcbiAgICAgICAgZHVyYXRpb246IG51bWJlciA9IDUwMDAsXG4gICAgICAgIGhhc0Rpc21pc3M6IGJvb2xlYW4gPSB0cnVlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XG4gICAgICAgIHNob3dTbmFja2Jhcih7XG4gICAgICAgICAgICBwb3M6IFwidG9wLWNlbnRlclwiLFxuICAgICAgICAgICAgdGV4dDogbXNnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiIzVjYmIzYVwiLC8vICRjb2xvci1zdWNjZXNzLXByaW1hcnlcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcbiAgICAgICAgICAgIGFjdGlvblRleHQ6IFwiZGlzbWlzc1wiLFxuICAgICAgICAgICAgYWN0aW9uVGV4dENvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgICAgICBzaG93QWN0aW9uOiBoYXNEaXNtaXNzXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHVibGljIHdhcm4oXG4gICAgICAgIG1zZzogc3RyaW5nLFxuICAgICAgICBkdXJhdGlvbjogbnVtYmVyID0gNTAwMCxcbiAgICAgICAgaGFzRGlzbWlzczogYm9vbGVhbiA9IHRydWVcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc29sZS53YXJuKG1zZyk7XG4gICAgICAgIHNob3dTbmFja2Jhcih7XG4gICAgICAgICAgICBwb3M6IFwidG9wLWNlbnRlclwiLFxuICAgICAgICAgICAgdGV4dDogbXNnLFxuICAgICAgICAgICAgdGV4dENvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwiI2YxYjEwYlwiLC8vICRjb2xvci1hbGVydC1wcmltYXJ5XG4gICAgICAgICAgICBkdXJhdGlvbjogZHVyYXRpb24sXG4gICAgICAgICAgICBhY3Rpb25UZXh0OiBcImRpc21pc3NcIixcbiAgICAgICAgICAgIGFjdGlvblRleHRDb2xvcjogXCJ3aGl0ZVwiLFxuICAgICAgICAgICAgc2hvd0FjdGlvbjogaGFzRGlzbWlzc1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHB1YmxpYyBlcnJvcihcbiAgICAgICAgZXJyOiB1bmtub3duLFxuICAgICAgICBkdXJhdGlvbjogbnVtYmVyID0gNTAwMCxcbiAgICAgICAgaGFzRGlzbWlzczogYm9vbGVhbiA9IHRydWVcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICBzaG93U25hY2tiYXIoe1xuICAgICAgICAgICAgcG9zOiBcInRvcC1jZW50ZXJcIixcbiAgICAgICAgICAgIHRleHQ6IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGVyciksXG4gICAgICAgICAgICB0ZXh0Q29sb3I6IFwid2hpdGVcIixcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogXCIjZGMzZTMzXCIsLy8gJGNvbG9yLWVycm9yLXByaW1hcnlcbiAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcbiAgICAgICAgICAgIGFjdGlvblRleHQ6IFwiZGlzbWlzc1wiLFxuICAgICAgICAgICAgYWN0aW9uVGV4dENvbG9yOiBcIndoaXRlXCIsXG4gICAgICAgICAgICBzaG93QWN0aW9uOiBoYXNEaXNtaXNzXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFcnJvck1lc3NhZ2UoZXg6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghZXgpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZXggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gZXg7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGV4LmVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGV4LmVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4LmVycm9yICYmIGV4LmVycm9yLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBleC5lcnJvci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBleC5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4LnN0YXR1cyAmJiBleC5zdGF0dXNUZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gYEh0dHAgZXJyb3IgJHtleC5zdGF0dXN9ICR7ZXguc3RhdHVzVGV4dH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV4LnN0YXR1c1RleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBleC5zdGF0dXNUZXh0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdDYW5cXCd0IGV4dHJhY3QgZXJyb3IgbWVzc2FnZSBmcm9tIG9iamVjdDonLCBleCk7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class ZenduSortHeaderComponent {
5
+ constructor() {
6
+ this.sortChange = new EventEmitter();
7
+ }
8
+ toggleSort() {
9
+ switch (this.sort) {
10
+ case 'asc':
11
+ this.sort = 'desc';
12
+ this.sortChange.emit(this.sort);
13
+ break;
14
+ case 'desc':
15
+ this.sort = 'asc';
16
+ this.sortChange.emit(this.sort);
17
+ break;
18
+ default:
19
+ this.sort = 'asc';
20
+ this.sortChange.emit(this.sort);
21
+ }
22
+ }
23
+ }
24
+ ZenduSortHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSortHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
25
+ ZenduSortHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduSortHeaderComponent, selector: "zen-sort", inputs: { sort: "sort", active: "active" }, outputs: { sortChange: "sortChange" }, ngImport: i0, template: "<div class=\"sort-option\"\n (click)=\"toggleSort()\">\n <div>\n <i class=\"material-icons sort-icon\"\n [ngClass]=\"active && sort === 'asc' ? 'sort-icon-active' : ''\">\n keyboard_arrow_up\n </i>\n </div>\n <div>\n <i class=\"material-icons sort-icon\"\n [ngClass]=\"active && sort === 'desc' ? 'sort-icon-active' : ''\">\n keyboard_arrow_down\n </i>\n </div>\n</div>\n", styles: [".sort-option{display:flex;flex-direction:column;cursor:pointer;-webkit-user-select:none;user-select:none}.sort-option .sort-icon{display:flex;color:#cfe9fd;height:10px;align-items:center;font-weight:500;font-size:20px;transition:.3s}.sort-option .sort-icon-active{color:#2188d9}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSortHeaderComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'zen-sort', template: "<div class=\"sort-option\"\n (click)=\"toggleSort()\">\n <div>\n <i class=\"material-icons sort-icon\"\n [ngClass]=\"active && sort === 'asc' ? 'sort-icon-active' : ''\">\n keyboard_arrow_up\n </i>\n </div>\n <div>\n <i class=\"material-icons sort-icon\"\n [ngClass]=\"active && sort === 'desc' ? 'sort-icon-active' : ''\">\n keyboard_arrow_down\n </i>\n </div>\n</div>\n", styles: [".sort-option{display:flex;flex-direction:column;cursor:pointer;-webkit-user-select:none;user-select:none}.sort-option .sort-icon{display:flex;color:#cfe9fd;height:10px;align-items:center;font-weight:500;font-size:20px;transition:.3s}.sort-option .sort-icon-active{color:#2188d9}\n"] }]
29
+ }], propDecorators: { sort: [{
30
+ type: Input
31
+ }], sortChange: [{
32
+ type: Output
33
+ }], active: [{
34
+ type: Input
35
+ }] } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc29ydC1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctemVuZHVpdC9zcmMvbGliL3NvcnQtaGVhZGVyL3plbmR1LXNvcnQtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zb3J0LWhlYWRlci96ZW5kdS1zb3J0LWhlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFpQixNQUFNLGVBQWUsQ0FBQzs7O0FBT2pHLE1BQU0sT0FBTyx3QkFBd0I7SUFMckM7UUFTWSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7S0FtQjNEO0lBZlEsVUFBVTtRQUNmLFFBQVEsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNqQixLQUFLLEtBQUs7Z0JBQ1IsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7O3NIQXRCVSx3QkFBd0I7MEdBQXhCLHdCQUF3QixtSUNQckMscWJBZUE7NEZEUmEsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLFVBQVU7OEJBTVgsSUFBSTtzQkFBWixLQUFLO2dCQUVJLFVBQVU7c0JBQW5CLE1BQU07Z0JBRUUsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd6ZW4tc29ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi96ZW5kdS1zb3J0LWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3plbmR1LXNvcnQtaGVhZGVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVTb3J0SGVhZGVyQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBzb3J0ITogJ2FzYycgfCAnZGVzYycgfCAnJztcblxuICBAT3V0cHV0KCkgc29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8J2FzYycgfCAnZGVzYyc+KCk7XG5cbiAgQElucHV0KCkgYWN0aXZlITogYm9vbGVhbjtcblxuICBwdWJsaWMgdG9nZ2xlU29ydCgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuc29ydCkge1xuICAgICAgY2FzZSAnYXNjJzpcbiAgICAgICAgdGhpcy5zb3J0ID0gJ2Rlc2MnO1xuICAgICAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCh0aGlzLnNvcnQpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2Rlc2MnOlxuICAgICAgICB0aGlzLnNvcnQgPSAnYXNjJztcbiAgICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQodGhpcy5zb3J0KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnNvcnQgPSAnYXNjJztcbiAgICAgICAgdGhpcy5zb3J0Q2hhbmdlLmVtaXQodGhpcy5zb3J0KTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzb3J0LW9wdGlvblwiXG4gICAgIChjbGljayk9XCJ0b2dnbGVTb3J0KClcIj5cbiAgIDxkaXY+XG4gICAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIHNvcnQtaWNvblwiXG4gICAgICAgICBbbmdDbGFzc109XCJhY3RpdmUgJiYgc29ydCA9PT0gJ2FzYycgPyAnc29ydC1pY29uLWFjdGl2ZScgOiAnJ1wiPlxuICAgICAgICAga2V5Ym9hcmRfYXJyb3dfdXBcbiAgICAgIDwvaT5cbiAgIDwvZGl2PlxuICAgPGRpdj5cbiAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgc29ydC1pY29uXCJcbiAgICAgICAgIFtuZ0NsYXNzXT1cImFjdGl2ZSAmJiBzb3J0ID09PSAnZGVzYycgPyAnc29ydC1pY29uLWFjdGl2ZScgOiAnJ1wiPlxuICAgICAgICAga2V5Ym9hcmRfYXJyb3dfZG93blxuICAgICAgPC9pPlxuICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import { Component } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class ZenduSpinner {
4
+ }
5
+ ZenduSpinner.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSpinner, deps: [], target: i0.ɵɵFactoryTarget.Component });
6
+ ZenduSpinner.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduSpinner, selector: "zen-spinner", ngImport: i0, template: "<div class=\"component\">\n</div>\n", styles: [".component{width:64px;height:64px;border:6px solid var(--color-primary, #2188d9);border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:rotation_spinner 1s linear infinite}@keyframes rotation_spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] });
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduSpinner, decorators: [{
8
+ type: Component,
9
+ args: [{ selector: 'zen-spinner', template: "<div class=\"component\">\n</div>\n", styles: [".component{width:64px;height:64px;border:6px solid var(--color-primary, #2188d9);border-bottom-color:transparent;border-radius:50%;display:inline-block;box-sizing:border-box;animation:rotation_spinner 1s linear infinite}@keyframes rotation_spinner{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
10
+ }] });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc3Bpbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvc3Bpbm5lci96ZW5kdS1zcGlubmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zcGlubmVyL3plbmR1LXNwaW5uZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBUyxNQUFNLGVBQWUsQ0FBQzs7QUFPakQsTUFBTSxPQUFPLFlBQVk7OzBHQUFaLFlBQVk7OEZBQVosWUFBWSxtRENQekIscUNBRUE7NEZES2EsWUFBWTtrQkFMeEIsU0FBUzsrQkFDSSxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3plbi1zcGlubmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vemVuZHUtc3Bpbm5lci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vemVuZHUtc3Bpbm5lci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFplbmR1U3Bpbm5lciB7XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb21wb25lbnRcIj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,32 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class ZenduToggleComponent {
5
+ constructor() {
6
+ this.enabledChange = new EventEmitter();
7
+ this.onLabel = "On";
8
+ this.offLabel = "Off";
9
+ }
10
+ /**
11
+ * Toggle state
12
+ */
13
+ toggle() {
14
+ this.enabled = !this.enabled;
15
+ this.enabledChange.emit(this.enabled);
16
+ }
17
+ }
18
+ ZenduToggleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
+ ZenduToggleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ZenduToggleComponent, selector: "zen-toggle", inputs: { enabled: "enabled", onLabel: "onLabel", offLabel: "offLabel" }, outputs: { enabledChange: "enabledChange" }, ngImport: i0, template: "<div class=\"toggle-component\">\n <div class=\"toggle-component-content\"\n (click)=\"toggle()\">\n <div class=\"toggle-state toggle-state-left\"\n [ngClass]=\"enabled ? 'toggle-active' : ''\">\n {{onLabel}}\n </div>\n <div class=\"toggle-state toggle-state-right\"\n [ngClass]=\"enabled ? '' : 'toggle-active'\">\n {{offLabel}}\n </div>\n </div>\n</div>", styles: [".toggle-component{display:inline-block}.toggle-component .toggle-component-content{display:flex;flex-direction:row;align-items:center;justify-content:stretch;color:var(--color-grey-shade-2, #828282);cursor:pointer}.toggle-component .toggle-state{border:1px solid var(--color-grey-shade-2, #828282);padding:10px 16px;min-width:70px;text-align:center}.toggle-component .toggle-state-left{border-radius:4px 0 0 4px;border-right:1px solid var(--color-primary, #2188d9)}.toggle-component .toggle-state-right{border-radius:0 4px 4px 0;border-left:none}.toggle-component .toggle-active{background-color:var(--color-blue-tint-1, #f4f9fd);color:var(--color-primary, #2188d9);border-color:var(--color-primary, #2188d9)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ZenduToggleComponent, decorators: [{
21
+ type: Component,
22
+ args: [{ selector: 'zen-toggle', template: "<div class=\"toggle-component\">\n <div class=\"toggle-component-content\"\n (click)=\"toggle()\">\n <div class=\"toggle-state toggle-state-left\"\n [ngClass]=\"enabled ? 'toggle-active' : ''\">\n {{onLabel}}\n </div>\n <div class=\"toggle-state toggle-state-right\"\n [ngClass]=\"enabled ? '' : 'toggle-active'\">\n {{offLabel}}\n </div>\n </div>\n</div>", styles: [".toggle-component{display:inline-block}.toggle-component .toggle-component-content{display:flex;flex-direction:row;align-items:center;justify-content:stretch;color:var(--color-grey-shade-2, #828282);cursor:pointer}.toggle-component .toggle-state{border:1px solid var(--color-grey-shade-2, #828282);padding:10px 16px;min-width:70px;text-align:center}.toggle-component .toggle-state-left{border-radius:4px 0 0 4px;border-right:1px solid var(--color-primary, #2188d9)}.toggle-component .toggle-state-right{border-radius:0 4px 4px 0;border-left:none}.toggle-component .toggle-active{background-color:var(--color-blue-tint-1, #f4f9fd);color:var(--color-primary, #2188d9);border-color:var(--color-primary, #2188d9)}\n"] }]
23
+ }], propDecorators: { enabled: [{
24
+ type: Input
25
+ }], enabledChange: [{
26
+ type: Output
27
+ }], onLabel: [{
28
+ type: Input
29
+ }], offLabel: [{
30
+ type: Input
31
+ }] } });
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtdG9nZ2xlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi90b2dnbGUvemVuZHUtdG9nZ2xlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi90b2dnbGUvemVuZHUtdG9nZ2xlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU92RSxNQUFNLE9BQU8sb0JBQW9CO0lBTGpDO1FBU1ksa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRTdDLFlBQU8sR0FBRyxJQUFJLENBQUM7UUFFZixhQUFRLEdBQUcsS0FBSyxDQUFDO0tBUzNCO0lBUEM7O09BRUc7SUFDSSxNQUFNO1FBQ1gsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7O2tIQWhCVSxvQkFBb0I7c0dBQXBCLG9CQUFvQix5S0NQakMsd2FBWU07NEZETE8sb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNFLFlBQVk7OEJBTWIsT0FBTztzQkFBZixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUUsT0FBTztzQkFBZixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd6ZW4tdG9nZ2xlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3plbmR1LXRvZ2dsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3plbmR1LXRvZ2dsZS5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFplbmR1VG9nZ2xlQ29tcG9uZW50IHtcblxuICBASW5wdXQoKSBlbmFibGVkITogYm9vbGVhbjtcblxuICBAT3V0cHV0KCkgZW5hYmxlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBASW5wdXQoKSBvbkxhYmVsID0gXCJPblwiO1xuXG4gIEBJbnB1dCgpIG9mZkxhYmVsID0gXCJPZmZcIjtcblxuICAvKipcbiAgICogVG9nZ2xlIHN0YXRlXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlKCkge1xuICAgIHRoaXMuZW5hYmxlZCA9ICF0aGlzLmVuYWJsZWQ7XG4gICAgdGhpcy5lbmFibGVkQ2hhbmdlLmVtaXQodGhpcy5lbmFibGVkKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRvZ2dsZS1jb21wb25lbnRcIj5cbiAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtY29tcG9uZW50LWNvbnRlbnRcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlKClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtc3RhdGUgdG9nZ2xlLXN0YXRlLWxlZnRcIlxuICAgICAgICAgICBbbmdDbGFzc109XCJlbmFibGVkID8gJ3RvZ2dsZS1hY3RpdmUnIDogJydcIj5cbiAgICAgICAgIHt7b25MYWJlbH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtc3RhdGUgdG9nZ2xlLXN0YXRlLXJpZ2h0XCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwiZW5hYmxlZCA/ICcnIDogJ3RvZ2dsZS1hY3RpdmUnXCI+XG4gICAgICAgICB7e29mZkxhYmVsfX1cbiAgICAgIDwvZGl2PlxuICAgPC9kaXY+XG48L2Rpdj4iXX0=