@metadev/lux 0.16.3 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/esm2020/lib/autocomplete/autocomplete.component.mjs +479 -0
  2. package/esm2020/lib/autocomplete-list/autocomplete-list.component.mjs +254 -0
  3. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +75 -0
  4. package/esm2020/lib/checkbox/checkbox.component.mjs +154 -0
  5. package/{esm2015/lib/datasource.js → esm2020/lib/datasource.mjs} +0 -0
  6. package/esm2020/lib/datetime/datetime.component.mjs +306 -0
  7. package/esm2020/lib/filter/filter.component.mjs +152 -0
  8. package/esm2020/lib/geolocation/geolocation.component.mjs +407 -0
  9. package/{esm2015/lib/geolocation/geolocation.service.js → esm2020/lib/geolocation/geolocation.service.mjs} +7 -11
  10. package/esm2020/lib/geolocation/openlayer-loader.service.mjs +62 -0
  11. package/esm2020/lib/helperFns.mjs +109 -0
  12. package/esm2020/lib/input/input.component.mjs +452 -0
  13. package/{esm2015/lib/input/regexp.service.js → esm2020/lib/input/regexp.service.mjs} +7 -6
  14. package/{esm2015/lib/lang.js → esm2020/lib/lang.mjs} +0 -0
  15. package/esm2020/lib/lux.module.mjs +130 -0
  16. package/{esm2015/lib/map/geopoint.js → esm2020/lib/map/geopoint.mjs} +0 -0
  17. package/esm2020/lib/map/map.component.mjs +265 -0
  18. package/esm2020/lib/modal/modal-backdrop.mjs +26 -0
  19. package/esm2020/lib/modal/modal-config.mjs +14 -0
  20. package/{esm2015/lib/modal/modal-dismiss-reasons.js → esm2020/lib/modal/modal-dismiss-reasons.mjs} +0 -0
  21. package/{esm2015/lib/modal/modal-ref.js → esm2020/lib/modal/modal-ref.mjs} +0 -0
  22. package/esm2020/lib/modal/modal-stack.mjs +179 -0
  23. package/esm2020/lib/modal/modal-window.mjs +119 -0
  24. package/esm2020/lib/modal/modal.service.mjs +26 -0
  25. package/{esm2015/lib/modal/util.js → esm2020/lib/modal/util.mjs} +0 -0
  26. package/esm2020/lib/pagination/pagination.component.mjs +137 -0
  27. package/{esm2015/lib/pagination/pagination.js → esm2020/lib/pagination/pagination.mjs} +0 -0
  28. package/esm2020/lib/radiogroup/radiogroup.component.mjs +130 -0
  29. package/esm2020/lib/select/select.component.mjs +149 -0
  30. package/{esm2015/lib/tooltip/placement.js → esm2020/lib/tooltip/placement.mjs} +0 -0
  31. package/{esm2015/lib/tooltip/tooltip-context.js → esm2020/lib/tooltip/tooltip-context.mjs} +0 -0
  32. package/esm2020/lib/tooltip/tooltip.component.mjs +23 -0
  33. package/esm2020/lib/tooltip/tooltip.directive.mjs +60 -0
  34. package/{esm2015/lib/tooltip/tooltip.service.js → esm2020/lib/tooltip/tooltip.service.mjs} +7 -9
  35. package/{esm2015/lib/tooltip/tooltop-content.js → esm2020/lib/tooltip/tooltop-content.mjs} +0 -0
  36. package/esm2020/lib/voice-recognition/voice-recognition.directive.mjs +73 -0
  37. package/{esm2015/lib/window/window.service.js → esm2020/lib/window/window.service.mjs} +0 -0
  38. package/esm2020/metadev-lux.mjs +5 -0
  39. package/esm2020/public-api.mjs +21 -0
  40. package/fesm2015/metadev-lux.mjs +4345 -0
  41. package/fesm2015/metadev-lux.mjs.map +1 -0
  42. package/fesm2020/metadev-lux.mjs +4343 -0
  43. package/fesm2020/metadev-lux.mjs.map +1 -0
  44. package/lib/autocomplete/autocomplete.component.d.ts +3 -0
  45. package/lib/autocomplete-list/autocomplete-list.component.d.ts +3 -0
  46. package/lib/breadcrumb/breadcrumb.component.d.ts +3 -0
  47. package/lib/checkbox/checkbox.component.d.ts +3 -0
  48. package/lib/datetime/datetime.component.d.ts +4 -0
  49. package/lib/filter/filter.component.d.ts +3 -0
  50. package/lib/geolocation/geolocation.component.d.ts +4 -0
  51. package/lib/geolocation/geolocation.service.d.ts +3 -0
  52. package/lib/geolocation/openlayer-loader.service.d.ts +3 -0
  53. package/lib/helperFns.d.ts +2 -0
  54. package/lib/input/input.component.d.ts +15 -0
  55. package/lib/input/regexp.service.d.ts +3 -0
  56. package/lib/lux.module.d.ts +26 -0
  57. package/lib/map/map.component.d.ts +3 -0
  58. package/lib/modal/modal-backdrop.d.ts +3 -0
  59. package/lib/modal/modal-config.d.ts +3 -0
  60. package/lib/modal/modal-stack.d.ts +3 -0
  61. package/lib/modal/modal-window.d.ts +3 -0
  62. package/lib/modal/modal.service.d.ts +3 -0
  63. package/lib/pagination/pagination.component.d.ts +3 -0
  64. package/lib/radiogroup/radiogroup.component.d.ts +3 -0
  65. package/lib/select/select.component.d.ts +3 -0
  66. package/lib/tooltip/tooltip.component.d.ts +3 -0
  67. package/lib/tooltip/tooltip.directive.d.ts +3 -0
  68. package/lib/tooltip/tooltip.service.d.ts +3 -0
  69. package/lib/voice-recognition/voice-recognition.directive.d.ts +3 -0
  70. package/metadev-lux.d.ts +1 -16
  71. package/package.json +20 -8
  72. package/public-api.d.ts +12 -7
  73. package/bundles/metadev-lux.umd.js +0 -4647
  74. package/bundles/metadev-lux.umd.js.map +0 -1
  75. package/esm2015/lib/autocomplete/autocomplete.component.js +0 -455
  76. package/esm2015/lib/autocomplete-list/autocomplete-list.component.js +0 -230
  77. package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -77
  78. package/esm2015/lib/checkbox/checkbox.component.js +0 -142
  79. package/esm2015/lib/datetime/datetime.component.js +0 -275
  80. package/esm2015/lib/filter/filter.component.js +0 -140
  81. package/esm2015/lib/geolocation/geolocation.component.js +0 -371
  82. package/esm2015/lib/geolocation/openlayer-loader.service.js +0 -63
  83. package/esm2015/lib/helperFns.js +0 -93
  84. package/esm2015/lib/input/input.component.js +0 -371
  85. package/esm2015/lib/lux.module.js +0 -83
  86. package/esm2015/lib/map/map.component.js +0 -261
  87. package/esm2015/lib/modal/modal-backdrop.js +0 -19
  88. package/esm2015/lib/modal/modal-config.js +0 -12
  89. package/esm2015/lib/modal/modal-stack.js +0 -182
  90. package/esm2015/lib/modal/modal-window.js +0 -92
  91. package/esm2015/lib/modal/modal.service.js +0 -28
  92. package/esm2015/lib/pagination/pagination.component.js +0 -134
  93. package/esm2015/lib/radiogroup/radiogroup.component.js +0 -114
  94. package/esm2015/lib/select/select.component.js +0 -131
  95. package/esm2015/lib/tooltip/tooltip.component.js +0 -19
  96. package/esm2015/lib/tooltip/tooltip.directive.js +0 -52
  97. package/esm2015/lib/voice-recognition/voice-recognition.directive.js +0 -76
  98. package/esm2015/metadev-lux.js +0 -21
  99. package/esm2015/public-api.js +0 -16
  100. package/fesm2015/metadev-lux.js +0 -4025
  101. package/fesm2015/metadev-lux.js.map +0 -1
  102. package/metadev-lux.metadata.json +0 -1
@@ -0,0 +1,62 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { from, of } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ let openLayersIsInstalled = false;
5
+ export class OpenLayerLoaderService {
6
+ load() {
7
+ if (window.ol) {
8
+ return of(true);
9
+ }
10
+ const openLayerJsUrl = 'https://openlayers.org/en/v5.3.0/build/ol.js';
11
+ const openLayerCssUrl = 'https://openlayers.org/en/v5.3.0/css/ol.css';
12
+ if (!openLayersIsInstalled) {
13
+ openLayersIsInstalled = true; // only try to install it once
14
+ loadCss(openLayerCssUrl, () => { });
15
+ return from(new Promise((resolve, _) => {
16
+ loadScript(openLayerJsUrl, () => resolve(true));
17
+ }));
18
+ }
19
+ return of(true);
20
+ }
21
+ }
22
+ OpenLayerLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: OpenLayerLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
23
+ OpenLayerLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: OpenLayerLoaderService, providedIn: 'root' });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: OpenLayerLoaderService, decorators: [{
25
+ type: Injectable,
26
+ args: [{ providedIn: 'root' }]
27
+ }] });
28
+ /** Dynamically load a script from url and return a callback */
29
+ const loadScript = (url, callback) => {
30
+ const script = document.createElement('script');
31
+ script.type = 'text/javascript';
32
+ if (script.readyState) {
33
+ // for old IE
34
+ script.onreadystatechange = () => {
35
+ if (script.readyState === 'loaded' || script.readyState === 'complete') {
36
+ script.onreadystatechange = null;
37
+ callback();
38
+ }
39
+ };
40
+ }
41
+ else {
42
+ // Others browsers
43
+ script.onload = () => {
44
+ callback();
45
+ };
46
+ }
47
+ script.src = url;
48
+ document.getElementsByTagName('head')[0].appendChild(script);
49
+ };
50
+ /** Dynamically load css from url and return a callback */
51
+ const loadCss = (url, callback) => {
52
+ const link = document.createElement('link');
53
+ link.type = 'text/css';
54
+ link.rel = 'stylesheet';
55
+ link.type = 'text/javascript';
56
+ link.href = url;
57
+ link.onload = () => {
58
+ callback();
59
+ };
60
+ document.getElementsByTagName('head')[0].appendChild(link);
61
+ };
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlbmxheWVyLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvZ2VvbG9jYXRpb24vb3BlbmxheWVyLWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBRTVDLElBQUkscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBR2xDLE1BQU0sT0FBTyxzQkFBc0I7SUFDakMsSUFBSTtRQUNGLElBQUssTUFBYyxDQUFDLEVBQUUsRUFBRTtZQUN0QixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNqQjtRQUVELE1BQU0sY0FBYyxHQUFHLDhDQUE4QyxDQUFDO1FBQ3RFLE1BQU0sZUFBZSxHQUFHLDZDQUE2QyxDQUFDO1FBRXRFLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUMxQixxQkFBcUIsR0FBRyxJQUFJLENBQUMsQ0FBQyw4QkFBOEI7WUFDNUQsT0FBTyxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztZQUNuQyxPQUFPLElBQUksQ0FDVCxJQUFJLE9BQU8sQ0FBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbEMsVUFBVSxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDOzttSEFuQlUsc0JBQXNCO3VIQUF0QixzQkFBc0IsY0FEVCxNQUFNOzJGQUNuQixzQkFBc0I7a0JBRGxDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQXVCbEMsK0RBQStEO0FBQy9ELE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLFFBQW9CLEVBQVEsRUFBRTtJQUM3RCxNQUFNLE1BQU0sR0FBUSxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JELE1BQU0sQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFFaEMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFO1FBQ3JCLGFBQWE7UUFDYixNQUFNLENBQUMsa0JBQWtCLEdBQUcsR0FBUyxFQUFFO1lBQ3JDLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7Z0JBQ3RFLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7Z0JBQ2pDLFFBQVEsRUFBRSxDQUFDO2FBQ1o7UUFDSCxDQUFDLENBQUM7S0FDSDtTQUFNO1FBQ0wsa0JBQWtCO1FBQ2xCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBUyxFQUFFO1lBQ3pCLFFBQVEsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDO0tBQ0g7SUFDRCxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztJQUNqQixRQUFRLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FBQztBQUVGLDBEQUEwRDtBQUMxRCxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQVcsRUFBRSxRQUFvQixFQUFRLEVBQUU7SUFDMUQsTUFBTSxJQUFJLEdBQVEsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQztJQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLFlBQVksQ0FBQztJQUN4QixJQUFJLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0lBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBUyxFQUFFO1FBQ3ZCLFFBQVEsRUFBRSxDQUFDO0lBQ2IsQ0FBQyxDQUFDO0lBQ0YsUUFBUSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5sZXQgb3BlbkxheWVyc0lzSW5zdGFsbGVkID0gZmFsc2U7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgT3BlbkxheWVyTG9hZGVyU2VydmljZSB7XG4gIGxvYWQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKCh3aW5kb3cgYXMgYW55KS5vbCkge1xuICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IG9wZW5MYXllckpzVXJsID0gJ2h0dHBzOi8vb3BlbmxheWVycy5vcmcvZW4vdjUuMy4wL2J1aWxkL29sLmpzJztcbiAgICBjb25zdCBvcGVuTGF5ZXJDc3NVcmwgPSAnaHR0cHM6Ly9vcGVubGF5ZXJzLm9yZy9lbi92NS4zLjAvY3NzL29sLmNzcyc7XG5cbiAgICBpZiAoIW9wZW5MYXllcnNJc0luc3RhbGxlZCkge1xuICAgICAgb3BlbkxheWVyc0lzSW5zdGFsbGVkID0gdHJ1ZTsgLy8gb25seSB0cnkgdG8gaW5zdGFsbCBpdCBvbmNlXG4gICAgICBsb2FkQ3NzKG9wZW5MYXllckNzc1VybCwgKCkgPT4ge30pO1xuICAgICAgcmV0dXJuIGZyb20oXG4gICAgICAgIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlLCBfKSA9PiB7XG4gICAgICAgICAgbG9hZFNjcmlwdChvcGVuTGF5ZXJKc1VybCwgKCkgPT4gcmVzb2x2ZSh0cnVlKSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH1cbn1cblxuLyoqIER5bmFtaWNhbGx5IGxvYWQgYSBzY3JpcHQgZnJvbSB1cmwgYW5kIHJldHVybiBhIGNhbGxiYWNrICovXG5jb25zdCBsb2FkU2NyaXB0ID0gKHVybDogc3RyaW5nLCBjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICBjb25zdCBzY3JpcHQ6IGFueSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuXG4gIGlmIChzY3JpcHQucmVhZHlTdGF0ZSkge1xuICAgIC8vIGZvciBvbGQgSUVcbiAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSAnbG9hZGVkJyB8fCBzY3JpcHQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIE90aGVycyBicm93c2Vyc1xuICAgIHNjcmlwdC5vbmxvYWQgPSAoKTogdm9pZCA9PiB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gIH1cbiAgc2NyaXB0LnNyYyA9IHVybDtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChzY3JpcHQpO1xufTtcblxuLyoqIER5bmFtaWNhbGx5IGxvYWQgY3NzIGZyb20gdXJsIGFuZCByZXR1cm4gYSBjYWxsYmFjayAqL1xuY29uc3QgbG9hZENzcyA9ICh1cmw6IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkID0+IHtcbiAgY29uc3QgbGluazogYW55ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnO1xuICBsaW5rLnJlbCA9ICdzdHlsZXNoZWV0JztcbiAgbGluay50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gIGxpbmsuaHJlZiA9IHVybDtcbiAgbGluay5vbmxvYWQgPSAoKTogdm9pZCA9PiB7XG4gICAgY2FsbGJhY2soKTtcbiAgfTtcbiAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXS5hcHBlbmRDaGlsZChsaW5rKTtcbn07XG4iXX0=
@@ -0,0 +1,109 @@
1
+ // undefined and null functions
2
+ export const exists = (value) => value !== null && value !== undefined;
3
+ export const hasValue = (value) => exists(value) && (typeof value === 'string' ? !isEmptyString(value) : true);
4
+ // string functions
5
+ export const isEmptyString = (value) => value.trim() === '';
6
+ export const isValidEmail = (value) => {
7
+ const re = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
8
+ return re.test(String(value).toLowerCase().trim());
9
+ };
10
+ export const isValidUrl = (value) => {
11
+ const re = /^([a-z]+?:\/\/)?((([a-z\d]([a-z\d-]*[a-z\d])*)\.)+[a-z]{2,}|((\d{1,3}\.){3}\d{1,3}))(\:\d+)?(\/[-a-z\d%_.~+]*)*(\?[;&a-z\d%_.~+=-]*)?(\#[-a-z\d_]*)?$/i;
12
+ return re.test(String(value).toLowerCase().trim());
13
+ };
14
+ export const isValidColor = (value) => {
15
+ value = String(value).toLowerCase();
16
+ // valid values for CSS color property, yet not valid colors by themselves
17
+ if (value === 'currentcolor' ||
18
+ value === 'inherit' ||
19
+ value === 'initial' ||
20
+ value === 'revert' ||
21
+ value === 'unset') {
22
+ return false;
23
+ }
24
+ return CSS.supports('color', value);
25
+ };
26
+ // date functions
27
+ export const isValidDate = (date) => exists(date) ? !isNaN(date.getTime()) : false;
28
+ export const normalizeDate = (value) => {
29
+ if (typeof value === 'string' && value.length > 10) {
30
+ return value.substr(0, 10);
31
+ }
32
+ return value ? value.toString() : null;
33
+ };
34
+ export const addTimezoneOffset = (date) => {
35
+ if (!isValidDate(date)) {
36
+ return date;
37
+ }
38
+ else {
39
+ return new Date(date.getTime() - date.getTimezoneOffset() * 60000);
40
+ }
41
+ };
42
+ // number functions
43
+ export const isValidNumber = (value) => (hasValue(value) ? !Number.isNaN(Number(value)) : false);
44
+ export const numberOfDecimalDigits = (x) => {
45
+ if (isValidNumber(x)) {
46
+ const xString = String(Number(x));
47
+ if (xString === 'Infinity') {
48
+ return 0;
49
+ }
50
+ const indexOfE = xString.indexOf('e');
51
+ if (indexOfE >= 0) {
52
+ return 0;
53
+ }
54
+ const indexOfDecimalPoint = xString.indexOf('.');
55
+ if (indexOfDecimalPoint < 0) {
56
+ return 0;
57
+ }
58
+ else {
59
+ return xString.length - indexOfDecimalPoint - 1;
60
+ }
61
+ }
62
+ return undefined;
63
+ };
64
+ export const numberOfWholeDigits = (x) => {
65
+ if (isValidNumber(x)) {
66
+ let xString = String(Number(x));
67
+ if (xString.indexOf('-') === 0) {
68
+ xString = xString.slice(1, xString.length);
69
+ }
70
+ if (xString === 'Infinity') {
71
+ return Infinity;
72
+ }
73
+ if (xString.indexOf('0') === 0) {
74
+ xString = xString.slice(1, xString.length);
75
+ }
76
+ const indexOfE = xString.indexOf('e');
77
+ if (indexOfE >= 0) {
78
+ return Number(xString.slice(indexOfE + 1, xString.length)) + 1;
79
+ }
80
+ const indexOfDecimalPoint = xString.indexOf('.');
81
+ if (indexOfDecimalPoint < 0) {
82
+ return xString.length;
83
+ }
84
+ else {
85
+ return indexOfDecimalPoint;
86
+ }
87
+ }
88
+ return undefined;
89
+ };
90
+ export const roundToMultipleOf = (x, modulo) => {
91
+ const moduloString = String(modulo);
92
+ // approximates the result
93
+ // prone to inexactitude because of floating point arithmetic
94
+ const approximation = Math.round(x / modulo) * modulo;
95
+ const approximationString = String(approximation);
96
+ // remove useless decimals
97
+ const uselessDecimalsInApproximation = numberOfDecimalDigits(approximationString) -
98
+ numberOfDecimalDigits(moduloString);
99
+ const resultString = approximationString.slice(0, approximationString.length - uselessDecimalsInApproximation);
100
+ return Number(resultString);
101
+ };
102
+ // other functions
103
+ export const isInitialAndEmpty = (previousValue, newValue) => {
104
+ const isPrevArray = Array.isArray(previousValue);
105
+ const isNewArray = Array.isArray(newValue);
106
+ return !((isPrevArray ? previousValue.length !== 0 : Boolean(previousValue)) ||
107
+ (isNewArray ? newValue.length !== 0 : Boolean(newValue)));
108
+ };
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyRm5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbHV4L3NyYy9saWIvaGVscGVyRm5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUUvQixNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxLQUFVLEVBQVcsRUFBRSxDQUM1QyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLENBQUM7QUFFeEMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBVSxFQUFXLEVBQUUsQ0FDOUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFOUUsbUJBQW1CO0FBRW5CLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWEsRUFBVyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUU3RSxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFhLEVBQVcsRUFBRTtJQUNyRCxNQUFNLEVBQUUsR0FDTix5SUFBeUksQ0FBQztJQUM1SSxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDckQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBYSxFQUFXLEVBQUU7SUFDbkQsTUFBTSxFQUFFLEdBQ04sd0pBQXdKLENBQUM7SUFDM0osT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELENBQUMs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QUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BDLDBCQUEwQjtJQUMxQiw2REFBNkQ7SUFDN0QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0lBQ3RELE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xELDBCQUEwQjtJQUMxQixNQUFNLDhCQUE4QixHQUNsQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQztRQUMxQyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN0QyxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQzVDLENBQUMsRUFDRCxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsOEJBQThCLENBQzVELENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QixDQUFDLENBQUM7QUFFRixrQkFBa0I7QUFFbEIsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsYUFBa0IsRUFDbEIsUUFBYSxFQUNKLEVBQUU7SUFDWCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsT0FBTyxDQUFDLENBQ04sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDekQsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHVuZGVmaW5lZCBhbmQgbnVsbCBmdW5jdGlvbnNcclxuXHJcbmV4cG9ydCBjb25zdCBleGlzdHMgPSAodmFsdWU6IGFueSk6IGJvb2xlYW4gPT5cclxuICB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xyXG5cclxuZXhwb3J0IGNvbnN0IGhhc1ZhbHVlID0gKHZhbHVlOiBhbnkpOiBib29sZWFuID0+XHJcbiAgZXhpc3RzKHZhbHVlKSAmJiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/ICFpc0VtcHR5U3RyaW5nKHZhbHVlKSA6IHRydWUpO1xyXG5cclxuLy8gc3RyaW5nIGZ1bmN0aW9uc1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzRW1wdHlTdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gPT4gdmFsdWUudHJpbSgpID09PSAnJztcclxuXHJcbmV4cG9ydCBjb25zdCBpc1ZhbGlkRW1haWwgPSAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIGNvbnN0IHJlID1cclxuICAgIC9eW2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkAoPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/JC87XHJcbiAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpLnRyaW0oKSk7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaXNWYWxpZFVybCA9ICh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XHJcbiAgY29uc3QgcmUgPVxyXG4gICAgL14oW2Etel0rPzpcXC9cXC8pPygoKFthLXpcXGRdKFthLXpcXGQtXSpbYS16XFxkXSkqKVxcLikrW2Etel17Mix9fCgoXFxkezEsM31cXC4pezN9XFxkezEsM30pKShcXDpcXGQrKT8oXFwvWy1hLXpcXGQlXy5+K10qKSooXFw/WzsmYS16XFxkJV8ufis9LV0qKT8oXFwjWy1hLXpcXGRfXSopPyQvaTtcclxuICByZXR1cm4gcmUudGVzdChTdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCkudHJpbSgpKTtcclxufTtcclxuXHJcbmV4cG9ydCBjb25zdCBpc1ZhbGlkQ29sb3IgPSAodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xyXG4gIHZhbHVlID0gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xyXG4gIC8vIHZhbGlkIHZhbHVlcyBmb3IgQ1NTIGNvbG9yIHByb3BlcnR5LCB5ZXQgbm90IHZhbGlkIGNvbG9ycyBieSB0aGVtc2VsdmVzXHJcbiAgaWYgKFxyXG4gICAgdmFsdWUgPT09ICdjdXJyZW50Y29sb3InIHx8XHJcbiAgICB2YWx1ZSA9PT0gJ2luaGVyaXQnIHx8XHJcbiAgICB2YWx1ZSA9PT0gJ2luaXRpYWwnIHx8XHJcbiAgICB2YWx1ZSA9PT0gJ3JldmVydCcgfHxcclxuICAgIHZhbHVlID09PSAndW5zZXQnXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIHJldHVybiBDU1Muc3VwcG9ydHMoJ2NvbG9yJywgdmFsdWUpO1xyXG59O1xyXG5cclxuLy8gZGF0ZSBmdW5jdGlvbnNcclxuXHJcbmV4cG9ydCBjb25zdCBpc1ZhbGlkRGF0ZSA9IChkYXRlOiBEYXRlKTogYm9vbGVhbiA9PlxyXG4gIGV4aXN0cyhkYXRlKSA/ICFpc05hTihkYXRlLmdldFRpbWUoKSkgOiBmYWxzZTtcclxuXHJcbmV4cG9ydCBjb25zdCBub3JtYWxpemVEYXRlID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xyXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDEwKSB7XHJcbiAgICByZXR1cm4gdmFsdWUuc3Vic3RyKDAsIDEwKTtcclxuICB9XHJcbiAgcmV0dXJuIHZhbHVlID8gdmFsdWUudG9TdHJpbmcoKSA6IG51bGw7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgYWRkVGltZXpvbmVPZmZzZXQgPSAoZGF0ZTogRGF0ZSk6IERhdGUgPT4ge1xyXG4gIGlmICghaXNWYWxpZERhdGUoZGF0ZSkpIHtcclxuICAgIHJldHVybiBkYXRlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCk7XHJcbiAgfVxyXG59O1xyXG5cclxuLy8gbnVtYmVyIGZ1bmN0aW9uc1xyXG5cclxuZXhwb3J0IGNvbnN0IGlzVmFsaWROdW1iZXIgPSAoXHJcbiAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGxcclxuKTogYm9vbGVhbiA9PiAoaGFzVmFsdWUodmFsdWUpID8gIU51bWJlci5pc05hTihOdW1iZXIodmFsdWUpKSA6IGZhbHNlKTtcclxuXHJcbmV4cG9ydCBjb25zdCBudW1iZXJPZkRlY2ltYWxEaWdpdHMgPSAoXHJcbiAgeDogbnVtYmVyIHwgc3RyaW5nXHJcbik6IG51bWJlciB8IHVuZGVmaW5lZCA9PiB7XHJcbiAgaWYgKGlzVmFsaWROdW1iZXIoeCkpIHtcclxuICAgIGNvbnN0IHhTdHJpbmcgPSBTdHJpbmcoTnVtYmVyKHgpKTtcclxuICAgIGlmICh4U3RyaW5nID09PSAnSW5maW5pdHknKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXhPZkUgPSB4U3RyaW5nLmluZGV4T2YoJ2UnKTtcclxuICAgIGlmIChpbmRleE9mRSA+PSAwKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaW5kZXhPZkRlY2ltYWxQb2ludCA9IHhTdHJpbmcuaW5kZXhPZignLicpO1xyXG4gICAgaWYgKGluZGV4T2ZEZWNpbWFsUG9pbnQgPCAwKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHhTdHJpbmcubGVuZ3RoIC0gaW5kZXhPZkRlY2ltYWxQb2ludCAtIDE7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB1bmRlZmluZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgbnVtYmVyT2ZXaG9sZURpZ2l0cyA9ICh4OiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQgPT4ge1xyXG4gIGlmIChpc1ZhbGlkTnVtYmVyKHgpKSB7XHJcbiAgICBsZXQgeFN0cmluZyA9IFN0cmluZyhOdW1iZXIoeCkpO1xyXG4gICAgaWYgKHhTdHJpbmcuaW5kZXhPZignLScpID09PSAwKSB7XHJcbiAgICAgIHhTdHJpbmcgPSB4U3RyaW5nLnNsaWNlKDEsIHhTdHJpbmcubGVuZ3RoKTtcclxuICAgIH1cclxuICAgIGlmICh4U3RyaW5nID09PSAnSW5maW5pdHknKSB7XHJcbiAgICAgIHJldHVybiBJbmZpbml0eTtcclxuICAgIH1cclxuICAgIGlmICh4U3RyaW5nLmluZGV4T2YoJzAnKSA9PT0gMCkge1xyXG4gICAgICB4U3RyaW5nID0geFN0cmluZy5zbGljZSgxLCB4U3RyaW5nLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleE9mRSA9IHhTdHJpbmcuaW5kZXhPZignZScpO1xyXG4gICAgaWYgKGluZGV4T2ZFID49IDApIHtcclxuICAgICAgcmV0dXJuIE51bWJlcih4U3RyaW5nLnNsaWNlKGluZGV4T2ZFICsgMSwgeFN0cmluZy5sZW5ndGgpKSArIDE7XHJcbiAgICB9XHJcbiAgICBjb25zdCBpbmRleE9mRGVjaW1hbFBvaW50ID0geFN0cmluZy5pbmRleE9mKCcuJyk7XHJcbiAgICBpZiAoaW5kZXhPZkRlY2ltYWxQb2ludCA8IDApIHtcclxuICAgICAgcmV0dXJuIHhTdHJpbmcubGVuZ3RoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGluZGV4T2ZEZWNpbWFsUG9pbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB1bmRlZmluZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3Qgcm91bmRUb011bHRpcGxlT2YgPSAoeDogbnVtYmVyLCBtb2R1bG86IG51bWJlcik6IG51bWJlciA9PiB7XHJcbiAgY29uc3QgbW9kdWxvU3RyaW5nID0gU3RyaW5nKG1vZHVsbyk7XHJcbiAgLy8gYXBwcm94aW1hdGVzIHRoZSByZXN1bHRcclxuICAvLyBwcm9uZSB0byBpbmV4YWN0aXR1ZGUgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBhcml0aG1ldGljXHJcbiAgY29uc3QgYXBwcm94aW1hdGlvbiA9IE1hdGgucm91bmQoeCAvIG1vZHVsbykgKiBtb2R1bG87XHJcbiAgY29uc3QgYXBwcm94aW1hdGlvblN0cmluZyA9IFN0cmluZyhhcHByb3hpbWF0aW9uKTtcclxuICAvLyByZW1vdmUgdXNlbGVzcyBkZWNpbWFsc1xyXG4gIGNvbnN0IHVzZWxlc3NEZWNpbWFsc0luQXBwcm94aW1hdGlvbiA9XHJcbiAgICBudW1iZXJPZkRlY2ltYWxEaWdpdHMoYXBwcm94aW1hdGlvblN0cmluZykgLVxyXG4gICAgbnVtYmVyT2ZEZWNpbWFsRGlnaXRzKG1vZHVsb1N0cmluZyk7XHJcbiAgY29uc3QgcmVzdWx0U3RyaW5nID0gYXBwcm94aW1hdGlvblN0cmluZy5zbGljZShcclxuICAgIDAsXHJcbiAgICBhcHByb3hpbWF0aW9uU3RyaW5nLmxlbmd0aCAtIHVzZWxlc3NEZWNpbWFsc0luQXBwcm94aW1hdGlvblxyXG4gICk7XHJcbiAgcmV0dXJuIE51bWJlcihyZXN1bHRTdHJpbmcpO1xyXG59O1xyXG5cclxuLy8gb3RoZXIgZnVuY3Rpb25zXHJcblxyXG5leHBvcnQgY29uc3QgaXNJbml0aWFsQW5kRW1wdHkgPSAoXHJcbiAgcHJldmlvdXNWYWx1ZTogYW55LFxyXG4gIG5ld1ZhbHVlOiBhbnlcclxuKTogYm9vbGVhbiA9PiB7XHJcbiAgY29uc3QgaXNQcmV2QXJyYXkgPSBBcnJheS5pc0FycmF5KHByZXZpb3VzVmFsdWUpO1xyXG4gIGNvbnN0IGlzTmV3QXJyYXkgPSBBcnJheS5pc0FycmF5KG5ld1ZhbHVlKTtcclxuICByZXR1cm4gIShcclxuICAgIChpc1ByZXZBcnJheSA/IHByZXZpb3VzVmFsdWUubGVuZ3RoICE9PSAwIDogQm9vbGVhbihwcmV2aW91c1ZhbHVlKSkgfHxcclxuICAgIChpc05ld0FycmF5ID8gbmV3VmFsdWUubGVuZ3RoICE9PSAwIDogQm9vbGVhbihuZXdWYWx1ZSkpXHJcbiAgKTtcclxufTtcclxuIl19