ngx-edu-sharing-ui 10.0.20 → 10.0.22
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/assets/scss/material-theme.scss +3 -3
- package/assets/scss/mixins.scss +1 -1
- package/assets/scss/variables-root.scss +2 -0
- package/assets/scss/variables-scss.scss +3 -4
- package/assets/scss/variables.scss +1 -1
- package/fesm2022/ngx-edu-sharing-ui.mjs +376 -319
- package/fesm2022/ngx-edu-sharing-ui.mjs.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/list-items/list-widget.d.ts +1 -1
- package/lib/mds-viewer/mds-editor-instance-service.abstract.d.ts +14 -0
- package/lib/mds-viewer/widget/mds-widget.component.d.ts +6 -4
- package/package.json +8 -9
- package/esm2022/lib/actionbar/actionbar.component.mjs +0 -206
- package/esm2022/lib/common/edu-sharing-ui-common.module.mjs +0 -170
- package/esm2022/lib/directives/border-box-observer.directive.mjs +0 -71
- package/esm2022/lib/directives/check-text-overflow.directive.mjs +0 -71
- package/esm2022/lib/directives/drag-nodes/drag-nodes.mjs +0 -14
- package/esm2022/lib/directives/drag-nodes/nodes-drag-source.directive.mjs +0 -79
- package/esm2022/lib/directives/drag-nodes/nodes-drag.directive.mjs +0 -49
- package/esm2022/lib/directives/drag-nodes/nodes-drop-target.directive.mjs +0 -105
- package/esm2022/lib/directives/focus-state.directive.mjs +0 -44
- package/esm2022/lib/directives/icon.directive.mjs +0 -184
- package/esm2022/lib/directives/infinite-scroll.directive.mjs +0 -85
- package/esm2022/lib/dropdown/dropdown.component.mjs +0 -83
- package/esm2022/lib/edu-sharing-ui-configuration.mjs +0 -48
- package/esm2022/lib/edu-sharing-ui.module.mjs +0 -82
- package/esm2022/lib/index.mjs +0 -96
- package/esm2022/lib/list-items/available-widgets.mjs +0 -27
- package/esm2022/lib/list-items/format-duration.pipe.mjs +0 -20
- package/esm2022/lib/list-items/list-base/list-base.component.mjs +0 -46
- package/esm2022/lib/list-items/list-collection-info/list-collection-info.component.mjs +0 -29
- package/esm2022/lib/list-items/list-counts/list-counts.component.mjs +0 -56
- package/esm2022/lib/list-items/list-items.module.mjs +0 -50
- package/esm2022/lib/list-items/list-node-license/list-node-license.component.mjs +0 -41
- package/esm2022/lib/list-items/list-node-replication-source/list-node-replication-source.component.mjs +0 -47
- package/esm2022/lib/list-items/list-node-workflow/list-node-workflow.component.mjs +0 -24
- package/esm2022/lib/list-items/list-text/list-text.component.mjs +0 -106
- package/esm2022/lib/list-items/list-widget.mjs +0 -49
- package/esm2022/lib/list-items/node-row/node-row.component.mjs +0 -24
- package/esm2022/lib/list-items/node-source.pipe.mjs +0 -49
- package/esm2022/lib/mds/mds-helper.service.mjs +0 -167
- package/esm2022/lib/mds/mds.module.mjs +0 -16
- package/esm2022/lib/mds-viewer/mds-viewer.component.mjs +0 -170
- package/esm2022/lib/mds-viewer/mds-viewer.service.mjs +0 -18
- package/esm2022/lib/mds-viewer/replace-element-with-div.mjs +0 -47
- package/esm2022/lib/mds-viewer/view-instance.service.mjs +0 -27
- package/esm2022/lib/mds-viewer/widget/mds-widget.component.mjs +0 -379
- package/esm2022/lib/node-entries/combined-data-source.mjs +0 -41
- package/esm2022/lib/node-entries/custom-templates-data-source.mjs +0 -7
- package/esm2022/lib/node-entries/drag-preview/drag-preview.component.mjs +0 -21
- package/esm2022/lib/node-entries/entries-model.mjs +0 -24
- package/esm2022/lib/node-entries/items-cap.mjs +0 -47
- package/esm2022/lib/node-entries/list-item-label.pipe.mjs +0 -37
- package/esm2022/lib/node-entries/node-cache.mjs +0 -73
- package/esm2022/lib/node-entries/node-data-source-remote.mjs +0 -4
- package/esm2022/lib/node-entries/node-data-source.mjs +0 -117
- package/esm2022/lib/node-entries/node-entries-card/node-entries-card.component.mjs +0 -117
- package/esm2022/lib/node-entries/node-entries-card-grid/node-entries-card-grid.component.mjs +0 -329
- package/esm2022/lib/node-entries/node-entries-card-small/node-entries-card-small.component.mjs +0 -44
- package/esm2022/lib/node-entries/node-entries-global-options/node-entries-global-options.component.mjs +0 -27
- package/esm2022/lib/node-entries/node-entries-global.service.mjs +0 -71
- package/esm2022/lib/node-entries/node-entries-table/column-chooser/column-chooser.component.mjs +0 -42
- package/esm2022/lib/node-entries/node-entries-table/node-entries-table.component.mjs +0 -294
- package/esm2022/lib/node-entries/node-entries-templates.service.mjs +0 -11
- package/esm2022/lib/node-entries/node-entries-wrapper.component.mjs +0 -369
- package/esm2022/lib/node-entries/node-entries.component.mjs +0 -132
- package/esm2022/lib/node-entries/node-entries.module.mjs +0 -161
- package/esm2022/lib/node-entries/node-rating/node-rating.component.mjs +0 -125
- package/esm2022/lib/node-entries/node-stats-badges/node-stats-badges.component.mjs +0 -48
- package/esm2022/lib/node-entries/node-type-badge/node-type-badge.component.mjs +0 -36
- package/esm2022/lib/node-entries/option-button/option-button.component.mjs +0 -75
- package/esm2022/lib/node-entries/preview-image/preview-image.component.mjs +0 -53
- package/esm2022/lib/node-entries/sort-select-panel/sort-select-panel.component.mjs +0 -41
- package/esm2022/lib/node-url/node-url.component.mjs +0 -132
- package/esm2022/lib/pipes/file-size.pipe.mjs +0 -32
- package/esm2022/lib/pipes/format-date.pipe.mjs +0 -38
- package/esm2022/lib/pipes/mds-duration.pipe.mjs +0 -25
- package/esm2022/lib/pipes/node-icon.pipe.mjs +0 -18
- package/esm2022/lib/pipes/node-image-size.pipe.mjs +0 -24
- package/esm2022/lib/pipes/node-image.pipe.mjs +0 -55
- package/esm2022/lib/pipes/node-license.pipe.mjs +0 -24
- package/esm2022/lib/pipes/node-person-name.pipe.mjs +0 -50
- package/esm2022/lib/pipes/node-title.pipe.mjs +0 -35
- package/esm2022/lib/pipes/option-tooltip.pipe.mjs +0 -33
- package/esm2022/lib/pipes/property-slug.pipe.mjs +0 -16
- package/esm2022/lib/pipes/replace-chars.pipe.mjs +0 -29
- package/esm2022/lib/pipes/vcard-name.pipe.mjs +0 -25
- package/esm2022/lib/services/abstract/app.service.mjs +0 -3
- package/esm2022/lib/services/abstract/keyboard-shortcuts.service.mjs +0 -10
- package/esm2022/lib/services/abstract/options-helper.service.mjs +0 -3
- package/esm2022/lib/services/abstract/toast.service.mjs +0 -3
- package/esm2022/lib/services/accessibility.service.mjs +0 -73
- package/esm2022/lib/services/app-container.service.mjs +0 -69
- package/esm2022/lib/services/local-events.service.mjs +0 -43
- package/esm2022/lib/services/node-entries.service.mjs +0 -201
- package/esm2022/lib/services/node-helper.service.mjs +0 -330
- package/esm2022/lib/services/nodes-drag-drop.service.mjs +0 -155
- package/esm2022/lib/services/options-helper-data.service.mjs +0 -142
- package/esm2022/lib/services/render-helper.service.mjs +0 -114
- package/esm2022/lib/services/repo-url.service.mjs +0 -50
- package/esm2022/lib/services/search-helper.service.mjs +0 -52
- package/esm2022/lib/services/temporary-storage.service.mjs +0 -48
- package/esm2022/lib/services/ui.service.mjs +0 -327
- package/esm2022/lib/sort-dropdown/sort-dropdown.component.mjs +0 -50
- package/esm2022/lib/spinner/spinner.component.mjs +0 -19
- package/esm2022/lib/spinner-small/spinner-small.component.mjs +0 -18
- package/esm2022/lib/translations/fallback-translation-handler.mjs +0 -6
- package/esm2022/lib/translations/translation-loader.mjs +0 -219
- package/esm2022/lib/translations/translation-source.mjs +0 -11
- package/esm2022/lib/translations/translations.module.mjs +0 -82
- package/esm2022/lib/translations/translations.service.mjs +0 -238
- package/esm2022/lib/types/accessibillity.mjs +0 -19
- package/esm2022/lib/types/api-models.mjs +0 -2
- package/esm2022/lib/types/drag-drop.mjs +0 -2
- package/esm2022/lib/types/injection-tokens.mjs +0 -31
- package/esm2022/lib/types/keyboard-shortcuts.mjs +0 -11
- package/esm2022/lib/types/list-item.mjs +0 -41
- package/esm2022/lib/types/option-item.mjs +0 -192
- package/esm2022/lib/types/workflow.mjs +0 -25
- package/esm2022/lib/util/DateHelper.mjs +0 -200
- package/esm2022/lib/util/VCard.mjs +0 -278
- package/esm2022/lib/util/color-helper.mjs +0 -124
- package/esm2022/lib/util/duration-helper.mjs +0 -102
- package/esm2022/lib/util/functions.mjs +0 -13
- package/esm2022/lib/util/helper.mjs +0 -64
- package/esm2022/lib/util/isNumeric.mjs +0 -11
- package/esm2022/lib/util/rest-helper.mjs +0 -42
- package/esm2022/lib/util/ui-animation.mjs +0 -146
- package/esm2022/lib/util/ui-constants.mjs +0 -21
- package/esm2022/ngx-edu-sharing-ui.mjs +0 -5
- package/esm2022/public-api.mjs +0 -2
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* Service to store any data temporary (lost after reloading page).
|
|
5
|
-
*
|
|
6
|
-
* Note that all components share the same data source. So uses prefixes for your name if
|
|
7
|
-
* applicable!
|
|
8
|
-
*/
|
|
9
|
-
export class TemporaryStorageService {
|
|
10
|
-
static { this.APPLY_TO_LMS_PARAMETER_NODE = 'apply_to_lms_node'; }
|
|
11
|
-
// @Deprecated Use NODE_RENDER_PARAMETER_DATA_SOURCE instead
|
|
12
|
-
static { this.NODE_RENDER_PARAMETER_LIST = 'node_render_list'; }
|
|
13
|
-
static { this.NODE_RENDER_PARAMETER_DATA_SOURCE = 'node_render_data_source'; }
|
|
14
|
-
static { this.COLLECTION_ADD_NODES = 'collection_add_nodes'; }
|
|
15
|
-
static { this.WORKSPACE_LAST_LOCATION = 'WORKSPACE_LAST_LOCATION'; }
|
|
16
|
-
static { this.CUSTOM_NODE_LIST_COMPONENT = 'custom_node_list_component'; }
|
|
17
|
-
static { this.CUSTOM_NODE_ENTRIES_COMPONENT = 'custom_node_entries_component'; }
|
|
18
|
-
constructor() {
|
|
19
|
-
this.data = {};
|
|
20
|
-
}
|
|
21
|
-
get(name, defaultValue = null) {
|
|
22
|
-
if (this.data[name] != null) {
|
|
23
|
-
return this.data[name];
|
|
24
|
-
}
|
|
25
|
-
return defaultValue;
|
|
26
|
-
}
|
|
27
|
-
set(name, value) {
|
|
28
|
-
this.data[name] = value;
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Same as get, but will remove the value after fetching it.
|
|
32
|
-
*/
|
|
33
|
-
pop(name, defaultValue = null) {
|
|
34
|
-
const value = this.get(name, defaultValue);
|
|
35
|
-
this.remove(name);
|
|
36
|
-
return value;
|
|
37
|
-
}
|
|
38
|
-
remove(name) {
|
|
39
|
-
this.data[name] = null;
|
|
40
|
-
}
|
|
41
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TemporaryStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
42
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TemporaryStorageService, providedIn: 'root' }); }
|
|
43
|
-
}
|
|
44
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TemporaryStorageService, decorators: [{
|
|
45
|
-
type: Injectable,
|
|
46
|
-
args: [{ providedIn: 'root' }]
|
|
47
|
-
}], ctorParameters: () => [] });
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG9yYXJ5LXN0b3JhZ2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvc2VydmljZXMvdGVtcG9yYXJ5LXN0b3JhZ2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUczQzs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTyx1QkFBdUI7YUFDekIsZ0NBQTJCLEdBQUcsbUJBQW1CLEFBQXRCLENBQXVCO0lBQ3pELDREQUE0RDthQUNyRCwrQkFBMEIsR0FBRyxrQkFBa0IsQUFBckIsQ0FBc0I7YUFDaEQsc0NBQWlDLEdBQUcseUJBQXlCLEFBQTVCLENBQTZCO2FBQzlELHlCQUFvQixHQUFHLHNCQUFzQixBQUF6QixDQUEwQjthQUM5Qyw0QkFBdUIsR0FBRyx5QkFBeUIsQUFBNUIsQ0FBNkI7YUFLcEQsK0JBQTBCLEdBQUcsNEJBQTRCLEFBQS9CLENBQWdDO2FBQzFELGtDQUE2QixHQUFHLCtCQUErQixBQUFsQyxDQUFtQztJQUl2RTtRQUZRLFNBQUksR0FBUSxFQUFFLENBQUM7SUFFUixDQUFDO0lBRWhCLEdBQUcsQ0FBQyxJQUFZLEVBQUUsZUFBb0IsSUFBSTtRQUN0QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVksRUFBRSxLQUFVO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxJQUFZLEVBQUUsZUFBb0IsSUFBSTtRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBWTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7K0dBeENRLHVCQUF1QjttSEFBdkIsdUJBQXVCLGNBRFYsTUFBTTs7NEZBQ25CLHVCQUF1QjtrQkFEbkMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnbmd4LWVkdS1zaGFyaW5nLWFwaSc7XG5cbi8qKlxuICogU2VydmljZSB0byBzdG9yZSBhbnkgZGF0YSB0ZW1wb3JhcnkgKGxvc3QgYWZ0ZXIgcmVsb2FkaW5nIHBhZ2UpLlxuICpcbiAqIE5vdGUgdGhhdCBhbGwgY29tcG9uZW50cyBzaGFyZSB0aGUgc2FtZSBkYXRhIHNvdXJjZS4gU28gdXNlcyBwcmVmaXhlcyBmb3IgeW91ciBuYW1lIGlmXG4gKiBhcHBsaWNhYmxlIVxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRlbXBvcmFyeVN0b3JhZ2VTZXJ2aWNlIHtcbiAgICBzdGF0aWMgQVBQTFlfVE9fTE1TX1BBUkFNRVRFUl9OT0RFID0gJ2FwcGx5X3RvX2xtc19ub2RlJztcbiAgICAvLyBARGVwcmVjYXRlZCBVc2UgTk9ERV9SRU5ERVJfUEFSQU1FVEVSX0RBVEFfU09VUkNFIGluc3RlYWRcbiAgICBzdGF0aWMgTk9ERV9SRU5ERVJfUEFSQU1FVEVSX0xJU1QgPSAnbm9kZV9yZW5kZXJfbGlzdCc7XG4gICAgc3RhdGljIE5PREVfUkVOREVSX1BBUkFNRVRFUl9EQVRBX1NPVVJDRSA9ICdub2RlX3JlbmRlcl9kYXRhX3NvdXJjZSc7XG4gICAgc3RhdGljIENPTExFQ1RJT05fQUREX05PREVTID0gJ2NvbGxlY3Rpb25fYWRkX25vZGVzJztcbiAgICBzdGF0aWMgV09SS1NQQUNFX0xBU1RfTE9DQVRJT04gPSAnV09SS1NQQUNFX0xBU1RfTE9DQVRJT04nO1xuICAgIC8vIGRlZmF1bHQ6IGZhbHNlXG4gICAgc3RhdGljIE9QVElPTl9ISURFX01BSU5OQVY6ICdvcHRpb25faGlkZV9tYWlubmF2JztcbiAgICAvLyBkZWZhdWx0OiBmYWxzZVxuICAgIHN0YXRpYyBPUFRJT05fRElTQUJMRV9TQ1JPTExfTEFZT1VUOiAnb3B0aW9uX2Rpc2FibGVfc2Nyb2xsX2xheW91dCc7XG4gICAgc3RhdGljIENVU1RPTV9OT0RFX0xJU1RfQ09NUE9ORU5UID0gJ2N1c3RvbV9ub2RlX2xpc3RfY29tcG9uZW50JztcbiAgICBzdGF0aWMgQ1VTVE9NX05PREVfRU5UUklFU19DT01QT05FTlQgPSAnY3VzdG9tX25vZGVfZW50cmllc19jb21wb25lbnQnO1xuXG4gICAgcHJpdmF0ZSBkYXRhOiBhbnkgPSB7fTtcblxuICAgIGNvbnN0cnVjdG9yKCkge31cblxuICAgIGdldChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBzZXQobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMuZGF0YVtuYW1lXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhbWUgYXMgZ2V0LCBidXQgd2lsbCByZW1vdmUgdGhlIHZhbHVlIGFmdGVyIGZldGNoaW5nIGl0LlxuICAgICAqL1xuICAgIHBvcChuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYW55ID0gbnVsbCk6IGFueSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQobmFtZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgdGhpcy5yZW1vdmUobmFtZSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByZW1vdmUobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZGF0YVtuYW1lXSA9IG51bGw7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsaXBib2FyZE9iamVjdCB7XG4gICAgbm9kZXM6IE5vZGVbXTtcbiAgICBzb3VyY2VOb2RlOiBOb2RlO1xuICAgIGNvcHk6IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -1,327 +0,0 @@
|
|
|
1
|
-
import { Injectable, } from '@angular/core';
|
|
2
|
-
import * as rxjs from 'rxjs';
|
|
3
|
-
import { BehaviorSubject } from 'rxjs';
|
|
4
|
-
import { UIConstants } from '../util/ui-constants';
|
|
5
|
-
import { distinctUntilChanged, map } from 'rxjs/operators';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class UIService {
|
|
8
|
-
get shiftKeyPressed() {
|
|
9
|
-
return this.shiftKeyPressedSubject.value;
|
|
10
|
-
}
|
|
11
|
-
constructor(componentFactoryResolver, injector, ngZone) {
|
|
12
|
-
this.componentFactoryResolver = componentFactoryResolver;
|
|
13
|
-
this.injector = injector;
|
|
14
|
-
this.ngZone = ngZone;
|
|
15
|
-
this.isTouchSubject = new BehaviorSubject(false);
|
|
16
|
-
this.metaKeyPressedSubject = new BehaviorSubject(false);
|
|
17
|
-
this.shiftKeyPressedSubject = new BehaviorSubject(false);
|
|
18
|
-
this.ctrlKeyPressedSubject = new BehaviorSubject(false);
|
|
19
|
-
// HostListener not working, so use window
|
|
20
|
-
this.ngZone.runOutsideAngular(() => {
|
|
21
|
-
window.addEventListener('keydown', (event) => {
|
|
22
|
-
this.onKeyDownOrKeyUp(event);
|
|
23
|
-
});
|
|
24
|
-
window.addEventListener('keyup', (event) => {
|
|
25
|
-
this.onKeyDownOrKeyUp(event);
|
|
26
|
-
});
|
|
27
|
-
window.addEventListener('pointerdown', (event) => {
|
|
28
|
-
// Usually, properties for modifier keys will be set correctly on keydown and keyup
|
|
29
|
-
// events, but there are situations where the operating system intercepts key
|
|
30
|
-
// presses, e.g. the Windows key on Linux systems, so we update again on mouse
|
|
31
|
-
// clicks to be sure.
|
|
32
|
-
this.updateModifierKeys(event);
|
|
33
|
-
});
|
|
34
|
-
window.addEventListener('pointerdown', (event) => {
|
|
35
|
-
// Usually, properties for modifier keys will be set correctly on keydown and keyup
|
|
36
|
-
// events, but there are situations where the operating system intercepts key
|
|
37
|
-
// presses, e.g. the Windows key on Linux systems, so we update again on mouse
|
|
38
|
-
// clicks to be sure.
|
|
39
|
-
const isTouch = event.pointerType === 'touch';
|
|
40
|
-
if (this.isTouchSubject.value !== isTouch) {
|
|
41
|
-
this.ngZone.run(() => this.isTouchSubject.next(isTouch));
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
onKeyDownOrKeyUp(event) {
|
|
47
|
-
// `event.metaKey` is not consistent across browsers on the actual keypress of the modifier
|
|
48
|
-
// key. So we handle these events separately.
|
|
49
|
-
if (event.key === 'Control') {
|
|
50
|
-
this.ctrlKeyPressedSubject.next(event.type === 'keydown');
|
|
51
|
-
}
|
|
52
|
-
else if (event.key === 'Shift') {
|
|
53
|
-
this.shiftKeyPressedSubject.next(event.type === 'keydown');
|
|
54
|
-
}
|
|
55
|
-
else if (event.key === 'Meta') {
|
|
56
|
-
this.metaKeyPressedSubject.next(event.type === 'keydown');
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
// In case we miss modifier events because the browser didn't have focus during the
|
|
60
|
-
// event, we update modifier keys on unrelated key events as well.
|
|
61
|
-
this.updateModifierKeys(event);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
updateModifierKeys(event) {
|
|
65
|
-
this.metaKeyPressedSubject.next(event.metaKey);
|
|
66
|
-
this.shiftKeyPressedSubject.next(event.shiftKey);
|
|
67
|
-
this.ctrlKeyPressedSubject.next(event.ctrlKey);
|
|
68
|
-
}
|
|
69
|
-
observeCtrlOrCmdKeyPressedOutsideZone() {
|
|
70
|
-
return rxjs.combineLatest([this.metaKeyPressedSubject, this.ctrlKeyPressedSubject]).pipe(map(([metaKeyPressed, ctrlKeyPressed]) => metaKeyPressed || ctrlKeyPressed), distinctUntilChanged());
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* @Deprecated
|
|
74
|
-
* Prefer to subscribe to the isTouchSubject directly if viable
|
|
75
|
-
*
|
|
76
|
-
* Returns true if the current sessions seems to be running on a mobile device
|
|
77
|
-
*/
|
|
78
|
-
isMobile() {
|
|
79
|
-
return this.isTouchSubject.value;
|
|
80
|
-
}
|
|
81
|
-
static evaluateMediaQuery(type, value) {
|
|
82
|
-
if (type == UIConstants.MEDIA_QUERY_MAX_WIDTH)
|
|
83
|
-
return value > window.innerWidth;
|
|
84
|
-
if (type == UIConstants.MEDIA_QUERY_MIN_WIDTH)
|
|
85
|
-
return value < window.innerWidth;
|
|
86
|
-
if (type == UIConstants.MEDIA_QUERY_MAX_HEIGHT)
|
|
87
|
-
return value > window.innerHeight;
|
|
88
|
-
if (type == UIConstants.MEDIA_QUERY_MIN_HEIGHT)
|
|
89
|
-
return value < window.innerHeight;
|
|
90
|
-
console.warn('Unsupported media query ' + type);
|
|
91
|
-
return true;
|
|
92
|
-
}
|
|
93
|
-
filterValidOptions(options) {
|
|
94
|
-
if (options == null)
|
|
95
|
-
return null;
|
|
96
|
-
options = options.filter((value) => value != null);
|
|
97
|
-
let optionsFiltered = [];
|
|
98
|
-
for (let option of options) {
|
|
99
|
-
if ((!option.onlyMobile || (option.onlyMobile && this.isMobile())) &&
|
|
100
|
-
(!option.onlyDesktop || (option.onlyDesktop && !this.isMobile())) &&
|
|
101
|
-
(!option.mediaQueryType ||
|
|
102
|
-
(option.mediaQueryType &&
|
|
103
|
-
UIService.evaluateMediaQuery(option.mediaQueryType, option.mediaQueryValue))))
|
|
104
|
-
optionsFiltered.push(option);
|
|
105
|
-
}
|
|
106
|
-
return optionsFiltered;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* helper that updates the "isEnabled" flag on all options for the given, selected node
|
|
110
|
-
* can be used by dropdown or action menus to update the state for the current element
|
|
111
|
-
* @param options
|
|
112
|
-
*/
|
|
113
|
-
async updateOptionEnabledState(options, objects = null) {
|
|
114
|
-
options.value?.forEach((o) => {
|
|
115
|
-
o.isEnabled = !o.customEnabledCallback;
|
|
116
|
-
void o.enabledCallback(objects).then((result) => {
|
|
117
|
-
o.isEnabled = result;
|
|
118
|
-
options.next(options.value);
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
options.next(options.value);
|
|
122
|
-
}
|
|
123
|
-
filterToggleOptions(options, toggle, togglePosition = 'after') {
|
|
124
|
-
let result = [];
|
|
125
|
-
for (let option of options) {
|
|
126
|
-
if (option.isToggle === toggle && (!toggle || togglePosition === option.togglePosition))
|
|
127
|
-
result.push(option);
|
|
128
|
-
}
|
|
129
|
-
return result;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* dynamically inject an angular component into a regular html dom element
|
|
133
|
-
* @param componentFactoryResolver The resolver service
|
|
134
|
-
* @param viewContainerRef The viewContainerRef service
|
|
135
|
-
* @param componentName The name of the angular component (e.g. SpinnerComponent)
|
|
136
|
-
* @param targetElement The target element of the dom. If the element is null (not found), nothing is done
|
|
137
|
-
* @param bindings Optional bindings (inputs & outputs) to the given component
|
|
138
|
-
* @param delay Optional inflating delay in ms(some components may need some time to "init" the layout)
|
|
139
|
-
* @param replace Whether to replace to previous `innerHTML` of `targetElement`
|
|
140
|
-
* @param injector (to fetch templates for the component)
|
|
141
|
-
*/
|
|
142
|
-
injectAngularComponent(viewContainerRef, componentName, targetElement, bindings = null, { delay = 0, replace = true } = {}, injector) {
|
|
143
|
-
if (targetElement == null) {
|
|
144
|
-
return null;
|
|
145
|
-
}
|
|
146
|
-
const factory = this.componentFactoryResolver.resolveComponentFactory(componentName);
|
|
147
|
-
const component = viewContainerRef.createComponent(factory, undefined, injector || this.injector);
|
|
148
|
-
if (bindings) {
|
|
149
|
-
const instance = component.instance;
|
|
150
|
-
for (const key in bindings) {
|
|
151
|
-
const binding = bindings[key];
|
|
152
|
-
if (binding instanceof Function) {
|
|
153
|
-
// subscribe so callback can properly invoked
|
|
154
|
-
instance[key].subscribe((value) => binding(value));
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
instance[key] = binding;
|
|
158
|
-
// `ngOnChanges` won't be called on the component like this. Consider doing
|
|
159
|
-
// something like this:
|
|
160
|
-
// https://scm.edu-sharing.com/edu-sharing/projects/oeh-redaktion/ng-meta-widgets/-/blob/1603fb2dedadd3952401385bcbd91a4bd8407643/src/app/app.module.ts#L66-79
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// 3. Get DOM element from component
|
|
165
|
-
const domElem = component.hostView.rootNodes[0];
|
|
166
|
-
domElem.style.display = 'none';
|
|
167
|
-
if (replace) {
|
|
168
|
-
targetElement.innerHTML = null;
|
|
169
|
-
}
|
|
170
|
-
targetElement.appendChild(domElem);
|
|
171
|
-
setTimeout(() => {
|
|
172
|
-
domElem.style.display = null;
|
|
173
|
-
}, delay);
|
|
174
|
-
return component;
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* dynamically inject an angular component into a regular html dom element
|
|
178
|
-
* @param componentFactoryResolver The resolver service
|
|
179
|
-
* @param viewContainerRef The viewContainerRef service
|
|
180
|
-
* @param componentName The name of the angular component (e.g. SpinnerComponent)
|
|
181
|
-
* @param targetElement The target element of the dom. If the element is null (not found), nothing is done
|
|
182
|
-
* @param bindings Optional bindings (inputs & outputs) to the given component
|
|
183
|
-
* @param delay Optional inflating delay in ms(some components may need some time to "init" the layout)
|
|
184
|
-
* @param replace Whether to replace to previous `innerHTML` of `targetElement`
|
|
185
|
-
* @param injector (to fetch templates for the component)
|
|
186
|
-
*/
|
|
187
|
-
static injectAngularComponent(componentFactoryResolver, viewContainerRef, componentName, targetElement, bindings = null, { delay = 0, replace = true } = {}, injector) {
|
|
188
|
-
if (targetElement == null) {
|
|
189
|
-
return null;
|
|
190
|
-
}
|
|
191
|
-
const factory = componentFactoryResolver.resolveComponentFactory(componentName);
|
|
192
|
-
const component = viewContainerRef.createComponent(factory, undefined, injector);
|
|
193
|
-
if (bindings) {
|
|
194
|
-
const instance = component.instance;
|
|
195
|
-
for (const key in bindings) {
|
|
196
|
-
const binding = bindings[key];
|
|
197
|
-
if (binding instanceof Function) {
|
|
198
|
-
// subscribe so callback can properly invoked
|
|
199
|
-
instance[key].subscribe((value) => binding(value));
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
instance[key] = binding;
|
|
203
|
-
// `ngOnChanges` won't be called on the component like this. Consider doing
|
|
204
|
-
// something like this:
|
|
205
|
-
// https://scm.edu-sharing.com/edu-sharing/projects/oeh-redaktion/ng-meta-widgets/-/blob/1603fb2dedadd3952401385bcbd91a4bd8407643/src/app/app.module.ts#L66-79
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
// 3. Get DOM element from component
|
|
210
|
-
const domElem = component.hostView.rootNodes[0];
|
|
211
|
-
domElem.style.display = 'none';
|
|
212
|
-
if (replace) {
|
|
213
|
-
targetElement.innerHTML = null;
|
|
214
|
-
}
|
|
215
|
-
targetElement.appendChild(domElem);
|
|
216
|
-
setTimeout(() => {
|
|
217
|
-
domElem.style.display = null;
|
|
218
|
-
}, delay);
|
|
219
|
-
return component;
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* smoothly scroll to the given child inside an element (The child will be placed around the first 1/3 of the parent's top)
|
|
223
|
-
* @param child
|
|
224
|
-
* @param element
|
|
225
|
-
* @param smoothness
|
|
226
|
-
*/
|
|
227
|
-
scrollSmoothElementToChild(child, element = 'auto', smoothness = 1) {
|
|
228
|
-
let target;
|
|
229
|
-
if (element === 'auto') {
|
|
230
|
-
let parent = child.parentElement;
|
|
231
|
-
while (parent) {
|
|
232
|
-
if (['scroll', 'auto'].includes(window.getComputedStyle(parent).overflowY)) {
|
|
233
|
-
target = parent;
|
|
234
|
-
break;
|
|
235
|
-
}
|
|
236
|
-
parent = parent.parentElement;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
target = element;
|
|
241
|
-
}
|
|
242
|
-
// y equals to the top of the child + any scrolling of the parent - the top of the parent
|
|
243
|
-
let y = child.getBoundingClientRect().top +
|
|
244
|
-
target.scrollTop -
|
|
245
|
-
target.getBoundingClientRect().top;
|
|
246
|
-
// move the focused element to 1/3 at the top of the container
|
|
247
|
-
y += child.getBoundingClientRect().height / 2 - target.getBoundingClientRect().height / 3;
|
|
248
|
-
return this.scrollSmoothElement(y, target, smoothness);
|
|
249
|
-
}
|
|
250
|
-
/**
|
|
251
|
-
* Smoothly scrolls to the given y offset inside an element (use offsetTop on the child to
|
|
252
|
-
* determine this position).
|
|
253
|
-
*
|
|
254
|
-
* @param smoothness lower numbers indicate less smoothness, higher more smoothness
|
|
255
|
-
*/
|
|
256
|
-
scrollSmoothElement(pos = 0, element, smoothness = 1, axis = 'y') {
|
|
257
|
-
return new Promise((resolve) => {
|
|
258
|
-
this.ngZone.runOutsideAngular(() => {
|
|
259
|
-
const currentPos = axis == 'x' ? element.scrollLeft : element.scrollTop;
|
|
260
|
-
if (element.getAttribute('data-is-scrolling') == 'true') {
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
263
|
-
const mode = currentPos > pos;
|
|
264
|
-
let lastPos = pos;
|
|
265
|
-
const maxPos = axis == 'x'
|
|
266
|
-
? element.scrollWidth - element.clientWidth
|
|
267
|
-
: element.scrollHeight - element.clientHeight;
|
|
268
|
-
let limitReached = false;
|
|
269
|
-
if (mode && pos <= 0) {
|
|
270
|
-
pos = 0;
|
|
271
|
-
limitReached = true;
|
|
272
|
-
}
|
|
273
|
-
if (!mode && pos >= maxPos) {
|
|
274
|
-
pos = maxPos;
|
|
275
|
-
limitReached = true;
|
|
276
|
-
}
|
|
277
|
-
let speed = 16;
|
|
278
|
-
let last = new Date().getTime();
|
|
279
|
-
const callback = () => {
|
|
280
|
-
let currentPos = axis == 'x' ? element.scrollLeft : element.scrollTop;
|
|
281
|
-
const posDiff = currentPos - lastPos;
|
|
282
|
-
const speedFactor = speed / 16;
|
|
283
|
-
const divider = (3 / speedFactor) * smoothness;
|
|
284
|
-
const minSpeed = (5 * speedFactor) / smoothness;
|
|
285
|
-
const maxSpeed = (50 * speedFactor) / smoothness;
|
|
286
|
-
lastPos = currentPos;
|
|
287
|
-
let finished = true;
|
|
288
|
-
if (currentPos > pos) {
|
|
289
|
-
currentPos -= Math.min(maxSpeed, Math.max((currentPos - pos) / divider, minSpeed));
|
|
290
|
-
finished = currentPos <= pos;
|
|
291
|
-
}
|
|
292
|
-
else if (currentPos < pos && !mode) {
|
|
293
|
-
currentPos += Math.min(maxSpeed, Math.max((pos - currentPos) / divider, minSpeed));
|
|
294
|
-
finished = currentPos >= pos;
|
|
295
|
-
}
|
|
296
|
-
if (finished) {
|
|
297
|
-
currentPos = pos;
|
|
298
|
-
}
|
|
299
|
-
if (axis == 'x') {
|
|
300
|
-
element.scrollLeft = currentPos;
|
|
301
|
-
}
|
|
302
|
-
else {
|
|
303
|
-
element.scrollTop = currentPos;
|
|
304
|
-
}
|
|
305
|
-
if (finished) {
|
|
306
|
-
element.removeAttribute('data-is-scrolling');
|
|
307
|
-
resolve();
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
speed = new Date().getTime() - last;
|
|
311
|
-
last = new Date().getTime();
|
|
312
|
-
window.requestAnimationFrame(callback);
|
|
313
|
-
}
|
|
314
|
-
};
|
|
315
|
-
window.requestAnimationFrame(callback);
|
|
316
|
-
element.setAttribute('data-is-scrolling', 'true');
|
|
317
|
-
});
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: UIService, deps: [{ token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
321
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: UIService, providedIn: 'root' }); }
|
|
322
|
-
}
|
|
323
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: UIService, decorators: [{
|
|
324
|
-
type: Injectable,
|
|
325
|
-
args: [{ providedIn: 'root' }]
|
|
326
|
-
}], ctorParameters: () => [{ type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.NgZone }] });
|
|
327
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvc2VydmljZXMvdWkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsVUFBVSxHQUtiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFJM0QsTUFBTSxPQUFPLFNBQVM7SUFNbEIsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFFRCxZQUNjLHdCQUFrRCxFQUNsRCxRQUFrQixFQUNsQixNQUFjO1FBRmQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFaNUIsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQywwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCwyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQVd2RCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dC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QUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQzt3QkFDcEMsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQzVCLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDM0MsQ0FBQztnQkFDTCxDQUFDLENBQUM7Z0JBQ0YsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUV2QyxPQUFPLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ3RELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQW5XUSxTQUFTO21IQUFULFNBQVMsY0FESSxNQUFNOzs0RkFDbkIsU0FBUztrQkFEckIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRW1iZWRkZWRWaWV3UmVmLFxuICAgIEluamVjdGFibGUsXG4gICAgSW5qZWN0b3IsXG4gICAgTmdab25lLFxuICAgIFR5cGUsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyByeGpzIGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVSUNvbnN0YW50cyB9IGZyb20gJy4uL3V0aWwvdWktY29uc3RhbnRzJztcbmltcG9ydCB7IE9wdGlvbkl0ZW0gfSBmcm9tICcuLi90eXBlcy9vcHRpb24taXRlbSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJ25neC1lZHUtc2hhcmluZy1hcGknO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFVJU2VydmljZSB7XG4gICAgaXNUb3VjaFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICBwcml2YXRlIG1ldGFLZXlQcmVzc2VkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIHByaXZhdGUgc2hpZnRLZXlQcmVzc2VkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIHByaXZhdGUgY3RybEtleVByZXNzZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICBnZXQgc2hpZnRLZXlQcmVzc2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaGlmdEtleVByZXNzZWRTdWJqZWN0LnZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByb3RlY3RlZCBuZ1pvbmU6IE5nWm9uZSxcbiAgICApIHtcbiAgICAgICAgLy8gSG9zdExpc3RlbmVyIG5vdCB3b3JraW5nLCBzbyB1c2Ugd2luZG93XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleURvd25PcktleVVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbktleURvd25PcktleVVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXN1YWxseSwgcHJvcGVydGllcyBmb3IgbW9kaWZpZXIga2V5cyB3aWxsIGJlIHNldCBjb3JyZWN0bHkgb24ga2V5ZG93biBhbmQga2V5dXBcbiAgICAgICAgICAgICAgICAvLyBldmVudHMsIGJ1dCB0aGVyZSBhcmUgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbnRlcmNlcHRzIGtleVxuICAgICAgICAgICAgICAgIC8vIHByZXNzZXMsIGUuZy4gdGhlIFdpbmRvd3Mga2V5IG9uIExpbnV4IHN5c3RlbXMsIHNvIHdlIHVwZGF0ZSBhZ2FpbiBvbiBtb3VzZVxuICAgICAgICAgICAgICAgIC8vIGNsaWNrcyB0byBiZSBzdXJlLlxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kaWZpZXJLZXlzKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXN1YWxseSwgcHJvcGVydGllcyBmb3IgbW9kaWZpZXIga2V5cyB3aWxsIGJlIHNldCBjb3JyZWN0bHkgb24ga2V5ZG93biBhbmQga2V5dXBcbiAgICAgICAgICAgICAgICAvLyBldmVudHMsIGJ1dCB0aGVyZSBhcmUgc2l0dWF0aW9ucyB3aGVyZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpbnRlcmNlcHRzIGtleVxuICAgICAgICAgICAgICAgIC8vIHByZXNzZXMsIGUuZy4gdGhlIFdpbmRvd3Mga2V5IG9uIExpbnV4IHN5c3RlbXMsIHNvIHdlIHVwZGF0ZSBhZ2FpbiBvbiBtb3VzZVxuICAgICAgICAgICAgICAgIC8vIGNsaWNrcyB0byBiZSBzdXJlLlxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVG91Y2ggPSAoZXZlbnQgYXMgUG9pbnRlckV2ZW50KS5wb2ludGVyVHlwZSA9PT0gJ3RvdWNoJztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1RvdWNoU3ViamVjdC52YWx1ZSAhPT0gaXNUb3VjaCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5pc1RvdWNoU3ViamVjdC5uZXh0KGlzVG91Y2gpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHByaXZhdGUgb25LZXlEb3duT3JLZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICAvLyBgZXZlbnQubWV0YUtleWAgaXMgbm90IGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzIG9uIHRoZSBhY3R1YWwga2V5cHJlc3Mgb2YgdGhlIG1vZGlmaWVyXG4gICAgICAgIC8vIGtleS4gU28gd2UgaGFuZGxlIHRoZXNlIGV2ZW50cyBzZXBhcmF0ZWx5LlxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQ29udHJvbCcpIHtcbiAgICAgICAgICAgIHRoaXMuY3RybEtleVByZXNzZWRTdWJqZWN0Lm5leHQoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nKTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdTaGlmdCcpIHtcbiAgICAgICAgICAgIHRoaXMuc2hpZnRLZXlQcmVzc2VkU3ViamVjdC5uZXh0KGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnTWV0YScpIHtcbiAgICAgICAgICAgIHRoaXMubWV0YUtleVByZXNzZWRTdWJqZWN0Lm5leHQoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugd2UgbWlzcyBtb2RpZmllciBldmVudHMgYmVjYXVzZSB0aGUgYnJvd3NlciBkaWRuJ3QgaGF2ZSBmb2N1cyBkdXJpbmcgdGhlXG4gICAgICAgICAgICAvLyBldmVudCwgd2UgdXBkYXRlIG1vZGlmaWVyIGtleXMgb24gdW5yZWxhdGVkIGtleSBldmVudHMgYXMgd2VsbC5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9kaWZpZXJLZXlzKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTW9kaWZpZXJLZXlzKGV2ZW50OiBQb2ludGVyRXZlbnQgfCBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMubWV0YUtleVByZXNzZWRTdWJqZWN0Lm5leHQoZXZlbnQubWV0YUtleSk7XG4gICAgICAgIHRoaXMuc2hpZnRLZXlQcmVzc2VkU3ViamVjdC5uZXh0KGV2ZW50LnNoaWZ0S2V5KTtcbiAgICAgICAgdGhpcy5jdHJsS2V5UHJlc3NlZFN1YmplY3QubmV4dChldmVudC5jdHJsS2V5KTtcbiAgICB9XG5cbiAgICBvYnNlcnZlQ3RybE9yQ21kS2V5UHJlc3NlZE91dHNpZGVab25lKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gcnhqcy5jb21iaW5lTGF0ZXN0KFt0aGlzLm1ldGFLZXlQcmVzc2VkU3ViamVjdCwgdGhpcy5jdHJsS2V5UHJlc3NlZFN1YmplY3RdKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbbWV0YUtleVByZXNzZWQsIGN0cmxLZXlQcmVzc2VkXSkgPT4gbWV0YUtleVByZXNzZWQgfHwgY3RybEtleVByZXNzZWQpLFxuICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBARGVwcmVjYXRlZFxuICAgICAqIFByZWZlciB0byBzdWJzY3JpYmUgdG8gdGhlIGlzVG91Y2hTdWJqZWN0IGRpcmVjdGx5IGlmIHZpYWJsZVxuICAgICAqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHNlc3Npb25zIHNlZW1zIHRvIGJlIHJ1bm5pbmcgb24gYSBtb2JpbGUgZGV2aWNlXG4gICAgICovXG4gICAgcHVibGljIGlzTW9iaWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1RvdWNoU3ViamVjdC52YWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHN0YXRpYyBldmFsdWF0ZU1lZGlhUXVlcnkodHlwZTogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0eXBlID09IFVJQ29uc3RhbnRzLk1FRElBX1FVRVJZX01BWF9XSURUSCkgcmV0dXJuIHZhbHVlID4gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGlmICh0eXBlID09IFVJQ29uc3RhbnRzLk1FRElBX1FVRVJZX01JTl9XSURUSCkgcmV0dXJuIHZhbHVlIDwgd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgIGlmICh0eXBlID09IFVJQ29uc3RhbnRzLk1FRElBX1FVRVJZX01BWF9IRUlHSFQpIHJldHVybiB2YWx1ZSA+IHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgICAgaWYgKHR5cGUgPT0gVUlDb25zdGFudHMuTUVESUFfUVVFUllfTUlOX0hFSUdIVCkgcmV0dXJuIHZhbHVlIDwgd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICBjb25zb2xlLndhcm4oJ1Vuc3VwcG9ydGVkIG1lZGlhIHF1ZXJ5ICcgKyB0eXBlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGZpbHRlclZhbGlkT3B0aW9ucyhvcHRpb25zOiBPcHRpb25JdGVtW10pIHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9IG51bGwpO1xuICAgICAgICBsZXQgb3B0aW9uc0ZpbHRlcmVkOiBPcHRpb25JdGVtW10gPSBbXTtcbiAgICAgICAgZm9yIChsZXQgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoIW9wdGlvbi5vbmx5TW9iaWxlIHx8IChvcHRpb24ub25seU1vYmlsZSAmJiB0aGlzLmlzTW9iaWxlKCkpKSAmJlxuICAgICAgICAgICAgICAgICghb3B0aW9uLm9ubHlEZXNrdG9wIHx8IChvcHRpb24ub25seURlc2t0b3AgJiYgIXRoaXMuaXNNb2JpbGUoKSkpICYmXG4gICAgICAgICAgICAgICAgKCFvcHRpb24ubWVkaWFRdWVyeVR5cGUgfHxcbiAgICAgICAgICAgICAgICAgICAgKG9wdGlvbi5tZWRpYVF1ZXJ5VHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgVUlTZXJ2aWNlLmV2YWx1YXRlTWVkaWFRdWVyeShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24ubWVkaWFRdWVyeVR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLm1lZGlhUXVlcnlWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICkpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIG9wdGlvbnNGaWx0ZXJlZC5wdXNoKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGlvbnNGaWx0ZXJlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBoZWxwZXIgdGhhdCB1cGRhdGVzIHRoZSBcImlzRW5hYmxlZFwiIGZsYWcgb24gYWxsIG9wdGlvbnMgZm9yIHRoZSBnaXZlbiwgc2VsZWN0ZWQgbm9kZVxuICAgICAqIGNhbiBiZSB1c2VkIGJ5IGRyb3Bkb3duIG9yIGFjdGlvbiBtZW51cyB0byB1cGRhdGUgdGhlIHN0YXRlIGZvciB0aGUgY3VycmVudCBlbGVtZW50XG4gICAgICogQHBhcmFtIG9wdGlvbnNcbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVPcHRpb25FbmFibGVkU3RhdGUob3B0aW9uczogQmVoYXZpb3JTdWJqZWN0PE9wdGlvbkl0ZW1bXT4sIG9iamVjdHM6IE5vZGVbXSA9IG51bGwpIHtcbiAgICAgICAgb3B0aW9ucy52YWx1ZT8uZm9yRWFjaCgobykgPT4ge1xuICAgICAgICAgICAgby5pc0VuYWJsZWQgPSAhby5jdXN0b21FbmFibGVkQ2FsbGJhY2s7XG4gICAgICAgICAgICB2b2lkIG8uZW5hYmxlZENhbGxiYWNrKG9iamVjdHMpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIG8uaXNFbmFibGVkID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIG9wdGlvbnMubmV4dChvcHRpb25zLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucy5uZXh0KG9wdGlvbnMudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaWx0ZXJUb2dnbGVPcHRpb25zKFxuICAgICAgICBvcHRpb25zOiBPcHRpb25JdGVtW10sXG4gICAgICAgIHRvZ2dsZTogYm9vbGVhbixcbiAgICAgICAgdG9nZ2xlUG9zaXRpb246ICdiZWZvcmUnIHwgJ2FmdGVyJyA9ICdhZnRlcicsXG4gICAgKSB7XG4gICAgICAgIGxldCByZXN1bHQ6IE9wdGlvbkl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKG9wdGlvbi5pc1RvZ2dsZSA9PT0gdG9nZ2xlICYmICghdG9nZ2xlIHx8IHRvZ2dsZVBvc2l0aW9uID09PSBvcHRpb24udG9nZ2xlUG9zaXRpb24pKVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogZHluYW1pY2FsbHkgaW5qZWN0IGFuIGFuZ3VsYXIgY29tcG9uZW50IGludG8gYSByZWd1bGFyIGh0bWwgZG9tIGVsZW1lbnRcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50RmFjdG9yeVJlc29sdmVyIFRoZSByZXNvbHZlciBzZXJ2aWNlXG4gICAgICogQHBhcmFtIHZpZXdDb250YWluZXJSZWYgVGhlIHZpZXdDb250YWluZXJSZWYgc2VydmljZVxuICAgICAqIEBwYXJhbSBjb21wb25lbnROYW1lIFRoZSBuYW1lIG9mIHRoZSBhbmd1bGFyIGNvbXBvbmVudCAoZS5nLiBTcGlubmVyQ29tcG9uZW50KVxuICAgICAqIEBwYXJhbSB0YXJnZXRFbGVtZW50IFRoZSB0YXJnZXQgZWxlbWVudCBvZiB0aGUgZG9tLiBJZiB0aGUgZWxlbWVudCBpcyBudWxsIChub3QgZm91bmQpLCBub3RoaW5nIGlzIGRvbmVcbiAgICAgKiBAcGFyYW0gYmluZGluZ3MgT3B0aW9uYWwgYmluZGluZ3MgKGlucHV0cyAmIG91dHB1dHMpIHRvIHRoZSBnaXZlbiBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gZGVsYXkgT3B0aW9uYWwgaW5mbGF0aW5nIGRlbGF5IGluIG1zKHNvbWUgY29tcG9uZW50cyBtYXkgbmVlZCBzb21lIHRpbWUgdG8gXCJpbml0XCIgdGhlIGxheW91dClcbiAgICAgKiBAcGFyYW0gcmVwbGFjZSBXaGV0aGVyIHRvIHJlcGxhY2UgdG8gcHJldmlvdXMgYGlubmVySFRNTGAgb2YgYHRhcmdldEVsZW1lbnRgXG4gICAgICogQHBhcmFtIGluamVjdG9yICh0byBmZXRjaCB0ZW1wbGF0ZXMgZm9yIHRoZSBjb21wb25lbnQpXG4gICAgICovXG4gICAgcHVibGljIGluamVjdEFuZ3VsYXJDb21wb25lbnQ8VD4oXG4gICAgICAgIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIGNvbXBvbmVudE5hbWU6IFR5cGU8VD4sXG4gICAgICAgIHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgICAgIGJpbmRpbmdzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0gbnVsbCxcbiAgICAgICAgeyBkZWxheSA9IDAsIHJlcGxhY2UgPSB0cnVlIH0gPSB7fSxcbiAgICAgICAgaW5qZWN0b3I/OiBJbmplY3RvcixcbiAgICApOiBDb21wb25lbnRSZWY8VD4ge1xuICAgICAgICBpZiAodGFyZ2V0RWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29tcG9uZW50TmFtZSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudDogQ29tcG9uZW50UmVmPFQ+ID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoXG4gICAgICAgICAgICBmYWN0b3J5LFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgaW5qZWN0b3IgfHwgdGhpcy5pbmplY3RvcixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGJpbmRpbmdzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IGNvbXBvbmVudC5pbnN0YW5jZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJpbmRpbmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGJpbmRpbmdzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGJpbmRpbmcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdWJzY3JpYmUgc28gY2FsbGJhY2sgY2FuIHByb3Blcmx5IGludm9rZWRcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IGJpbmRpbmcodmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gYmluZGluZztcbiAgICAgICAgICAgICAgICAgICAgLy8gYG5nT25DaGFuZ2VzYCB3b24ndCBiZSBjYWxsZWQgb24gdGhlIGNvbXBvbmVudCBsaWtlIHRoaXMuIENvbnNpZGVyIGRvaW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vc2NtLmVkdS1zaGFyaW5nLmNvbS9lZHUtc2hhcmluZy9wcm9qZWN0cy9vZWgtcmVkYWt0aW9uL25nLW1ldGEtd2lkZ2V0cy8tL2Jsb2IvMTYwM2ZiMmRlZGFkZDM5NTI0MDEzODViY2JkOTFhNGJkODQwNzY0My9zcmMvYXBwL2FwcC5tb2R1bGUudHMjTDY2LTc5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gR2V0IERPTSBlbGVtZW50IGZyb20gY29tcG9uZW50XG4gICAgICAgIGNvbnN0IGRvbUVsZW0gPSAoY29tcG9uZW50Lmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGRvbUVsZW0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuaW5uZXJIVE1MID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRFbGVtZW50LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRvbUVsZW0uc3R5bGUuZGlzcGxheSA9IG51bGw7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBkeW5hbWljYWxseSBpbmplY3QgYW4gYW5ndWxhciBjb21wb25lbnQgaW50byBhIHJlZ3VsYXIgaHRtbCBkb20gZWxlbWVudFxuICAgICAqIEBwYXJhbSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgVGhlIHJlc29sdmVyIHNlcnZpY2VcbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lclJlZiBUaGUgdmlld0NvbnRhaW5lclJlZiBzZXJ2aWNlXG4gICAgICogQHBhcmFtIGNvbXBvbmVudE5hbWUgVGhlIG5hbWUgb2YgdGhlIGFuZ3VsYXIgY29tcG9uZW50IChlLmcuIFNwaW5uZXJDb21wb25lbnQpXG4gICAgICogQHBhcmFtIHRhcmdldEVsZW1lbnQgVGhlIHRhcmdldCBlbGVtZW50IG9mIHRoZSBkb20uIElmIHRoZSBlbGVtZW50IGlzIG51bGwgKG5vdCBmb3VuZCksIG5vdGhpbmcgaXMgZG9uZVxuICAgICAqIEBwYXJhbSBiaW5kaW5ncyBPcHRpb25hbCBiaW5kaW5ncyAoaW5wdXRzICYgb3V0cHV0cykgdG8gdGhlIGdpdmVuIGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBkZWxheSBPcHRpb25hbCBpbmZsYXRpbmcgZGVsYXkgaW4gbXMoc29tZSBjb21wb25lbnRzIG1heSBuZWVkIHNvbWUgdGltZSB0byBcImluaXRcIiB0aGUgbGF5b3V0KVxuICAgICAqIEBwYXJhbSByZXBsYWNlIFdoZXRoZXIgdG8gcmVwbGFjZSB0byBwcmV2aW91cyBgaW5uZXJIVE1MYCBvZiBgdGFyZ2V0RWxlbWVudGBcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgKHRvIGZldGNoIHRlbXBsYXRlcyBmb3IgdGhlIGNvbXBvbmVudClcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGluamVjdEFuZ3VsYXJDb21wb25lbnQ8VD4oXG4gICAgICAgIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBjb21wb25lbnROYW1lOiBUeXBlPFQ+LFxuICAgICAgICB0YXJnZXRFbGVtZW50OiBFbGVtZW50LFxuICAgICAgICBiaW5kaW5nczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IG51bGwsXG4gICAgICAgIHsgZGVsYXkgPSAwLCByZXBsYWNlID0gdHJ1ZSB9ID0ge30sXG4gICAgICAgIGluamVjdG9yPzogSW5qZWN0b3IsXG4gICAgKTogQ29tcG9uZW50UmVmPFQ+IHtcbiAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmFjdG9yeSA9IGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnROYW1lKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50OiBDb21wb25lbnRSZWY8VD4gPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChcbiAgICAgICAgICAgIGZhY3RvcnksXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICBpbmplY3RvcixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGJpbmRpbmdzKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0YW5jZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IGNvbXBvbmVudC5pbnN0YW5jZTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJpbmRpbmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmluZGluZyA9IGJpbmRpbmdzW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGJpbmRpbmcgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzdWJzY3JpYmUgc28gY2FsbGJhY2sgY2FuIHByb3Blcmx5IGludm9rZWRcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IGJpbmRpbmcodmFsdWUpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZVtrZXldID0gYmluZGluZztcbiAgICAgICAgICAgICAgICAgICAgLy8gYG5nT25DaGFuZ2VzYCB3b24ndCBiZSBjYWxsZWQgb24gdGhlIGNvbXBvbmVudCBsaWtlIHRoaXMuIENvbnNpZGVyIGRvaW5nXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vc2NtLmVkdS1zaGFyaW5nLmNvbS9lZHUtc2hhcmluZy9wcm9qZWN0cy9vZWgtcmVkYWt0aW9uL25nLW1ldGEtd2lkZ2V0cy8tL2Jsb2IvMTYwM2ZiMmRlZGFkZDM5NTI0MDEzODViY2JkOTFhNGJkODQwNzY0My9zcmMvYXBwL2FwcC5tb2R1bGUudHMjTDY2LTc5XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gR2V0IERPTSBlbGVtZW50IGZyb20gY29tcG9uZW50XG4gICAgICAgIGNvbnN0IGRvbUVsZW0gPSAoY29tcG9uZW50Lmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGRvbUVsZW0uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQuaW5uZXJIVE1MID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRFbGVtZW50LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGRvbUVsZW0uc3R5bGUuZGlzcGxheSA9IG51bGw7XG4gICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBzbW9vdGhseSBzY3JvbGwgdG8gdGhlIGdpdmVuIGNoaWxkIGluc2lkZSBhbiBlbGVtZW50IChUaGUgY2hpbGQgd2lsbCBiZSBwbGFjZWQgYXJvdW5kIHRoZSBmaXJzdCAxLzMgb2YgdGhlIHBhcmVudCdzIHRvcClcbiAgICAgKiBAcGFyYW0gY2hpbGRcbiAgICAgKiBAcGFyYW0gZWxlbWVudFxuICAgICAqIEBwYXJhbSBzbW9vdGhuZXNzXG4gICAgICovXG4gICAgc2Nyb2xsU21vb3RoRWxlbWVudFRvQ2hpbGQoY2hpbGQ6IEVsZW1lbnQsIGVsZW1lbnQ6IEVsZW1lbnQgfCAnYXV0bycgPSAnYXV0bycsIHNtb290aG5lc3MgPSAxKSB7XG4gICAgICAgIGxldCB0YXJnZXQ6IEVsZW1lbnQ7XG4gICAgICAgIGlmIChlbGVtZW50ID09PSAnYXV0bycpIHtcbiAgICAgICAgICAgIGxldCBwYXJlbnQgPSBjaGlsZC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgd2hpbGUgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIGlmIChbJ3Njcm9sbCcsICdhdXRvJ10uaW5jbHVkZXMod2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50KS5vdmVyZmxvd1kpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHBhcmVudDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0ID0gZWxlbWVudDtcbiAgICAgICAgfVxuICAgICAgICAvLyB5IGVxdWFscyB0byB0aGUgdG9wIG9mIHRoZSBjaGlsZCArIGFueSBzY3JvbGxpbmcgb2YgdGhlIHBhcmVudCAtIHRoZSB0b3Agb2YgdGhlIHBhcmVudFxuICAgICAgICBsZXQgeSA9XG4gICAgICAgICAgICBjaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xuICAgICAgICAgICAgdGFyZ2V0LnNjcm9sbFRvcCAtXG4gICAgICAgICAgICB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICAvLyBtb3ZlIHRoZSBmb2N1c2VkIGVsZW1lbnQgdG8gMS8zIGF0IHRoZSB0b3Agb2YgdGhlIGNvbnRhaW5lclxuICAgICAgICB5ICs9IGNoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCAvIDIgLSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0IC8gMztcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsU21vb3RoRWxlbWVudCh5LCB0YXJnZXQsIHNtb290aG5lc3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTbW9vdGhseSBzY3JvbGxzIHRvIHRoZSBnaXZlbiB5IG9mZnNldCBpbnNpZGUgYW4gZWxlbWVudCAodXNlIG9mZnNldFRvcCBvbiB0aGUgY2hpbGQgdG9cbiAgICAgKiBkZXRlcm1pbmUgdGhpcyBwb3NpdGlvbikuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc21vb3RobmVzcyBsb3dlciBudW1iZXJzIGluZGljYXRlIGxlc3Mgc21vb3RobmVzcywgaGlnaGVyIG1vcmUgc21vb3RobmVzc1xuICAgICAqL1xuICAgIHNjcm9sbFNtb290aEVsZW1lbnQocG9zOiBudW1iZXIgPSAwLCBlbGVtZW50OiBFbGVtZW50LCBzbW9vdGhuZXNzID0gMSwgYXhpcyA9ICd5Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UG9zID0gYXhpcyA9PSAneCcgPyBlbGVtZW50LnNjcm9sbExlZnQgOiBlbGVtZW50LnNjcm9sbFRvcDtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtc2Nyb2xsaW5nJykgPT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZSA9IGN1cnJlbnRQb3MgPiBwb3M7XG4gICAgICAgICAgICAgICAgbGV0IGxhc3RQb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF4UG9zID1cbiAgICAgICAgICAgICAgICAgICAgYXhpcyA9PSAneCdcbiAgICAgICAgICAgICAgICAgICAgICAgID8gZWxlbWVudC5zY3JvbGxXaWR0aCAtIGVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZWxlbWVudC5zY3JvbGxIZWlnaHQgLSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICBsZXQgbGltaXRSZWFjaGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgJiYgcG9zIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgbGltaXRSZWFjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFtb2RlICYmIHBvcyA+PSBtYXhQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zID0gbWF4UG9zO1xuICAgICAgICAgICAgICAgICAgICBsaW1pdFJlYWNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc3BlZWQgPSAxNjtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudFBvcyA9IGF4aXMgPT0gJ3gnID8gZWxlbWVudC5zY3JvbGxMZWZ0IDogZWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc0RpZmYgPSBjdXJyZW50UG9zIC0gbGFzdFBvcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3BlZWRGYWN0b3IgPSBzcGVlZCAvIDE2O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXZpZGVyID0gKDMgLyBzcGVlZEZhY3RvcikgKiBzbW9vdGhuZXNzO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtaW5TcGVlZCA9ICg1ICogc3BlZWRGYWN0b3IpIC8gc21vb3RobmVzcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4U3BlZWQgPSAoNTAgKiBzcGVlZEZhY3RvcikgLyBzbW9vdGhuZXNzO1xuICAgICAgICAgICAgICAgICAgICBsYXN0UG9zID0gY3VycmVudFBvcztcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3MgPiBwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb3MgLT0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3BlZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5tYXgoKGN1cnJlbnRQb3MgLSBwb3MpIC8gZGl2aWRlciwgbWluU3BlZWQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmlzaGVkID0gY3VycmVudFBvcyA8PSBwb3M7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBvcyA8IHBvcyAmJiAhbW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvcyArPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTcGVlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1heCgocG9zIC0gY3VycmVudFBvcykgLyBkaXZpZGVyLCBtaW5TcGVlZCksXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgPSBjdXJyZW50UG9zID49IHBvcztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoYXhpcyA9PSAneCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsTGVmdCA9IGN1cnJlbnRQb3M7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGN1cnJlbnRQb3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1pcy1zY3JvbGxpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spO1xuXG4gICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtaXMtc2Nyb2xsaW5nJywgJ3RydWUnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { trigger } from '@angular/animations';
|
|
2
|
-
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
3
|
-
import { UIAnimation } from '../util/ui-animation';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
import * as i2 from "@angular/material/menu";
|
|
7
|
-
import * as i3 from "../directives/icon.directive";
|
|
8
|
-
import * as i4 from "@ngx-translate/core";
|
|
9
|
-
export class SortDropdownComponent {
|
|
10
|
-
constructor() {
|
|
11
|
-
this.sort = new EventEmitter();
|
|
12
|
-
}
|
|
13
|
-
setSort(item) {
|
|
14
|
-
let ascending = this.sortAscending;
|
|
15
|
-
const itemAscending = item.mode === 'ascending';
|
|
16
|
-
if (item.name === this.sortBy) {
|
|
17
|
-
if (item.mode != null) {
|
|
18
|
-
// element is limited to one mode, ignore the request
|
|
19
|
-
if (itemAscending === this.sortAscending) {
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
ascending = !ascending;
|
|
24
|
-
}
|
|
25
|
-
else if (item.mode != null) {
|
|
26
|
-
// force mode when switching to item
|
|
27
|
-
ascending = itemAscending;
|
|
28
|
-
}
|
|
29
|
-
item.ascending = ascending;
|
|
30
|
-
this.sort.emit(item);
|
|
31
|
-
}
|
|
32
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SortDropdownComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: SortDropdownComponent, selector: "es-sort-dropdown", inputs: { columns: "columns", sortBy: "sortBy", sortAscending: "sortAscending" }, outputs: { sort: "sort" }, viewQueries: [{ propertyName: "menu", first: true, predicate: ["menu"], descendants: true, static: true }], ngImport: i0, template: "<mat-menu #menu=\"matMenu\" class=\"sort-dropdown-menu\">\n <div class=\"collection-item-title\">{{ 'SORT_BY' | translate }}</div>\n <button\n *ngFor=\"let item of columns\"\n mat-menu-item\n (click)=\"setSort(item)\"\n class=\"collection-item\"\n [class.active]=\"sortBy === item.name\"\n >\n <span class=\"title\" *ngIf=\"item.label\">{{ item.label }}</span>\n <span class=\"title\" *ngIf=\"!item.label\">{{ item.type + '.' + item.name | translate }}</span>\n <ng-container *ngIf=\"sortBy === item.name && item.name !== 'ccm:collection_ordered_position'\">\n <i class=\"material-icons\" *ngIf=\"sortAscending\" [altText]=\"'ASCENDING' | translate\">\n arrow_upward\n </i>\n <i class=\"material-icons\" *ngIf=\"!sortAscending\" [altText]=\"'DESCENDING' | translate\">\n arrow_downward\n </i>\n <span class=\"cdk-visually-hidden\">{{ 'SELECTED' | translate }}</span>\n </ng-container>\n </button>\n</mat-menu>\n", styles: ["::ng-deep .sort-dropdown-menu{width:240px}.collection-item-title{color:var(--textLight);font-size:80%;font-weight:700;padding:5px 16px}.collection-item{display:flex;color:var(--primary);text-align:left;border:none;width:100%}.collection-item ::ng-deep .mat-mdc-menu-item-text{flex-grow:1;display:flex;align-items:center}.collection-item.cdk-keyboard-focused{outline:none;border:2px solid var(--palette-primary-300)}.collection-item.active{--mat-menu-item-label-text-weight: bold}.collection-item.active:after{content:\"\";position:absolute;left:0;width:100%;height:100%;background:linear-gradient(to right,var(--primary) 0,var(--primary) 5px,transparent 5px,transparent 5%)}.collection-item .title{flex-grow:1}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i3.IconDirective, selector: "i[esIcon], i.material-icons", inputs: ["altText", "aria", "esIcon"] }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }], animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))] }); }
|
|
34
|
-
}
|
|
35
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SortDropdownComponent, decorators: [{
|
|
36
|
-
type: Component,
|
|
37
|
-
args: [{ selector: 'es-sort-dropdown', animations: [trigger('openOverlay', UIAnimation.openOverlay(UIAnimation.ANIMATION_TIME_FAST))], template: "<mat-menu #menu=\"matMenu\" class=\"sort-dropdown-menu\">\n <div class=\"collection-item-title\">{{ 'SORT_BY' | translate }}</div>\n <button\n *ngFor=\"let item of columns\"\n mat-menu-item\n (click)=\"setSort(item)\"\n class=\"collection-item\"\n [class.active]=\"sortBy === item.name\"\n >\n <span class=\"title\" *ngIf=\"item.label\">{{ item.label }}</span>\n <span class=\"title\" *ngIf=\"!item.label\">{{ item.type + '.' + item.name | translate }}</span>\n <ng-container *ngIf=\"sortBy === item.name && item.name !== 'ccm:collection_ordered_position'\">\n <i class=\"material-icons\" *ngIf=\"sortAscending\" [altText]=\"'ASCENDING' | translate\">\n arrow_upward\n </i>\n <i class=\"material-icons\" *ngIf=\"!sortAscending\" [altText]=\"'DESCENDING' | translate\">\n arrow_downward\n </i>\n <span class=\"cdk-visually-hidden\">{{ 'SELECTED' | translate }}</span>\n </ng-container>\n </button>\n</mat-menu>\n", styles: ["::ng-deep .sort-dropdown-menu{width:240px}.collection-item-title{color:var(--textLight);font-size:80%;font-weight:700;padding:5px 16px}.collection-item{display:flex;color:var(--primary);text-align:left;border:none;width:100%}.collection-item ::ng-deep .mat-mdc-menu-item-text{flex-grow:1;display:flex;align-items:center}.collection-item.cdk-keyboard-focused{outline:none;border:2px solid var(--palette-primary-300)}.collection-item.active{--mat-menu-item-label-text-weight: bold}.collection-item.active:after{content:\"\";position:absolute;left:0;width:100%;height:100%;background:linear-gradient(to right,var(--primary) 0,var(--primary) 5px,transparent 5px,transparent 5%)}.collection-item .title{flex-grow:1}\n"] }]
|
|
38
|
-
}], ctorParameters: () => [], propDecorators: { menu: [{
|
|
39
|
-
type: ViewChild,
|
|
40
|
-
args: ['menu', { static: true }]
|
|
41
|
-
}], columns: [{
|
|
42
|
-
type: Input
|
|
43
|
-
}], sortBy: [{
|
|
44
|
-
type: Input
|
|
45
|
-
}], sortAscending: [{
|
|
46
|
-
type: Input
|
|
47
|
-
}], sort: [{
|
|
48
|
-
type: Output
|
|
49
|
-
}] } });
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1kcm9wZG93bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NvcnQtZHJvcGRvd24vc29ydC1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NvcnQtZHJvcGRvd24vc29ydC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFTbkQsTUFBTSxPQUFPLHFCQUFxQjtJQVM5QjtRQUZVLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBYSxDQUFDO0lBRWhDLENBQUM7SUFFaEIsT0FBTyxDQUFDLElBQW9CO1FBQ3hCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSyxXQUFXLENBQUM7UUFDaEQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3BCLHFEQUFxRDtnQkFDckQsSUFBSSxhQUFhLEtBQUssSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUN2QyxPQUFPO2dCQUNYLENBQUM7WUFDTCxDQUFDO1lBQ0QsU0FBUyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQzNCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0Isb0NBQW9DO1lBQ3BDLFNBQVMsR0FBRyxhQUFhLENBQUM7UUFDOUIsQ0FBQztRQUNBLElBQWtCLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDOytHQTVCUSxxQkFBcUI7bUdBQXJCLHFCQUFxQixpUkNabEMsdTlCQXNCQSwwakREWmdCLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7OzRGQUVyRixxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0ksa0JBQWtCLGNBR2hCLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7d0RBR3pELElBQUk7c0JBQXhDLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFMUIsT0FBTztzQkFBZixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLElBQUk7c0JBQWIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdE1lbnUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcbmltcG9ydCB7IFVJQW5pbWF0aW9uIH0gZnJvbSAnLi4vdXRpbC91aS1hbmltYXRpb24nO1xuaW1wb3J0IHsgTGlzdEl0ZW0sIFNvcnRFdmVudCB9IGZyb20gJy4uL3R5cGVzL2xpc3QtaXRlbSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXMtc29ydC1kcm9wZG93bicsXG4gICAgdGVtcGxhdGVVcmw6ICdzb3J0LWRyb3Bkb3duLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnc29ydC1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFt0cmlnZ2VyKCdvcGVuT3ZlcmxheScsIFVJQW5pbWF0aW9uLm9wZW5PdmVybGF5KFVJQW5pbWF0aW9uLkFOSU1BVElPTl9USU1FX0ZBU1QpKV0sXG59KVxuZXhwb3J0IGNsYXNzIFNvcnREcm9wZG93bkNvbXBvbmVudCB7XG4gICAgQFZpZXdDaGlsZCgnbWVudScsIHsgc3RhdGljOiB0cnVlIH0pIG1lbnU6IE1hdE1lbnU7XG5cbiAgICBASW5wdXQoKSBjb2x1bW5zOiBMaXN0SXRlbVtdO1xuICAgIEBJbnB1dCgpIHNvcnRCeTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHNvcnRBc2NlbmRpbmc6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KCkgc29ydCA9IG5ldyBFdmVudEVtaXR0ZXI8U29ydEV2ZW50PigpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgc2V0U29ydChpdGVtOiBMaXN0SXRlbSB8IGFueSk6IHZvaWQge1xuICAgICAgICBsZXQgYXNjZW5kaW5nID0gdGhpcy5zb3J0QXNjZW5kaW5nO1xuICAgICAgICBjb25zdCBpdGVtQXNjZW5kaW5nID0gaXRlbS5tb2RlID09PSAnYXNjZW5kaW5nJztcbiAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PT0gdGhpcy5zb3J0QnkpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLm1vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgaXMgbGltaXRlZCB0byBvbmUgbW9kZSwgaWdub3JlIHRoZSByZXF1ZXN0XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1Bc2NlbmRpbmcgPT09IHRoaXMuc29ydEFzY2VuZGluZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNjZW5kaW5nID0gIWFzY2VuZGluZztcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLm1vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gZm9yY2UgbW9kZSB3aGVuIHN3aXRjaGluZyB0byBpdGVtXG4gICAgICAgICAgICBhc2NlbmRpbmcgPSBpdGVtQXNjZW5kaW5nO1xuICAgICAgICB9XG4gICAgICAgIChpdGVtIGFzIFNvcnRFdmVudCkuYXNjZW5kaW5nID0gYXNjZW5kaW5nO1xuICAgICAgICB0aGlzLnNvcnQuZW1pdChpdGVtKTtcbiAgICB9XG59XG4iLCI8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJzb3J0LWRyb3Bkb3duLW1lbnVcIj5cbiAgPGRpdiBjbGFzcz1cImNvbGxlY3Rpb24taXRlbS10aXRsZVwiPnt7ICdTT1JUX0JZJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8YnV0dG9uXG4gICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29sdW1uc1wiXG4gICAgbWF0LW1lbnUtaXRlbVxuICAgIChjbGljayk9XCJzZXRTb3J0KGl0ZW0pXCJcbiAgICBjbGFzcz1cImNvbGxlY3Rpb24taXRlbVwiXG4gICAgW2NsYXNzLmFjdGl2ZV09XCJzb3J0QnkgPT09IGl0ZW0ubmFtZVwiXG4gID5cbiAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCIgKm5nSWY9XCJpdGVtLmxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cInRpdGxlXCIgKm5nSWY9XCIhaXRlbS5sYWJlbFwiPnt7IGl0ZW0udHlwZSArICcuJyArIGl0ZW0ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic29ydEJ5ID09PSBpdGVtLm5hbWUgJiYgaXRlbS5uYW1lICE9PSAnY2NtOmNvbGxlY3Rpb25fb3JkZXJlZF9wb3NpdGlvbidcIj5cbiAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiAqbmdJZj1cInNvcnRBc2NlbmRpbmdcIiBbYWx0VGV4dF09XCInQVNDRU5ESU5HJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICBhcnJvd191cHdhcmRcbiAgICAgIDwvaT5cbiAgICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiAqbmdJZj1cIiFzb3J0QXNjZW5kaW5nXCIgW2FsdFRleHRdPVwiJ0RFU0NFTkRJTkcnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgIGFycm93X2Rvd253YXJkXG4gICAgICA8L2k+XG4gICAgICA8c3BhbiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIj57eyAnU0VMRUNURUQnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2J1dHRvbj5cbjwvbWF0LW1lbnU+XG4iXX0=
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { Component, HostBinding } from '@angular/core';
|
|
2
|
-
import { TranslateModule } from '@ngx-translate/core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@ngx-translate/core";
|
|
5
|
-
export class SpinnerComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.dataTest = 'loading-spinner';
|
|
8
|
-
}
|
|
9
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpinnerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: SpinnerComponent, isStandalone: true, selector: "es-spinner", host: { properties: { "attr.data-test": "this.dataTest" } }, ngImport: i0, template: "<div class=\"spinner\">\n <span aria-live=\"polite\" class=\"cdk-visually-hidden\">{{ 'LOADING' | translate }}</span>\n <div class=\"spinnercontainer\">\n <div class=\"inner\">\n <div class=\"spinner1\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner2\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner3\"></div>\n </div>\n </div>\n</div>\n", styles: [".spinner{margin:0 auto}.spinnercontainer{margin:20px auto auto;height:54px;color:#0000;text-align:center;float:left;width:100%}.inner{width:30px;height:50px;display:inline-block}.spinner1{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjYzFjNmUzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.1s;-moz-animation-delay:.1s;animation-delay:.1s}.spinner2{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjN2Y5MWMzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.25s;-moz-animation-delay:.25s;animation-delay:.25s}.spinner3{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjMzE2MmE3IiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.5s;-moz-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-moz-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-ms-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-o-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5) rotate(90deg)}to{transform:scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] }); }
|
|
11
|
-
}
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpinnerComponent, decorators: [{
|
|
13
|
-
type: Component,
|
|
14
|
-
args: [{ selector: 'es-spinner', standalone: true, imports: [TranslateModule], template: "<div class=\"spinner\">\n <span aria-live=\"polite\" class=\"cdk-visually-hidden\">{{ 'LOADING' | translate }}</span>\n <div class=\"spinnercontainer\">\n <div class=\"inner\">\n <div class=\"spinner1\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner2\"></div>\n </div>\n <div class=\"inner\">\n <div class=\"spinner3\"></div>\n </div>\n </div>\n</div>\n", styles: [".spinner{margin:0 auto}.spinnercontainer{margin:20px auto auto;height:54px;color:#0000;text-align:center;float:left;width:100%}.inner{width:30px;height:50px;display:inline-block}.spinner1{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjYzFjNmUzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.1s;-moz-animation-delay:.1s;animation-delay:.1s}.spinner2{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjN2Y5MWMzIiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.25s;-moz-animation-delay:.25s;animation-delay:.25s}.spinner3{background:url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDEyLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgNTE0NDgpICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbCgk8IUVOVElUWSBuc19zdmcgImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KCTwhRU5USVRZIG5zX3hsaW5rICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj4KXT4KPHN2ZyAgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9IiZuc19zdmc7IiB4bWxuczp4bGluaz0iJm5zX3hsaW5rOyIgd2lkdGg9IjE1LjY1NyIgaGVpZ2h0PSIxMy41NTkiCgkgdmlld0JveD0iMCAwIDE1LjY1NyAxMy41NTkiIG92ZXJmbG93PSJ2aXNpYmxlIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxNS42NTcgMTMuNTU5IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBvbHlnb24gb3BhY2l0eT0iMC42IiBmaWxsPSIjMzE2MmE3IiBwb2ludHM9IjMuOTE0LDEzLjU1OSAwLDYuNzggMy45MTQsMCAxMS43NDMsMCAxNS42NTcsNi43OCAxMS43NDMsMTMuNTU5ICIvPgo8L3N2Zz4K);background-repeat:no-repeat;background-position:center;background-size:50px;width:50px;height:50px;-webkit-animation:spin 2s infinite ease-in;-moz-animation:spin 2s infinite ease-in;-ms-animation:spin 2s infinite ease-in;-o-animation:spin 2s infinite ease-in;animation:spin 2s infinite ease-in;-webkit-animation-delay:.5s;-moz-animation-delay:.5s;animation-delay:.5s}@-webkit-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-moz-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-ms-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@-o-keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5)}to{transform:scale(1)}}@keyframes spin{0%{transform:scale(1)}50%{transform:scale(.5) rotate(90deg)}to{transform:scale(1)}}\n"] }]
|
|
15
|
-
}], ctorParameters: () => [], propDecorators: { dataTest: [{
|
|
16
|
-
type: HostBinding,
|
|
17
|
-
args: ['attr.data-test']
|
|
18
|
-
}] } });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NwaW5uZXIvc3Bpbm5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NwaW5uZXIvc3Bpbm5lci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQVN0RCxNQUFNLE9BQU8sZ0JBQWdCO0lBR3pCO1FBRndDLGFBQVEsR0FBRyxpQkFBaUIsQ0FBQztJQUV0RCxDQUFDOytHQUhQLGdCQUFnQjttR0FBaEIsZ0JBQWdCLG1JQ1Y3Qix1WkFjQSwrakpETmMsZUFBZTs7NEZBRWhCLGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDSSxZQUFZLGNBR1YsSUFBSSxXQUNQLENBQUMsZUFBZSxDQUFDO3dEQUdjLFFBQVE7c0JBQS9DLFdBQVc7dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBIb3N0QmluZGluZywgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdlcy1zcGlubmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3NwaW5uZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydzcGlubmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbVHJhbnNsYXRlTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgU3Bpbm5lckNvbXBvbmVudCB7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtdGVzdCcpIHJlYWRvbmx5IGRhdGFUZXN0ID0gJ2xvYWRpbmctc3Bpbm5lcic7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG59XG4iLCI8ZGl2IGNsYXNzPVwic3Bpbm5lclwiPlxuICA8c3BhbiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBjbGFzcz1cImNkay12aXN1YWxseS1oaWRkZW5cIj57eyAnTE9BRElORycgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gIDxkaXYgY2xhc3M9XCJzcGlubmVyY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImlubmVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lcjFcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5uZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyMlwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXIzXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/material/progress-spinner";
|
|
5
|
-
export class SpinnerSmallComponent {
|
|
6
|
-
constructor() {
|
|
7
|
-
this.diameter = 20;
|
|
8
|
-
}
|
|
9
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpinnerSmallComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
10
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: SpinnerSmallComponent, isStandalone: true, selector: "es-spinner-small", inputs: { diameter: "diameter" }, ngImport: i0, template: "<mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"diameter\"\n></mat-progress-spinner>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
11
|
-
}
|
|
12
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SpinnerSmallComponent, decorators: [{
|
|
13
|
-
type: Component,
|
|
14
|
-
args: [{ selector: 'es-spinner-small', standalone: true, imports: [MatProgressSpinnerModule], template: "<mat-progress-spinner\n color=\"primary\"\n mode=\"indeterminate\"\n [diameter]=\"diameter\"\n></mat-progress-spinner>\n" }]
|
|
15
|
-
}], ctorParameters: () => [], propDecorators: { diameter: [{
|
|
16
|
-
type: Input
|
|
17
|
-
}] } });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci1zbWFsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NwaW5uZXItc21hbGwvc3Bpbm5lci1zbWFsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lZHUtc2hhcmluZy11aS9zcmMvbGliL3NwaW5uZXItc21hbGwvc3Bpbm5lci1zbWFsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBUzlFLE1BQU0sT0FBTyxxQkFBcUI7SUFFOUI7UUFEUyxhQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ1IsQ0FBQzsrR0FGUCxxQkFBcUI7bUdBQXJCLHFCQUFxQiw4R0NWbEMsNkhBS0EseURER2Msd0JBQXdCOzs0RkFFekIscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNJLGtCQUFrQixjQUdoQixJQUFJLFdBQ1AsQ0FBQyx3QkFBd0IsQ0FBQzt3REFHMUIsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2VzLXNwaW5uZXItc21hbGwnLFxuICAgIHRlbXBsYXRlVXJsOiAnc3Bpbm5lci1zbWFsbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ3NwaW5uZXItc21hbGwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBTcGlubmVyU21hbGxDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIGRpYW1ldGVyID0gMjA7XG4gICAgY29uc3RydWN0b3IoKSB7fVxufVxuIiwiPG1hdC1wcm9ncmVzcy1zcGlubmVyXG4gIGNvbG9yPVwicHJpbWFyeVwiXG4gIG1vZGU9XCJpbmRldGVybWluYXRlXCJcbiAgW2RpYW1ldGVyXT1cImRpYW1ldGVyXCJcbj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuIl19
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export class FallbackTranslationHandler {
|
|
2
|
-
handle(params) {
|
|
3
|
-
return params.interpolateParams?.fallback ?? params.key;
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFsbGJhY2stdHJhbnNsYXRpb24taGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VkdS1zaGFyaW5nLXVpL3NyYy9saWIvdHJhbnNsYXRpb25zL2ZhbGxiYWNrLXRyYW5zbGF0aW9uLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLDBCQUEwQjtJQUNuQyxNQUFNLENBQUMsTUFBdUM7UUFDMUMsT0FBUSxNQUFNLENBQUMsaUJBQXlCLEVBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUM7SUFDckUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWlzc2luZ1RyYW5zbGF0aW9uSGFuZGxlciwgTWlzc2luZ1RyYW5zbGF0aW9uSGFuZGxlclBhcmFtcyB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5leHBvcnQgY2xhc3MgRmFsbGJhY2tUcmFuc2xhdGlvbkhhbmRsZXIgaW1wbGVtZW50cyBNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyIHtcbiAgICBoYW5kbGUocGFyYW1zOiBNaXNzaW5nVHJhbnNsYXRpb25IYW5kbGVyUGFyYW1zKSB7XG4gICAgICAgIHJldHVybiAocGFyYW1zLmludGVycG9sYXRlUGFyYW1zIGFzIGFueSk/LmZhbGxiYWNrID8/IHBhcmFtcy5rZXk7XG4gICAgfVxufVxuIl19
|