@stemy/ngx-utils 13.1.3 → 13.1.4
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/bundles/stemy-ngx-utils.umd.js +6145 -0
- package/bundles/stemy-ngx-utils.umd.js.map +1 -0
- package/esm2015/ngx-utils/common-types.js +116 -0
- package/esm2015/ngx-utils/components/dynamic-table/dynamic-table.component.js +139 -0
- package/esm2015/ngx-utils/components/pagination-menu/pagination-menu.component.js +96 -0
- package/esm2015/ngx-utils/components/unordered-list/unordered-list.component.js +51 -0
- package/esm2015/ngx-utils/directives/async-method.base.js +54 -0
- package/esm2015/ngx-utils/directives/async-method.directive.js +24 -0
- package/esm2015/ngx-utils/directives/background.directive.js +51 -0
- package/esm2015/ngx-utils/directives/dynamic-table-template.directive.js +19 -0
- package/esm2015/ngx-utils/directives/global-template.directive.js +27 -0
- package/esm2015/ngx-utils/directives/icon.directive.js +59 -0
- package/esm2015/ngx-utils/directives/ngx-template-outlet.directive.js +88 -0
- package/esm2015/ngx-utils/directives/pagination-item.directive.js +33 -0
- package/esm2015/ngx-utils/directives/pagination.directive.js +76 -0
- package/esm2015/ngx-utils/directives/resource-if.directive.js +51 -0
- package/esm2015/ngx-utils/directives/sticky-class.directive.js +35 -0
- package/esm2015/ngx-utils/directives/sticky.directive.js +48 -0
- package/esm2015/ngx-utils/directives/unordered-list-item.directive.js +70 -0
- package/esm2015/ngx-utils/directives/unordered-list-template.directive.js +26 -0
- package/esm2015/ngx-utils/ngx-utils.module.js +238 -0
- package/esm2015/ngx-utils/pipes/chunk.pipe.js +21 -0
- package/esm2015/ngx-utils/pipes/entries.pipe.js +24 -0
- package/esm2015/ngx-utils/pipes/extra-item-properties.pipe.js +27 -0
- package/esm2015/ngx-utils/pipes/filter.pipe.js +38 -0
- package/esm2015/ngx-utils/pipes/find.pipe.js +25 -0
- package/esm2015/ngx-utils/pipes/format-number.pipe.js +19 -0
- package/esm2015/ngx-utils/pipes/get-offset.pipe.js +13 -0
- package/esm2015/ngx-utils/pipes/get-type.pipe.js +12 -0
- package/esm2015/ngx-utils/pipes/global-template.pipe.js +37 -0
- package/esm2015/ngx-utils/pipes/group-by.pipe.js +23 -0
- package/esm2015/ngx-utils/pipes/is-type.pipe.js +12 -0
- package/esm2015/ngx-utils/pipes/join.pipe.js +15 -0
- package/esm2015/ngx-utils/pipes/keys.pipe.js +18 -0
- package/esm2015/ngx-utils/pipes/map.pipe.js +25 -0
- package/esm2015/ngx-utils/pipes/max.pipe.js +22 -0
- package/esm2015/ngx-utils/pipes/min.pipe.js +22 -0
- package/esm2015/ngx-utils/pipes/reduce.pipe.js +26 -0
- package/esm2015/ngx-utils/pipes/remap.pipe.js +28 -0
- package/esm2015/ngx-utils/pipes/replace.pipe.js +12 -0
- package/esm2015/ngx-utils/pipes/reverse.pipe.js +20 -0
- package/esm2015/ngx-utils/pipes/round.pipe.js +19 -0
- package/esm2015/ngx-utils/pipes/safe-html.pipe.js +32 -0
- package/esm2015/ngx-utils/pipes/translate.pipe.js +81 -0
- package/esm2015/ngx-utils/pipes/values.pipe.js +18 -0
- package/esm2015/ngx-utils/plugins/resize-event.plugin.js +56 -0
- package/esm2015/ngx-utils/plugins/scroll-event.plugin.js +36 -0
- package/esm2015/ngx-utils/services/acl.service.js +81 -0
- package/esm2015/ngx-utils/services/api.service.js +35 -0
- package/esm2015/ngx-utils/services/auth.service.js +14 -0
- package/esm2015/ngx-utils/services/base-http.client.js +46 -0
- package/esm2015/ngx-utils/services/base-http.service.js +285 -0
- package/esm2015/ngx-utils/services/config.service.js +122 -0
- package/esm2015/ngx-utils/services/error-handler.service.js +49 -0
- package/esm2015/ngx-utils/services/events.service.js +24 -0
- package/esm2015/ngx-utils/services/formatter.service.js +44 -0
- package/esm2015/ngx-utils/services/global-template.service.js +35 -0
- package/esm2015/ngx-utils/services/icon.service.js +24 -0
- package/esm2015/ngx-utils/services/language.service.js +117 -0
- package/esm2015/ngx-utils/services/open-api.service.js +41 -0
- package/esm2015/ngx-utils/services/promise.service.js +52 -0
- package/esm2015/ngx-utils/services/state.service.js +181 -0
- package/esm2015/ngx-utils/services/static-language.service.js +152 -0
- package/esm2015/ngx-utils/services/storage.service.js +48 -0
- package/esm2015/ngx-utils/services/toaster.service.js +29 -0
- package/esm2015/ngx-utils/services/translated-url.serializer.js +70 -0
- package/esm2015/ngx-utils/services/universal.service.js +75 -0
- package/esm2015/ngx-utils/utils/ajax-request-handler.js +40 -0
- package/esm2015/ngx-utils/utils/array.utils.js +100 -0
- package/esm2015/ngx-utils/utils/auth.guard.js +156 -0
- package/esm2015/ngx-utils/utils/canvas.utils.js +388 -0
- package/esm2015/ngx-utils/utils/date.utils.js +28 -0
- package/esm2015/ngx-utils/utils/file-system.js +20 -0
- package/esm2015/ngx-utils/utils/file.utils.js +90 -0
- package/esm2015/ngx-utils/utils/generic-value.js +20 -0
- package/esm2015/ngx-utils/utils/geometry.js +132 -0
- package/esm2015/ngx-utils/utils/initializer.js +20 -0
- package/esm2015/ngx-utils/utils/loader.utils.js +55 -0
- package/esm2015/ngx-utils/utils/math.utils.js +15 -0
- package/esm2015/ngx-utils/utils/object.utils.js +263 -0
- package/esm2015/ngx-utils/utils/observable.utils.js +63 -0
- package/esm2015/ngx-utils/utils/reflect.utils.js +33 -0
- package/esm2015/ngx-utils/utils/set.utils.js +20 -0
- package/esm2015/ngx-utils/utils/string.utils.js +28 -0
- package/esm2015/ngx-utils/utils/timer.utils.js +52 -0
- package/esm2015/ngx-utils/utils/unique.utils.js +24 -0
- package/esm2015/ngx-utils/utils/vector.js +77 -0
- package/esm2015/public_api.js +85 -0
- package/esm2015/stemy-ngx-utils.js +7 -0
- package/esm2020/ngx-utils/services/acl.service.mjs +3 -1
- package/esm2020/ngx-utils/utils/file-system.mjs +20 -0
- package/esm2020/public_api.mjs +2 -1
- package/fesm2015/stemy-ngx-utils.js +4882 -0
- package/fesm2015/stemy-ngx-utils.js.map +1 -0
- package/fesm2015/stemy-ngx-utils.mjs +23 -1
- package/fesm2015/stemy-ngx-utils.mjs.map +1 -1
- package/fesm2020/stemy-ngx-utils.mjs +23 -1
- package/fesm2020/stemy-ngx-utils.mjs.map +1 -1
- package/ngx-utils/utils/file-system.d.ts +16 -0
- package/package.json +1 -1
- package/public_api.d.ts +1 -0
- package/stemy-ngx-utils.metadata.json +1 -0
- package/tools/circular.js +117 -0
- package/tools/circular.js.map +1 -0
- package/tools/config.js +79 -0
- package/tools/config.js.map +1 -0
- package/tools/icons.js +14 -0
- package/tools/icons.js.map +1 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { first } from "rxjs/operators";
|
|
2
|
+
import { ObjectUtils } from "./object.utils";
|
|
3
|
+
export class FileUtils {
|
|
4
|
+
static getExtension(file) {
|
|
5
|
+
return file ? file.name.substr(file.name.lastIndexOf(".")).toLowerCase() : null;
|
|
6
|
+
}
|
|
7
|
+
static getName(file) {
|
|
8
|
+
return file ? file.name.substr(0, file.name.lastIndexOf(".")) : null;
|
|
9
|
+
}
|
|
10
|
+
static toFile(blob, fileName) {
|
|
11
|
+
const data = blob;
|
|
12
|
+
data.lastModifiedDate = new Date();
|
|
13
|
+
data.name = fileName.split(/\\|\//g).pop();
|
|
14
|
+
return data;
|
|
15
|
+
}
|
|
16
|
+
static dataToBlob(data) {
|
|
17
|
+
const parts = data.split(",");
|
|
18
|
+
const byteString = atob(parts[1]);
|
|
19
|
+
const mimeString = parts[0].split(":")[1].split(";")[0];
|
|
20
|
+
const ab = new ArrayBuffer(byteString.length);
|
|
21
|
+
const ia = new Uint8Array(ab);
|
|
22
|
+
for (let i = 0; i < byteString.length; i++) {
|
|
23
|
+
ia[i] = byteString.charCodeAt(i);
|
|
24
|
+
}
|
|
25
|
+
return new Blob([ab], { type: mimeString });
|
|
26
|
+
}
|
|
27
|
+
static saveBlob(blob, fileName) {
|
|
28
|
+
if (typeof saveAs == "undefined") {
|
|
29
|
+
throw Error("FileSaver library is not loaded. Please load it: https://www.npmjs.com/package/file-saver");
|
|
30
|
+
}
|
|
31
|
+
saveAs(blob, fileName);
|
|
32
|
+
}
|
|
33
|
+
static saveJson(json, fileName) {
|
|
34
|
+
if (!ObjectUtils.isObject(json))
|
|
35
|
+
return;
|
|
36
|
+
FileUtils.saveBlob(new Blob([JSON.stringify(json, null, 4)]), fileName);
|
|
37
|
+
}
|
|
38
|
+
static readFileAsText(file) {
|
|
39
|
+
return FileUtils.readFile(
|
|
40
|
+
// @dynamic
|
|
41
|
+
reader => reader.readAsText(file));
|
|
42
|
+
}
|
|
43
|
+
static readFileAsBinaryString(file) {
|
|
44
|
+
return FileUtils.readFile(
|
|
45
|
+
// @dynamic
|
|
46
|
+
reader => reader.readAsBinaryString(file));
|
|
47
|
+
}
|
|
48
|
+
static readFileAsDataURL(file) {
|
|
49
|
+
return FileUtils.readFile(
|
|
50
|
+
// @dynamic
|
|
51
|
+
reader => reader.readAsDataURL(file));
|
|
52
|
+
}
|
|
53
|
+
static readDataFromUrl(http, url) {
|
|
54
|
+
return new Promise(
|
|
55
|
+
// @dynamic
|
|
56
|
+
(resolve, reject) => {
|
|
57
|
+
if (!url) {
|
|
58
|
+
reject({
|
|
59
|
+
message: "The url is not specified"
|
|
60
|
+
});
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
if ((/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$/g).test(url)) {
|
|
64
|
+
resolve(url);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
first()(http.get(url, {
|
|
68
|
+
responseType: "blob"
|
|
69
|
+
})).subscribe((blob) => {
|
|
70
|
+
FileUtils.readFileAsDataURL(blob).then(resolve, reject);
|
|
71
|
+
}, reason => {
|
|
72
|
+
if (reason.status > 0)
|
|
73
|
+
reject(reason);
|
|
74
|
+
else
|
|
75
|
+
resolve(url);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
static readFile(callback) {
|
|
80
|
+
return new Promise(
|
|
81
|
+
// @dynamic
|
|
82
|
+
(resolve, reject) => {
|
|
83
|
+
const reader = new FileReader();
|
|
84
|
+
reader.onload = (event) => resolve(event.target.result);
|
|
85
|
+
reader.onerror = reject;
|
|
86
|
+
callback(reader);
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvdXRpbHMvZmlsZS51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBSTNDLE1BQU0sT0FBTyxTQUFTO0lBRWxCLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBVTtRQUMxQixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3BGLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVU7UUFDckIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBVSxFQUFFLFFBQWdCO1FBQ3RDLE1BQU0sSUFBSSxHQUFRLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDM0MsT0FBYSxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBWTtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMs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QyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBVSxFQUFFLEVBQUU7Z0JBQ3pCLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzVELENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRTtnQkFDUixJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDOztvQkFFZixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFTyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQXNDO1FBQzFELE9BQU8sSUFBSSxPQUFPO1FBQ2QsV0FBVztRQUNYLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7WUFDaEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDeEIsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FDSixDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHtmaXJzdH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCIuL29iamVjdC51dGlsc1wiO1xyXG5cclxuZGVjbGFyZSBjb25zdCBzYXZlQXM6IGFueTtcclxuXHJcbmV4cG9ydCBjbGFzcyBGaWxlVXRpbHMge1xyXG5cclxuICAgIHN0YXRpYyBnZXRFeHRlbnNpb24oZmlsZTogRmlsZSk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGZpbGUgPyBmaWxlLm5hbWUuc3Vic3RyKGZpbGUubmFtZS5sYXN0SW5kZXhPZihcIi5cIikpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXROYW1lKGZpbGU6IEZpbGUpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBmaWxlID8gZmlsZS5uYW1lLnN1YnN0cigwLCBmaWxlLm5hbWUubGFzdEluZGV4T2YoXCIuXCIpKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHRvRmlsZShibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKTogRmlsZSB7XHJcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gYmxvYjtcclxuICAgICAgICBkYXRhLmxhc3RNb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGRhdGEubmFtZSA9IGZpbGVOYW1lLnNwbGl0KC9cXFxcfFxcLy9nKS5wb3AoKTtcclxuICAgICAgICByZXR1cm4gPEZpbGU+ZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGF0YVRvQmxvYihkYXRhOiBzdHJpbmcpOiBCbG9iIHtcclxuICAgICAgICBjb25zdCBwYXJ0cyA9IGRhdGEuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIGNvbnN0IGJ5dGVTdHJpbmcgPSBhdG9iKHBhcnRzWzFdKTtcclxuICAgICAgICBjb25zdCBtaW1lU3RyaW5nID0gcGFydHNbMF0uc3BsaXQoXCI6XCIpWzFdLnNwbGl0KFwiO1wiKVswXTtcclxuXHJcbiAgICAgICAgY29uc3QgYWIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xyXG4gICAgICAgIGNvbnN0IGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpYVtpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYWJdLCB7dHlwZTogbWltZVN0cmluZ30pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzYXZlQmxvYihibG9iOiBCbG9iLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzYXZlQXMgPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkZpbGVTYXZlciBsaWJyYXJ5IGlzIG5vdCBsb2FkZWQuIFBsZWFzZSBsb2FkIGl0OiBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9maWxlLXNhdmVyXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzYXZlQXMoYmxvYiwgZmlsZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBzYXZlSnNvbihqc29uOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIU9iamVjdFV0aWxzLmlzT2JqZWN0KGpzb24pKSByZXR1cm47XHJcbiAgICAgICAgRmlsZVV0aWxzLnNhdmVCbG9iKG5ldyBCbG9iKFtKU09OLnN0cmluZ2lmeShqc29uLCBudWxsLCA0KV0pLCBmaWxlTmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlYWRGaWxlQXNUZXh0KGZpbGU6IEJsb2IpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBGaWxlVXRpbHMucmVhZEZpbGUoXHJcbiAgICAgICAgICAgIC8vIEBkeW5hbWljXHJcbiAgICAgICAgICAgIHJlYWRlciA9PiByZWFkZXIucmVhZEFzVGV4dChmaWxlKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlYWRGaWxlQXNCaW5hcnlTdHJpbmcoZmlsZTogQmxvYik6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIEZpbGVVdGlscy5yZWFkRmlsZShcclxuICAgICAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICAgICAgcmVhZGVyID0+IHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoZmlsZSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByZWFkRmlsZUFzRGF0YVVSTChmaWxlOiBCbG9iKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gRmlsZVV0aWxzLnJlYWRGaWxlKFxyXG4gICAgICAgICAgICAvLyBAZHluYW1pY1xyXG4gICAgICAgICAgICByZWFkZXIgPT4gcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByZWFkRGF0YUZyb21VcmwoaHR0cDogSHR0cENsaWVudCwgdXJsOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KFxyXG4gICAgICAgICAgICAvLyBAZHluYW1pY1xyXG4gICAgICAgICAgICAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IFwiVGhlIHVybCBpcyBub3Qgc3BlY2lmaWVkXCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoKC9eKFtBLVphLXowLTkrL117NH0pKihbQS1aYS16MC05Ky9dezR9fFtBLVphLXowLTkrL117M309fFtBLVphLXowLTkrL117Mn09PSkkL2cpLnRlc3QodXJsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodXJsKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBmaXJzdCgpKGh0dHAuZ2V0KHVybCwge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCJcclxuICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoKGJsb2I6IEJsb2IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBGaWxlVXRpbHMucmVhZEZpbGVBc0RhdGFVUkwoYmxvYikudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgfSwgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVhc29uLnN0YXR1cyA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh1cmwpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHJlYWRGaWxlKGNhbGxiYWNrOiAocmVhZGVyOiBGaWxlUmVhZGVyKSA9PiB2b2lkKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPihcclxuICAgICAgICAgICAgLy8gQGR5bmFtaWNcclxuICAgICAgICAgICAgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZXZlbnQ6IGFueSkgPT4gcmVzb2x2ZShldmVudC50YXJnZXQucmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xyXG4gICAgICAgICAgICAgICAgY2FsbGJhY2socmVhZGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Subject } from "rxjs";
|
|
2
|
+
export class GenericValue extends Subject {
|
|
3
|
+
constructor(value = null) {
|
|
4
|
+
super();
|
|
5
|
+
this._value = value;
|
|
6
|
+
}
|
|
7
|
+
get value() {
|
|
8
|
+
return this._value;
|
|
9
|
+
}
|
|
10
|
+
set value(value) {
|
|
11
|
+
if (value == this._value)
|
|
12
|
+
return;
|
|
13
|
+
this._value = value;
|
|
14
|
+
this.next(value);
|
|
15
|
+
}
|
|
16
|
+
setJustValue(value) {
|
|
17
|
+
this._value = value;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy12YWx1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvdXRpbHMvZ2VuZXJpYy12YWx1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE1BQU0sT0FBTyxZQUFnQixTQUFRLE9BQVU7SUFjM0MsWUFBWSxRQUFXLElBQUk7UUFDdkIsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBZkQsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFRO1FBQ2QsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQVNELFlBQVksQ0FBQyxLQUFRO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBHZW5lcmljVmFsdWU8VD4gZXh0ZW5kcyBTdWJqZWN0PFQ+IHtcclxuXHJcbiAgICBnZXQgdmFsdWUoKTogVCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCB2YWx1ZSh2YWx1ZTogVCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLl92YWx1ZSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5uZXh0KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF92YWx1ZTogVDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCA9IG51bGwpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0SnVzdFZhbHVlKHZhbHVlOiBUKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
export class Rect {
|
|
2
|
+
constructor(x, y, width, height, rotation = 0) {
|
|
3
|
+
this.x = x;
|
|
4
|
+
this.y = y;
|
|
5
|
+
this.width = width;
|
|
6
|
+
this.height = height;
|
|
7
|
+
this.rotation = rotation;
|
|
8
|
+
}
|
|
9
|
+
get center() {
|
|
10
|
+
return new Point(this.x, this.y);
|
|
11
|
+
}
|
|
12
|
+
get left() {
|
|
13
|
+
return this.x - this.width * .5;
|
|
14
|
+
}
|
|
15
|
+
get right() {
|
|
16
|
+
return this.x + this.width * .5;
|
|
17
|
+
}
|
|
18
|
+
get bottom() {
|
|
19
|
+
return this.y - this.height * .5;
|
|
20
|
+
}
|
|
21
|
+
get top() {
|
|
22
|
+
return this.y + this.height * .5;
|
|
23
|
+
}
|
|
24
|
+
distance(p) {
|
|
25
|
+
p = p.rotateAround(this.center, -this.rotation);
|
|
26
|
+
const x = Math.max(this.left - p.x, 0, p.x - this.right);
|
|
27
|
+
const y = Math.max(this.bottom - p.y, 0, p.y - this.top);
|
|
28
|
+
return Math.sqrt(x * x + y * y);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export class Circle {
|
|
32
|
+
constructor(x, y, radius) {
|
|
33
|
+
this.x = x;
|
|
34
|
+
this.y = y;
|
|
35
|
+
this.radius = radius;
|
|
36
|
+
}
|
|
37
|
+
get center() {
|
|
38
|
+
return new Point(this.x, this.y);
|
|
39
|
+
}
|
|
40
|
+
get left() {
|
|
41
|
+
return new Point(this.x - this.radius, this.y);
|
|
42
|
+
}
|
|
43
|
+
get right() {
|
|
44
|
+
return new Point(this.x + this.radius, this.y);
|
|
45
|
+
}
|
|
46
|
+
get top() {
|
|
47
|
+
return new Point(this.x, this.y + this.radius);
|
|
48
|
+
}
|
|
49
|
+
get bottom() {
|
|
50
|
+
return new Point(this.x, this.y - this.radius);
|
|
51
|
+
}
|
|
52
|
+
get rect() {
|
|
53
|
+
return new Rect(this.x, this.y, this.radius * 2, this.radius * 2);
|
|
54
|
+
}
|
|
55
|
+
distance(p) {
|
|
56
|
+
return this.center.distance(p) - this.radius;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export class Point {
|
|
60
|
+
constructor(x, y) {
|
|
61
|
+
this.x = x;
|
|
62
|
+
this.y = y;
|
|
63
|
+
}
|
|
64
|
+
get length() {
|
|
65
|
+
return this.distance(Point.Zero);
|
|
66
|
+
}
|
|
67
|
+
get perpendicular() {
|
|
68
|
+
return new Point(this.y, -this.x);
|
|
69
|
+
}
|
|
70
|
+
add(p) {
|
|
71
|
+
return new Point(this.x + p.x, this.y + p.y);
|
|
72
|
+
}
|
|
73
|
+
subtract(p) {
|
|
74
|
+
return new Point(this.x - p.x, this.y - p.y);
|
|
75
|
+
}
|
|
76
|
+
multiply(p) {
|
|
77
|
+
if (p instanceof Point) {
|
|
78
|
+
return new Point(this.x * p.x, this.y * p.y);
|
|
79
|
+
}
|
|
80
|
+
return new Point(this.x * p, this.y * p);
|
|
81
|
+
}
|
|
82
|
+
distance(b) {
|
|
83
|
+
const x = b.x - this.x;
|
|
84
|
+
const y = b.y - this.y;
|
|
85
|
+
return Math.sqrt(x * x + y * y);
|
|
86
|
+
}
|
|
87
|
+
lerp(p, ratio) {
|
|
88
|
+
const diff = p.subtract(this);
|
|
89
|
+
return this.add(diff.multiply(ratio));
|
|
90
|
+
}
|
|
91
|
+
perpendicularTo(p, length) {
|
|
92
|
+
const diff = p.perpendicular.subtract(this.perpendicular);
|
|
93
|
+
const ratio = length / diff.length;
|
|
94
|
+
const center = this.lerp(p, .5);
|
|
95
|
+
return center.add(diff.multiply(ratio));
|
|
96
|
+
}
|
|
97
|
+
circleWith(a, b) {
|
|
98
|
+
const yDelta_a = b.y - a.y;
|
|
99
|
+
const xDelta_a = b.x - a.x;
|
|
100
|
+
const yDelta_b = this.y - b.y;
|
|
101
|
+
const xDelta_b = this.x - b.x;
|
|
102
|
+
const aSlope = yDelta_a / xDelta_a;
|
|
103
|
+
const bSlope = yDelta_b / xDelta_b;
|
|
104
|
+
const x = (aSlope * bSlope * (a.y - this.y) + bSlope * (a.x + b.x) - aSlope * (b.x + this.x)) / (2 * (bSlope - aSlope));
|
|
105
|
+
const y = -1 * (x - (a.x + b.x) / 2) / aSlope + (a.y + b.y) / 2;
|
|
106
|
+
const center = new Point(x, y);
|
|
107
|
+
return new Circle(center.x, center.y, center.distance(this));
|
|
108
|
+
}
|
|
109
|
+
tangents(c) {
|
|
110
|
+
const pd = c.center.subtract(this);
|
|
111
|
+
const a = Math.asin(c.radius / pd.length);
|
|
112
|
+
const b = Math.atan2(pd.y, pd.x);
|
|
113
|
+
// Tangent points
|
|
114
|
+
let t = b - a;
|
|
115
|
+
const t1 = new Point(c.x + c.radius * Math.sin(t), c.y + c.radius * -Math.cos(t));
|
|
116
|
+
t = b + a;
|
|
117
|
+
const t2 = new Point(c.x + c.radius * -Math.sin(t), c.y + c.radius * Math.cos(t));
|
|
118
|
+
return [t1, t2];
|
|
119
|
+
}
|
|
120
|
+
angle(p) {
|
|
121
|
+
const diff = p.subtract(this);
|
|
122
|
+
return Math.atan2(diff.y, diff.x) * 180 / Math.PI;
|
|
123
|
+
}
|
|
124
|
+
rotateAround(p, angle) {
|
|
125
|
+
const rotation = (p.angle(this) + angle) * Math.PI / 180;
|
|
126
|
+
const distance = p.distance(this);
|
|
127
|
+
const rotated = new Point(Math.cos(rotation) * distance, Math.sin(rotation) * distance);
|
|
128
|
+
return p.add(rotated);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
Point.Zero = new Point(0, 0);
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3V0aWxzL2dlb21ldHJ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sT0FBTyxJQUFJO0lBc0JiLFlBQXFCLENBQVMsRUFBVyxDQUFTLEVBQVcsS0FBYSxFQUFXLE1BQWMsRUFBVyxXQUFtQixDQUFDO1FBQTdHLE1BQUMsR0FBRCxDQUFDLENBQVE7UUFBVyxNQUFDLEdBQUQsQ0FBQyxDQUFRO1FBQVcsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUFXLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVyxhQUFRLEdBQVIsUUFBUSxDQUFZO0lBRWxJLENBQUM7SUF0QkQsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ0osT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0gsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFNRCxRQUFRLENBQUMsQ0FBUTtRQUNiLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFD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QUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBUztRQUNkLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqQyxpQkFBaUI7UUFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLE1BQU0sRUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLE1BQU0sRUFBRSxHQUFHLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsRixPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxLQUFLLENBQUMsQ0FBUTtRQUNWLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCxZQUFZLENBQUMsQ0FBUSxFQUFFLEtBQWE7UUFDaEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDO1FBQ3pELE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUN4RixPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDMUIsQ0FBQzs7QUFuRk0sVUFBSSxHQUFVLElBQUksS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVNoYXBlIHtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHk6IG51bWJlcjtcclxuXHJcbiAgICBkaXN0YW5jZShzaGFwZTogSVNoYXBlKTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVjdCBpbXBsZW1lbnRzIElTaGFwZSB7XHJcblxyXG4gICAgZ2V0IGNlbnRlcigpOiBQb2ludCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLngsIHRoaXMueSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxlZnQoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy54IC0gdGhpcy53aWR0aCAqIC41O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByaWdodCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnggKyB0aGlzLndpZHRoICogLjU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGJvdHRvbSgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnkgLSB0aGlzLmhlaWdodCAqIC41O1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB0b3AoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy55ICsgdGhpcy5oZWlnaHQgKiAuNTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSB4OiBudW1iZXIsIHJlYWRvbmx5IHk6IG51bWJlciwgcmVhZG9ubHkgd2lkdGg6IG51bWJlciwgcmVhZG9ubHkgaGVpZ2h0OiBudW1iZXIsIHJlYWRvbmx5IHJvdGF0aW9uOiBudW1iZXIgPSAwKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGRpc3RhbmNlKHA6IFBvaW50KTogbnVtYmVyIHtcclxuICAgICAgICBwID0gcC5yb3RhdGVBcm91bmQodGhpcy5jZW50ZXIsIC10aGlzLnJvdGF0aW9uKTtcclxuICAgICAgICBjb25zdCB4ID0gTWF0aC5tYXgodGhpcy5sZWZ0IC0gcC54LCAwLCBwLnggLSB0aGlzLnJpZ2h0KTtcclxuICAgICAgICBjb25zdCB5ID0gTWF0aC5tYXgodGhpcy5ib3R0b20gLSBwLnksIDAsIHAueSAtIHRoaXMudG9wKTtcclxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHgqeCArIHkqeSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDaXJjbGUgaW1wbGVtZW50cyBJU2hhcGUge1xyXG5cclxuICAgIGdldCBjZW50ZXIoKTogUG9pbnQge1xyXG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBsZWZ0KCk6IFBvaW50IHtcclxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCAtIHRoaXMucmFkaXVzLCB0aGlzLnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCByaWdodCgpOiBQb2ludCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLnggKyB0aGlzLnJhZGl1cywgdGhpcy55KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdG9wKCk6IFBvaW50IHtcclxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCwgdGhpcy55ICsgdGhpcy5yYWRpdXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBib3R0b20oKTogUG9pbnQge1xyXG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkgLSB0aGlzLnJhZGl1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJlY3QoKTogUmVjdCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBSZWN0KHRoaXMueCwgdGhpcy55LCB0aGlzLnJhZGl1cyAqIDIsIHRoaXMucmFkaXVzICogMik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgeDogbnVtYmVyLCByZWFkb25seSB5OiBudW1iZXIsIHJlYWRvbmx5IHJhZGl1czogbnVtYmVyKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGRpc3RhbmNlKHA6IFBvaW50KTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jZW50ZXIuZGlzdGFuY2UocCkgLSB0aGlzLnJhZGl1cztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFBvaW50IGltcGxlbWVudHMgSVNoYXBlIHtcclxuXHJcbiAgICBzdGF0aWMgWmVybzogUG9pbnQgPSBuZXcgUG9pbnQoMCwgMCk7XHJcblxyXG4gICAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc3RhbmNlKFBvaW50Llplcm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwZXJwZW5kaWN1bGFyKCk6IFBvaW50IHtcclxuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueSwgLXRoaXMueCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgeDogbnVtYmVyLCByZWFkb25seSB5OiBudW1iZXIpIHtcclxuICAgIH1cclxuXHJcbiAgICBhZGQocDogUG9pbnQpOiBQb2ludCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLnggKyBwLngsIHRoaXMueSArIHAueSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3VidHJhY3QocDogUG9pbnQpOiBQb2ludCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLnggLSBwLngsIHRoaXMueSAtIHAueSk7XHJcbiAgICB9XHJcblxyXG4gICAgbXVsdGlwbHkocDogUG9pbnQgfCBudW1iZXIpOiBQb2ludCB7XHJcbiAgICAgICAgaWYgKHAgaW5zdGFuY2VvZiBQb2ludCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50KHRoaXMueCAqIHAueCwgdGhpcy55ICogcC55KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludCh0aGlzLnggKiBwLCB0aGlzLnkgKiBwKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXN0YW5jZShiOiBQb2ludCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgeCA9IGIueCAtIHRoaXMueDtcclxuICAgICAgICBjb25zdCB5ID0gYi55IC0gdGhpcy55O1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGVycChwOiBQb2ludCwgcmF0aW86IG51bWJlcik6IFBvaW50IHtcclxuICAgICAgICBjb25zdCBkaWZmID0gcC5zdWJ0cmFjdCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGQoZGlmZi5tdWx0aXBseShyYXRpbykpO1xyXG4gICAgfVxyXG5cclxuICAgIHBlcnBlbmRpY3VsYXJUbyhwOiBQb2ludCwgbGVuZ3RoOiBudW1iZXIpOiBQb2ludCB7XHJcbiAgICAgICAgY29uc3QgZGlmZiA9IHAucGVycGVuZGljdWxhci5zdWJ0cmFjdCh0aGlzLnBlcnBlbmRpY3VsYXIpO1xyXG4gICAgICAgIGNvbnN0IHJhdGlvID0gbGVuZ3RoIC8gZGlmZi5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgY2VudGVyID0gdGhpcy5sZXJwKHAsIC41KTtcclxuICAgICAgICByZXR1cm4gY2VudGVyLmFkZChkaWZmLm11bHRpcGx5KHJhdGlvKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2lyY2xlV2l0aChhOiBQb2ludCwgYjogUG9pbnQpOiBDaXJjbGUge1xyXG4gICAgICAgIGNvbnN0IHlEZWx0YV9hID0gYi55IC0gYS55O1xyXG4gICAgICAgIGNvbnN0IHhEZWx0YV9hID0gYi54IC0gYS54O1xyXG4gICAgICAgIGNvbnN0IHlEZWx0YV9iID0gdGhpcy55IC0gYi55O1xyXG4gICAgICAgIGNvbnN0IHhEZWx0YV9iID0gdGhpcy54IC0gYi54O1xyXG5cclxuICAgICAgICBjb25zdCBhU2xvcGUgPSB5RGVsdGFfYSAvIHhEZWx0YV9hO1xyXG4gICAgICAgIGNvbnN0IGJTbG9wZSA9IHlEZWx0YV9iIC8geERlbHRhX2I7XHJcblxyXG4gICAgICAgIGNvbnN0IHggPSAoYVNsb3BlICogYlNsb3BlICogKGEueSAtIHRoaXMueSkgKyBiU2xvcGUgKiAoYS54ICsgYi54KSAtIGFTbG9wZSAqIChiLnggKyB0aGlzLngpKSAvICgyICogKGJTbG9wZSAtIGFTbG9wZSkpO1xyXG4gICAgICAgIGNvbnN0IHkgPSAtMSAqICh4IC0gKGEueCArIGIueCkgLyAyKSAvIGFTbG9wZSArIChhLnkgKyBiLnkpIC8gMjtcclxuICAgICAgICBjb25zdCBjZW50ZXIgPSBuZXcgUG9pbnQoeCwgeSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBDaXJjbGUoY2VudGVyLngsIGNlbnRlci55LCBjZW50ZXIuZGlzdGFuY2UodGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHRhbmdlbnRzKGM6IENpcmNsZSk6IFBvaW50W10ge1xyXG4gICAgICAgIGNvbnN0IHBkID0gYy5jZW50ZXIuc3VidHJhY3QodGhpcyk7XHJcbiAgICAgICAgY29uc3QgYSA9IE1hdGguYXNpbihjLnJhZGl1cyAvIHBkLmxlbmd0aCk7XHJcbiAgICAgICAgY29uc3QgYiA9IE1hdGguYXRhbjIocGQueSwgcGQueCk7XHJcbiAgICAgICAgLy8gVGFuZ2VudCBwb2ludHNcclxuICAgICAgICBsZXQgdCA9IGIgLSBhO1xyXG4gICAgICAgIGNvbnN0IHQxID0gbmV3IFBvaW50KGMueCArIGMucmFkaXVzICogTWF0aC5zaW4odCksIGMueSArIGMucmFkaXVzICogLU1hdGguY29zKHQpKTtcclxuICAgICAgICB0ID0gYiArIGE7XHJcbiAgICAgICAgY29uc3QgdDIgPSBuZXcgUG9pbnQoYy54ICsgYy5yYWRpdXMgKiAtTWF0aC5zaW4odCksIGMueSArIGMucmFkaXVzICogTWF0aC5jb3ModCkpO1xyXG4gICAgICAgIHJldHVybiBbdDEsIHQyXTtcclxuICAgIH1cclxuXHJcbiAgICBhbmdsZShwOiBQb2ludCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgZGlmZiA9IHAuc3VidHJhY3QodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguYXRhbjIoZGlmZi55LCBkaWZmLngpICogMTgwIC8gTWF0aC5QSTtcclxuICAgIH1cclxuXHJcbiAgICByb3RhdGVBcm91bmQocDogUG9pbnQsIGFuZ2xlOiBudW1iZXIpOiBQb2ludCB7XHJcbiAgICAgICAgY29uc3Qgcm90YXRpb24gPSAocC5hbmdsZSh0aGlzKSArIGFuZ2xlKSAqIE1hdGguUEkgLyAxODA7XHJcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBwLmRpc3RhbmNlKHRoaXMpO1xyXG4gICAgICAgIGNvbnN0IHJvdGF0ZWQgPSBuZXcgUG9pbnQoTWF0aC5jb3Mocm90YXRpb24pICogZGlzdGFuY2UsIE1hdGguc2luKHJvdGF0aW9uKSAqIGRpc3RhbmNlKTtcclxuICAgICAgICByZXR1cm4gcC5hZGQocm90YXRlZCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Invokable } from "invokable";
|
|
2
|
+
export class Initializer {
|
|
3
|
+
constructor(callback, shouldInit = true) {
|
|
4
|
+
this.callback = callback;
|
|
5
|
+
this.shouldInit = shouldInit;
|
|
6
|
+
this.initialized = !this.shouldInit;
|
|
7
|
+
// @ts-ignore
|
|
8
|
+
return Invokable.create(this);
|
|
9
|
+
}
|
|
10
|
+
get isInitialized() {
|
|
11
|
+
return this.initialized;
|
|
12
|
+
}
|
|
13
|
+
[Invokable.call]() {
|
|
14
|
+
if (this.initialized)
|
|
15
|
+
return null;
|
|
16
|
+
this.initialized = true;
|
|
17
|
+
return this.callback();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdGlhbGl6ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmd4LXV0aWxzL3V0aWxzL2luaXRpYWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFFcEMsTUFBTSxPQUFPLFdBQVc7SUFRcEIsWUFBb0IsUUFBaUIsRUFBVSxhQUFzQixJQUFJO1FBQXJELGFBQVEsR0FBUixRQUFRLENBQVM7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFnQjtRQUNyRSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNwQyxhQUFhO1FBQ2IsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFSRCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQVFELENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNaLElBQUksSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0ludm9rYWJsZX0gZnJvbSBcImludm9rYWJsZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEluaXRpYWxpemVyPFQ+IHtcclxuXHJcbiAgICBwcml2YXRlIGluaXRpYWxpemVkOiBib29sZWFuO1xyXG5cclxuICAgIGdldCBpc0luaXRpYWxpemVkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2FsbGJhY2s6ICgpID0+IFQsIHByaXZhdGUgc2hvdWxkSW5pdDogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gIXRoaXMuc2hvdWxkSW5pdDtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcmV0dXJuIEludm9rYWJsZS5jcmVhdGUodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgW0ludm9rYWJsZS5jYWxsXSgpOiBUIHtcclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FsbGJhY2soKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJbml0aWFsaXplcjxUPiB7XHJcbiAgICAoKTogVDtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export class LoaderUtils {
|
|
2
|
+
static loadScript(src, async = false) {
|
|
3
|
+
this.scriptPromises[src] = this.scriptPromises[src] || new Promise((resolve, reject) => {
|
|
4
|
+
// Load script
|
|
5
|
+
const script = document.createElement("script");
|
|
6
|
+
script.type = "text/javascript";
|
|
7
|
+
script.src = src;
|
|
8
|
+
script.async = async;
|
|
9
|
+
if (script.readyState) {
|
|
10
|
+
// Internet explorer
|
|
11
|
+
script.onreadystatechange = () => {
|
|
12
|
+
if (script.readyState === "loaded" || script.readyState === "complete") {
|
|
13
|
+
script.onreadystatechange = null;
|
|
14
|
+
resolve(script);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
// Other browsers
|
|
20
|
+
script.onload = () => resolve(script);
|
|
21
|
+
}
|
|
22
|
+
script.onerror = (error) => reject(error);
|
|
23
|
+
document.body.appendChild(script);
|
|
24
|
+
});
|
|
25
|
+
return this.scriptPromises[src];
|
|
26
|
+
}
|
|
27
|
+
static loadStyle(src) {
|
|
28
|
+
this.stylePromises[src] = this.stylePromises[src] || new Promise((resolve, reject) => {
|
|
29
|
+
// Load script
|
|
30
|
+
const link = document.createElement("link");
|
|
31
|
+
link.rel = "stylesheet";
|
|
32
|
+
link.type = "text/css";
|
|
33
|
+
link.href = src;
|
|
34
|
+
if (link.readyState) {
|
|
35
|
+
// Internet explorer
|
|
36
|
+
link.onreadystatechange = () => {
|
|
37
|
+
if (link.readyState === "loaded" || link.readyState === "complete") {
|
|
38
|
+
link.onreadystatechange = null;
|
|
39
|
+
resolve(link);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Other browsers
|
|
45
|
+
link.onload = () => resolve(link);
|
|
46
|
+
}
|
|
47
|
+
link.onerror = (error) => reject(error);
|
|
48
|
+
document.body.appendChild(link);
|
|
49
|
+
});
|
|
50
|
+
return this.stylePromises[src];
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
LoaderUtils.scriptPromises = {};
|
|
54
|
+
LoaderUtils.stylePromises = {};
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25neC11dGlscy91dGlscy9sb2FkZXIudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLFdBQVc7SUFLcEIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFXLEVBQUUsUUFBaUIsS0FBSztRQUNqRCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxPQUFPLENBQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDeEYsY0FBYztZQUNkLE1BQU0sTUFBTSxHQUFRLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckQsTUFBTSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztZQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNqQixNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLG9CQUFvQjtnQkFDcEIsTUFBTSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtvQkFDN0IsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTt3QkFDcEUsTUFBTSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQzt3QkFDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNuQjtnQkFDTCxDQUFDLENBQUM7YUFDTDtpQkFBTTtnQkFDSCxpQkFBaUI7Z0JBQ2pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3pDO1lBQ0QsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQVc7UUFDeEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3RGLGNBQWM7WUFDZCxNQUFNLElBQUksR0FBUSxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBRWhCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtnQkFDakIsb0JBQW9CO2dCQUNwQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxFQUFFO29CQUMzQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO3dCQUNoRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO3dCQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ2pCO2dCQUNMLENBQUMsQ0FBQzthQUNMO2lCQUFNO2dCQUNILGlCQUFpQjtnQkFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDckM7WUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0MsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQzs7QUFwRE0sMEJBQWMsR0FBb0IsRUFBRSxDQUFDO0FBQ3JDLHlCQUFhLEdBQW1CLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SVNjcmlwdFByb21pc2VzLCBJU3R5bGVQcm9taXNlc30gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIExvYWRlclV0aWxzIHtcclxuXHJcbiAgICBzdGF0aWMgc2NyaXB0UHJvbWlzZXM6IElTY3JpcHRQcm9taXNlcyA9IHt9O1xyXG4gICAgc3RhdGljIHN0eWxlUHJvbWlzZXM6IElTdHlsZVByb21pc2VzID0ge307XHJcblxyXG4gICAgc3RhdGljIGxvYWRTY3JpcHQoc3JjOiBzdHJpbmcsIGFzeW5jOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPEhUTUxTY3JpcHRFbGVtZW50PiB7XHJcbiAgICAgICAgdGhpcy5zY3JpcHRQcm9taXNlc1tzcmNdID0gdGhpcy5zY3JpcHRQcm9taXNlc1tzcmNdIHx8IG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBMb2FkIHNjcmlwdFxyXG4gICAgICAgICAgICBjb25zdCBzY3JpcHQ6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XHJcbiAgICAgICAgICAgIHNjcmlwdC50eXBlID0gXCJ0ZXh0L2phdmFzY3JpcHRcIjtcclxuICAgICAgICAgICAgc2NyaXB0LnNyYyA9IHNyYztcclxuICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gYXN5bmM7XHJcbiAgICAgICAgICAgIGlmIChzY3JpcHQucmVhZHlTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSW50ZXJuZXQgZXhwbG9yZXJcclxuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoc2NyaXB0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gT3RoZXIgYnJvd3NlcnNcclxuICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKHNjcmlwdCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNjcmlwdFByb21pc2VzW3NyY107XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGxvYWRTdHlsZShzcmM6IHN0cmluZyk6IFByb21pc2U8SFRNTExpbmtFbGVtZW50PiB7XHJcbiAgICAgICAgdGhpcy5zdHlsZVByb21pc2VzW3NyY10gPSB0aGlzLnN0eWxlUHJvbWlzZXNbc3JjXSB8fCBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgLy8gTG9hZCBzY3JpcHRcclxuICAgICAgICAgICAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XHJcbiAgICAgICAgICAgIGxpbmsucmVsID0gXCJzdHlsZXNoZWV0XCI7XHJcbiAgICAgICAgICAgIGxpbmsudHlwZSA9IFwidGV4dC9jc3NcIjtcclxuICAgICAgICAgICAgbGluay5ocmVmID0gc3JjO1xyXG5cclxuICAgICAgICAgICAgaWYgKGxpbmsucmVhZHlTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSW50ZXJuZXQgZXhwbG9yZXJcclxuICAgICAgICAgICAgICAgIGxpbmsub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsaW5rLnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgbGluay5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluay5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGxpbmspO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPdGhlciBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgbGluay5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKGxpbmspO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxpbmsub25lcnJvciA9IChlcnJvcjogYW55KSA9PiByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlUHJvbWlzZXNbc3JjXTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ObjectUtils } from "./object.utils";
|
|
2
|
+
export class MathUtils {
|
|
3
|
+
static equal(a, b, epsilon = null) {
|
|
4
|
+
epsilon = ObjectUtils.isNumber(epsilon) ? epsilon : Math.E;
|
|
5
|
+
return Math.abs(a - b) < epsilon;
|
|
6
|
+
}
|
|
7
|
+
static clamp(value, min, max) {
|
|
8
|
+
return Math.max(Math.min(value, max), min);
|
|
9
|
+
}
|
|
10
|
+
static round(value, precision = 2, divider = 1) {
|
|
11
|
+
precision = Math.pow(10, precision);
|
|
12
|
+
return Math.round(value * precision / divider) / precision;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZ3gtdXRpbHMvdXRpbHMvbWF0aC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsTUFBTSxPQUFPLFNBQVM7SUFFbEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLFVBQWtCLElBQUk7UUFDckQsT0FBTyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBRSxHQUFHLE9BQU8sQ0FBQztJQUN2QyxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFhLEVBQUUsR0FBVyxFQUFFLEdBQVc7UUFDaEQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzlDLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQWEsRUFBRSxZQUFvQixDQUFDLEVBQUUsVUFBa0IsQ0FBQztRQUNsRSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBQy9ELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gXCIuL29iamVjdC51dGlsc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1hdGhVdGlscyB7XHJcblxyXG4gICAgc3RhdGljIGVxdWFsKGE6IG51bWJlciwgYjogbnVtYmVyLCBlcHNpbG9uOiBudW1iZXIgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgZXBzaWxvbiA9IE9iamVjdFV0aWxzLmlzTnVtYmVyKGVwc2lsb24pID8gZXBzaWxvbiA6IE1hdGguRTtcclxuICAgICAgICByZXR1cm4gTWF0aC5hYnMoIGEgLSBiICkgPCBlcHNpbG9uO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjbGFtcCh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLm1pbih2YWx1ZSwgbWF4KSwgbWluKVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByb3VuZCh2YWx1ZTogbnVtYmVyLCBwcmVjaXNpb246IG51bWJlciA9IDIsIGRpdmlkZXI6IG51bWJlciA9IDEpOiBudW1iZXIge1xyXG4gICAgICAgIHByZWNpc2lvbiA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xyXG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlICogcHJlY2lzaW9uIC8gZGl2aWRlcikgLyBwcmVjaXNpb247XHJcbiAgICB9XHJcbn1cclxuIl19
|