@skyux/list-builder 5.0.0-beta.0 → 5.0.1
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/LICENSE +21 -0
- package/bundles/skyux-list-builder.umd.js +1308 -1130
- package/bundles/skyux-list-builder.umd.js.map +1 -1
- package/documentation.json +6679 -0
- package/esm2015/modules/list/list-data-request.model.js +1 -1
- package/esm2015/modules/list/list-data-response.model.js +1 -1
- package/esm2015/modules/list/list-data.provider.js +1 -1
- package/esm2015/modules/list/list-paging.component.js +1 -1
- package/esm2015/modules/list/list-view.component.js +9 -8
- package/esm2015/modules/list/list.component.js +81 -87
- package/esm2015/modules/list/list.module.js +15 -18
- package/esm2015/modules/list/state/filters/filters.orchestrator.js +2 -3
- package/esm2015/modules/list/state/filters/update.action.js +1 -1
- package/esm2015/modules/list/state/items/items.orchestrator.js +12 -9
- package/esm2015/modules/list/state/items/load.action.js +1 -1
- package/esm2015/modules/list/state/items/set-items-selected.action.js +4 -2
- package/esm2015/modules/list/state/items/set-loading.action.js +1 -1
- package/esm2015/modules/list/state/list-state-action.type.js +2 -1
- package/esm2015/modules/list/state/list-state.model.js +1 -1
- package/esm2015/modules/list/state/list-state.rxstate.js +10 -8
- package/esm2015/modules/list/state/list-state.state-node.js +11 -14
- package/esm2015/modules/list/state/paging/paging.model.js +1 -1
- package/esm2015/modules/list/state/paging/paging.orchestrator.js +2 -3
- package/esm2015/modules/list/state/paging/set-items-per-page.action.js +1 -1
- package/esm2015/modules/list/state/paging/set-max-pages.action.js +1 -1
- package/esm2015/modules/list/state/paging/set-page-number.action.js +1 -1
- package/esm2015/modules/list/state/search/search.model.js +1 -1
- package/esm2015/modules/list/state/search/search.orchestrator.js +5 -4
- package/esm2015/modules/list/state/search/set-field-selectors.action.js +1 -1
- package/esm2015/modules/list/state/search/set-functions.action.js +1 -1
- package/esm2015/modules/list/state/search/set-options.action.js +1 -1
- package/esm2015/modules/list/state/search/set-search-text.action.js +1 -1
- package/esm2015/modules/list/state/selected/load.action.js +1 -1
- package/esm2015/modules/list/state/selected/selected.model.js +1 -1
- package/esm2015/modules/list/state/selected/selected.orchestrator.js +9 -10
- package/esm2015/modules/list/state/selected/set-item-selected.action.js +1 -1
- package/esm2015/modules/list/state/selected/set-items-selected.action.js +1 -1
- package/esm2015/modules/list/state/selected/set-loading.action.js +1 -1
- package/esm2015/modules/list/state/sort/label.model.js +1 -1
- package/esm2015/modules/list/state/sort/set-available.action.js +1 -1
- package/esm2015/modules/list/state/sort/set-field-selectors.action.js +1 -1
- package/esm2015/modules/list/state/sort/set-global.action.js +1 -1
- package/esm2015/modules/list/state/sort/sort.model.js +1 -1
- package/esm2015/modules/list/state/sort/sort.orchestrator.js +4 -5
- package/esm2015/modules/list/state/toolbar/disable.action.js +1 -1
- package/esm2015/modules/list/state/toolbar/load.action.js +1 -1
- package/esm2015/modules/list/state/toolbar/remove.action.js +1 -1
- package/esm2015/modules/list/state/toolbar/set-exists.action.js +1 -1
- package/esm2015/modules/list/state/toolbar/set-type.action.js +1 -1
- package/esm2015/modules/list/state/toolbar/show-multiselect-toolbar.action.js +1 -1
- package/esm2015/modules/list/state/toolbar/toolbar-item.model.js +1 -1
- package/esm2015/modules/list/state/toolbar/toolbar.model.js +1 -1
- package/esm2015/modules/list/state/toolbar/toolbar.orchestrator.js +3 -4
- package/esm2015/modules/list/state/views/load.action.js +1 -1
- package/esm2015/modules/list/state/views/set-active.action.js +1 -1
- package/esm2015/modules/list/state/views/view.model.js +1 -1
- package/esm2015/modules/list/state/views/views.model.js +1 -1
- package/esm2015/modules/list/state/views/views.orchestrator.js +2 -4
- package/esm2015/modules/list-data-provider-in-memory/list-data-in-memory.provider.js +25 -14
- package/esm2015/modules/list-filters/filter.model.js +1 -1
- package/esm2015/modules/list-filters/list-filter-button.component.js +23 -24
- package/esm2015/modules/list-filters/list-filter-inline-item-renderer.component.js +24 -24
- package/esm2015/modules/list-filters/list-filter-inline-item.component.js +32 -32
- package/esm2015/modules/list-filters/list-filter-inline.component.js +28 -26
- package/esm2015/modules/list-filters/list-filter-inline.model.js +1 -1
- package/esm2015/modules/list-filters/list-filter-summary.component.js +22 -23
- package/esm2015/modules/list-filters/list-filters.module.js +33 -27
- package/esm2015/modules/list-paging/list-paging.component.js +37 -40
- package/esm2015/modules/list-paging/list-paging.module.js +15 -19
- package/esm2015/modules/list-toolbar/list-multiselect-toolbar.component.js +45 -41
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-action.component.js +22 -23
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-action.js +2 -1
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions-host.component.js +22 -20
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions.component.js +26 -30
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions.module.js +34 -23
- package/esm2015/modules/list-toolbar/list-secondary-actions/list-secondary-actions.service.js +10 -9
- package/esm2015/modules/list-toolbar/list-toolbar-item-renderer.component.js +22 -21
- package/esm2015/modules/list-toolbar/list-toolbar-item.component.js +23 -24
- package/esm2015/modules/list-toolbar/list-toolbar-search-actions.component.js +15 -13
- package/esm2015/modules/list-toolbar/list-toolbar-sort.component.js +21 -23
- package/esm2015/modules/list-toolbar/list-toolbar-view-actions.component.js +14 -12
- package/esm2015/modules/list-toolbar/list-toolbar.component.js +142 -139
- package/esm2015/modules/list-toolbar/list-toolbar.module.js +62 -31
- package/esm2015/modules/list-toolbar/state/config/config.model.js +1 -1
- package/esm2015/modules/list-toolbar/state/config/config.orchestrator.js +2 -4
- package/esm2015/modules/list-toolbar/state/config/set-search-enabled.action.js +1 -1
- package/esm2015/modules/list-toolbar/state/config/set-sort-selector-enabled.action.js +1 -1
- package/esm2015/modules/list-toolbar/state/toolbar-state-action.type.js +2 -1
- package/esm2015/modules/list-toolbar/state/toolbar-state.model.js +1 -1
- package/esm2015/modules/list-toolbar/state/toolbar-state.rxstate.js +9 -8
- package/esm2015/modules/list-toolbar/state/toolbar-state.state-node.js +12 -17
- package/esm2015/modules/shared/sky-list-builder-resources.module.js +53 -0
- package/esm2015/public-api.js +78 -0
- package/esm2015/skyux-list-builder.js +2 -23
- package/fesm2015/skyux-list-builder.js +992 -915
- package/fesm2015/skyux-list-builder.js.map +1 -1
- package/modules/list/list.component.d.ts +3 -0
- package/modules/list/list.module.d.ts +6 -0
- package/modules/list/state/list-state.rxstate.d.ts +3 -0
- package/modules/list/state/list-state.state-node.d.ts +3 -0
- package/modules/list-filters/list-filter-button.component.d.ts +3 -0
- package/modules/list-filters/list-filter-inline-item-renderer.component.d.ts +3 -0
- package/modules/list-filters/list-filter-inline-item.component.d.ts +3 -0
- package/modules/list-filters/list-filter-inline.component.d.ts +3 -0
- package/modules/list-filters/list-filter-summary.component.d.ts +3 -0
- package/modules/list-filters/list-filters.module.d.ts +11 -0
- package/modules/list-paging/list-paging.component.d.ts +3 -0
- package/modules/list-paging/list-paging.module.d.ts +7 -0
- package/modules/list-toolbar/list-multiselect-toolbar.component.d.ts +3 -0
- package/modules/list-toolbar/list-secondary-actions/list-secondary-action.component.d.ts +3 -0
- package/modules/list-toolbar/list-secondary-actions/list-secondary-actions-host.component.d.ts +3 -0
- package/modules/list-toolbar/list-secondary-actions/list-secondary-actions.component.d.ts +3 -0
- package/modules/list-toolbar/list-secondary-actions/list-secondary-actions.module.d.ts +12 -0
- package/modules/list-toolbar/list-secondary-actions/list-secondary-actions.service.d.ts +3 -0
- package/modules/list-toolbar/list-toolbar-item-renderer.component.d.ts +3 -0
- package/modules/list-toolbar/list-toolbar-item.component.d.ts +3 -0
- package/modules/list-toolbar/list-toolbar-search-actions.component.d.ts +3 -0
- package/modules/list-toolbar/list-toolbar-sort.component.d.ts +3 -0
- package/modules/list-toolbar/list-toolbar-view-actions.component.d.ts +3 -0
- package/modules/list-toolbar/list-toolbar.component.d.ts +3 -0
- package/modules/list-toolbar/list-toolbar.module.d.ts +20 -0
- package/modules/list-toolbar/state/toolbar-state.rxstate.d.ts +3 -0
- package/modules/list-toolbar/state/toolbar-state.state-node.d.ts +3 -0
- package/modules/shared/sky-list-builder-resources.module.d.ts +14 -0
- package/package.json +16 -31
- package/{public_api.d.ts → public-api.d.ts} +11 -0
- package/skyux-list-builder.d.ts +2 -22
- package/CHANGELOG.md +0 -161
- package/bundles/skyux-list-builder.umd.min.js +0 -16
- package/bundles/skyux-list-builder.umd.min.js.map +0 -1
- package/esm2015/modules/shared/list-builder-resources.module.js +0 -17
- package/esm2015/plugin-resources/list-builder-resources-provider.js +0 -16
- package/esm2015/public_api.js +0 -63
- package/esm5/modules/list/list-data-request.model.js +0 -20
- package/esm5/modules/list/list-data-response.model.js +0 -11
- package/esm5/modules/list/list-data.provider.js +0 -10
- package/esm5/modules/list/list-paging.component.js +0 -15
- package/esm5/modules/list/list-view.component.js +0 -38
- package/esm5/modules/list/list.component.js +0 -337
- package/esm5/modules/list/list.module.js +0 -24
- package/esm5/modules/list/state/filters/filters.orchestrator.js +0 -22
- package/esm5/modules/list/state/filters/update.action.js +0 -11
- package/esm5/modules/list/state/items/items.orchestrator.js +0 -55
- package/esm5/modules/list/state/items/load.action.js +0 -16
- package/esm5/modules/list/state/items/set-items-selected.action.js +0 -15
- package/esm5/modules/list/state/items/set-loading.action.js +0 -12
- package/esm5/modules/list/state/list-state-action.type.js +0 -1
- package/esm5/modules/list/state/list-state.model.js +0 -26
- package/esm5/modules/list/state/list-state.rxstate.js +0 -91
- package/esm5/modules/list/state/list-state.state-node.js +0 -42
- package/esm5/modules/list/state/paging/paging.model.js +0 -16
- package/esm5/modules/list/state/paging/paging.orchestrator.js +0 -33
- package/esm5/modules/list/state/paging/set-items-per-page.action.js +0 -11
- package/esm5/modules/list/state/paging/set-max-pages.action.js +0 -11
- package/esm5/modules/list/state/paging/set-page-number.action.js +0 -11
- package/esm5/modules/list/state/search/search.model.js +0 -34
- package/esm5/modules/list/state/search/search.orchestrator.js +0 -51
- package/esm5/modules/list/state/search/set-field-selectors.action.js +0 -12
- package/esm5/modules/list/state/search/set-functions.action.js +0 -12
- package/esm5/modules/list/state/search/set-options.action.js +0 -13
- package/esm5/modules/list/state/search/set-search-text.action.js +0 -11
- package/esm5/modules/list/state/selected/load.action.js +0 -11
- package/esm5/modules/list/state/selected/selected.model.js +0 -11
- package/esm5/modules/list/state/selected/selected.orchestrator.js +0 -62
- package/esm5/modules/list/state/selected/set-item-selected.action.js +0 -12
- package/esm5/modules/list/state/selected/set-items-selected.action.js +0 -15
- package/esm5/modules/list/state/selected/set-loading.action.js +0 -12
- package/esm5/modules/list/state/sort/label.model.js +0 -27
- package/esm5/modules/list/state/sort/set-available.action.js +0 -11
- package/esm5/modules/list/state/sort/set-field-selectors.action.js +0 -11
- package/esm5/modules/list/state/sort/set-global.action.js +0 -11
- package/esm5/modules/list/state/sort/sort.model.js +0 -29
- package/esm5/modules/list/state/sort/sort.orchestrator.js +0 -36
- package/esm5/modules/list/state/toolbar/disable.action.js +0 -11
- package/esm5/modules/list/state/toolbar/load.action.js +0 -13
- package/esm5/modules/list/state/toolbar/remove.action.js +0 -11
- package/esm5/modules/list/state/toolbar/set-exists.action.js +0 -11
- package/esm5/modules/list/state/toolbar/set-type.action.js +0 -11
- package/esm5/modules/list/state/toolbar/show-multiselect-toolbar.action.js +0 -11
- package/esm5/modules/list/state/toolbar/toolbar-item.model.js +0 -18
- package/esm5/modules/list/state/toolbar/toolbar.model.js +0 -19
- package/esm5/modules/list/state/toolbar/toolbar.orchestrator.js +0 -86
- package/esm5/modules/list/state/views/load.action.js +0 -11
- package/esm5/modules/list/state/views/set-active.action.js +0 -11
- package/esm5/modules/list/state/views/view.model.js +0 -12
- package/esm5/modules/list/state/views/views.model.js +0 -15
- package/esm5/modules/list/state/views/views.orchestrator.js +0 -28
- package/esm5/modules/list-data-provider-in-memory/list-data-in-memory.provider.js +0 -157
- package/esm5/modules/list-filters/filter.model.js +0 -20
- package/esm5/modules/list-filters/list-filter-button.component.js +0 -45
- package/esm5/modules/list-filters/list-filter-inline-item-renderer.component.js +0 -37
- package/esm5/modules/list-filters/list-filter-inline-item.component.js +0 -50
- package/esm5/modules/list-filters/list-filter-inline.component.js +0 -73
- package/esm5/modules/list-filters/list-filter-inline.model.js +0 -23
- package/esm5/modules/list-filters/list-filter-summary.component.js +0 -62
- package/esm5/modules/list-filters/list-filters.module.js +0 -38
- package/esm5/modules/list-paging/list-paging.component.js +0 -102
- package/esm5/modules/list-paging/list-paging.module.js +0 -26
- package/esm5/modules/list-toolbar/list-multiselect-toolbar.component.js +0 -153
- package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-action.component.js +0 -34
- package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-action.js +0 -1
- package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-actions-host.component.js +0 -49
- package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-actions.component.js +0 -49
- package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-actions.module.js +0 -38
- package/esm5/modules/list-toolbar/list-secondary-actions/list-secondary-actions.service.js +0 -36
- package/esm5/modules/list-toolbar/list-toolbar-item-renderer.component.js +0 -32
- package/esm5/modules/list-toolbar/list-toolbar-item.component.js +0 -53
- package/esm5/modules/list-toolbar/list-toolbar-search-actions.component.js +0 -20
- package/esm5/modules/list-toolbar/list-toolbar-sort.component.js +0 -30
- package/esm5/modules/list-toolbar/list-toolbar-view-actions.component.js +0 -22
- package/esm5/modules/list-toolbar/list-toolbar.component.js +0 -375
- package/esm5/modules/list-toolbar/list-toolbar.module.js +0 -59
- package/esm5/modules/list-toolbar/state/config/config.model.js +0 -16
- package/esm5/modules/list-toolbar/state/config/config.orchestrator.js +0 -28
- package/esm5/modules/list-toolbar/state/config/set-search-enabled.action.js +0 -11
- package/esm5/modules/list-toolbar/state/config/set-sort-selector-enabled.action.js +0 -13
- package/esm5/modules/list-toolbar/state/toolbar-state-action.type.js +0 -1
- package/esm5/modules/list-toolbar/state/toolbar-state.model.js +0 -12
- package/esm5/modules/list-toolbar/state/toolbar-state.rxstate.js +0 -29
- package/esm5/modules/list-toolbar/state/toolbar-state.state-node.js +0 -29
- package/esm5/modules/shared/list-builder-resources.module.js +0 -20
- package/esm5/plugin-resources/list-builder-resources-provider.js +0 -17
- package/esm5/public_api.js +0 -63
- package/esm5/skyux-list-builder.js +0 -26
- package/fesm5/skyux-list-builder.js +0 -2884
- package/fesm5/skyux-list-builder.js.map +0 -1
- package/modules/shared/list-builder-resources.module.d.ts +0 -2
- package/plugin-resources/list-builder-resources-provider.d.ts +0 -5
- package/skyux-list-builder.metadata.json +0 -1
- package/src/assets/img/list-toolbar-context.png +0 -0
- package/src/assets/img/toolbar-anatomy.png +0 -0
- package/src/assets/locales/resources_en_US.json +0 -22
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Component, Input, ContentChildren, TemplateRef } from '@angular/core';
|
|
3
|
-
var idIndex = 0;
|
|
4
|
-
/**
|
|
5
|
-
* Defines a toolbar item for the list toolbar.
|
|
6
|
-
*/
|
|
7
|
-
var SkyListToolbarItemComponent = /** @class */ (function () {
|
|
8
|
-
function SkyListToolbarItemComponent() {
|
|
9
|
-
/**
|
|
10
|
-
* Specifies the ID of the item.
|
|
11
|
-
*/
|
|
12
|
-
this.id = "sky-list-toolbar-item-" + ++idIndex;
|
|
13
|
-
/**
|
|
14
|
-
* Specifies the index of the item at the given item location.
|
|
15
|
-
* @default -1
|
|
16
|
-
*/
|
|
17
|
-
this.index = -1;
|
|
18
|
-
/**
|
|
19
|
-
* Specifies the toolbar location of the item. The valid options are `left`,
|
|
20
|
-
* `center`, and `right`.
|
|
21
|
-
* @default 'left'
|
|
22
|
-
*/
|
|
23
|
-
this.location = 'left';
|
|
24
|
-
}
|
|
25
|
-
Object.defineProperty(SkyListToolbarItemComponent.prototype, "template", {
|
|
26
|
-
get: function () {
|
|
27
|
-
return this.templates.length > 0 ? this.templates.first : undefined;
|
|
28
|
-
},
|
|
29
|
-
enumerable: true,
|
|
30
|
-
configurable: true
|
|
31
|
-
});
|
|
32
|
-
__decorate([
|
|
33
|
-
Input()
|
|
34
|
-
], SkyListToolbarItemComponent.prototype, "id", void 0);
|
|
35
|
-
__decorate([
|
|
36
|
-
Input()
|
|
37
|
-
], SkyListToolbarItemComponent.prototype, "index", void 0);
|
|
38
|
-
__decorate([
|
|
39
|
-
Input()
|
|
40
|
-
], SkyListToolbarItemComponent.prototype, "location", void 0);
|
|
41
|
-
__decorate([
|
|
42
|
-
ContentChildren(TemplateRef)
|
|
43
|
-
], SkyListToolbarItemComponent.prototype, "templates", void 0);
|
|
44
|
-
SkyListToolbarItemComponent = __decorate([
|
|
45
|
-
Component({
|
|
46
|
-
selector: 'sky-list-toolbar-item',
|
|
47
|
-
template: '<ng-content></ng-content>'
|
|
48
|
-
})
|
|
49
|
-
], SkyListToolbarItemComponent);
|
|
50
|
-
return SkyListToolbarItemComponent;
|
|
51
|
-
}());
|
|
52
|
-
export { SkyListToolbarItemComponent };
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L2xpc3QtYnVpbGRlci8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvbGlzdC10b29sYmFyL2xpc3QtdG9vbGJhci1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUUxRixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFFaEI7O0dBRUc7QUFLSDtJQUFBO1FBQ0U7O1dBRUc7UUFDYSxPQUFFLEdBQVcsMkJBQXlCLEVBQUUsT0FBUyxDQUFDO1FBQ2xFOzs7V0FHRztRQUNhLFVBQUssR0FBVyxDQUFDLENBQUMsQ0FBQztRQUNuQzs7OztXQUlHO1FBQ2EsYUFBUSxHQUFXLE1BQU0sQ0FBQztJQUs1QyxDQUFDO0lBSEMsc0JBQVcsaURBQVE7YUFBbkI7WUFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0RSxDQUFDOzs7T0FBQTtJQWZRO1FBQVIsS0FBSyxFQUFFOzJEQUEwRDtJQUt6RDtRQUFSLEtBQUssRUFBRTs4REFBMkI7SUFNMUI7UUFBUixLQUFLLEVBQUU7aUVBQWtDO0lBQ1o7UUFBN0IsZUFBZSxDQUFDLFdBQVcsQ0FBQztrRUFBZ0Q7SUFoQmxFLDJCQUEyQjtRQUp2QyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLFFBQVEsRUFBRSwyQkFBMkI7U0FDdEMsQ0FBQztPQUNXLDJCQUEyQixDQW9CdkM7SUFBRCxrQ0FBQztDQUFBLEFBcEJELElBb0JDO1NBcEJZLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIENvbnRlbnRDaGlsZHJlbiwgVGVtcGxhdGVSZWYsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5sZXQgaWRJbmRleCA9IDA7XG5cbi8qKlxuICogRGVmaW5lcyBhIHRvb2xiYXIgaXRlbSBmb3IgdGhlIGxpc3QgdG9vbGJhci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWxpc3QtdG9vbGJhci1pdGVtJyxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+J1xufSlcbmV4cG9ydCBjbGFzcyBTa3lMaXN0VG9vbGJhckl0ZW1Db21wb25lbnQge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBJRCBvZiB0aGUgaXRlbS5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBpZDogc3RyaW5nID0gYHNreS1saXN0LXRvb2xiYXItaXRlbS0keysraWRJbmRleH1gO1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gaXRlbSBsb2NhdGlvbi5cbiAgICogQGRlZmF1bHQgLTFcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBpbmRleDogbnVtYmVyID0gLTE7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHRvb2xiYXIgbG9jYXRpb24gb2YgdGhlIGl0ZW0uIFRoZSB2YWxpZCBvcHRpb25zIGFyZSBgbGVmdGAsXG4gICAqIGBjZW50ZXJgLCBhbmQgYHJpZ2h0YC5cbiAgICogQGRlZmF1bHQgJ2xlZnQnXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbG9jYXRpb246IHN0cmluZyA9ICdsZWZ0JztcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgcHJpdmF0ZSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcbiAgcHVibGljIGdldCB0ZW1wbGF0ZSgpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMubGVuZ3RoID4gMCA/IHRoaXMudGVtcGxhdGVzLmZpcnN0IDogdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
-
/**
|
|
4
|
-
* Displays custom actions in the toolbar beside to the search bar.
|
|
5
|
-
*/
|
|
6
|
-
var SkyListToolbarSearchActionsComponent = /** @class */ (function () {
|
|
7
|
-
function SkyListToolbarSearchActionsComponent() {
|
|
8
|
-
}
|
|
9
|
-
SkyListToolbarSearchActionsComponent = __decorate([
|
|
10
|
-
Component({
|
|
11
|
-
selector: 'sky-list-toolbar-search-actions',
|
|
12
|
-
template: "<div\n class=\"sky-list-toolbar-search-actions\"\n>\n <ng-content></ng-content>\n</div>\n",
|
|
13
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
14
|
-
styles: [".sky-list-toolbar-search-actions{margin-left:10px}"]
|
|
15
|
-
})
|
|
16
|
-
], SkyListToolbarSearchActionsComponent);
|
|
17
|
-
return SkyListToolbarSearchActionsComponent;
|
|
18
|
-
}());
|
|
19
|
-
export { SkyListToolbarSearchActionsComponent };
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC9saXN0LWJ1aWxkZXIvIiwic291cmNlcyI6WyJtb2R1bGVzL2xpc3QtdG9vbGJhci9saXN0LXRvb2xiYXItc2VhcmNoLWFjdGlvbnMuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUV2Qjs7R0FFRztBQU9IO0lBQUE7SUFBb0QsQ0FBQztJQUF4QyxvQ0FBb0M7UUFOaEQsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLGlDQUFpQztZQUMzQyx1R0FBMkQ7WUFFM0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O1NBQ2hELENBQUM7T0FDVyxvQ0FBb0MsQ0FBSTtJQUFELDJDQUFDO0NBQUEsQUFBckQsSUFBcUQ7U0FBeEMsb0NBQW9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBEaXNwbGF5cyBjdXN0b20gYWN0aW9ucyBpbiB0aGUgdG9vbGJhciBiZXNpZGUgdG8gdGhlIHNlYXJjaCBiYXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1saXN0LXRvb2xiYXItc2VhcmNoLWFjdGlvbnMnLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC10b29sYmFyLXNlYXJjaC1hY3Rpb25zLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyU2VhcmNoQWN0aW9uc0NvbXBvbmVudCB7IH1cbiJdfQ==
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Component, Input } from '@angular/core';
|
|
3
|
-
/**
|
|
4
|
-
* Adds a sort dropdown to the list toolbar.
|
|
5
|
-
*/
|
|
6
|
-
var SkyListToolbarSortComponent = /** @class */ (function () {
|
|
7
|
-
function SkyListToolbarSortComponent() {
|
|
8
|
-
}
|
|
9
|
-
__decorate([
|
|
10
|
-
Input()
|
|
11
|
-
], SkyListToolbarSortComponent.prototype, "label", void 0);
|
|
12
|
-
__decorate([
|
|
13
|
-
Input()
|
|
14
|
-
], SkyListToolbarSortComponent.prototype, "field", void 0);
|
|
15
|
-
__decorate([
|
|
16
|
-
Input()
|
|
17
|
-
], SkyListToolbarSortComponent.prototype, "type", void 0);
|
|
18
|
-
__decorate([
|
|
19
|
-
Input()
|
|
20
|
-
], SkyListToolbarSortComponent.prototype, "descending", void 0);
|
|
21
|
-
SkyListToolbarSortComponent = __decorate([
|
|
22
|
-
Component({
|
|
23
|
-
selector: 'sky-list-toolbar-sort',
|
|
24
|
-
template: ''
|
|
25
|
-
})
|
|
26
|
-
], SkyListToolbarSortComponent);
|
|
27
|
-
return SkyListToolbarSortComponent;
|
|
28
|
-
}());
|
|
29
|
-
export { SkyListToolbarSortComponent };
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLXNvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L2xpc3QtYnVpbGRlci8iLCJzb3VyY2VzIjpbIm1vZHVsZXMvbGlzdC10b29sYmFyL2xpc3QtdG9vbGJhci1zb3J0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0M7O0dBRUc7QUFLSDtJQUFBO0lBMEJELENBQUM7SUFwQkU7UUFEQyxLQUFLLEVBQUU7OERBQ2E7SUFNckI7UUFEQyxLQUFLLEVBQUU7OERBQ2E7SUFNckI7UUFEQyxLQUFLLEVBQUU7NkRBQ1k7SUFNcEI7UUFEQyxLQUFLLEVBQUU7bUVBQ21CO0lBeEJoQiwyQkFBMkI7UUFKdkMsU0FBUyxDQUFDO1lBQ1QsUUFBUSxFQUFFLHVCQUF1QjtZQUMvQixRQUFRLEVBQUUsRUFBRTtTQUNmLENBQUM7T0FDVywyQkFBMkIsQ0EwQnhDO0lBQUQsa0NBQUM7Q0FBQSxBQTFCQSxJQTBCQTtTQTFCYSwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBzb3J0IGRyb3Bkb3duIHRvIHRoZSBsaXN0IHRvb2xiYXIuXG4gICAqL1xuICBAQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3NreS1saXN0LXRvb2xiYXItc29ydCcsXG4gICAgICB0ZW1wbGF0ZTogJydcbiAgfSlcbiAgZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyU29ydENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIGEgbGFiZWwgZm9yIGEgc29ydCBvcHRpb24uXG4gICAgICogQHJlcXVpcmVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbGFiZWw6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGRhdGEgZmllbGQgdG8gc29ydCB0aGUgbGlzdCBvbi5cbiAgICAgKiBAcmVxdWlyZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWVsZDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZGF0YSB0eXBlIG9mIHRoZSBkYXRhIGZpZWxkIHRvIHNvcnQgdGhlIGxpc3Qgb24uXG4gICAgICogQHJlcXVpcmVkXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdHlwZTogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHNvcnQgZGF0YSBpbiBkZXNjZW5kaW5nIG9yZGVyLlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGVzY2VuZGluZzogYm9vbGVhbjtcblxuIH1cbiJdfQ==
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { Component } from '@angular/core';
|
|
3
|
-
/**
|
|
4
|
-
* Adds a section on the right side of the toolbar for items that substantially change
|
|
5
|
-
* or affect the view of the list. This includes simple filters and view switchers.
|
|
6
|
-
* If the view section includes more than one item, simple filters appear on the left
|
|
7
|
-
* and view switchers appear on the right.
|
|
8
|
-
*/
|
|
9
|
-
var SkyListToolbarViewActionsComponent = /** @class */ (function () {
|
|
10
|
-
function SkyListToolbarViewActionsComponent() {
|
|
11
|
-
}
|
|
12
|
-
SkyListToolbarViewActionsComponent = __decorate([
|
|
13
|
-
Component({
|
|
14
|
-
selector: 'sky-list-toolbar-view-actions',
|
|
15
|
-
template: "<ng-content></ng-content>\n",
|
|
16
|
-
styles: [":host{display:flex;align-items:center}:host::ng-deep>:not(:last-child){margin-right:5px}.sky-list-toolbar-view-actions ::ng-deep>:not(:last-child){margin-right:5px}"]
|
|
17
|
-
})
|
|
18
|
-
], SkyListToolbarViewActionsComponent);
|
|
19
|
-
return SkyListToolbarViewActionsComponent;
|
|
20
|
-
}());
|
|
21
|
-
export { SkyListToolbarViewActionsComponent };
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2t5dXgvbGlzdC1idWlsZGVyLyIsInNvdXJjZXMiOlsibW9kdWxlcy9saXN0LXRvb2xiYXIvbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkI7Ozs7O0dBS0c7QUFNSDtJQUFBO0lBQWtELENBQUM7SUFBdEMsa0NBQWtDO1FBTDlDLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSwrQkFBK0I7WUFDekMsdUNBQXlEOztTQUUxRCxDQUFDO09BQ1csa0NBQWtDLENBQUk7SUFBRCx5Q0FBQztDQUFBLEFBQW5ELElBQW1EO1NBQXRDLGtDQUFrQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBBZGRzIGEgc2VjdGlvbiBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgdG9vbGJhciBmb3IgaXRlbXMgdGhhdCBzdWJzdGFudGlhbGx5IGNoYW5nZVxuICogb3IgYWZmZWN0IHRoZSB2aWV3IG9mIHRoZSBsaXN0LiBUaGlzIGluY2x1ZGVzIHNpbXBsZSBmaWx0ZXJzIGFuZCB2aWV3IHN3aXRjaGVycy5cbiAqIElmIHRoZSB2aWV3IHNlY3Rpb24gaW5jbHVkZXMgbW9yZSB0aGFuIG9uZSBpdGVtLCBzaW1wbGUgZmlsdGVycyBhcHBlYXIgb24gdGhlIGxlZnRcbiAqIGFuZCB2aWV3IHN3aXRjaGVycyBhcHBlYXIgb24gdGhlIHJpZ2h0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9saXN0LXRvb2xiYXItdmlldy1hY3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyVmlld0FjdGlvbnNDb21wb25lbnQgeyB9XG4iXX0=
|
|
@@ -1,375 +0,0 @@
|
|
|
1
|
-
import { __decorate, __read, __spread } from "tslib";
|
|
2
|
-
import { combineLatest as observableCombineLatest, Subject } from 'rxjs';
|
|
3
|
-
import { map as observableMap, takeUntil, take, distinctUntilChanged } from 'rxjs/operators';
|
|
4
|
-
import { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, Input, OnDestroy, OnInit, QueryList, TemplateRef, ViewChild } from '@angular/core';
|
|
5
|
-
import { getValue } from '@skyux/list-builder-common';
|
|
6
|
-
import { SkySearchComponent } from '@skyux/lookup';
|
|
7
|
-
import { ListToolbarItemModel } from '../list/state/toolbar/toolbar-item.model';
|
|
8
|
-
import { ListToolbarSetTypeAction } from '../list/state/toolbar/set-type.action';
|
|
9
|
-
import { ListState } from '../list/state/list-state.state-node';
|
|
10
|
-
import { ListStateDispatcher } from '../list/state/list-state.rxstate';
|
|
11
|
-
import { ListSortLabelModel } from '../list/state/sort/label.model';
|
|
12
|
-
import { ListPagingSetPageNumberAction } from '../list/state/paging/set-page-number.action';
|
|
13
|
-
import { SkyListFilterInlineComponent } from '../list-filters/list-filter-inline.component';
|
|
14
|
-
import { SkyListFilterSummaryComponent } from '../list-filters/list-filter-summary.component';
|
|
15
|
-
import { SkyListToolbarItemComponent } from './list-toolbar-item.component';
|
|
16
|
-
import { SkyListToolbarSortComponent } from './list-toolbar-sort.component';
|
|
17
|
-
import { SkyListToolbarViewActionsComponent } from './list-toolbar-view-actions.component';
|
|
18
|
-
import { ListToolbarConfigSetSearchEnabledAction } from './state/config/set-search-enabled.action';
|
|
19
|
-
import { ListToolbarConfigSetSortSelectorEnabledAction } from './state/config/set-sort-selector-enabled.action';
|
|
20
|
-
import { ListToolbarState } from './state/toolbar-state.state-node';
|
|
21
|
-
import { ListToolbarStateDispatcher } from './state/toolbar-state.rxstate';
|
|
22
|
-
import { ListToolbarStateModel } from './state/toolbar-state.model';
|
|
23
|
-
var nextId = 0;
|
|
24
|
-
/**
|
|
25
|
-
* Displays a toolbar for a SKY UX-themed list of data.
|
|
26
|
-
*/
|
|
27
|
-
var SkyListToolbarComponent = /** @class */ (function () {
|
|
28
|
-
function SkyListToolbarComponent(changeDetector, state, dispatcher, toolbarState, toolbarDispatcher) {
|
|
29
|
-
this.changeDetector = changeDetector;
|
|
30
|
-
this.state = state;
|
|
31
|
-
this.dispatcher = dispatcher;
|
|
32
|
-
this.toolbarState = toolbarState;
|
|
33
|
-
this.toolbarDispatcher = toolbarDispatcher;
|
|
34
|
-
/**
|
|
35
|
-
* Display the search bar in the standard position or in a separate section.
|
|
36
|
-
* To highlight the search bar in a section above all other toolbar items,
|
|
37
|
-
* set this property to `search`.
|
|
38
|
-
* @default 'standard'
|
|
39
|
-
*/
|
|
40
|
-
this.toolbarType = 'standard';
|
|
41
|
-
this.isToolbarDisabled = false;
|
|
42
|
-
this.inlineFilterBarExpanded = false;
|
|
43
|
-
this.hasAdditionalToolbarSection = false;
|
|
44
|
-
this.hasViewActions = false;
|
|
45
|
-
this.filterButtonId = "sky-list-toolbar-filter-button-" + ++nextId;
|
|
46
|
-
this.listFilterInlineId = "sky-list-toolbar-filter-inline-" + ++nextId;
|
|
47
|
-
/**
|
|
48
|
-
* Fires when users submit a search.
|
|
49
|
-
* @internal
|
|
50
|
-
*/
|
|
51
|
-
this.searchApplied = new Subject();
|
|
52
|
-
this.customItemIds = [];
|
|
53
|
-
this.hasSortSelectors = false;
|
|
54
|
-
this.inlineFiltersItemToolbarIndex = 5000;
|
|
55
|
-
this.sortSelectorItemToolbarIndex = 6000;
|
|
56
|
-
this.ngUnsubscribe = new Subject();
|
|
57
|
-
}
|
|
58
|
-
Object.defineProperty(SkyListToolbarComponent.prototype, "inMemorySearchEnabled", {
|
|
59
|
-
get: function () {
|
|
60
|
-
if (this._inMemorySearchEnabled === undefined) {
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
return this._inMemorySearchEnabled;
|
|
64
|
-
},
|
|
65
|
-
/**
|
|
66
|
-
* Indicates whether to use the in-memory search.
|
|
67
|
-
* Setting this to `false` will allow consumers to run their own searches remotely,
|
|
68
|
-
* and push new values to the list component by updating the `data` property.
|
|
69
|
-
* @default true
|
|
70
|
-
* @internal
|
|
71
|
-
*/
|
|
72
|
-
set: function (value) {
|
|
73
|
-
this._inMemorySearchEnabled = value;
|
|
74
|
-
},
|
|
75
|
-
enumerable: true,
|
|
76
|
-
configurable: true
|
|
77
|
-
});
|
|
78
|
-
Object.defineProperty(SkyListToolbarComponent.prototype, "isFilterBarDisplayed", {
|
|
79
|
-
get: function () {
|
|
80
|
-
return !this.isToolbarDisabled && this.hasInlineFilters && this.inlineFilterBarExpanded;
|
|
81
|
-
},
|
|
82
|
-
enumerable: true,
|
|
83
|
-
configurable: true
|
|
84
|
-
});
|
|
85
|
-
Object.defineProperty(SkyListToolbarComponent.prototype, "filterButtonAriaControls", {
|
|
86
|
-
get: function () {
|
|
87
|
-
return this.isFilterBarDisplayed ? this.listFilterInlineId : undefined;
|
|
88
|
-
},
|
|
89
|
-
enumerable: true,
|
|
90
|
-
configurable: true
|
|
91
|
-
});
|
|
92
|
-
SkyListToolbarComponent.prototype.ngOnInit = function () {
|
|
93
|
-
var _this = this;
|
|
94
|
-
this.dispatcher.toolbarExists(true);
|
|
95
|
-
getValue(this.searchText, function (searchText) {
|
|
96
|
-
_this.updateSearchText(searchText);
|
|
97
|
-
});
|
|
98
|
-
getValue(this.searchEnabled, function (searchEnabled) {
|
|
99
|
-
_this.toolbarDispatcher.next(new ListToolbarConfigSetSearchEnabledAction(searchEnabled === undefined ? true : searchEnabled));
|
|
100
|
-
});
|
|
101
|
-
getValue(this.toolbarType, function (type) {
|
|
102
|
-
_this.dispatcher.next(new ListToolbarSetTypeAction(_this.toolbarType));
|
|
103
|
-
});
|
|
104
|
-
getValue(this.sortSelectorEnabled, function (sortSelectorEnabled) {
|
|
105
|
-
_this.toolbarDispatcher.next(new ListToolbarConfigSetSortSelectorEnabledAction(sortSelectorEnabled === undefined ? true : sortSelectorEnabled));
|
|
106
|
-
});
|
|
107
|
-
this.sortSelectors = this.getSortSelectors();
|
|
108
|
-
// Initialize the sort toolbar item if necessary
|
|
109
|
-
this.sortSelectors
|
|
110
|
-
.pipe(takeUntil(this.ngUnsubscribe), distinctUntilChanged())
|
|
111
|
-
.subscribe(function (currentSort) {
|
|
112
|
-
if (currentSort.length > 0 && !_this.hasSortSelectors) {
|
|
113
|
-
_this.hasSortSelectors = true;
|
|
114
|
-
_this.dispatcher.toolbarAddItems([
|
|
115
|
-
new ListToolbarItemModel({
|
|
116
|
-
id: 'sort-selector',
|
|
117
|
-
template: _this.sortSelectorTemplate,
|
|
118
|
-
location: 'left',
|
|
119
|
-
index: _this.sortSelectorItemToolbarIndex
|
|
120
|
-
})
|
|
121
|
-
]);
|
|
122
|
-
}
|
|
123
|
-
else if (currentSort.length < 1 && _this.hasSortSelectors) {
|
|
124
|
-
_this.hasSortSelectors = false;
|
|
125
|
-
_this.dispatcher.toolbarRemoveItems([
|
|
126
|
-
'sort-selector'
|
|
127
|
-
]);
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
this.searchTextInput = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.search.searchText; }), distinctUntilChanged());
|
|
131
|
-
this.view = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.views.active; }), distinctUntilChanged());
|
|
132
|
-
this.watchTemplates();
|
|
133
|
-
this.type = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (state) { return state.toolbar.type; }), distinctUntilChanged());
|
|
134
|
-
this.type.pipe(takeUntil(this.ngUnsubscribe))
|
|
135
|
-
.subscribe(function (toolbarType) {
|
|
136
|
-
if (toolbarType === 'search') {
|
|
137
|
-
_this.dispatcher.toolbarRemoveItems(['search']);
|
|
138
|
-
}
|
|
139
|
-
else {
|
|
140
|
-
_this.dispatcher.toolbarAddItems([
|
|
141
|
-
new ListToolbarItemModel({
|
|
142
|
-
id: 'search',
|
|
143
|
-
template: _this.searchTemplate,
|
|
144
|
-
location: 'right'
|
|
145
|
-
})
|
|
146
|
-
]);
|
|
147
|
-
}
|
|
148
|
-
});
|
|
149
|
-
this.isSearchEnabled = this.toolbarState.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.config; }), distinctUntilChanged(), observableMap(function (c) { return c.searchEnabled; }));
|
|
150
|
-
this.state.pipe(observableMap(function (s) { return s.toolbar; }), takeUntil(this.ngUnsubscribe), distinctUntilChanged(), observableMap(function (c) { return c.disabled; }))
|
|
151
|
-
.subscribe(function (isDisabled) { return _this.isToolbarDisabled = isDisabled; });
|
|
152
|
-
this.isSortSelectorEnabled = this.toolbarState.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.config; }), distinctUntilChanged(), observableMap(function (c) { return c.sortSelectorEnabled; }));
|
|
153
|
-
this.isMultiselectEnabled = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.toolbar; }), distinctUntilChanged(), observableMap(function (t) { return t.showMultiselectToolbar; }));
|
|
154
|
-
this.hasAppliedFilters = this.state.pipe(takeUntil(this.ngUnsubscribe), observableMap(function (s) { return s.filters; }), distinctUntilChanged(), observableMap(function (filters) {
|
|
155
|
-
var activeFilters = filters.filter(function (f) {
|
|
156
|
-
return f.value !== '' &&
|
|
157
|
-
f.value !== undefined &&
|
|
158
|
-
f.value !== false &&
|
|
159
|
-
f.value !== f.defaultValue;
|
|
160
|
-
});
|
|
161
|
-
return activeFilters.length > 0;
|
|
162
|
-
}));
|
|
163
|
-
this.state.pipe(takeUntil(this.ngUnsubscribe))
|
|
164
|
-
.subscribe(function (current) {
|
|
165
|
-
_this.hasAdditionalToolbarSection = (current.toolbar.items.length > 0);
|
|
166
|
-
_this.changeDetector.detectChanges();
|
|
167
|
-
});
|
|
168
|
-
};
|
|
169
|
-
SkyListToolbarComponent.prototype.ngAfterContentInit = function () {
|
|
170
|
-
var _this = this;
|
|
171
|
-
// Inject custom toolbar items.
|
|
172
|
-
this.toolbarItems.forEach(function (toolbarItem) {
|
|
173
|
-
_this.dispatcher.toolbarAddItems([
|
|
174
|
-
new ListToolbarItemModel(toolbarItem)
|
|
175
|
-
]);
|
|
176
|
-
_this.customItemIds.push(toolbarItem.id);
|
|
177
|
-
});
|
|
178
|
-
this.toolbarItems.changes.pipe(takeUntil(this.ngUnsubscribe))
|
|
179
|
-
.subscribe(function (newItems) {
|
|
180
|
-
newItems.forEach(function (item) {
|
|
181
|
-
if (_this.customItemIds.indexOf(item.id) < 0) {
|
|
182
|
-
_this.dispatcher.toolbarAddItems([
|
|
183
|
-
new ListToolbarItemModel(item)
|
|
184
|
-
]);
|
|
185
|
-
_this.customItemIds.push(item.id);
|
|
186
|
-
}
|
|
187
|
-
});
|
|
188
|
-
var itemsToRemove = [];
|
|
189
|
-
_this.customItemIds.forEach(function (itemId, index) {
|
|
190
|
-
if (!newItems.find(function (item) { return item.id === itemId; })) {
|
|
191
|
-
itemsToRemove.push(itemId);
|
|
192
|
-
_this.customItemIds.splice(index, 1);
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
_this.dispatcher.toolbarRemoveItems(itemsToRemove);
|
|
196
|
-
});
|
|
197
|
-
var sortModels = this.toolbarSorts.map(function (sort) {
|
|
198
|
-
return new ListSortLabelModel({
|
|
199
|
-
text: sort.label,
|
|
200
|
-
fieldSelector: sort.field,
|
|
201
|
-
fieldType: sort.type,
|
|
202
|
-
global: true,
|
|
203
|
-
descending: sort.descending
|
|
204
|
-
});
|
|
205
|
-
});
|
|
206
|
-
this.dispatcher.sortSetGlobal(sortModels);
|
|
207
|
-
// Add inline filters.
|
|
208
|
-
this.showFilterSummary = (this.filterSummary.length > 0);
|
|
209
|
-
this.hasInlineFilters = (this.inlineFilter.length > 0);
|
|
210
|
-
if (this.hasInlineFilters) {
|
|
211
|
-
this.dispatcher.toolbarAddItems([
|
|
212
|
-
new ListToolbarItemModel({
|
|
213
|
-
template: this.inlineFilterButtonTemplate,
|
|
214
|
-
location: 'left',
|
|
215
|
-
index: this.inlineFiltersItemToolbarIndex
|
|
216
|
-
})
|
|
217
|
-
]);
|
|
218
|
-
}
|
|
219
|
-
// Check for view actions
|
|
220
|
-
this.hasViewActions = (this.viewActions.length > 0);
|
|
221
|
-
};
|
|
222
|
-
SkyListToolbarComponent.prototype.ngOnDestroy = function () {
|
|
223
|
-
this.searchApplied.complete();
|
|
224
|
-
this.ngUnsubscribe.next();
|
|
225
|
-
this.ngUnsubscribe.complete();
|
|
226
|
-
};
|
|
227
|
-
SkyListToolbarComponent.prototype.setSort = function (sort) {
|
|
228
|
-
var _this = this;
|
|
229
|
-
this.state.pipe(take(1)).subscribe(function (currentState) {
|
|
230
|
-
if (currentState.paging.pageNumber && currentState.paging.pageNumber !== 1) {
|
|
231
|
-
_this.dispatcher.next(new ListPagingSetPageNumberAction(Number(1)));
|
|
232
|
-
}
|
|
233
|
-
_this.dispatcher.sortSetFieldSelectors([{ fieldSelector: sort.fieldSelector, descending: sort.descending }]);
|
|
234
|
-
});
|
|
235
|
-
};
|
|
236
|
-
SkyListToolbarComponent.prototype.inlineFilterButtonClick = function () {
|
|
237
|
-
this.inlineFilterBarExpanded = !this.inlineFilterBarExpanded;
|
|
238
|
-
};
|
|
239
|
-
SkyListToolbarComponent.prototype.updateSearchText = function (searchText) {
|
|
240
|
-
var _this = this;
|
|
241
|
-
this.searchApplied.next(searchText);
|
|
242
|
-
if (this.inMemorySearchEnabled) {
|
|
243
|
-
this.state.pipe(take(1)).subscribe(function (currentState) {
|
|
244
|
-
if (currentState.paging.pageNumber && currentState.paging.pageNumber !== 1) {
|
|
245
|
-
_this.dispatcher.next(new ListPagingSetPageNumberAction(Number(1)));
|
|
246
|
-
}
|
|
247
|
-
_this.dispatcher.searchSetText(searchText);
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
};
|
|
251
|
-
SkyListToolbarComponent.prototype.itemIsInView = function (itemView, activeView) {
|
|
252
|
-
return (itemView === undefined || itemView === activeView);
|
|
253
|
-
};
|
|
254
|
-
SkyListToolbarComponent.prototype.getSortSelectors = function () {
|
|
255
|
-
return observableCombineLatest(this.state.pipe(observableMap(function (s) { return s.sort.available; }), distinctUntilChanged()), this.state.pipe(observableMap(function (s) { return s.sort.global; }), distinctUntilChanged()), this.state.pipe(observableMap(function (s) { return s.sort.fieldSelectors; }), distinctUntilChanged()), function (available, global, fieldSelectors) {
|
|
256
|
-
// Get sorts that are in the global that are not in the available
|
|
257
|
-
var sorts = global.filter(function (g) { return available.filter(function (a) { return a.fieldSelector === g.fieldSelector; }).length === 0; });
|
|
258
|
-
var resultSortSelectors = __spread(sorts, available).map(function (sortLabels) {
|
|
259
|
-
var fs = fieldSelectors.filter(function (f) {
|
|
260
|
-
return f.fieldSelector === sortLabels.fieldSelector
|
|
261
|
-
&& f.descending === sortLabels.descending;
|
|
262
|
-
});
|
|
263
|
-
var selected = false;
|
|
264
|
-
if (fs.length > 0) {
|
|
265
|
-
selected = true;
|
|
266
|
-
}
|
|
267
|
-
return {
|
|
268
|
-
sort: sortLabels,
|
|
269
|
-
selected: selected
|
|
270
|
-
};
|
|
271
|
-
});
|
|
272
|
-
return resultSortSelectors;
|
|
273
|
-
}).pipe(takeUntil(this.ngUnsubscribe));
|
|
274
|
-
};
|
|
275
|
-
SkyListToolbarComponent.prototype.watchTemplates = function () {
|
|
276
|
-
var _this = this;
|
|
277
|
-
observableCombineLatest(this.state.pipe(observableMap(function (s) { return s.toolbar; }), distinctUntilChanged()), this.view.pipe(distinctUntilChanged()), function (toolbar, view) {
|
|
278
|
-
var items = toolbar.items.filter(function (i) {
|
|
279
|
-
return _this.itemIsInView(i.view, view);
|
|
280
|
-
});
|
|
281
|
-
var templates = {};
|
|
282
|
-
items.forEach(function (item) {
|
|
283
|
-
templates[item.location] = templates[item.location] || [];
|
|
284
|
-
templates[item.location].push(item);
|
|
285
|
-
});
|
|
286
|
-
return templates;
|
|
287
|
-
}).pipe(takeUntil(this.ngUnsubscribe))
|
|
288
|
-
.subscribe(function (value) {
|
|
289
|
-
_this.leftTemplates = value.left;
|
|
290
|
-
_this.centerTemplates = value.center;
|
|
291
|
-
_this.rightTemplates = value.right;
|
|
292
|
-
_this.changeDetector.markForCheck();
|
|
293
|
-
});
|
|
294
|
-
};
|
|
295
|
-
SkyListToolbarComponent.ctorParameters = function () { return [
|
|
296
|
-
{ type: ChangeDetectorRef },
|
|
297
|
-
{ type: ListState },
|
|
298
|
-
{ type: ListStateDispatcher },
|
|
299
|
-
{ type: ListToolbarState },
|
|
300
|
-
{ type: ListToolbarStateDispatcher }
|
|
301
|
-
]; };
|
|
302
|
-
__decorate([
|
|
303
|
-
Input()
|
|
304
|
-
], SkyListToolbarComponent.prototype, "inMemorySearchEnabled", null);
|
|
305
|
-
__decorate([
|
|
306
|
-
Input()
|
|
307
|
-
], SkyListToolbarComponent.prototype, "placeholder", void 0);
|
|
308
|
-
__decorate([
|
|
309
|
-
Input()
|
|
310
|
-
], SkyListToolbarComponent.prototype, "searchEnabled", void 0);
|
|
311
|
-
__decorate([
|
|
312
|
-
ViewChild(SkySearchComponent, {
|
|
313
|
-
read: SkySearchComponent,
|
|
314
|
-
static: false
|
|
315
|
-
})
|
|
316
|
-
], SkyListToolbarComponent.prototype, "searchComponent", void 0);
|
|
317
|
-
__decorate([
|
|
318
|
-
Input()
|
|
319
|
-
], SkyListToolbarComponent.prototype, "sortSelectorEnabled", void 0);
|
|
320
|
-
__decorate([
|
|
321
|
-
Input()
|
|
322
|
-
], SkyListToolbarComponent.prototype, "toolbarType", void 0);
|
|
323
|
-
__decorate([
|
|
324
|
-
Input()
|
|
325
|
-
], SkyListToolbarComponent.prototype, "searchText", void 0);
|
|
326
|
-
__decorate([
|
|
327
|
-
ContentChildren(SkyListToolbarItemComponent)
|
|
328
|
-
], SkyListToolbarComponent.prototype, "toolbarItems", void 0);
|
|
329
|
-
__decorate([
|
|
330
|
-
ContentChildren(SkyListToolbarSortComponent)
|
|
331
|
-
], SkyListToolbarComponent.prototype, "toolbarSorts", void 0);
|
|
332
|
-
__decorate([
|
|
333
|
-
ContentChildren(SkyListFilterSummaryComponent)
|
|
334
|
-
], SkyListToolbarComponent.prototype, "filterSummary", void 0);
|
|
335
|
-
__decorate([
|
|
336
|
-
ContentChildren(SkyListFilterInlineComponent)
|
|
337
|
-
], SkyListToolbarComponent.prototype, "inlineFilter", void 0);
|
|
338
|
-
__decorate([
|
|
339
|
-
ContentChildren(SkyListToolbarViewActionsComponent)
|
|
340
|
-
], SkyListToolbarComponent.prototype, "viewActions", void 0);
|
|
341
|
-
__decorate([
|
|
342
|
-
ViewChild('search', {
|
|
343
|
-
read: TemplateRef,
|
|
344
|
-
static: true
|
|
345
|
-
})
|
|
346
|
-
], SkyListToolbarComponent.prototype, "searchTemplate", void 0);
|
|
347
|
-
__decorate([
|
|
348
|
-
ViewChild('sortSelector', {
|
|
349
|
-
read: TemplateRef,
|
|
350
|
-
static: true
|
|
351
|
-
})
|
|
352
|
-
], SkyListToolbarComponent.prototype, "sortSelectorTemplate", void 0);
|
|
353
|
-
__decorate([
|
|
354
|
-
ViewChild('inlineFilterButton', {
|
|
355
|
-
read: TemplateRef,
|
|
356
|
-
static: true
|
|
357
|
-
})
|
|
358
|
-
], SkyListToolbarComponent.prototype, "inlineFilterButtonTemplate", void 0);
|
|
359
|
-
SkyListToolbarComponent = __decorate([
|
|
360
|
-
Component({
|
|
361
|
-
selector: 'sky-list-toolbar',
|
|
362
|
-
template: "<div class=\"sky-list-toolbar-container\">\n <sky-toolbar *ngIf=\"(type | async) !== 'search'\">\n\n <sky-toolbar-section>\n <sky-toolbar-item *ngFor=\"let item of leftTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of centerTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of rightTemplates\"\n [attr.sky-toolbar-id]=\"item.id\"\n >\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n\n <ng-content></ng-content>\n\n <sky-toolbar-view-actions *ngIf=\"hasViewActions\">\n <ng-content\n select=\"sky-list-toolbar-view-actions\"\n >\n </ng-content>\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n\n <sky-toolbar-section *ngIf=\"showFilterSummary && (hasAppliedFilters | async)\">\n <ng-content select=\"sky-list-filter-summary\">\n </ng-content>\n </sky-toolbar-section>\n </sky-toolbar>\n\n <div *ngIf=\"(type | async) === 'search' &&\n ((isSearchEnabled | async) || hasAdditionalToolbarSection)\"\n class=\"sky-list-toolbar-search\"\n >\n <sky-toolbar>\n <sky-toolbar-section *ngIf=\"(isSearchEnabled | async)\">\n <sky-toolbar-item>\n <sky-list-toolbar-item-renderer\n sky-cmp-id=\"search\"\n [template]=\"search\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n </sky-toolbar-section>\n <sky-toolbar-section [hidden]=\"!hasAdditionalToolbarSection\">\n <sky-toolbar-item *ngFor=\"let item of leftTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of centerTemplates\">\n <sky-list-toolbar-item-renderer\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <sky-toolbar-item *ngFor=\"let item of rightTemplates\"\n [attr.sky-toolbar-id]=\"item.id\"\n >\n <sky-list-toolbar-item-renderer *ngIf=\"item.id !== 'search'\"\n [attr.sky-cmp-id]=\"item.id\"\n [template]=\"item.template\"\n >\n </sky-list-toolbar-item-renderer>\n </sky-toolbar-item>\n <ng-content></ng-content>\n\n <sky-toolbar-view-actions *ngIf=\"hasViewActions\">\n <ng-content\n select=\"sky-list-toolbar-view-actions\"\n >\n </ng-content>\n </sky-toolbar-view-actions>\n </sky-toolbar-section>\n </sky-toolbar>\n </div>\n <div\n *ngIf=\"isFilterBarDisplayed\"\n [attr.aria-labelledby]=\"filterButtonId\"\n [id]=\"listFilterInlineId\"\n >\n <ng-content select=\"sky-list-filter-inline\">\n </ng-content>\n </div>\n <sky-list-multiselect-toolbar *ngIf=\"isMultiselectEnabled | async\">\n </sky-list-multiselect-toolbar>\n</div>\n\n<ng-template #search>\n <div *ngIf=\"isSearchEnabled | async\"\n class=\"sky-list-toolbar-search-wrapper\"\n >\n <sky-search\n [disabled]=\"isToolbarDisabled\"\n [expandMode]=\"(type | async) === 'search' ? 'fit' : 'responsive'\"\n [placeholderText]=\"placeholder\"\n [searchText]=\"searchTextInput | async\"\n (searchApply)=\"updateSearchText($event)\"\n >\n </sky-search>\n <ng-content\n select=\"sky-list-toolbar-search-actions\"\n ></ng-content>\n </div>\n</ng-template>\n\n<ng-template #sortSelector>\n <div *ngIf=\"(isSortSelectorEnabled | async) && (sortSelectors | async).length > 0\"\n class=\"sky-toolbar-item-sort-container\"\n >\n <sky-sort [showButtonText]=\"true\">\n <sky-sort-item *ngFor=\"let item of sortSelectors | async\"\n [active]=\"item.selected\"\n (itemSelect)=\"setSort(item.sort)\"\n >\n {{ item.sort.text }}\n </sky-sort-item>\n </sky-sort>\n </div>\n</ng-template>\n\n<ng-template #inlineFilterButton>\n <sky-filter-button\n [active]=\"hasAppliedFilters | async\"\n [ariaControls]=\"filterButtonAriaControls\"\n [ariaExpanded]=\"inlineFilterBarExpanded\"\n [disabled]=\"isToolbarDisabled\"\n [filterButtonId]=\"filterButtonId\"\n [showButtonText]=\"true\"\n (filterButtonClick)=\"inlineFilterButtonClick()\"\n >\n </sky-filter-button>\n</ng-template>\n",
|
|
363
|
-
providers: [
|
|
364
|
-
ListToolbarState,
|
|
365
|
-
ListToolbarStateDispatcher,
|
|
366
|
-
ListToolbarStateModel
|
|
367
|
-
],
|
|
368
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
369
|
-
styles: [".sky-list-toolbar-search-wrapper{display:flex}.sky-list-toolbar-search-wrapper ::ng-deep .sky-search-dismiss-absolute{padding:0;position:static}.sky-list-toolbar-search-wrapper ::ng-deep .sky-search-container{position:relative;height:100%}.sky-list-toolbar-search-wrapper ::ng-deep sky-search{flex:1 1 auto}.sky-list-toolbar-search-wrapper ::ng-deep sky-list-toolbar-search-actions{flex:0 0 auto;z-index:1}.sky-list-toolbar-container ::ng-deep .sky-toolbar-section-items sky-toolbar-item{flex:0 1 auto;align-self:flex-start}.sky-list-toolbar-search ::ng-deep .sky-toolbar-section{padding-top:0}.sky-list-toolbar-search ::ng-deep .sky-toolbar-section-items{display:block;width:100%}.sky-list-toolbar-search ::ng-deep .sky-toolbar-item{margin:0}.sky-list-toolbar-search ::ng-deep .sky-search-dismiss-absolute,.sky-list-toolbar-search ::ng-deep .sky-toolbar-container{background-color:#eeeeef}.sky-list-toolbar-search ::ng-deep .sky-search-btn:disabled,.sky-list-toolbar-search ::ng-deep input[type=text]:disabled{background-color:#cdcfd2;opacity:1}.sky-list-toolbar-container ::ng-deep sky-toolbar-item[sky-toolbar-id=sort-selector] .sky-toolbar-item{margin-right:0}.sky-list-toolbar-container ::ng-deep sky-checkbox{position:relative;top:-2px}"]
|
|
370
|
-
})
|
|
371
|
-
], SkyListToolbarComponent);
|
|
372
|
-
return SkyListToolbarComponent;
|
|
373
|
-
}());
|
|
374
|
-
export { SkyListToolbarComponent };
|
|
375
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC10b29sYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC9saXN0LWJ1aWxkZXIvIiwic291cmNlcyI6WyJtb2R1bGVzL2xpc3QtdG9vbGJhci9saXN0LXRvb2xiYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsYUFBYSxJQUFJLHVCQUF1QixFQUV4QyxPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQUMsR0FBRyxJQUFJLGFBQWEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0YsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUNMLFFBQVEsRUFDVCxNQUFNLDRCQUE0QixDQUFDO0FBTXBDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFNdkIsT0FBTyxFQUNMLG9CQUFvQixFQUNyQixNQUFNLDBDQUEwQyxDQUFDO0FBRWxELE9BQU8sRUFDTCx3QkFBd0IsRUFDekIsTUFBTSx1Q0FBdUMsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsU0FBUyxFQUNWLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUNMLG1CQUFtQixFQUNwQixNQUFNLGtDQUFrQyxDQUFDO0FBRTFDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbkIsTUFBTSxnQ0FBZ0MsQ0FBQztBQU14QyxPQUFPLEVBQ0wsNkJBQTZCLEVBQzlCLE1BQU0sNkNBQTZDLENBQUM7QUFFckQsT0FBTyxFQUNMLDRCQUE0QixFQUM3QixNQUFNLDhDQUE4QyxDQUFDO0FBRXRELE9BQU8sRUFDTCw2QkFBNkIs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U0FBUyxDQUFDLGNBQWMsRUFBRTtZQUN6QixJQUFJLEVBQUUsV0FBVztZQUNqQixNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUM7eUVBQzZDO0lBTS9DO1FBSkMsU0FBUyxDQUFDLG9CQUFvQixFQUFFO1lBQy9CLElBQUksRUFBRSxXQUFXO1lBQ2pCLE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQzsrRUFDbUQ7SUFuSTFDLHVCQUF1QjtRQVhuQyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLG01SkFBNEM7WUFFNUMsU0FBUyxFQUFFO2dCQUNULGdCQUFnQjtnQkFDaEIsMEJBQTBCO2dCQUMxQixxQkFBcUI7YUFDdEI7WUFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7U0FDaEQsQ0FBQztPQUNXLHVCQUF1QixDQXFkbkM7SUFBRCw4QkFBQztDQUFBLEFBcmRELElBcWRDO1NBcmRZLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGNvbWJpbmVMYXRlc3QgYXMgb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3Rcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7bWFwIGFzIG9ic2VydmFibGVNYXAsIHRha2VVbnRpbCwgdGFrZSwgZGlzdGluY3RVbnRpbENoYW5nZWR9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBRdWVyeUxpc3QsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIGdldFZhbHVlXG59IGZyb20gJ0Bza3l1eC9saXN0LWJ1aWxkZXItY29tbW9uJztcblxuaW1wb3J0IHtcbiAgTGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWxcbn0gZnJvbSAnQHNreXV4L2xpc3QtYnVpbGRlci1jb21tb24nO1xuXG5pbXBvcnQge1xuICBTa3lTZWFyY2hDb21wb25lbnRcbn0gZnJvbSAnQHNreXV4L2xvb2t1cCc7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyTW9kZWxcbn0gZnJvbSAnLi4vbGlzdC9zdGF0ZS90b29sYmFyL3Rvb2xiYXIubW9kZWwnO1xuXG5pbXBvcnQge1xuICBMaXN0VG9vbGJhckl0ZW1Nb2RlbFxufSBmcm9tICcuLi9saXN0L3N0YXRlL3Rvb2xiYXIvdG9vbGJhci1pdGVtLm1vZGVsJztcblxuaW1wb3J0IHtcbiAgTGlzdFRvb2xiYXJTZXRUeXBlQWN0aW9uXG59IGZyb20gJy4uL2xpc3Qvc3RhdGUvdG9vbGJhci9zZXQtdHlwZS5hY3Rpb24nO1xuXG5pbXBvcnQge1xuICBMaXN0U3RhdGVcbn0gZnJvbSAnLi4vbGlzdC9zdGF0ZS9saXN0LXN0YXRlLnN0YXRlLW5vZGUnO1xuXG5pbXBvcnQge1xuICBMaXN0U3RhdGVEaXNwYXRjaGVyXG59IGZyb20gJy4uL2xpc3Qvc3RhdGUvbGlzdC1zdGF0ZS5yeHN0YXRlJztcblxuaW1wb3J0IHtcbiAgTGlzdFNvcnRMYWJlbE1vZGVsXG59IGZyb20gJy4uL2xpc3Qvc3RhdGUvc29ydC9sYWJlbC5tb2RlbCc7XG5cbmltcG9ydCB7XG4gIExpc3RGaWx0ZXJNb2RlbFxufSBmcm9tICcuLi9saXN0LWZpbHRlcnMvZmlsdGVyLm1vZGVsJztcblxuaW1wb3J0IHtcbiAgTGlzdFBhZ2luZ1NldFBhZ2VOdW1iZXJBY3Rpb25cbn0gZnJvbSAnLi4vbGlzdC9zdGF0ZS9wYWdpbmcvc2V0LXBhZ2UtbnVtYmVyLmFjdGlvbic7XG5cbmltcG9ydCB7XG4gIFNreUxpc3RGaWx0ZXJJbmxpbmVDb21wb25lbnRcbn0gZnJvbSAnLi4vbGlzdC1maWx0ZXJzL2xpc3QtZmlsdGVyLWlubGluZS5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0RmlsdGVyU3VtbWFyeUNvbXBvbmVudFxufSBmcm9tICcuLi9saXN0LWZpbHRlcnMvbGlzdC1maWx0ZXItc3VtbWFyeS5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0VG9vbGJhckl0ZW1Db21wb25lbnRcbn0gZnJvbSAnLi9saXN0LXRvb2xiYXItaXRlbS5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0VG9vbGJhclNvcnRDb21wb25lbnRcbn0gZnJvbSAnLi9saXN0LXRvb2xiYXItc29ydC5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lMaXN0VG9vbGJhclZpZXdBY3Rpb25zQ29tcG9uZW50XG59IGZyb20gJy4vbGlzdC10b29sYmFyLXZpZXctYWN0aW9ucy5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBMaXN0VG9vbGJhckNvbmZpZ1NldFNlYXJjaEVuYWJsZWRBY3Rpb25cbn0gZnJvbSAnLi9zdGF0ZS9jb25maWcvc2V0LXNlYXJjaC1lbmFibGVkLmFjdGlvbic7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyQ29uZmlnU2V0U29ydFNlbGVjdG9yRW5hYmxlZEFjdGlvblxufSBmcm9tICcuL3N0YXRlL2NvbmZpZy9zZXQtc29ydC1zZWxlY3Rvci1lbmFibGVkLmFjdGlvbic7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyU3RhdGVcbn0gZnJvbSAnLi9zdGF0ZS90b29sYmFyLXN0YXRlLnN0YXRlLW5vZGUnO1xuXG5pbXBvcnQge1xuICBMaXN0VG9vbGJhclN0YXRlRGlzcGF0Y2hlclxufSBmcm9tICcuL3N0YXRlL3Rvb2xiYXItc3RhdGUucnhzdGF0ZSc7XG5cbmltcG9ydCB7XG4gIExpc3RUb29sYmFyU3RhdGVNb2RlbFxufSBmcm9tICcuL3N0YXRlL3Rvb2xiYXItc3RhdGUubW9kZWwnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBEaXNwbGF5cyBhIHRvb2xiYXIgZm9yIGEgU0tZIFVYLXRoZW1lZCBsaXN0IG9mIGRhdGEuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1saXN0LXRvb2xiYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC10b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbGlzdC10b29sYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIExpc3RUb29sYmFyU3RhdGUsXG4gICAgTGlzdFRvb2xiYXJTdGF0ZURpc3BhdGNoZXIsXG4gICAgTGlzdFRvb2xiYXJTdGF0ZU1vZGVsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFNreUxpc3RUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgdGhlIGluLW1lbW9yeSBzZWFyY2guXG4gICAqIFNldHRpbmcgdGhpcyB0byBgZmFsc2VgIHdpbGwgYWxsb3cgY29uc3VtZXJzIHRvIHJ1biB0aGVpciBvd24gc2VhcmNoZXMgcmVtb3RlbHksXG4gICAqIGFuZCBwdXNoIG5ldyB2YWx1ZXMgdG8gdGhlIGxpc3QgY29tcG9uZW50IGJ5IHVwZGF0aW5nIHRoZSBgZGF0YWAgcHJvcGVydHkuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGluTWVtb3J5U2VhcmNoRW5hYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2luTWVtb3J5U2VhcmNoRW5hYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBpbk1lbW9yeVNlYXJjaEVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2luTWVtb3J5U2VhcmNoRW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2luTWVtb3J5U2VhcmNoRW5hYmxlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIHNlYXJjaCBiYXIgdGhhdCB0aGUgbGlzdCB0b29sYmFyIGNyZWF0ZXMgd2l0aFxuICAgKiBhIFtzZWFyY2ggY29tcG9uZW50XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvc2VhcmNoKS5cbiAgICogQGRlZmF1bHQgJ0ZpbmQgaW4gdGhpcyBsaXN0J1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIGVuYWJsZSB0aGUgc2VhcmNoIGJhci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNlYXJjaEVuYWJsZWQ6IGJvb2xlYW4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIEBWaWV3Q2hpbGQoU2t5U2VhcmNoQ29tcG9uZW50LCB7XG4gICAgcmVhZDogU2t5U2VhcmNoQ29tcG9uZW50LFxuICAgIHN0YXRpYzogZmFsc2VcbiAgfSlcbiAgcHVibGljIHNlYXJjaENvbXBvbmVudDogU2t5U2VhcmNoQ29tcG9uZW50O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBlbmFibGUgdGhlIHNvcnQgc2VsZWN0b3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc29ydFNlbGVjdG9yRW5hYmxlZDogYm9vbGVhbiB8IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgdGhlIHNlYXJjaCBiYXIgaW4gdGhlIHN0YW5kYXJkIHBvc2l0aW9uIG9yIGluIGEgc2VwYXJhdGUgc2VjdGlvbi5cbiAgICogVG8gaGlnaGxpZ2h0IHRoZSBzZWFyY2ggYmFyIGluIGEgc2VjdGlvbiBhYm92ZSBhbGwgb3RoZXIgdG9vbGJhciBpdGVtcyxcbiAgICogc2V0IHRoaXMgcHJvcGVydHkgdG8gYHNlYXJjaGAuXG4gICAqIEBkZWZhdWx0ICdzdGFuZGFyZCdcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0b29sYmFyVHlwZTogc3RyaW5nID0gJ3N0YW5kYXJkJztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGEgdGV4dCBzdHJpbmcgdG8gc2VhcmNoIHdpdGguXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2VhcmNoVGV4dDogc3RyaW5nIHwgT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHB1YmxpYyBnZXQgaXNGaWx0ZXJCYXJEaXNwbGF5ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzVG9vbGJhckRpc2FibGVkICYmIHRoaXMuaGFzSW5saW5lRmlsdGVycyAmJiB0aGlzLmlubGluZUZpbHRlckJhckV4cGFuZGVkO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJCdXR0b25BcmlhQ29udHJvbHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pc0ZpbHRlckJhckRpc3BsYXllZCA/IHRoaXMubGlzdEZpbHRlcklubGluZUlkIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNvcnRTZWxlY3RvcnM6IE9ic2VydmFibGU8QXJyYXk8YW55Pj47XG4gIHB1YmxpYyBzZWFyY2hUZXh0SW5wdXQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIHZpZXc6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIGxlZnRUZW1wbGF0ZXM6IExpc3RUb29sYmFySXRlbU1vZGVsW107XG4gIHB1YmxpYyBjZW50ZXJUZW1wbGF0ZXM6IExpc3RUb29sYmFySXRlbU1vZGVsW107XG4gIHB1YmxpYyByaWdodFRlbXBsYXRlczogTGlzdFRvb2xiYXJJdGVtTW9kZWxbXTtcbiAgcHVibGljIHR5cGU6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIGlzU2VhcmNoRW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGlzVG9vbGJhckRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBpc011bHRpc2VsZWN0RW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGlzU29ydFNlbGVjdG9yRW5hYmxlZDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGFwcGxpZWRGaWx0ZXJzOiBPYnNlcnZhYmxlPEFycmF5PExpc3RGaWx0ZXJNb2RlbD4+O1xuICBwdWJsaWMgaGFzQXBwbGllZEZpbHRlcnM6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBzaG93RmlsdGVyU3VtbWFyeTogYm9vbGVhbjtcbiAgcHVibGljIGhhc0lubGluZUZpbHRlcnM6IGJvb2xlYW47XG4gIHB1YmxpYyBpbmxpbmVGaWx0ZXJCYXJFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaGFzQWRkaXRpb25hbFRvb2xiYXJTZWN0aW9uID0gZmFsc2U7XG4gIHB1YmxpYyBoYXNWaWV3QWN0aW9ucyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBmaWx0ZXJCdXR0b25JZDogc3RyaW5nID0gYHNreS1saXN0LXRvb2xiYXItZmlsdGVyLWJ1dHRvbi0keysrbmV4dElkfWA7XG4gIHB1YmxpYyBsaXN0RmlsdGVySW5saW5lSWQ6IHN0cmluZyA9IGBza3ktbGlzdC10b29sYmFyLWZpbHRlci1pbmxpbmUtJHsrK25leHRJZH1gO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHVzZXJzIHN1Ym1pdCBhIHNlYXJjaC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoQXBwbGllZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5TGlzdFRvb2xiYXJJdGVtQ29tcG9uZW50KVxuICBwcml2YXRlIHRvb2xiYXJJdGVtczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFySXRlbUNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lMaXN0VG9vbGJhclNvcnRDb21wb25lbnQpXG4gIHByaXZhdGUgdG9vbGJhclNvcnRzOiBRdWVyeUxpc3Q8U2t5TGlzdFRvb2xiYXJTb3J0Q29tcG9uZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKFNreUxpc3RGaWx0ZXJTdW1tYXJ5Q29tcG9uZW50KVxuICBwcml2YXRlIGZpbHRlclN1bW1hcnk6IFF1ZXJ5TGlzdDxTa3lMaXN0RmlsdGVyU3VtbWFyeUNvbXBvbmVudD47XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lMaXN0RmlsdGVySW5saW5lQ29tcG9uZW50KVxuICBwcml2YXRlIGlubGluZUZpbHRlcjogUXVlcnlMaXN0PFNreUxpc3RGaWx0ZXJJbmxpbmVDb21wb25lbnQ+O1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5TGlzdFRvb2xiYXJWaWV3QWN0aW9uc0NvbXBvbmVudClcbiAgcHJpdmF0ZSB2aWV3QWN0aW9uczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFyVmlld0FjdGlvbnNDb21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGQoJ3NlYXJjaCcsIHtcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcbiAgICBzdGF0aWM6IHRydWVcbiAgfSlcbiAgcHJpdmF0ZSBzZWFyY2hUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICBAVmlld0NoaWxkKCdzb3J0U2VsZWN0b3InLCB7XG4gICAgcmVhZDogVGVtcGxhdGVSZWYsXG4gICAgc3RhdGljOiB0cnVlXG4gIH0pXG4gIHByaXZhdGUgc29ydFNlbGVjdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQFZpZXdDaGlsZCgnaW5saW5lRmlsdGVyQnV0dG9uJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZVxuICB9KVxuICBwcml2YXRlIGlubGluZUZpbHRlckJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIHByaXZhdGUgY3VzdG9tSXRlbUlkczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBoYXNTb3J0U2VsZWN0b3JzOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgaW5saW5lRmlsdGVyc0l0ZW1Ub29sYmFySW5kZXg6IG51bWJlciA9IDUwMDA7XG4gIHByaXZhdGUgc29ydFNlbGVjdG9ySXRlbVRvb2xiYXJJbmRleDogbnVtYmVyID0gNjAwMDtcbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIF9pbk1lbW9yeVNlYXJjaEVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBzdGF0ZTogTGlzdFN0YXRlLFxuICAgIHByaXZhdGUgZGlzcGF0Y2hlcjogTGlzdFN0YXRlRGlzcGF0Y2hlcixcbiAgICBwcml2YXRlIHRvb2xiYXJTdGF0ZTogTGlzdFRvb2xiYXJTdGF0ZSxcbiAgICBwdWJsaWMgdG9vbGJhckRpc3BhdGNoZXI6IExpc3RUb29sYmFyU3RhdGVEaXNwYXRjaGVyXG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyRXhpc3RzKHRydWUpO1xuXG4gICAgZ2V0VmFsdWUodGhpcy5zZWFyY2hUZXh0LCAoc2VhcmNoVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaFRleHQoc2VhcmNoVGV4dCk7XG4gICAgfSk7XG5cbiAgICBnZXRWYWx1ZSh0aGlzLnNlYXJjaEVuYWJsZWQsIChzZWFyY2hFbmFibGVkOiBib29sZWFuKSA9PiB7XG4gICAgICB0aGlzLnRvb2xiYXJEaXNwYXRjaGVyLm5leHQoXG4gICAgICAgIG5ldyBMaXN0VG9vbGJhckNvbmZpZ1NldFNlYXJjaEVuYWJsZWRBY3Rpb24oXG4gICAgICAgICAgc2VhcmNoRW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNlYXJjaEVuYWJsZWRcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGdldFZhbHVlKHRoaXMudG9vbGJhclR5cGUsICh0eXBlOiBzdHJpbmcpID0+IHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5uZXh0KG5ldyBMaXN0VG9vbGJhclNldFR5cGVBY3Rpb24odGhpcy50b29sYmFyVHlwZSkpO1xuICAgIH0pO1xuXG4gICAgZ2V0VmFsdWUodGhpcy5zb3J0U2VsZWN0b3JFbmFibGVkLCAoc29ydFNlbGVjdG9yRW5hYmxlZDogYW55KSA9PiB7XG4gICAgICB0aGlzLnRvb2xiYXJEaXNwYXRjaGVyLm5leHQoXG4gICAgICAgIG5ldyBMaXN0VG9vbGJhckNvbmZpZ1NldFNvcnRTZWxlY3RvckVuYWJsZWRBY3Rpb24oXG4gICAgICAgICAgc29ydFNlbGVjdG9yRW5hYmxlZCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHNvcnRTZWxlY3RvckVuYWJsZWRcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRoaXMuc29ydFNlbGVjdG9ycyA9IHRoaXMuZ2V0U29ydFNlbGVjdG9ycygpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgc29ydCB0b29sYmFyIGl0ZW0gaWYgbmVjZXNzYXJ5XG4gICAgdGhpcy5zb3J0U2VsZWN0b3JzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbnRTb3J0KSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50U29ydC5sZW5ndGggPiAwICYmICF0aGlzLmhhc1NvcnRTZWxlY3RvcnMpIHtcbiAgICAgICAgICB0aGlzLmhhc1NvcnRTZWxlY3RvcnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyQWRkSXRlbXMoXG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgIG5ldyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCh7XG4gICAgICAgICAgICAgICAgaWQ6ICdzb3J0LXNlbGVjdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5zb3J0U2VsZWN0b3JUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLnNvcnRTZWxlY3Rvckl0ZW1Ub29sYmFySW5kZXhcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRTb3J0Lmxlbmd0aCA8IDEgJiYgdGhpcy5oYXNTb3J0U2VsZWN0b3JzKSB7XG4gICAgICAgICAgdGhpcy5oYXNTb3J0U2VsZWN0b3JzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJSZW1vdmVJdGVtcyhbXG4gICAgICAgICAgICAnc29ydC1zZWxlY3RvcidcbiAgICAgICAgICBdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICB0aGlzLnNlYXJjaFRleHRJbnB1dCA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMuc2VhcmNoLnNlYXJjaFRleHQpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgICB0aGlzLnZpZXcgPSB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAocyA9PiBzLnZpZXdzLmFjdGl2ZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgIHRoaXMud2F0Y2hUZW1wbGF0ZXMoKTtcblxuICAgIHRoaXMudHlwZSA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgoc3RhdGUpID0+IHN0YXRlLnRvb2xiYXIudHlwZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcblxuICAgIHRoaXMudHlwZS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCh0b29sYmFyVHlwZSkgPT4ge1xuICAgICAgICBpZiAodG9vbGJhclR5cGUgPT09ICdzZWFyY2gnKSB7XG4gICAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJSZW1vdmVJdGVtcyhbJ3NlYXJjaCddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckFkZEl0ZW1zKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICBuZXcgTGlzdFRvb2xiYXJJdGVtTW9kZWwoe1xuICAgICAgICAgICAgICAgIGlkOiAnc2VhcmNoJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy5zZWFyY2hUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogJ3JpZ2h0J1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5pc1NlYXJjaEVuYWJsZWQgPSB0aGlzLnRvb2xiYXJTdGF0ZS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSksXG4gICAgICBvYnNlcnZhYmxlTWFwKHMgPT4gcy5jb25maWcpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG9ic2VydmFibGVNYXAoYyA9PiBjLnNlYXJjaEVuYWJsZWQpKTtcblxuICAgIHRoaXMuc3RhdGUucGlwZShvYnNlcnZhYmxlTWFwKHMgPT4gcy50b29sYmFyKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG9ic2VydmFibGVNYXAoYyA9PiBjLmRpc2FibGVkKSlcbiAgICAgIC5zdWJzY3JpYmUoaXNEaXNhYmxlZCA9PiB0aGlzLmlzVG9vbGJhckRpc2FibGVkID0gaXNEaXNhYmxlZCk7XG5cbiAgICB0aGlzLmlzU29ydFNlbGVjdG9yRW5hYmxlZCA9IHRoaXMudG9vbGJhclN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSxcbiAgICAgIG9ic2VydmFibGVNYXAocyA9PiBzLmNvbmZpZyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChjID0+IGMuc29ydFNlbGVjdG9yRW5hYmxlZCkpO1xuXG4gICAgdGhpcy5pc011bHRpc2VsZWN0RW5hYmxlZCA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMudG9vbGJhciksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCh0ID0+IHQuc2hvd011bHRpc2VsZWN0VG9vbGJhcikpO1xuXG4gICAgdGhpcy5oYXNBcHBsaWVkRmlsdGVycyA9IHRoaXMuc3RhdGUucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpLFxuICAgICAgb2JzZXJ2YWJsZU1hcChzID0+IHMuZmlsdGVycyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgb2JzZXJ2YWJsZU1hcCgoZmlsdGVycykgPT4ge1xuICAgICAgICBsZXQgYWN0aXZlRmlsdGVycyA9IGZpbHRlcnMuZmlsdGVyKChmKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGYudmFsdWUgIT09ICcnICYmXG4gICAgICAgICAgICBmLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIGYudmFsdWUgIT09IGZhbHNlICYmXG4gICAgICAgICAgICBmLnZhbHVlICE9PSBmLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhY3RpdmVGaWx0ZXJzLmxlbmd0aCA+IDA7XG4gICAgICB9KSk7XG5cbiAgICB0aGlzLnN0YXRlLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGN1cnJlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmhhc0FkZGl0aW9uYWxUb29sYmFyU2VjdGlvbiA9IChjdXJyZW50LnRvb2xiYXIuaXRlbXMubGVuZ3RoID4gMCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIC8vIEluamVjdCBjdXN0b20gdG9vbGJhciBpdGVtcy5cbiAgICB0aGlzLnRvb2xiYXJJdGVtcy5mb3JFYWNoKCh0b29sYmFySXRlbSkgPT4ge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnRvb2xiYXJBZGRJdGVtcyhcbiAgICAgICAgW1xuICAgICAgICAgIG5ldyBMaXN0VG9vbGJhckl0ZW1Nb2RlbCh0b29sYmFySXRlbSlcbiAgICAgICAgXVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jdXN0b21JdGVtSWRzLnB1c2godG9vbGJhckl0ZW0uaWQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy50b29sYmFySXRlbXMuY2hhbmdlcy5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChuZXdJdGVtczogUXVlcnlMaXN0PFNreUxpc3RUb29sYmFySXRlbUNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgbmV3SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5jdXN0b21JdGVtSWRzLmluZGV4T2YoaXRlbS5pZCkgPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhckFkZEl0ZW1zKFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgbmV3IExpc3RUb29sYmFySXRlbU1vZGVsKGl0ZW0pXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuY3VzdG9tSXRlbUlkcy5wdXNoKGl0ZW0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgaXRlbXNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcblxuICAgICAgICB0aGlzLmN1c3RvbUl0ZW1JZHMuZm9yRWFjaCgoaXRlbUlkLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmICghbmV3SXRlbXMuZmluZChpdGVtID0+IGl0ZW0uaWQgPT09IGl0ZW1JZCkpIHtcbiAgICAgICAgICAgIGl0ZW1zVG9SZW1vdmUucHVzaChpdGVtSWQpO1xuICAgICAgICAgICAgdGhpcy5jdXN0b21JdGVtSWRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRpc3BhdGNoZXIudG9vbGJhclJlbW92ZUl0ZW1zKGl0ZW1zVG9SZW1vdmUpO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBzb3J0TW9kZWxzID0gdGhpcy50b29sYmFyU29ydHMubWFwKHNvcnQgPT5cbiAgICAgIG5ldyBMaXN0U29ydExhYmVsTW9kZWwoXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiBzb3J0LmxhYmVsLFxuICAgICAgICAgIGZpZWxkU2VsZWN0b3I6IHNvcnQuZmllbGQsXG4gICAgICAgICAgZmllbGRUeXBlOiBzb3J0LnR5cGUsXG4gICAgICAgICAgZ2xvYmFsOiB0cnVlLFxuICAgICAgICAgIGRlc2NlbmRpbmc6IHNvcnQuZGVzY2VuZGluZ1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMuZGlzcGF0Y2hlci5zb3J0U2V0R2xvYmFsKHNvcnRNb2RlbHMpO1xuXG4gICAgLy8gQWRkIGlubGluZSBmaWx0ZXJzLlxuICAgIHRoaXMuc2hvd0ZpbHRlclN1bW1hcnkgPSAodGhpcy5maWx0ZXJTdW1tYXJ5Lmxlbmd0aCA+IDApO1xuICAgIHRoaXMuaGFzSW5saW5lRmlsdGVycyA9ICh0aGlzLmlubGluZUZpbHRlci5sZW5ndGggPiAwKTtcblxuICAgIGlmICh0aGlzLmhhc0lubGluZUZpbHRlcnMpIHtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci50b29sYmFyQWRkSXRlbXMoXG4gICAgICAgIFtcbiAgICAgICAgICBuZXcgTGlzdFRvb2xiYXJJdGVtTW9kZWwoe1xuICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMuaW5saW5lRmlsdGVyQnV0dG9uVGVtcGxhdGUsXG4gICAgICAgICAgICBsb2NhdGlvbjogJ2xlZnQnLFxuICAgICAgICAgICAgaW5kZXg6IHRoaXMuaW5saW5lRmlsdGVyc0l0ZW1Ub29sYmFySW5kZXhcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB2aWV3IGFjdGlvbnNcbiAgICB0aGlzLmhhc1ZpZXdBY3Rpb25zID0gKHRoaXMudmlld0FjdGlvbnMubGVuZ3RoID4gMCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zZWFyY2hBcHBsaWVkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTb3J0KHNvcnQ6IExpc3RTb3J0TGFiZWxNb2RlbCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKGN1cnJlbnRTdGF0ZSkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5wYWdpbmcucGFnZU51bWJlciAmJiBjdXJyZW50U3RhdGUucGFnaW5nLnBhZ2VOdW1iZXIgIT09IDEpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLm5leHQoXG4gICAgICAgICAgbmV3IExpc3RQYWdpbmdTZXRQYWdlTnVtYmVyQWN0aW9uKE51bWJlcigxKSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kaXNwYXRjaGVyLnNvcnRTZXRGaWVsZFNlbGVjdG9ycyhcbiAgICAgICAgW3sgZmllbGRTZWxlY3Rvcjogc29ydC5maWVsZFNlbGVjdG9yLCBkZXNjZW5kaW5nOiBzb3J0LmRlc2NlbmRpbmcgfV1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW5saW5lRmlsdGVyQnV0dG9uQ2xpY2soKSB7XG4gICAgdGhpcy5pbmxpbmVGaWx0ZXJCYXJFeHBhbmRlZCA9ICF0aGlzLmlubGluZUZpbHRlckJhckV4cGFuZGVkO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVNlYXJjaFRleHQoc2VhcmNoVGV4dDogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWFyY2hBcHBsaWVkLm5leHQoc2VhcmNoVGV4dCk7XG4gICAgaWYgKHRoaXMuaW5NZW1vcnlTZWFyY2hFbmFibGVkKSB7XG4gICAgICB0aGlzLnN0YXRlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKChjdXJyZW50U3RhdGUpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZS5wYWdpbmcucGFnZU51bWJlciAmJiBjdXJyZW50U3RhdGUucGFnaW5nLnBhZ2VOdW1iZXIgIT09IDEpIHtcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIubmV4dChcbiAgICAgICAgICAgIG5ldyBMaXN0UGFnaW5nU2V0UGFnZU51bWJlckFjdGlvbihOdW1iZXIoMSkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5zZWFyY2hTZXRUZXh0KHNlYXJjaFRleHQpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpdGVtSXNJblZpZXcoaXRlbVZpZXc6IHN0cmluZywgYWN0aXZlVmlldzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChpdGVtVmlldyA9PT0gdW5kZWZpbmVkIHx8IGl0ZW1WaWV3ID09PSBhY3RpdmVWaWV3KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydFNlbGVjdG9ycygpIHtcbiAgICByZXR1cm4gb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QoXG4gICAgICB0aGlzLnN0YXRlLnBpcGUob2JzZXJ2YWJsZU1hcChzID0+IHMuc29ydC5hdmFpbGFibGUpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICAgIHRoaXMuc3RhdGUucGlwZShvYnNlcnZhYmxlTWFwKHMgPT4gcy5zb3J0Lmdsb2JhbCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgICAgdGhpcy5zdGF0ZS5waXBlKG9ic2VydmFibGVNYXAocyA9PiBzLnNvcnQuZmllbGRTZWxlY3RvcnMpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICAgIChcbiAgICAgICAgYXZhaWxhYmxlOiBBcnJheTxMaXN0U29ydExhYmVsTW9kZWw+LFxuICAgICAgICBnbG9iYWw6IEFycmF5PExpc3RTb3J0TGFiZWxNb2RlbD4sXG4gICAgICAgIGZpZWxkU2VsZWN0b3JzOiBBcnJheTxMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbD5cbiAgICAgICkgPT4ge1xuXG4gICAgICAgIC8vIEdldCBzb3J0cyB0aGF0IGFyZSBpbiB0aGUgZ2xvYmFsIHRoYXQgYXJlIG5vdCBpbiB0aGUgYXZhaWxhYmxlXG4gICAgICAgIGxldCBzb3J0cyA9IGdsb2JhbC5maWx0ZXIoXG4gICAgICAgICAgZyA9PiBhdmFpbGFibGUuZmlsdGVyKGEgPT4gYS5maWVsZFNlbGVjdG9yID09PSBnLmZpZWxkU2VsZWN0b3IpLmxlbmd0aCA9PT0gMFxuICAgICAgICApO1xuXG4gICAgICAgIGxldCByZXN1bHRTb3J0U2VsZWN0b3JzID0gWy4uLnNvcnRzLCAuLi5hdmFpbGFibGVdLm1hcChzb3J0TGFiZWxzID0+IHtcbiAgICAgICAgICBsZXQgZnMgPSBmaWVsZFNlbGVjdG9ycy5maWx0ZXIoZiA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZi5maWVsZFNlbGVjdG9yID09PSBzb3J0TGFiZWxzLmZpZWxkU2VsZWN0b3JcbiAgICAgICAgICAgICAgJiYgZi5kZXNjZW5kaW5nID09PSBzb3J0TGFiZWxzLmRlc2NlbmRpbmc7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IHNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgaWYgKGZzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc29ydDogc29ydExhYmVscyxcbiAgICAgICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHRTb3J0U2VsZWN0b3JzO1xuICAgICAgfVxuICAgICkucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hUZW1wbGF0ZXMoKSB7XG4gICAgb2JzZXJ2YWJsZUNvbWJpbmVMYXRlc3QoXG4gICAgICB0aGlzLnN0YXRlLnBpcGUob2JzZXJ2YWJsZU1hcChzID0+IHMudG9vbGJhciksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgICAgdGhpcy52aWV3LnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gICAgICAodG9vbGJhcjogTGlzdFRvb2xiYXJNb2RlbCwgdmlldzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdG9vbGJhci5pdGVtcy5maWx0ZXIoKGk6IExpc3RUb29sYmFySXRlbU1vZGVsKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbUlzSW5WaWV3KGkudmlldywgdmlldyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlczogYW55ID0ge307XG5cbiAgICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogTGlzdFRvb2xiYXJJdGVtTW9kZWwpID0+IHtcbiAgICAgICAgICB0ZW1wbGF0ZXNbaXRlbS5sb2NhdGlvbl0gPSB0ZW1wbGF0ZXNbaXRlbS5sb2NhdGlvbl0gfHwgW107XG4gICAgICAgICAgdGVtcGxhdGVzW2l0ZW0ubG9jYXRpb25dLnB1c2goaXRlbSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZXM7XG4gICAgICB9XG4gICAgKS5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSlcbiAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLmxlZnRUZW1wbGF0ZXMgPSB2YWx1ZS5sZWZ0O1xuICAgICAgICB0aGlzLmNlbnRlclRlbXBsYXRlcyA9IHZhbHVlLmNlbnRlcjtcbiAgICAgICAgdGhpcy5yaWdodFRlbXBsYXRlcyA9IHZhbHVlLnJpZ2h0O1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
|