@colijnit/homedecorator 258.1.1 → 258.1.2
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/app/core/enum/icon.enum.d.ts +1 -0
- package/app/core/enum/message-type.enum.d.ts +2 -1
- package/app/core/interface/message-with-payload.interface.d.ts +1 -0
- package/app/core/model/homedecorator-settings-options.d.ts +1 -1
- package/app/core/model/homedecorator-settings.d.ts +3 -0
- package/app/core/service/3dm-api.d.ts +2 -2
- package/app/core/service/homedecorator-app-event.service.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +9 -1
- package/app/core/service/homedecorator-connector.service.d.ts +15 -2
- package/app/core/service/utils.service.d.ts +1 -1
- package/app/core/utils/object.utils.d.ts +2 -0
- package/app/homedecorator.module.d.ts +2 -1
- package/app/plugins/core3d/service/wall-measurements.service.d.ts +2 -0
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +3 -0
- package/app/plugins/product-catalog/product-catalog/product-catalog.component.d.ts +2 -0
- package/app/plugins/product-configurator/product-configurator-selector-list-of-values.component.scss +28 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-button.component.d.ts +19 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-button.component.scss +38 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.d.ts +20 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.scss +0 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.d.ts +19 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-tile.component.scss +56 -0
- package/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.d.ts +20 -0
- package/app/plugins/product-configurator/product-configurator-selector.component.d.ts +26 -0
- package/app/plugins/product-configurator/product-configurator-selector.component.scss +46 -0
- package/app/plugins/product-configurator/product-configurator.component.d.ts +38 -0
- package/app/plugins/product-configurator/product-configurator.component.scss +35 -0
- package/app/plugins/product-configurator/product-configurator.module.d.ts +18 -0
- package/app/plugins/product-configurator/template_variables.scss +13 -0
- package/app/plugins/render/model/blender-render-settings.d.ts +10 -0
- package/app/plugins/render/model/blender-scene-settings.d.ts +18 -0
- package/app/plugins/render/render-controls/render-controls.component.d.ts +19 -7
- package/app/plugins/render/service/new-render.service.d.ts +21 -4
- package/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.scss +1 -1
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +5 -0
- package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +4 -0
- package/app/plugins/threedselector/threedselector/threedselector.component.scss +17 -0
- package/app/plugins/threedselector/threedselector.module.d.ts +2 -1
- package/app/plugins/toolbar/draw-dialog/draw-dialog.component.scss +1 -1
- package/assets/icons/circle_regular.svg +0 -0
- package/bundles/colijnit-homedecorator.umd.js +1986 -835
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/esm2015/app/app.version.js +3 -3
- package/esm2015/app/core/enum/icon.enum.js +2 -1
- package/esm2015/app/core/enum/message-type.enum.js +2 -1
- package/esm2015/app/core/interface/message-with-payload.interface.js +1 -1
- package/esm2015/app/core/model/homedecorator-settings-options.js +2 -2
- package/esm2015/app/core/model/homedecorator-settings.js +3 -1
- package/esm2015/app/core/model/icon.js +2 -1
- package/esm2015/app/core/service/3dm-api.js +15 -22
- package/esm2015/app/core/service/homedecorator-app-event.service.js +3 -2
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +65 -7
- package/esm2015/app/core/service/homedecorator-connector.service.js +150 -6
- package/esm2015/app/core/service/homedecorator-settings.service.js +8 -1
- package/esm2015/app/core/service/utils.service.js +116 -93
- package/esm2015/app/core/utils/object.utils.js +13 -1
- package/esm2015/app/homedecorator.component.js +1 -2
- package/esm2015/app/homedecorator.module.js +8 -4
- package/esm2015/app/plugins/core3d/core3d/core3d.component.js +2 -2
- package/esm2015/app/plugins/core3d/service/wall-measurements.service.js +7 -1
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +98 -50
- package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +4 -4
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +21 -11
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-button.component.js +67 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-dropdown.component.js +57 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-list-of-values.component.js +75 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector-option-tile.compontent.js +90 -0
- package/esm2015/app/plugins/product-configurator/product-configurator-selector.component.js +253 -0
- package/esm2015/app/plugins/product-configurator/product-configurator.component.js +151 -0
- package/esm2015/app/plugins/product-configurator/product-configurator.module.js +115 -0
- package/esm2015/app/plugins/render/model/blender-render-settings.js +3 -0
- package/esm2015/app/plugins/render/model/blender-scene-settings.js +10 -0
- package/esm2015/app/plugins/render/model/render-parameters.js +3 -3
- package/esm2015/app/plugins/render/render-controls/render-controls.component.js +532 -446
- package/esm2015/app/plugins/render/render-dialog/render-dialog.component.js +6 -40
- package/esm2015/app/plugins/render/service/new-render.service.js +212 -44
- package/esm2015/app/plugins/render/service/render.service.js +6 -9
- package/esm2015/app/plugins/room-planner/components/floor-catalog/floor-catalog.component.js +1 -1
- package/esm2015/app/plugins/room-planner/components/texture-picker/texture-picker.component.js +1 -1
- package/esm2015/app/plugins/room-planner/room-planner/room-planner.component.js +12 -10
- package/esm2015/app/plugins/threedselector/element-buttons/element-buttons.component.js +2 -2
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +55 -1
- package/esm2015/app/plugins/threedselector/threedselector/service/load-furniture.service.js +3 -3
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +64 -15
- package/esm2015/app/plugins/threedselector/threedselector/utils/asset.utils.js +1 -1
- package/esm2015/app/plugins/threedselector/threedselector.module.js +8 -4
- package/esm2015/app/plugins/toolbar/draw-dialog/draw-dialog.component.js +1 -1
- package/esm2015/app/shared/category-library/category-library.component.js +1 -1
- package/fesm2015/colijnit-homedecorator.js +2522 -1149
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +4 -4
- package/styles.scss +1 -1
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { IconEnum } from '../../core/enum/icon.enum';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../../core/service/homedecorator-connector.service";
|
|
5
|
+
import * as i2 from "../../core/service/homedecorator-icon-cache.service";
|
|
6
|
+
import * as i3 from "../../core/service/homedecorator-settings.service";
|
|
7
|
+
import * as i4 from "@colijnit/corecomponents";
|
|
8
|
+
import * as i5 from "@angular/common";
|
|
9
|
+
export class ProductConfiguratorSelectorOptionTileComponent {
|
|
10
|
+
constructor(iOne, iconService, settingsService) {
|
|
11
|
+
this.iOne = iOne;
|
|
12
|
+
this.iconService = iconService;
|
|
13
|
+
this.settingsService = settingsService;
|
|
14
|
+
this.tileClass = 'small';
|
|
15
|
+
this.selectionClicked = new EventEmitter();
|
|
16
|
+
this.icons = IconEnum;
|
|
17
|
+
}
|
|
18
|
+
changeSelection() {
|
|
19
|
+
this.selectionClicked.emit();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
ProductConfiguratorSelectorOptionTileComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductConfiguratorSelectorOptionTileComponent, deps: [{ token: i1.HomedecoratorConnectorService }, { token: i2.HomedecoratorIconCacheService }, { token: i3.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
23
|
+
ProductConfiguratorSelectorOptionTileComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProductConfiguratorSelectorOptionTileComponent, selector: "rp-product-configurator-selector-option-tile", inputs: { option: "option", tileClass: "tileClass" }, outputs: { selectionClicked: "selectionClicked" }, ngImport: i0, template: `
|
|
24
|
+
<!-- When selected show checkmark -->
|
|
25
|
+
<div
|
|
26
|
+
class="configurator-selector-option-tile-container configurator-selector-option-tile-container-{{this.tileClass}}"
|
|
27
|
+
(click)="changeSelection()">
|
|
28
|
+
<div class="product-configurator-selector-option-tile-checkmark">
|
|
29
|
+
<co-icon class="product-configurator-selector-option-tile-selected"
|
|
30
|
+
*ngIf="option.selected ==='F'"
|
|
31
|
+
[iconData]="iconService.getIcon(icons.CircleCheck)">
|
|
32
|
+
</co-icon>
|
|
33
|
+
</div>
|
|
34
|
+
<!-- Image -->
|
|
35
|
+
<div class="product-configurator-selector-option-tile-image">
|
|
36
|
+
<img *ngIf="option.imageData" [src]="option.imageData" [alt]="option.artNodeId">
|
|
37
|
+
<co-icon class="product-configurator-selector-option-button-no-image"
|
|
38
|
+
*ngIf="!option.imageData"
|
|
39
|
+
[iconData]="iconService.getIcon(icons.ImageSlashRegular)">
|
|
40
|
+
</co-icon>
|
|
41
|
+
</div>
|
|
42
|
+
<!-- Answer text -->
|
|
43
|
+
<div class="product-configurator-selector-option-tile-description">
|
|
44
|
+
<p *ngIf="option.nodeText" [textContent]="option.nodeText"></p>
|
|
45
|
+
<p *ngIf="!option.nodeText" [textContent]="'Skip / Cancel'"></p>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
`, isInline: true, styles: [".configurator-selector-option-tile-container{position:relative}.configurator-selector-option-tile-container .product-configurator-selector-option-tile-checkmark{position:absolute;top:5px;right:5px;fill:#da9803}.configurator-selector-option-tile-container .product-configurator-selector-option-tile-image{min-width:90px;min-height:60px;border-radius:5px;display:flex;justify-content:space-evenly;align-items:center}.configurator-selector-option-tile-container .product-configurator-selector-option-tile-image img{display:block;max-width:100%;border-radius:3px;max-height:max-content}.configurator-selector-option-tile-container .product-configurator-selector-option-tile-description{text-align:center}.configurator-selector-option-tile-container-small .product-configurator-selector-option-tile-image{min-width:55px;min-height:40px}.configurator-selector-option-tile-container-small .product-configurator-selector-option-tile-description{font-size:12px}\n"], components: [{ type: i4.ɵb, selector: "co-icon", inputs: ["icon", "iconData"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductConfiguratorSelectorOptionTileComponent, decorators: [{
|
|
51
|
+
type: Component,
|
|
52
|
+
args: [{
|
|
53
|
+
selector: 'rp-product-configurator-selector-option-tile',
|
|
54
|
+
template: `
|
|
55
|
+
<!-- When selected show checkmark -->
|
|
56
|
+
<div
|
|
57
|
+
class="configurator-selector-option-tile-container configurator-selector-option-tile-container-{{this.tileClass}}"
|
|
58
|
+
(click)="changeSelection()">
|
|
59
|
+
<div class="product-configurator-selector-option-tile-checkmark">
|
|
60
|
+
<co-icon class="product-configurator-selector-option-tile-selected"
|
|
61
|
+
*ngIf="option.selected ==='F'"
|
|
62
|
+
[iconData]="iconService.getIcon(icons.CircleCheck)">
|
|
63
|
+
</co-icon>
|
|
64
|
+
</div>
|
|
65
|
+
<!-- Image -->
|
|
66
|
+
<div class="product-configurator-selector-option-tile-image">
|
|
67
|
+
<img *ngIf="option.imageData" [src]="option.imageData" [alt]="option.artNodeId">
|
|
68
|
+
<co-icon class="product-configurator-selector-option-button-no-image"
|
|
69
|
+
*ngIf="!option.imageData"
|
|
70
|
+
[iconData]="iconService.getIcon(icons.ImageSlashRegular)">
|
|
71
|
+
</co-icon>
|
|
72
|
+
</div>
|
|
73
|
+
<!-- Answer text -->
|
|
74
|
+
<div class="product-configurator-selector-option-tile-description">
|
|
75
|
+
<p *ngIf="option.nodeText" [textContent]="option.nodeText"></p>
|
|
76
|
+
<p *ngIf="!option.nodeText" [textContent]="'Skip / Cancel'"></p>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
`,
|
|
81
|
+
styleUrls: ['product-configurator-selector-option-tile.component.scss']
|
|
82
|
+
}]
|
|
83
|
+
}], ctorParameters: function () { return [{ type: i1.HomedecoratorConnectorService }, { type: i2.HomedecoratorIconCacheService }, { type: i3.HomedecoratorSettingsService }]; }, propDecorators: { option: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], tileClass: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}], selectionClicked: [{
|
|
88
|
+
type: Output
|
|
89
|
+
}] } });
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLXRpbGUuY29tcG9udGVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvcHJvZHVjdC1jb25maWd1cmF0b3IvcHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLXRpbGUuY29tcG9udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXJFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7OztBQXFDbkQsTUFBTSxPQUFPLDhDQUE4QztJQWF2RCxZQUNXLElBQW1DLEVBQ25DLFdBQTBDLEVBQzFDLGVBQTZDO1FBRjdDLFNBQUksR0FBSixJQUFJLENBQStCO1FBQ25DLGdCQUFXLEdBQVgsV0FBVyxDQUErQjtRQUMxQyxvQkFBZSxHQUFmLGVBQWUsQ0FBOEI7UUFWakQsY0FBUyxHQUFXLE9BQU8sQ0FBQztRQUc1QixxQkFBZ0IsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUV2RCxVQUFLLEdBQUcsUUFBUSxDQUFDO0lBT2pDLENBQUM7SUFFTSxlQUFlO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDOzs0SUF0QlEsOENBQThDO2dJQUE5Qyw4Q0FBOEMsNkxBN0I3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0EwQlQ7NEZBR1EsOENBQThDO2tCQS9CMUQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsOENBQThDO29CQUN4RCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBMEJUO29CQUNELFNBQVMsRUFBRSxDQUFDLDBEQUEwRCxDQUFDO2lCQUMxRTsyTUFJVSxNQUFNO3NCQURaLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUlDLGdCQUFnQjtzQkFEdEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9tb2RlbC9zZWxlY3Rpb24nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7SWNvbkVudW19IGZyb20gJy4uLy4uL2NvcmUvZW51bS9pY29uLmVudW0nO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1pY29uLWNhY2hlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1NlbGVjdG9yU3RydWN0dXJlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3NlbGVjdG9yLXN0cnVjdHVyZS5ibyc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdycC1wcm9kdWN0LWNvbmZpZ3VyYXRvci1zZWxlY3Rvci1vcHRpb24tdGlsZScsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDwhLS0gV2hlbiBzZWxlY3RlZCBzaG93IGNoZWNrbWFyayAtLT5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwiY29uZmlndXJhdG9yLXNlbGVjdG9yLW9wdGlvbi10aWxlLWNvbnRhaW5lciBjb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLXRpbGUtY29udGFpbmVyLXt7dGhpcy50aWxlQ2xhc3N9fVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VTZWxlY3Rpb24oKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLXRpbGUtY2hlY2ttYXJrXCI+XHJcbiAgICAgICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cInByb2R1Y3QtY29uZmlndXJhdG9yLXNlbGVjdG9yLW9wdGlvbi10aWxlLXNlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnNlbGVjdGVkID09PSdGJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29ucy5DaXJjbGVDaGVjaylcIj5cclxuICAgICAgICAgICAgICAgIDwvY28taWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gSW1hZ2UgIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLXRpbGUtaW1hZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJvcHRpb24uaW1hZ2VEYXRhXCIgW3NyY109XCJvcHRpb24uaW1hZ2VEYXRhXCIgW2FsdF09XCJvcHRpb24uYXJ0Tm9kZUlkXCI+XHJcbiAgICAgICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cInByb2R1Y3QtY29uZmlndXJhdG9yLXNlbGVjdG9yLW9wdGlvbi1idXR0b24tbm8taW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhb3B0aW9uLmltYWdlRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkRhdGFdPVwiaWNvblNlcnZpY2UuZ2V0SWNvbihpY29ucy5JbWFnZVNsYXNoUmVndWxhcilcIj5cclxuICAgICAgICAgICAgICAgIDwvY28taWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0gQW5zd2VyIHRleHQgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9kdWN0LWNvbmZpZ3VyYXRvci1zZWxlY3Rvci1vcHRpb24tdGlsZS1kZXNjcmlwdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCJvcHRpb24ubm9kZVRleHRcIiBbdGV4dENvbnRlbnRdPVwib3B0aW9uLm5vZGVUZXh0XCI+PC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgKm5nSWY9XCIhb3B0aW9uLm5vZGVUZXh0XCIgW3RleHRDb250ZW50XT1cIidTa2lwIC8gQ2FuY2VsJ1wiPjwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgYCxcclxuICAgIHN0eWxlVXJsczogWydwcm9kdWN0LWNvbmZpZ3VyYXRvci1zZWxlY3Rvci1vcHRpb24tdGlsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0Q29uZmlndXJhdG9yU2VsZWN0b3JPcHRpb25UaWxlQ29tcG9uZW50IHtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG9wdGlvbjogU2VsZWN0b3JTdHJ1Y3R1cmU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0aWxlQ2xhc3M6IHN0cmluZyA9ICdzbWFsbCc7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2xpY2tlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBpY29ucyA9IEljb25FbnVtO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpT25lOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgaWNvblNlcnZpY2U6IEhvbWVkZWNvcmF0b3JJY29uQ2FjaGVTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBzZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2xpY2tlZC5lbWl0KCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { animate, state, style, transition, trigger } from '@angular/animations';
|
|
3
|
+
import { ConfigurationDisplayOption } from '@colijnit/configuratorapi/build/enum/refcode/configuration-display-option.enum';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "../../core/service/homedecorator-connector.service";
|
|
6
|
+
import * as i2 from "../threedselector/threedselector/service/build-furniture.service";
|
|
7
|
+
import * as i3 from "../../core/service/homedecorator-settings.service";
|
|
8
|
+
import * as i4 from "./product-configurator-selector-option-button.component";
|
|
9
|
+
import * as i5 from "./product-configurator-selector-option-list-of-values.component";
|
|
10
|
+
import * as i6 from "./product-configurator-selector-option-tile.compontent";
|
|
11
|
+
import * as i7 from "./product-configurator-selector-option-dropdown.component";
|
|
12
|
+
import * as i8 from "@angular/common";
|
|
13
|
+
export class ProductConfiguratorSelectorComponent {
|
|
14
|
+
constructor(iOne, buildFurnitureService, settingsService, _settingsService) {
|
|
15
|
+
this.iOne = iOne;
|
|
16
|
+
this.buildFurnitureService = buildFurnitureService;
|
|
17
|
+
this.settingsService = settingsService;
|
|
18
|
+
this._settingsService = _settingsService;
|
|
19
|
+
this.showChange = new EventEmitter();
|
|
20
|
+
this.answerChosen = new EventEmitter();
|
|
21
|
+
this.selectSelection = new EventEmitter();
|
|
22
|
+
this.configurationDisplayOption = ConfigurationDisplayOption;
|
|
23
|
+
this.selectionClass = '';
|
|
24
|
+
}
|
|
25
|
+
ngOnInit() {
|
|
26
|
+
this.selectionClass = 'selection-container-' + this.selection.displayOptionControl;
|
|
27
|
+
}
|
|
28
|
+
selectionClicked(answer) {
|
|
29
|
+
this.selectSelection.emit(answer);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
ProductConfiguratorSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductConfiguratorSelectorComponent, deps: [{ token: i1.HomedecoratorConnectorService }, { token: i2.BuildFurnitureService }, { token: i3.HomedecoratorSettingsService }, { token: i3.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
33
|
+
ProductConfiguratorSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProductConfiguratorSelectorComponent, selector: "rp-product-configurator-selector", inputs: { selection: "selection", answers: "answers" }, outputs: { showChange: "showChange", answerChosen: "answerChosen", selectSelection: "selectSelection" }, ngImport: i0, template: `
|
|
34
|
+
<div class="selector-container">
|
|
35
|
+
<h2 class="selector-option-header">{{ selection.optionText }}</h2>
|
|
36
|
+
<div class="selector-wrapper {{this.selectionClass}}">
|
|
37
|
+
<!--
|
|
38
|
+
We should have a meeting about how each displayOptionControl should be styled and then create components
|
|
39
|
+
Toggle = "00",
|
|
40
|
+
Button = "01",
|
|
41
|
+
ListOfValues = "02",
|
|
42
|
+
Tab = "03",
|
|
43
|
+
Card = "04",
|
|
44
|
+
DropDown = "05",
|
|
45
|
+
TileSmall = "06",
|
|
46
|
+
TileLarge = "07",
|
|
47
|
+
TileRounded = "08",
|
|
48
|
+
HorizontalTiles = "09",
|
|
49
|
+
SlideOut = "10",
|
|
50
|
+
OnPage = "11"
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
for simple options like buttons and tiles we can just loop through the list and just the components
|
|
54
|
+
For things like dropdowns, we can't
|
|
55
|
+
-->
|
|
56
|
+
|
|
57
|
+
<ng-container *ngIf="this.selection.displayOptionControl !== configurationDisplayOption.DropDown">
|
|
58
|
+
<ng-container *ngFor="let answer of answers">
|
|
59
|
+
<div class="selector-option-wrapper">
|
|
60
|
+
<ng-container
|
|
61
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.Toggle">
|
|
62
|
+
<p>todo Toggle</p>
|
|
63
|
+
</ng-container>
|
|
64
|
+
<rp-product-configurator-selector-option-button
|
|
65
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.Button"
|
|
66
|
+
[option]="answer"
|
|
67
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
68
|
+
</rp-product-configurator-selector-option-button>
|
|
69
|
+
|
|
70
|
+
<!-- TODO make sure these match the options in ioneAS, ListOfValues is called checkbox in ioneAS...-->
|
|
71
|
+
<rp-product-configurator-option-list-of-values
|
|
72
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.ListOfValues"
|
|
73
|
+
[option]="answer"
|
|
74
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
75
|
+
</rp-product-configurator-option-list-of-values>
|
|
76
|
+
|
|
77
|
+
<ng-container
|
|
78
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.Tab">
|
|
79
|
+
<p>todo Tab</p>
|
|
80
|
+
</ng-container>
|
|
81
|
+
|
|
82
|
+
<ng-container
|
|
83
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.Card">
|
|
84
|
+
<p>todo Card</p>
|
|
85
|
+
</ng-container>
|
|
86
|
+
|
|
87
|
+
<rp-product-configurator-selector-option-tile
|
|
88
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.TileSmall"
|
|
89
|
+
[option]="answer"
|
|
90
|
+
[tileClass]="'small'"
|
|
91
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
92
|
+
</rp-product-configurator-selector-option-tile>
|
|
93
|
+
<rp-product-configurator-selector-option-tile
|
|
94
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.TileLarge"
|
|
95
|
+
[option]="answer"
|
|
96
|
+
[tileClass]="'large'"
|
|
97
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
98
|
+
</rp-product-configurator-selector-option-tile>
|
|
99
|
+
<rp-product-configurator-selector-option-tile
|
|
100
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.TileRounded"
|
|
101
|
+
[option]="answer"
|
|
102
|
+
[tileClass]="'rounded'"
|
|
103
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
104
|
+
</rp-product-configurator-selector-option-tile>
|
|
105
|
+
<rp-product-configurator-selector-option-tile
|
|
106
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles"
|
|
107
|
+
[option]="answer"
|
|
108
|
+
[tileClass]="'horizontal'"
|
|
109
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
110
|
+
</rp-product-configurator-selector-option-tile>
|
|
111
|
+
</div>
|
|
112
|
+
</ng-container>
|
|
113
|
+
</ng-container>
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
<ng-container *ngIf="this.selection.displayOptionControl === configurationDisplayOption.DropDown">
|
|
117
|
+
<rp-product-configurator-selector-option-dropdown
|
|
118
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.DropDown"
|
|
119
|
+
[options]="answers"
|
|
120
|
+
(selectionClicked)="selectionClicked($event)"
|
|
121
|
+
></rp-product-configurator-selector-option-dropdown>
|
|
122
|
+
</ng-container>
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
`, isInline: true, styles: [".selector-container{margin:10px auto;background-color:#fff;box-sizing:border-box;padding:10px}.selector-container .selector-option-header{font-size:16px}.selector-container .selector-wrapper{display:grid;grid-gap:10px;gap:10px;padding:0;z-index:1}.selector-container .selector-wrapper .selector-option-wrapper{border:1px solid #eee;border-radius:3px;background-color:#eee;font-size:14px;padding:5px;cursor:pointer}.selector-container .selection-container-01{grid-template-columns:repeat(auto-fill,minmax(100px,.5fr))}.selector-container .selection-container-02{grid-template-columns:repeat(auto-fill,minmax(150px,.5fr))}.selector-container .selection-container-06{grid-template-columns:repeat(auto-fill,minmax(70px,.5fr))}.selector-container .selection-container-07,.selector-container .selection-container-08{grid-template-columns:repeat(auto-fill,minmax(90px,.5fr))}\n"], components: [{ type: i4.ProductConfiguratorSelectorOptionButtonComponent, selector: "rp-product-configurator-selector-option-button", inputs: ["option"], outputs: ["selectionClicked"] }, { type: i5.ProductConfiguratorOptionListOfValuesComponent, selector: "rp-product-configurator-option-list-of-values", inputs: ["option"], outputs: ["selectionClicked"] }, { type: i6.ProductConfiguratorSelectorOptionTileComponent, selector: "rp-product-configurator-selector-option-tile", inputs: ["option", "tileClass"], outputs: ["selectionClicked"] }, { type: i7.ProductConfiguratorSelectorOptionDropDownComponent, selector: "rp-product-configurator-selector-option-dropdown", inputs: ["options", "tileClass"], outputs: ["selectionClicked"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], animations: [
|
|
128
|
+
trigger('showSelections', [
|
|
129
|
+
state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
|
|
130
|
+
state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
|
|
131
|
+
transition('void <=> *', animate(200))
|
|
132
|
+
])
|
|
133
|
+
] });
|
|
134
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductConfiguratorSelectorComponent, decorators: [{
|
|
135
|
+
type: Component,
|
|
136
|
+
args: [{
|
|
137
|
+
selector: 'rp-product-configurator-selector',
|
|
138
|
+
template: `
|
|
139
|
+
<div class="selector-container">
|
|
140
|
+
<h2 class="selector-option-header">{{ selection.optionText }}</h2>
|
|
141
|
+
<div class="selector-wrapper {{this.selectionClass}}">
|
|
142
|
+
<!--
|
|
143
|
+
We should have a meeting about how each displayOptionControl should be styled and then create components
|
|
144
|
+
Toggle = "00",
|
|
145
|
+
Button = "01",
|
|
146
|
+
ListOfValues = "02",
|
|
147
|
+
Tab = "03",
|
|
148
|
+
Card = "04",
|
|
149
|
+
DropDown = "05",
|
|
150
|
+
TileSmall = "06",
|
|
151
|
+
TileLarge = "07",
|
|
152
|
+
TileRounded = "08",
|
|
153
|
+
HorizontalTiles = "09",
|
|
154
|
+
SlideOut = "10",
|
|
155
|
+
OnPage = "11"
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
for simple options like buttons and tiles we can just loop through the list and just the components
|
|
159
|
+
For things like dropdowns, we can't
|
|
160
|
+
-->
|
|
161
|
+
|
|
162
|
+
<ng-container *ngIf="this.selection.displayOptionControl !== configurationDisplayOption.DropDown">
|
|
163
|
+
<ng-container *ngFor="let answer of answers">
|
|
164
|
+
<div class="selector-option-wrapper">
|
|
165
|
+
<ng-container
|
|
166
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.Toggle">
|
|
167
|
+
<p>todo Toggle</p>
|
|
168
|
+
</ng-container>
|
|
169
|
+
<rp-product-configurator-selector-option-button
|
|
170
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.Button"
|
|
171
|
+
[option]="answer"
|
|
172
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
173
|
+
</rp-product-configurator-selector-option-button>
|
|
174
|
+
|
|
175
|
+
<!-- TODO make sure these match the options in ioneAS, ListOfValues is called checkbox in ioneAS...-->
|
|
176
|
+
<rp-product-configurator-option-list-of-values
|
|
177
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.ListOfValues"
|
|
178
|
+
[option]="answer"
|
|
179
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
180
|
+
</rp-product-configurator-option-list-of-values>
|
|
181
|
+
|
|
182
|
+
<ng-container
|
|
183
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.Tab">
|
|
184
|
+
<p>todo Tab</p>
|
|
185
|
+
</ng-container>
|
|
186
|
+
|
|
187
|
+
<ng-container
|
|
188
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.Card">
|
|
189
|
+
<p>todo Card</p>
|
|
190
|
+
</ng-container>
|
|
191
|
+
|
|
192
|
+
<rp-product-configurator-selector-option-tile
|
|
193
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.TileSmall"
|
|
194
|
+
[option]="answer"
|
|
195
|
+
[tileClass]="'small'"
|
|
196
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
197
|
+
</rp-product-configurator-selector-option-tile>
|
|
198
|
+
<rp-product-configurator-selector-option-tile
|
|
199
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.TileLarge"
|
|
200
|
+
[option]="answer"
|
|
201
|
+
[tileClass]="'large'"
|
|
202
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
203
|
+
</rp-product-configurator-selector-option-tile>
|
|
204
|
+
<rp-product-configurator-selector-option-tile
|
|
205
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.TileRounded"
|
|
206
|
+
[option]="answer"
|
|
207
|
+
[tileClass]="'rounded'"
|
|
208
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
209
|
+
</rp-product-configurator-selector-option-tile>
|
|
210
|
+
<rp-product-configurator-selector-option-tile
|
|
211
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.HorizontalTiles"
|
|
212
|
+
[option]="answer"
|
|
213
|
+
[tileClass]="'horizontal'"
|
|
214
|
+
(selectionClicked)="selectionClicked(answer)">
|
|
215
|
+
</rp-product-configurator-selector-option-tile>
|
|
216
|
+
</div>
|
|
217
|
+
</ng-container>
|
|
218
|
+
</ng-container>
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
<ng-container *ngIf="this.selection.displayOptionControl === configurationDisplayOption.DropDown">
|
|
222
|
+
<rp-product-configurator-selector-option-dropdown
|
|
223
|
+
*ngIf="this.selection.displayOptionControl === configurationDisplayOption.DropDown"
|
|
224
|
+
[options]="answers"
|
|
225
|
+
(selectionClicked)="selectionClicked($event)"
|
|
226
|
+
></rp-product-configurator-selector-option-dropdown>
|
|
227
|
+
</ng-container>
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
`,
|
|
233
|
+
styleUrls: ['product-configurator-selector.component.scss'],
|
|
234
|
+
animations: [
|
|
235
|
+
trigger('showSelections', [
|
|
236
|
+
state('void', style({ 'transform': 'translateX(100%)', opacity: 0 })),
|
|
237
|
+
state('*', style({ 'transform': 'translateX(0%)', opacity: 1 })),
|
|
238
|
+
transition('void <=> *', animate(200))
|
|
239
|
+
])
|
|
240
|
+
]
|
|
241
|
+
}]
|
|
242
|
+
}], ctorParameters: function () { return [{ type: i1.HomedecoratorConnectorService }, { type: i2.BuildFurnitureService }, { type: i3.HomedecoratorSettingsService }, { type: i3.HomedecoratorSettingsService }]; }, propDecorators: { selection: [{
|
|
243
|
+
type: Input
|
|
244
|
+
}], answers: [{
|
|
245
|
+
type: Input
|
|
246
|
+
}], showChange: [{
|
|
247
|
+
type: Output
|
|
248
|
+
}], answerChosen: [{
|
|
249
|
+
type: Output
|
|
250
|
+
}], selectSelection: [{
|
|
251
|
+
type: Output
|
|
252
|
+
}] } });
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9wcm9kdWN0LWNvbmZpZ3VyYXRvci9wcm9kdWN0LWNvbmZpZ3VyYXRvci1zZWxlY3Rvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RSxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBSy9FLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGdGQUFnRixDQUFDOzs7Ozs7Ozs7O0FBNEcxSCxNQUFNLE9BQU8sb0NBQW9DO0lBRTdDLFlBQ1csSUFBbUMsRUFDbkMscUJBQTRDLEVBQzVDLGVBQTZDLEVBQzVDLGdCQUE4QztRQUgvQyxTQUFJLEdBQUosSUFBSSxDQUErQjtRQUNuQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLG9CQUFlLEdBQWYsZUFBZSxDQUE4QjtRQUM1QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQThCO1FBVTFDLGVBQVUsR0FBMEIsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUdoRSxpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBR2hFLG9CQUFlLEdBQW9DLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRWxHLCtCQUEwQixHQUFHLDBCQUEwQixDQUFDO1FBRXhELG1CQUFjLEdBQVcsRUFBRSxDQUFDO0lBbEJuQyxDQUFDO0lBb0JELFFBQVE7UUFDSixJQUFJLENBQUMsY0FBYyxHQUFHLHNCQUFzQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUM7SUFDdkYsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE1BQXlCO1FBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7O2tJQWxDUSxvQ0FBb0M7c0hBQXBDLG9DQUFvQyx5T0F4R25DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBOEZULHl6REFFVztRQUNSLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUN0QixLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFDLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUNuRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztZQUM5RCxVQUFVLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QyxDQUFDO0tBQ0w7NEZBRVEsb0NBQW9DO2tCQTFHaEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsa0NBQWtDO29CQUM1QyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0E4RlQ7b0JBQ0QsU0FBUyxFQUFFLENBQUMsOENBQThDLENBQUM7b0JBQzNELFVBQVUsRUFBRTt3QkFDUixPQUFPLENBQUMsZ0JBQWdCLEVBQUU7NEJBQ3RCLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDOzRCQUNuRSxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQzs0QkFDOUQsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQ3pDLENBQUM7cUJBQ0w7aUJBQ0o7OE9BV1UsU0FBUztzQkFEZixLQUFLO2dCQUlDLE9BQU87c0JBRGIsS0FBSztnQkFJVSxVQUFVO3NCQUR6QixNQUFNO2dCQUlTLFlBQVk7c0JBRDNCLE1BQU07Z0JBSVMsZUFBZTtzQkFEOUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0J1aWxkRnVybml0dXJlU2VydmljZX0gZnJvbSAnLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3Ivc2VydmljZS9idWlsZC1mdXJuaXR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7U2VsZWN0b3JTdHJ1Y3R1cmV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0b3Itc3RydWN0dXJlLmJvJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uRGlzcGxheU9wdGlvbn0gZnJvbSAnQGNvbGlqbml0L2NvbmZpZ3VyYXRvcmFwaS9idWlsZC9lbnVtL3JlZmNvZGUvY29uZmlndXJhdGlvbi1kaXNwbGF5LW9wdGlvbi5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdycC1wcm9kdWN0LWNvbmZpZ3VyYXRvci1zZWxlY3RvcicsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3Rvci1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGgyIGNsYXNzPVwic2VsZWN0b3Itb3B0aW9uLWhlYWRlclwiPnt7IHNlbGVjdGlvbi5vcHRpb25UZXh0IH19PC9oMj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdG9yLXdyYXBwZXIge3t0aGlzLnNlbGVjdGlvbkNsYXNzfX1cIj5cclxuICAgICAgICAgICAgICAgIDwhLS1cclxuICAgICAgICAgICAgICAgICAgICAgICBXZSBzaG91bGQgaGF2ZSBhIG1lZXRpbmcgYWJvdXQgaG93IGVhY2ggZGlzcGxheU9wdGlvbkNvbnRyb2wgc2hvdWxkIGJlIHN0eWxlZCBhbmQgdGhlbiBjcmVhdGUgY29tcG9uZW50c1xyXG4gICAgICAgICAgICAgICAgICAgICAgIFRvZ2dsZSA9IFwiMDBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICBCdXR0b24gPSBcIjAxXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgTGlzdE9mVmFsdWVzID0gXCIwMlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIFRhYiA9IFwiMDNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICBDYXJkID0gXCIwNFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIERyb3BEb3duID0gXCIwNVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIFRpbGVTbWFsbCA9IFwiMDZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICBUaWxlTGFyZ2UgPSBcIjA3XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgVGlsZVJvdW5kZWQgPSBcIjA4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbFRpbGVzID0gXCIwOVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIFNsaWRlT3V0ID0gXCIxMFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgIE9uUGFnZSA9IFwiMTFcIlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNpbXBsZSBvcHRpb25zIGxpa2UgYnV0dG9ucyBhbmQgdGlsZXMgd2UgY2FuIGp1c3QgbG9vcCB0aHJvdWdoIHRoZSBsaXN0IGFuZCBqdXN0IHRoZSBjb21wb25lbnRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgRm9yIHRoaW5ncyBsaWtlIGRyb3Bkb3ducywgd2UgY2FuJ3RcclxuICAgICAgICAgICAgICAgICAgIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aGlzLnNlbGVjdGlvbi5kaXNwbGF5T3B0aW9uQ29udHJvbCAhPT0gY29uZmlndXJhdGlvbkRpc3BsYXlPcHRpb24uRHJvcERvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBhbnN3ZXIgb2YgYW5zd2Vyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0b3Itb3B0aW9uLXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuc2VsZWN0aW9uLmRpc3BsYXlPcHRpb25Db250cm9sID09PSBjb25maWd1cmF0aW9uRGlzcGxheU9wdGlvbi5Ub2dnbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD50b2RvIFRvZ2dsZTwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJwLXByb2R1Y3QtY29uZmlndXJhdG9yLXNlbGVjdG9yLW9wdGlvbi1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuc2VsZWN0aW9uLmRpc3BsYXlPcHRpb25Db250cm9sID09PSBjb25maWd1cmF0aW9uRGlzcGxheU9wdGlvbi5CdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwiYW5zd2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2xpY2tlZCk9XCJzZWxlY3Rpb25DbGlja2VkKGFuc3dlcilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnAtcHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLWJ1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRPRE8gbWFrZSBzdXJlIHRoZXNlIG1hdGNoIHRoZSBvcHRpb25zIGluIGlvbmVBUywgTGlzdE9mVmFsdWVzIGlzIGNhbGxlZCBjaGVja2JveCBpbiBpb25lQVMuLi4tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycC1wcm9kdWN0LWNvbmZpZ3VyYXRvci1vcHRpb24tbGlzdC1vZi12YWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuc2VsZWN0aW9uLmRpc3BsYXlPcHRpb25Db250cm9sID09PSBjb25maWd1cmF0aW9uRGlzcGxheU9wdGlvbi5MaXN0T2ZWYWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwiYW5zd2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2xpY2tlZCk9XCJzZWxlY3Rpb25DbGlja2VkKGFuc3dlcilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnAtcHJvZHVjdC1jb25maWd1cmF0b3Itb3B0aW9uLWxpc3Qtb2YtdmFsdWVzPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuc2VsZWN0aW9uLmRpc3BsYXlPcHRpb25Db250cm9sID09PSBjb25maWd1cmF0aW9uRGlzcGxheU9wdGlvbi5UYWJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD50b2RvIFRhYjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuc2VsZWN0aW9uLmRpc3BsYXlPcHRpb25Db250cm9sID09PSBjb25maWd1cmF0aW9uRGlzcGxheU9wdGlvbi5DYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+dG9kbyBDYXJkPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJwLXByb2R1Y3QtY29uZmlndXJhdG9yLXNlbGVjdG9yLW9wdGlvbi10aWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLnNlbGVjdGlvbi5kaXNwbGF5T3B0aW9uQ29udHJvbCA9PT0gY29uZmlndXJhdGlvbkRpc3BsYXlPcHRpb24uVGlsZVNtYWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFuc3dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpbGVDbGFzc109XCInc21hbGwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2xpY2tlZCk9XCJzZWxlY3Rpb25DbGlja2VkKGFuc3dlcilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnAtcHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLXRpbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cnAtcHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLXRpbGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRoaXMuc2VsZWN0aW9uLmRpc3BsYXlPcHRpb25Db250cm9sID09PSBjb25maWd1cmF0aW9uRGlzcGxheU9wdGlvbi5UaWxlTGFyZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwiYW5zd2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGlsZUNsYXNzXT1cIidsYXJnZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DbGlja2VkKT1cInNlbGVjdGlvbkNsaWNrZWQoYW5zd2VyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycC1wcm9kdWN0LWNvbmZpZ3VyYXRvci1zZWxlY3Rvci1vcHRpb24tdGlsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycC1wcm9kdWN0LWNvbmZpZ3VyYXRvci1zZWxlY3Rvci1vcHRpb24tdGlsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGhpcy5zZWxlY3Rpb24uZGlzcGxheU9wdGlvbkNvbnRyb2wgPT09IGNvbmZpZ3VyYXRpb25EaXNwbGF5T3B0aW9uLlRpbGVSb3VuZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFuc3dlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpbGVDbGFzc109XCIncm91bmRlZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DbGlja2VkKT1cInNlbGVjdGlvbkNsaWNrZWQoYW5zd2VyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ycC1wcm9kdWN0LWNvbmZpZ3VyYXRvci1zZWxlY3Rvci1vcHRpb24tdGlsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycC1wcm9kdWN0LWNvbmZpZ3VyYXRvci1zZWxlY3Rvci1vcHRpb24tdGlsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGhpcy5zZWxlY3Rpb24uZGlzcGxheU9wdGlvbkNvbnRyb2wgPT09IGNvbmZpZ3VyYXRpb25EaXNwbGF5T3B0aW9uLkhvcml6b250YWxUaWxlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbl09XCJhbnN3ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aWxlQ2xhc3NdPVwiJ2hvcml6b250YWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2xpY2tlZCk9XCJzZWxlY3Rpb25DbGlja2VkKGFuc3dlcilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcnAtcHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLXRpbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0aGlzLnNlbGVjdGlvbi5kaXNwbGF5T3B0aW9uQ29udHJvbCA9PT0gY29uZmlndXJhdGlvbkRpc3BsYXlPcHRpb24uRHJvcERvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8cnAtcHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLWRyb3Bkb3duXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGhpcy5zZWxlY3Rpb24uZGlzcGxheU9wdGlvbkNvbnRyb2wgPT09IGNvbmZpZ3VyYXRpb25EaXNwbGF5T3B0aW9uLkRyb3BEb3duXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiYW5zd2Vyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DbGlja2VkKT1cInNlbGVjdGlvbkNsaWNrZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvcnAtcHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3Itb3B0aW9uLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVVcmxzOiBbJ3Byb2R1Y3QtY29uZmlndXJhdG9yLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBhbmltYXRpb25zOiBbXHJcbiAgICAgICAgdHJpZ2dlcignc2hvd1NlbGVjdGlvbnMnLCBbXHJcbiAgICAgICAgICAgIHN0YXRlKCd2b2lkJywgc3R5bGUoeyd0cmFuc2Zvcm0nOiAndHJhbnNsYXRlWCgxMDAlKScsIG9wYWNpdHk6IDB9KSksXHJcbiAgICAgICAgICAgIHN0YXRlKCcqJywgc3R5bGUoeyd0cmFuc2Zvcm0nOiAndHJhbnNsYXRlWCgwJSknLCBvcGFjaXR5OiAxfSkpLFxyXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCd2b2lkIDw9PiAqJywgYW5pbWF0ZSgyMDApKVxyXG4gICAgICAgIF0pXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0Q29uZmlndXJhdG9yU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpT25lOiBIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgYnVpbGRGdXJuaXR1cmVTZXJ2aWNlOiBCdWlsZEZ1cm5pdHVyZVNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIHNldHRpbmdzU2VydmljZTogSG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2VcclxuICAgICkge1xyXG4gICAgfVxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZWxlY3Rpb246IFNlbGVjdG9yU3RydWN0dXJlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYW5zd2VyczogU2VsZWN0b3JTdHJ1Y3R1cmVbXTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzaG93Q2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgYW5zd2VyQ2hvc2VuOiBFdmVudEVtaXR0ZXI8QW5zd2VyPiA9IG5ldyBFdmVudEVtaXR0ZXI8QW5zd2VyPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbGVjdFNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPFNlbGVjdG9yU3RydWN0dXJlPiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0b3JTdHJ1Y3R1cmU+KCk7XHJcblxyXG4gICAgcHVibGljIGNvbmZpZ3VyYXRpb25EaXNwbGF5T3B0aW9uID0gQ29uZmlndXJhdGlvbkRpc3BsYXlPcHRpb247XHJcblxyXG4gICAgcHVibGljIHNlbGVjdGlvbkNsYXNzOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNsYXNzID0gJ3NlbGVjdGlvbi1jb250YWluZXItJyArIHRoaXMuc2VsZWN0aW9uLmRpc3BsYXlPcHRpb25Db250cm9sO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3Rpb25DbGlja2VkKGFuc3dlcjogU2VsZWN0b3JTdHJ1Y3R1cmUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdFNlbGVjdGlvbi5lbWl0KGFuc3dlcik7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../../core/service/homedecorator-connector.service";
|
|
13
|
+
import * as i2 from "../threedselector/threedselector/service/build-furniture.service";
|
|
14
|
+
import * as i3 from "../../core/service/homedecorator-settings.service";
|
|
15
|
+
import * as i4 from "@angular/material/icon";
|
|
16
|
+
import * as i5 from "./product-configurator-selector.component";
|
|
17
|
+
import * as i6 from "@angular/common";
|
|
18
|
+
import * as i7 from "../../core/pipe/localize.pipe";
|
|
19
|
+
import * as i8 from "@colijnit/corecomponents";
|
|
20
|
+
export class ProductConfiguratorComponent {
|
|
21
|
+
constructor(iOne, buildFurnitureService, settingsService) {
|
|
22
|
+
this.iOne = iOne;
|
|
23
|
+
this.buildFurnitureService = buildFurnitureService;
|
|
24
|
+
this.settingsService = settingsService;
|
|
25
|
+
this.showHeaderInformation = true;
|
|
26
|
+
this.showLabel = true;
|
|
27
|
+
this.canClose = true;
|
|
28
|
+
this.customDimensions = false;
|
|
29
|
+
this.showChange = new EventEmitter();
|
|
30
|
+
this.answerChosen = new EventEmitter();
|
|
31
|
+
this.valutaSymbol = '€';
|
|
32
|
+
this.selectionList = [];
|
|
33
|
+
this._showSelections = false;
|
|
34
|
+
this._subs = [];
|
|
35
|
+
this._subs.push(this.settingsService.settingsLoaded.subscribe((loaded) => {
|
|
36
|
+
if (loaded && this.settingsService.settings.currencySymbol) {
|
|
37
|
+
this.valutaSymbol = this.settingsService.settings.currencySymbol;
|
|
38
|
+
}
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
set showSelections(value) {
|
|
42
|
+
this._showSelections = value;
|
|
43
|
+
}
|
|
44
|
+
get showSelections() {
|
|
45
|
+
return this._showSelections;
|
|
46
|
+
}
|
|
47
|
+
ngOnInit() {
|
|
48
|
+
this.article = this.iOne.article;
|
|
49
|
+
this.selectionList = this.iOne.selectionWithAnswers;
|
|
50
|
+
}
|
|
51
|
+
ngOnDestroy() {
|
|
52
|
+
this._subs.forEach(s => s.unsubscribe());
|
|
53
|
+
}
|
|
54
|
+
onCloseLiteSelectorButtonClick() {
|
|
55
|
+
this.show = false;
|
|
56
|
+
this.showChange.emit(false);
|
|
57
|
+
}
|
|
58
|
+
onSelectionsSummarySelectSelection(chosenOption) {
|
|
59
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
60
|
+
yield this.iOne.navigateTo(chosenOption, true);
|
|
61
|
+
yield this.buildFurnitureService.selectSelectionAsAnswer(chosenOption, this.metadata);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
ProductConfiguratorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductConfiguratorComponent, deps: [{ token: i1.HomedecoratorConnectorService }, { token: i2.BuildFurnitureService }, { token: i3.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
66
|
+
ProductConfiguratorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: ProductConfiguratorComponent, selector: "rp-product-configurator", inputs: { show: "show", showHeaderInformation: "showHeaderInformation", showSelections: "showSelections", showLabel: "showLabel", canClose: "canClose", metadata: "metadata", customDimensions: "customDimensions" }, outputs: { showChange: "showChange", answerChosen: "answerChosen" }, ngImport: i0, template: `
|
|
67
|
+
<ng-container *ngIf="show">
|
|
68
|
+
<div class="product-configurator-container">
|
|
69
|
+
<div class="product-configurator-header" *ngIf="showHeaderInformation">
|
|
70
|
+
<div>
|
|
71
|
+
<h2>{{ article.name }}</h2>
|
|
72
|
+
<p>{{ article.description }}</p>
|
|
73
|
+
</div>
|
|
74
|
+
<div class="product-configurator-close" (click)="show = false">
|
|
75
|
+
<mat-icon class="homedecorator-material-icons">cancel</mat-icon>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="product-configurator-details">
|
|
79
|
+
<ng-container *ngFor="let displaySelection of iOne.selectionWithAnswers let index = index">
|
|
80
|
+
<rp-product-configurator-selector
|
|
81
|
+
[selection]="displaySelection.selector"
|
|
82
|
+
[answers]="displaySelection.selectorOptions"
|
|
83
|
+
(selectSelection)="onSelectionsSummarySelectSelection($event)">
|
|
84
|
+
</rp-product-configurator-selector>
|
|
85
|
+
</ng-container>
|
|
86
|
+
</div>
|
|
87
|
+
<div class="product-configurator-summary">
|
|
88
|
+
<div class="sum" *ngIf="settingsService.settings.options.showAsConfigured">
|
|
89
|
+
<label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
|
|
90
|
+
<div class="price"> {{ iOne.totalPrice | priceDisplay: valutaSymbol }}</div>
|
|
91
|
+
</div>
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
</ng-container>
|
|
95
|
+
`, isInline: true, styles: [":host.floating ::ng-deep .product-configurator-container{position:absolute;right:0;max-height:calc(100vh - 120px)}:host:not(.custom-dimensions).floating ::ng-deep .product-configurator-container{top:64px;height:calc(100vh - 184px);padding:5px 10px 10px;border-radius:10px;right:10px;width:505px;background:#fff}.product-configurator-header{display:flex;justify-content:space-between;box-sizing:border-box;padding-bottom:10px}.product-configurator-header .product-configurator-close{cursor:pointer}.product-configurator-details{max-height:calc(100vh - 360px);overflow-y:scroll}.product-configurator-summary{box-sizing:border-box;padding:10px 0}\n"], components: [{ type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.ProductConfiguratorSelectorComponent, selector: "rp-product-configurator-selector", inputs: ["selection", "answers"], outputs: ["showChange", "answerChosen", "selectSelection"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "localize": i7.LocalizePipe, "priceDisplay": i8.ɵn } });
|
|
96
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductConfiguratorComponent, decorators: [{
|
|
97
|
+
type: Component,
|
|
98
|
+
args: [{
|
|
99
|
+
selector: 'rp-product-configurator',
|
|
100
|
+
template: `
|
|
101
|
+
<ng-container *ngIf="show">
|
|
102
|
+
<div class="product-configurator-container">
|
|
103
|
+
<div class="product-configurator-header" *ngIf="showHeaderInformation">
|
|
104
|
+
<div>
|
|
105
|
+
<h2>{{ article.name }}</h2>
|
|
106
|
+
<p>{{ article.description }}</p>
|
|
107
|
+
</div>
|
|
108
|
+
<div class="product-configurator-close" (click)="show = false">
|
|
109
|
+
<mat-icon class="homedecorator-material-icons">cancel</mat-icon>
|
|
110
|
+
</div>
|
|
111
|
+
</div>
|
|
112
|
+
<div class="product-configurator-details">
|
|
113
|
+
<ng-container *ngFor="let displaySelection of iOne.selectionWithAnswers let index = index">
|
|
114
|
+
<rp-product-configurator-selector
|
|
115
|
+
[selection]="displaySelection.selector"
|
|
116
|
+
[answers]="displaySelection.selectorOptions"
|
|
117
|
+
(selectSelection)="onSelectionsSummarySelectSelection($event)">
|
|
118
|
+
</rp-product-configurator-selector>
|
|
119
|
+
</ng-container>
|
|
120
|
+
</div>
|
|
121
|
+
<div class="product-configurator-summary">
|
|
122
|
+
<div class="sum" *ngIf="settingsService.settings.options.showAsConfigured">
|
|
123
|
+
<label [textContent]="'AS_CONFIGURED' | localize"></label><span class="total-price"></span>
|
|
124
|
+
<div class="price"> {{ iOne.totalPrice | priceDisplay: valutaSymbol }}</div>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
</ng-container>
|
|
129
|
+
`,
|
|
130
|
+
styleUrls: ['product-configurator.component.scss']
|
|
131
|
+
}]
|
|
132
|
+
}], ctorParameters: function () { return [{ type: i1.HomedecoratorConnectorService }, { type: i2.BuildFurnitureService }, { type: i3.HomedecoratorSettingsService }]; }, propDecorators: { show: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], showHeaderInformation: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], showSelections: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], showLabel: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], canClose: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], metadata: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], customDimensions: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], showChange: [{
|
|
147
|
+
type: Output
|
|
148
|
+
}], answerChosen: [{
|
|
149
|
+
type: Output
|
|
150
|
+
}] } });
|
|
151
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1jb25maWd1cmF0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9hcHAvcGx1Z2lucy9wcm9kdWN0LWNvbmZpZ3VyYXRvci9wcm9kdWN0LWNvbmZpZ3VyYXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUErQ3hGLE1BQU0sT0FBTyw0QkFBNEI7SUEyQ3JDLFlBQ1csSUFBbUMsRUFDbkMscUJBQTRDLEVBQzVDLGVBQTZDO1FBRjdDLFNBQUksR0FBSixJQUFJLENBQStCO1FBQ25DLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUI7UUFDNUMsb0JBQWUsR0FBZixlQUFlLENBQThCO1FBekNqRCwwQkFBcUIsR0FBWSxJQUFJLENBQUM7UUFZdEMsY0FBUyxHQUFZLElBQUksQ0FBQztRQUcxQixhQUFRLEdBQVksSUFBSSxDQUFDO1FBTXpCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUd6QixlQUFVLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFHaEUsaUJBQVksR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUV6RSxpQkFBWSxHQUFXLEdBQUcsQ0FBQztRQUczQixrQkFBYSxHQUEwQixFQUFFLENBQUM7UUFFekMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFakMsVUFBSyxHQUFtQixFQUFFLENBQUM7UUFPL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ1gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDOUQsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFO2dCQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQzthQUNwRTtRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBaERELElBQ1csY0FBYyxDQUFDLEtBQWM7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELElBQVcsY0FBYztRQUNyQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQztJQTJDRCxRQUFRO1FBQ0osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDeEQsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSw4QkFBOEI7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVZLGtDQUFrQyxDQUFDLFlBQStCOztZQUMzRSxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMvQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFGLENBQUM7S0FBQTs7MEhBMUVRLDRCQUE0Qjs4R0FBNUIsNEJBQTRCLDBWQWhDM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBNkJUOzRGQUdRLDRCQUE0QjtrQkFsQ3hDLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQTZCVDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQztpQkFDckQ7bU1BR1UsSUFBSTtzQkFEVixLQUFLO2dCQUlDLHFCQUFxQjtzQkFEM0IsS0FBSztnQkFJSyxjQUFjO3NCQUR4QixLQUFLO2dCQVVDLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFJVSxVQUFVO3NCQUR6QixNQUFNO2dCQUlTLFlBQVk7c0JBRDNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL3NlbGVjdGlvbic7XHJcbmltcG9ydCB7QW5zd2VyfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2Fuc3dlcic7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtNZXRhZGF0YX0gZnJvbSAnLi4vY29yZTNkL2l0ZW1zL21ldGFkYXRhJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3ItY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0J1aWxkRnVybml0dXJlU2VydmljZX0gZnJvbSAnLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3Ivc2VydmljZS9idWlsZC1mdXJuaXR1cmUuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7U2VsZWN0b3JTdHJ1Y3R1cmV9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0b3Itc3RydWN0dXJlLmJvJztcclxuaW1wb3J0IHtBcnRpY2xlfSBmcm9tICdAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL21vZGVsL2FydGljbGUnO1xyXG5pbXBvcnQge1NlbGVjdG9yV2l0aE9wdGlvbnN9IGZyb20gJ0Bjb2xpam5pdC9jb25maWd1cmF0b3JhcGkvYnVpbGQvbW9kZWwvc2VsZWN0b3Itd2l0aC1vcHRpb25zJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncnAtcHJvZHVjdC1jb25maWd1cmF0b3InLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1jb25maWd1cmF0b3ItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1jb25maWd1cmF0b3ItaGVhZGVyXCIgKm5nSWY9XCJzaG93SGVhZGVySW5mb3JtYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDI+e3sgYXJ0aWNsZS5uYW1lIH19PC9oMj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+e3sgYXJ0aWNsZS5kZXNjcmlwdGlvbiB9fTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1jb25maWd1cmF0b3ItY2xvc2VcIiAoY2xpY2spPVwic2hvdyA9IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImhvbWVkZWNvcmF0b3ItbWF0ZXJpYWwtaWNvbnNcIj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1jb25maWd1cmF0b3ItZGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRpc3BsYXlTZWxlY3Rpb24gb2YgaU9uZS5zZWxlY3Rpb25XaXRoQW5zd2VycyBsZXQgaW5kZXggPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cnAtcHJvZHVjdC1jb25maWd1cmF0b3Itc2VsZWN0b3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwiZGlzcGxheVNlbGVjdGlvbi5zZWxlY3RvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYW5zd2Vyc109XCJkaXNwbGF5U2VsZWN0aW9uLnNlbGVjdG9yT3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0U2VsZWN0aW9uKT1cIm9uU2VsZWN0aW9uc1N1bW1hcnlTZWxlY3RTZWxlY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3JwLXByb2R1Y3QtY29uZmlndXJhdG9yLXNlbGVjdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZHVjdC1jb25maWd1cmF0b3Itc3VtbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1cIiAqbmdJZj1cInNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnNob3dBc0NvbmZpZ3VyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIFt0ZXh0Q29udGVudF09XCInQVNfQ09ORklHVVJFRCcgfCBsb2NhbGl6ZVwiPjwvbGFiZWw+PHNwYW4gY2xhc3M9XCJ0b3RhbC1wcmljZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInByaWNlXCI+IHt7IGlPbmUudG90YWxQcmljZSB8IHByaWNlRGlzcGxheTogdmFsdXRhU3ltYm9sIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVVcmxzOiBbJ3Byb2R1Y3QtY29uZmlndXJhdG9yLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3RDb25maWd1cmF0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3c6IGJvb2xlYW47XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93SGVhZGVySW5mb3JtYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IHNob3dTZWxlY3Rpb25zKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd1NlbGVjdGlvbnMgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNob3dTZWxlY3Rpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93U2VsZWN0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dMYWJlbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYW5DbG9zZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtZXRhZGF0YTogTWV0YWRhdGE7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjdXN0b21EaW1lbnNpb25zOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgc2hvd0NoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJlYWRvbmx5IGFuc3dlckNob3NlbjogRXZlbnRFbWl0dGVyPEFuc3dlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFuc3dlcj4oKTtcclxuXHJcbiAgICBwdWJsaWMgdmFsdXRhU3ltYm9sOiBzdHJpbmcgPSAn4oKsJztcclxuICAgIHB1YmxpYyBhcnRpY2xlOiBBcnRpY2xlO1xyXG5cclxuICAgIHB1YmxpYyBzZWxlY3Rpb25MaXN0OiBTZWxlY3RvcldpdGhPcHRpb25zW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF9zaG93U2VsZWN0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uU2VsZWN0ZWQ6IFNlbGVjdGlvbjtcclxuICAgIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlPbmU6IEhvbWVkZWNvcmF0b3JDb25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBidWlsZEZ1cm5pdHVyZVNlcnZpY2U6IEJ1aWxkRnVybml0dXJlU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5nc0xvYWRlZC5zdWJzY3JpYmUoKGxvYWRlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxvYWRlZCAmJiB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5jdXJyZW5jeVN5bWJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdXRhU3ltYm9sID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuY3VycmVuY3lTeW1ib2w7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmFydGljbGUgPSB0aGlzLmlPbmUuYXJ0aWNsZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbkxpc3QgPSB0aGlzLmlPbmUuc2VsZWN0aW9uV2l0aEFuc3dlcnM7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DbG9zZUxpdGVTZWxlY3RvckJ1dHRvbkNsaWNrKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0NoYW5nZS5lbWl0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgb25TZWxlY3Rpb25zU3VtbWFyeVNlbGVjdFNlbGVjdGlvbihjaG9zZW5PcHRpb246IFNlbGVjdG9yU3RydWN0dXJlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5pT25lLm5hdmlnYXRlVG8oY2hvc2VuT3B0aW9uLCB0cnVlKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmJ1aWxkRnVybml0dXJlU2VydmljZS5zZWxlY3RTZWxlY3Rpb25Bc0Fuc3dlcihjaG9zZW5PcHRpb24sIHRoaXMubWV0YWRhdGEpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|