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.
- package/README.md +24 -0
- package/esm2020/lib/breadcrumbs/zendu-breadcrumbs.component.mjs +37 -0
- package/esm2020/lib/card-block/zendu-card-block.component.mjs +21 -0
- package/esm2020/lib/checkbox/zendu-checkbox.component.mjs +44 -0
- package/esm2020/lib/colorpicker/zendu-colorpicker.component.mjs +106 -0
- package/esm2020/lib/column-configuration/columnState.mjs +2 -0
- package/esm2020/lib/column-configuration/zendu-column-configuration.component.mjs +118 -0
- package/esm2020/lib/datepicker/date-picker-day.mjs +2 -0
- package/esm2020/lib/datepicker/date-picker-hint.mjs +2 -0
- package/esm2020/lib/datepicker/datepicker.mjs +9 -0
- package/esm2020/lib/datepicker/zendu-datepicker.component.mjs +434 -0
- package/esm2020/lib/doc-scanner/zendu-doc-scanner.component.mjs +628 -0
- package/esm2020/lib/file-upload/zendu-file-upload.component.mjs +107 -0
- package/esm2020/lib/filter/dateRange.mjs +2 -0
- package/esm2020/lib/filter/filtersConfig.mjs +2 -0
- package/esm2020/lib/filter/numberRange.mjs +2 -0
- package/esm2020/lib/filter/zendu-filter.component.mjs +461 -0
- package/esm2020/lib/icon/zendu-icon.component.mjs +24 -0
- package/esm2020/lib/local.lock.mjs +33 -0
- package/esm2020/lib/location-search/location.address.mjs +2 -0
- package/esm2020/lib/location-search/zendu-location-search.component.mjs +129 -0
- package/esm2020/lib/map/map.types.mjs +2 -0
- package/esm2020/lib/map/zendu-map.component.mjs +129 -0
- package/esm2020/lib/map-preview/zendu-map-preview.component.mjs +30 -0
- package/esm2020/lib/ng-zenduit.module.mjs +158 -0
- package/esm2020/lib/pagination-bar/pageItem.mjs +2 -0
- package/esm2020/lib/pagination-bar/zendu-pagination-bar.component.mjs +71 -0
- package/esm2020/lib/phone-input/zendu-phone-input.component.mjs +141 -0
- package/esm2020/lib/progress/zendu-progress.component.mjs +29 -0
- package/esm2020/lib/radio-button/radio-button.component.mjs +48 -0
- package/esm2020/lib/search-box/zendu-search-box.component.mjs +124 -0
- package/esm2020/lib/select/templates/zendu-select-option.directive.mjs +16 -0
- package/esm2020/lib/select/templates/zendu-select-value.directive.mjs +16 -0
- package/esm2020/lib/select/zendu-select.component.mjs +303 -0
- package/esm2020/lib/services/geoconding.service.mjs +61 -0
- package/esm2020/lib/services/map.service.mjs +181 -0
- package/esm2020/lib/services/opencv.service.mjs +109 -0
- package/esm2020/lib/services/zendu-notify.service.mjs +92 -0
- package/esm2020/lib/sort-header/zendu-sort-header.component.mjs +36 -0
- package/esm2020/lib/spinner/zendu-spinner.component.mjs +11 -0
- package/esm2020/lib/toggle/zendu-toggle.component.mjs +32 -0
- package/esm2020/lib/toggle-slide/zendu-toggle-slide.component.mjs +27 -0
- package/esm2020/lib/util.mjs +93 -0
- package/esm2020/ng-zenduit.mjs +5 -0
- package/esm2020/public-api.mjs +42 -0
- package/fesm2015/ng-zenduit.mjs +3768 -0
- package/fesm2015/ng-zenduit.mjs.map +1 -0
- package/fesm2020/ng-zenduit.mjs +3735 -0
- package/fesm2020/ng-zenduit.mjs.map +1 -0
- package/icons/arrow-down-small.svg +3 -0
- package/icons/arrow-up-small.svg +3 -0
- package/icons/calendar.svg +6 -0
- package/icons/cross.svg +3 -0
- package/icons/date.svg +3 -0
- package/icons/expand.svg +3 -0
- package/icons/filter.svg +3 -0
- package/icons/play.svg +10 -0
- package/icons/redo.svg +3 -0
- package/icons/rotate.svg +3 -0
- package/icons/time.svg +4 -0
- package/icons/undo.svg +3 -0
- package/index.d.ts +5 -0
- package/lib/breadcrumbs/zendu-breadcrumbs.component.d.ts +22 -0
- package/lib/card-block/zendu-card-block.component.d.ts +9 -0
- package/lib/checkbox/zendu-checkbox.component.d.ts +17 -0
- package/lib/colorpicker/zendu-colorpicker.component.d.ts +28 -0
- package/lib/column-configuration/columnState.d.ts +7 -0
- package/lib/column-configuration/zendu-column-configuration.component.d.ts +43 -0
- package/lib/datepicker/date-picker-day.d.ts +8 -0
- package/lib/datepicker/date-picker-hint.d.ts +5 -0
- package/lib/datepicker/datepicker.d.ts +7 -0
- package/lib/datepicker/zendu-datepicker.component.d.ts +94 -0
- package/lib/doc-scanner/zendu-doc-scanner.component.d.ts +82 -0
- package/lib/file-upload/zendu-file-upload.component.d.ts +28 -0
- package/lib/filter/dateRange.d.ts +4 -0
- package/lib/filter/filtersConfig.d.ts +88 -0
- package/lib/filter/numberRange.d.ts +4 -0
- package/lib/filter/zendu-filter.component.d.ts +59 -0
- package/lib/icon/zendu-icon.component.d.ts +10 -0
- package/lib/local.lock.d.ts +8 -0
- package/lib/location-search/location.address.d.ts +12 -0
- package/lib/location-search/zendu-location-search.component.d.ts +32 -0
- package/lib/map/map.types.d.ts +33 -0
- package/lib/map/zendu-map.component.d.ts +23 -0
- package/lib/map-preview/zendu-map-preview.component.d.ts +11 -0
- package/lib/ng-zenduit.module.d.ts +34 -0
- package/lib/pagination-bar/pageItem.d.ts +4 -0
- package/lib/pagination-bar/zendu-pagination-bar.component.d.ts +25 -0
- package/lib/phone-input/zendu-phone-input.component.d.ts +39 -0
- package/lib/progress/zendu-progress.component.d.ts +14 -0
- package/lib/radio-button/radio-button.component.d.ts +18 -0
- package/lib/search-box/zendu-search-box.component.d.ts +26 -0
- package/lib/select/templates/zendu-select-option.directive.d.ts +8 -0
- package/lib/select/templates/zendu-select-value.directive.d.ts +8 -0
- package/lib/select/zendu-select.component.d.ts +107 -0
- package/lib/services/geoconding.service.d.ts +23 -0
- package/lib/services/map.service.d.ts +22 -0
- package/lib/services/opencv.service.d.ts +46 -0
- package/lib/services/zendu-notify.service.d.ts +10 -0
- package/lib/sort-header/zendu-sort-header.component.d.ts +10 -0
- package/lib/spinner/zendu-spinner.component.d.ts +5 -0
- package/lib/toggle/zendu-toggle.component.d.ts +14 -0
- package/lib/toggle-slide/zendu-toggle-slide.component.d.ts +13 -0
- package/lib/util.d.ts +11 -0
- package/package.json +36 -0
- package/public-api.d.ts +38 -0
- package/styles/action-menu.scss +127 -0
- package/styles/all.scss +11 -0
- package/styles/button.scss +188 -0
- package/styles/colors.scss +125 -0
- package/styles/common-form.scss +159 -0
- package/styles/extenal.scss +2 -0
- package/styles/ghost.scss +38 -0
- package/styles/global-restyle.scss +25 -0
- package/styles/page-layout.scss +82 -0
- package/styles/snackbar.scss +91 -0
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy16ZW5kdWl0L3NyYy9saWIvc2VydmljZXMvbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0MsTUFBTSxPQUFPLFVBQVU7SUFFWixrQkFBa0IsQ0FBQyxNQUFpQixFQUFFLE9BQWdCO1FBQ3pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ3pCO1lBQ0ksTUFBTSxFQUFFLEVBQUU7WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7WUFDcEMsSUFBSSxFQUFFLE1BQU07WUFDWixHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0IsQ0FBQyxDQUFDO1FBRVAsT0FBTyxZQUFZLENBQUM7SUFDeEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQWlCO1FBQ3RDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVqQixJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDYixPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztTQUN6QjthQUNJO1lBQ0QsZUFBZTtZQUNmLE9BQU8sR0FBRyx3REFBd0QsQ0FBQztTQUN0RTtRQUVELElBQUksU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO1FBQzFDLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLFNBQVMsRUFBRTtZQUNYLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQztTQUNqQztRQUdELElBQUksWUFBWSxHQUFHLHFFQUFxRSxDQUFDO1FBRXpGLElBQUksZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUVwRCxJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBRWpELE1BQU0sVUFBVSxHQUNaLDRCQUE0QixTQUFTLElBQUk7WUFDekMsV0FBVyxNQUFNLENBQUMsSUFBSSxTQUFTO1lBQy9CLDBDQUEwQztZQUMxQyxRQUFRLENBQUM7UUFFYixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQztRQUVwQyxJQUFJLFdBQVcsR0FDWCxPQUFPO1lBQ1Asd0NBQXdDO1lBQ3hDLGdDQUFnQztZQUNoQyxlQUFlLFVBQVU7Y0FDdkIsVUFBVTt3Q0FDZ0IsU0FBUyxtREFBbUQsT0FBTzsyREFDaEQsZ0JBQWdCLHNCQUFzQixPQUFPLGdDQUFnQyxZQUFZO3lCQUMzSDtZQUNiLFFBQVEsR0FBRSx5QkFBeUI7WUFDbkMsUUFBUSxHQUFHLGlDQUFpQztZQUM1QyxRQUFRLENBQUM7UUFDYixPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBR00sWUFBWSxDQUFDLEdBQVUsRUFBRSxNQUFrQjtRQUM5QyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQzdCLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0IsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU8sYUFBYSxDQUFDLEdBQVUsRUFBRSxJQUF5QyxFQUFFLE9BQWUsRUFBRTtRQUUxRixJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQzNCLE9BQU87U0FDVjtRQUNELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDbEIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQixHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN6RCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBZSxDQUFDO1FBRWpFLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQztRQUV0QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsR0FBRyxPQUFPO1lBQzNCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsR0FBRyxPQUFPLEVBQUU7WUFDOUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztZQUNsQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ25CO2FBQ0k7WUFDRCxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDbkMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBRXJELHlCQUF5QjtZQUN6QixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQ3hDO2dCQUNJLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO2dCQUN4QixFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDdkIsQ0FBQztnQkFDRCxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDeEIsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLENBQUM7YUFDSixDQUNVLENBQUM7WUFFaEIsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztTQUMzRDtJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBQyxJQUFhLEVBQUUsR0FBVSxFQUFFLEtBQWtCO1FBS25FLElBQUksTUFBTSxHQUFHLEVBSVosQ0FBQztRQUVGLElBQUksTUFBTSxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7UUFFakMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUUxRCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNuQixzQkFBc0I7WUFDdEIsT0FBTyxNQUFNLENBQUM7U0FDakI7UUFFRCxJQUFJLEtBQUssSUFBSSxPQUFPLEVBQUU7WUFDbEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9DLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFFckIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNyQjthQUNJO1lBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQy9DLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFFckIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUV0QixHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFNUIsOENBQThDO1lBQzlDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQy9DO1FBR0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLFFBQVEsQ0FBQyxNQUFxQixFQUFFLEtBQWEsRUFBRSxZQUFvQjtRQUN2RSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUN6QixDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQ3hDO1lBQ0ksS0FBSyxFQUFFO2dCQUNILFdBQVcsRUFBRSxLQUFLO2dCQUNsQixTQUFTLEVBQUUsWUFBWTthQUMxQjtZQUNELE1BQU0sRUFBRTtnQkFDSixTQUFTLEVBQUUsU0FBUzthQUN2QjtZQUNELE1BQU0sRUFBRSxDQUFDO1NBQ1osQ0FBQyxDQUFDO1FBQ1AsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU8sV0FBVyxDQUFDLE1BQXFCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FDckIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUN4QztZQUNJLEtBQUssRUFBRTtnQkFDSCxTQUFTLEVBQUUsQ0FBQztnQkFDWixTQUFTLEVBQUUsT0FBTztnQkFDbEIsV0FBVyxFQUFFLHdCQUF3QjtnQkFDckMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEIsV0FBVyxFQUFFLFlBQVk7Z0JBQ3pCLFdBQVcsRUFBRSxZQUFZO2FBQ3JCO1lBQ1IsTUFBTSxFQUFFLENBQUM7U0FDWixDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBVSxFQUFFLEdBQWlCLEVBQUUsT0FBZSxFQUFFLEdBQVEsRUFBRSxLQUFrQjtRQUVoRyxJQUFJLElBQW1CLENBQUM7UUFDeEIsSUFBSSxLQUFLLElBQUksT0FBTyxFQUFFO1lBQ2xCLE1BQU0sR0FBRyxHQUFHLG9FQUFvRSxDQUFDO1lBQ2pGLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLHFDQUFxQyxHQUFHLFdBQVcsQ0FBQyxDQUFBO1NBQ2hGO2FBQ0k7WUFDRCxXQUFXO1lBQ1gsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsOEJBQThCLE9BQU8sZ0JBQWdCLENBQUMsQ0FBQTtTQUNsRjtRQUVELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQzFCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQzVDO1lBQ0ksSUFBSSxFQUFFLElBQUk7WUFDVixNQUFNLEVBQUUsQ0FBQztTQUNaLENBQUMsQ0FBQztRQUNQLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDOzt3R0ExT1EsVUFBVTs0R0FBVixVQUFVOzRGQUFWLFVBQVU7a0JBRHRCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBaZW5EZXZpY2UsIFplbkxvZ1JlY29yZCwgWmVuTWFwVGhlbWUsIFplblRyaXAgfSBmcm9tICcuLi9tYXAvbWFwLnR5cGVzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1hcFNlcnZpY2Uge1xuXG4gICAgcHVibGljIGNyZWF0ZURldmljZU1hcmtlcihkZXZpY2U6IFplbkRldmljZSwgbWluWm9vbT86IG51bWJlcik6IEgubWFwLkRvbU1hcmtlciB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRIdG1sID0gdGhpcy5nZXREZXZpY2VDb250ZW50KGRldmljZSk7XG5cbiAgICAgICAgY29uc3QgbGF0ID0gTWF0aC5tYXgoTWF0aC5taW4oZGV2aWNlLmxhdGl0dWRlLCAxODApLCAtMTgwKTtcbiAgICAgICAgY29uc3QgbG5nID0gTWF0aC5tYXgoTWF0aC5taW4oZGV2aWNlLmxvbmdpdHVkZSwgMTgwKSwgLTE4MCk7XG5cbiAgICAgICAgY29uc3QgZGV2aWNlTWFya2VyID0gbmV3IEgubWFwLkRvbU1hcmtlcihcbiAgICAgICAgICAgIG5ldyBILmdlby5Qb2ludChsYXQsIGxuZyksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgekluZGV4OiAxMCxcbiAgICAgICAgICAgICAgICBpY29uOiBuZXcgSC5tYXAuRG9tSWNvbihjb250ZW50SHRtbCksXG4gICAgICAgICAgICAgICAgZGF0YTogZGV2aWNlLFxuICAgICAgICAgICAgICAgIG1pbjogbWluWm9vbSA/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=
|