@colijnit/configurator 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/app/builder.d.ts +10 -0
  2. package/app/components/answers/answers.component.d.ts +6 -0
  3. package/app/components/answers/answers.module.d.ts +2 -0
  4. package/app/components/selections/selections.component.d.ts +16 -0
  5. package/app/components/selections/selections.module.d.ts +2 -0
  6. package/bundles/colijnit-configurator.umd.js +224 -55
  7. package/bundles/colijnit-configurator.umd.js.map +1 -1
  8. package/bundles/colijnit-configurator.umd.min.js +2 -2
  9. package/bundles/colijnit-configurator.umd.min.js.map +1 -1
  10. package/colijnit-configurator.metadata.json +1 -1
  11. package/esm2015/app/builder.js +62 -38
  12. package/esm2015/app/components/answers/answers.component.js +29 -0
  13. package/esm2015/app/components/answers/answers.module.js +21 -0
  14. package/esm2015/app/components/selections/selections.component.js +83 -0
  15. package/esm2015/app/components/selections/selections.module.js +21 -0
  16. package/esm2015/public_api.js +5 -1
  17. package/esm2015/utils/threed.utils.js +3 -2
  18. package/esm5/app/builder.js +87 -51
  19. package/esm5/app/components/answers/answers.component.js +24 -0
  20. package/esm5/app/components/answers/answers.module.js +24 -0
  21. package/esm5/app/components/selections/selections.component.js +73 -0
  22. package/esm5/app/components/selections/selections.module.js +24 -0
  23. package/esm5/public_api.js +5 -1
  24. package/esm5/utils/threed.utils.js +3 -2
  25. package/fesm2015/colijnit-configurator.js +205 -40
  26. package/fesm2015/colijnit-configurator.js.map +1 -1
  27. package/fesm5/colijnit-configurator.js +221 -53
  28. package/fesm5/colijnit-configurator.js.map +1 -1
  29. package/package.json +2 -2
  30. package/public_api.d.ts +4 -0
  31. package/utils/threed.utils.d.ts +0 -1
@@ -0,0 +1,73 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, EventEmitter, Input, Output } from "@angular/core";
3
+ import { animate, state, style, transition, trigger } from "@angular/animations";
4
+ var SelectionViewModel = /** @class */ (function () {
5
+ function SelectionViewModel() {
6
+ this.children = [];
7
+ this.expanded = false;
8
+ }
9
+ return SelectionViewModel;
10
+ }());
11
+ var SelectionsComponent = /** @class */ (function () {
12
+ function SelectionsComponent() {
13
+ this.selectionViewModels = [];
14
+ this.selectionClick = new EventEmitter();
15
+ }
16
+ Object.defineProperty(SelectionsComponent.prototype, "selections", {
17
+ set: function (value) {
18
+ this._prepareSelections(value);
19
+ },
20
+ enumerable: true,
21
+ configurable: true
22
+ });
23
+ SelectionsComponent.prototype.expandClicked = function (selectionViewModel, mouseEvent) {
24
+ mouseEvent.preventDefault();
25
+ mouseEvent.stopImmediatePropagation();
26
+ selectionViewModel.expanded = !selectionViewModel.expanded;
27
+ };
28
+ SelectionsComponent.prototype.selectSelection = function (selection, mouseEvent) {
29
+ mouseEvent.preventDefault();
30
+ mouseEvent.stopImmediatePropagation();
31
+ this.selectionClick.next(selection);
32
+ };
33
+ SelectionsComponent.prototype._prepareSelections = function (value) {
34
+ var _this = this;
35
+ this.selectionViewModels.length = 0;
36
+ var selectionViewModel;
37
+ value.forEach(function (s) {
38
+ if (s.presentationLevel === 1) {
39
+ selectionViewModel = new SelectionViewModel();
40
+ selectionViewModel.selection = s;
41
+ _this.selectionViewModels.push(selectionViewModel);
42
+ }
43
+ else if (s.presentationLevel > 1) {
44
+ if (selectionViewModel) {
45
+ selectionViewModel.children.push(s);
46
+ }
47
+ }
48
+ });
49
+ };
50
+ __decorate([
51
+ Input()
52
+ ], SelectionsComponent.prototype, "selections", null);
53
+ __decorate([
54
+ Output()
55
+ ], SelectionsComponent.prototype, "selectionClick", void 0);
56
+ SelectionsComponent = __decorate([
57
+ Component({
58
+ selector: "selections",
59
+ template: "\n <ng-container *ngFor=\"let selectionViewModel of selectionViewModels\">\n <div class=\"selection\" (click)=\"selectSelection(selectionViewModel.selection, $event)\">\n <div class=\"question\" [textContent]=\"selectionViewModel.selection.commercialQuestion\"></div>\n <div class=\"answer\" [textContent]=\"selectionViewModel.selection.answer\"></div>\n <div class=\"collapse-handle\" [class.expanded]=\"selectionViewModel.expanded\" \n *ngIf=\"selectionViewModel.children.length > 0\" (click)=\"expandClicked(selectionViewModel, $event)\"></div>\n <div *ngIf=\"selectionViewModel.children.length > 0 && selectionViewModel.expanded\" @showHideChildren>\n <div class=\"child-selection\" *ngFor=\"let selection of selectionViewModel.children\"\n (click)=\"selectSelection(selection, $event)\"\n >\n <div class=\"question\" [textContent]=\"selection.commercialQuestion\"></div>\n <div class=\"answer\" [textContent]=\"selection.answer\"></div>\n </div>\n </div>\n </div>\n </ng-container>\n ",
60
+ animations: [
61
+ trigger('showHideChildren', [
62
+ state('void', style({ 'height': '0' })),
63
+ state('*', style({ 'height': '*' })),
64
+ transition('void <=> *', animate(200))
65
+ ])
66
+ ],
67
+ styles: [":host{position:absolute;top:0;right:0;width:300px}:host .selection{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid gray}:host .question{font-weight:700}:host .answer{font-size:10px}:host .collapse-handle{position:absolute;top:10px;right:12px;border:solid #000;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}:host .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}:host .child-selection{margin-left:10px}"]
68
+ })
69
+ ], SelectionsComponent);
70
+ return SelectionsComponent;
71
+ }());
72
+ export { SelectionsComponent };
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29saWpuaXQvY29uZmlndXJhdG9yLyIsInNvdXJjZXMiOlsiYXBwL2NvbXBvbmVudHMvc2VsZWN0aW9ucy9zZWxlY3Rpb25zLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyRSxPQUFPLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRS9FO0lBQUE7UUFFVyxhQUFRLEdBQWdCLEVBQUUsQ0FBQztRQUMzQixhQUFRLEdBQVksS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFBRCx5QkFBQztBQUFELENBQUMsQUFKRCxJQUlDO0FBa0NEO0lBQUE7UUFNVyx3QkFBbUIsR0FBeUIsRUFBRSxDQUFDO1FBRy9DLG1CQUFjLEdBQTRCLElBQUksWUFBWSxFQUFhLENBQUM7SUE2Qm5GLENBQUM7SUFwQ0csc0JBQVcsMkNBQVU7YUFBckIsVUFBc0IsS0FBa0I7WUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25DLENBQUM7OztPQUFBO0lBT00sMkNBQWEsR0FBcEIsVUFBcUIsa0JBQXNDLEVBQUUsVUFBc0I7UUFDL0UsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzVCLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQ3RDLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztJQUMvRCxDQUFDO0lBRU0sNkNBQWUsR0FBdEIsVUFBdUIsU0FBb0IsRUFBRSxVQUFzQjtRQUMvRCxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUIsVUFBVSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLGdEQUFrQixHQUExQixVQUEyQixLQUFrQjtRQUE3QyxpQkFjQztRQWJHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksa0JBQXNDLENBQUM7UUFDM0MsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUM7WUFDWCxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEVBQUU7Z0JBQzNCLGtCQUFrQixHQUFHLElBQUksa0JBQWtCLEVBQUUsQ0FBQztnQkFDOUMsa0JBQWtCLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDakMsS0FBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ3JEO2lCQUFNLElBQUksQ0FBQyxDQUFDLGlCQUFpQixHQUFHLENBQUMsRUFBRTtnQkFDaEMsSUFBSSxrQkFBa0IsRUFBRTtvQkFDcEIsa0JBQWtCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkM7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQW5DRDtRQURDLEtBQUssRUFBRTt5REFHUDtJQUtEO1FBREMsTUFBTSxFQUFFOytEQUNzRTtJQVR0RSxtQkFBbUI7UUFoQy9CLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLFFBQVEsRUFBRSxvdUNBaUJUO1lBSUQsVUFBVSxFQUFFO2dCQUNSLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtvQkFDeEIsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztvQkFDckMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBQyxRQUFRLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztvQkFDbEMsVUFBVSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3pDLENBQUM7YUFDTDs7U0FDSixDQUFDO09BRVcsbUJBQW1CLENBc0MvQjtJQUFELDBCQUFDO0NBQUEsQUF0Q0QsSUFzQ0M7U0F0Q1ksbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCJAY29saWpuaXQvY29uZmlndXJhdG9yYXBpL2J1aWxkL3NyYy9tb2RlbC9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gXCJAYW5ndWxhci9hbmltYXRpb25zXCI7XHJcblxyXG5jbGFzcyBTZWxlY3Rpb25WaWV3TW9kZWwge1xyXG4gICAgcHVibGljIHNlbGVjdGlvbjogU2VsZWN0aW9uO1xyXG4gICAgcHVibGljIGNoaWxkcmVuOiBTZWxlY3Rpb25bXSA9IFtdO1xyXG4gICAgcHVibGljIGV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwic2VsZWN0aW9uc1wiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWxlY3Rpb25WaWV3TW9kZWwgb2Ygc2VsZWN0aW9uVmlld01vZGVsc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0aW9uXCIgKGNsaWNrKT1cInNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb25WaWV3TW9kZWwuc2VsZWN0aW9uLCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicXVlc3Rpb25cIiBbdGV4dENvbnRlbnRdPVwic2VsZWN0aW9uVmlld01vZGVsLnNlbGVjdGlvbi5jb21tZXJjaWFsUXVlc3Rpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbnN3ZXJcIiBbdGV4dENvbnRlbnRdPVwic2VsZWN0aW9uVmlld01vZGVsLnNlbGVjdGlvbi5hbnN3ZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xsYXBzZS1oYW5kbGVcIiBbY2xhc3MuZXhwYW5kZWRdPVwic2VsZWN0aW9uVmlld01vZGVsLmV4cGFuZGVkXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VsZWN0aW9uVmlld01vZGVsLmNoaWxkcmVuLmxlbmd0aCA+IDBcIiAoY2xpY2spPVwiZXhwYW5kQ2xpY2tlZChzZWxlY3Rpb25WaWV3TW9kZWwsICRldmVudClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3Rpb25WaWV3TW9kZWwuY2hpbGRyZW4ubGVuZ3RoID4gMCAmJiBzZWxlY3Rpb25WaWV3TW9kZWwuZXhwYW5kZWRcIiBAc2hvd0hpZGVDaGlsZHJlbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hpbGQtc2VsZWN0aW9uXCIgKm5nRm9yPVwibGV0IHNlbGVjdGlvbiBvZiBzZWxlY3Rpb25WaWV3TW9kZWwuY2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFNlbGVjdGlvbihzZWxlY3Rpb24sICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInF1ZXN0aW9uXCIgW3RleHRDb250ZW50XT1cInNlbGVjdGlvbi5jb21tZXJjaWFsUXVlc3Rpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFuc3dlclwiIFt0ZXh0Q29udGVudF09XCJzZWxlY3Rpb24uYW5zd2VyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICBgLFxyXG4gICAgc3R5bGVVcmxzOiBbXHJcbiAgICAgICAgJy4vc2VsZWN0aW9ucy5jb21wb25lbnQuc2NzcydcclxuICAgIF0sXHJcbiAgICBhbmltYXRpb25zOiBbXHJcbiAgICAgICAgdHJpZ2dlcignc2hvd0hpZGVDaGlsZHJlbicsIFtcclxuICAgICAgICAgICAgc3RhdGUoJ3ZvaWQnLCBzdHlsZSh7J2hlaWdodCc6ICcwJ30pKSxcclxuICAgICAgICAgICAgc3RhdGUoJyonLCBzdHlsZSh7J2hlaWdodCc6ICcqJ30pKSxcclxuICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA8PT4gKicsIGFuaW1hdGUoMjAwKSlcclxuICAgICAgICBdKVxyXG4gICAgXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbnNDb21wb25lbnQge1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgc2VsZWN0aW9ucyh2YWx1ZTogU2VsZWN0aW9uW10pIHtcclxuICAgICAgICB0aGlzLl9wcmVwYXJlU2VsZWN0aW9ucyh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdGlvblZpZXdNb2RlbHM6IFNlbGVjdGlvblZpZXdNb2RlbFtdID0gW107XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxTZWxlY3Rpb24+KCk7XHJcblxyXG4gICAgcHVibGljIGV4cGFuZENsaWNrZWQoc2VsZWN0aW9uVmlld01vZGVsOiBTZWxlY3Rpb25WaWV3TW9kZWwsIG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgbW91c2VFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBzZWxlY3Rpb25WaWV3TW9kZWwuZXhwYW5kZWQgPSAhc2VsZWN0aW9uVmlld01vZGVsLmV4cGFuZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZWxlY3RTZWxlY3Rpb24oc2VsZWN0aW9uOiBTZWxlY3Rpb24sIG1vdXNlRXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgbW91c2VFdmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNsaWNrLm5leHQoc2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wcmVwYXJlU2VsZWN0aW9ucyh2YWx1ZTogU2VsZWN0aW9uW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvblZpZXdNb2RlbHMubGVuZ3RoID0gMDtcclxuICAgICAgICBsZXQgc2VsZWN0aW9uVmlld01vZGVsOiBTZWxlY3Rpb25WaWV3TW9kZWw7XHJcbiAgICAgICAgdmFsdWUuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgaWYgKHMucHJlc2VudGF0aW9uTGV2ZWwgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblZpZXdNb2RlbCA9IG5ldyBTZWxlY3Rpb25WaWV3TW9kZWwoKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvblZpZXdNb2RlbC5zZWxlY3Rpb24gPSBzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25WaWV3TW9kZWxzLnB1c2goc2VsZWN0aW9uVmlld01vZGVsKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzLnByZXNlbnRhdGlvbkxldmVsID4gMSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblZpZXdNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblZpZXdNb2RlbC5jaGlsZHJlbi5wdXNoKHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,24 @@
1
+ import { __decorate } from "tslib";
2
+ import { NgModule } from "@angular/core";
3
+ import { CommonModule } from "@angular/common";
4
+ import { SelectionsComponent } from "./selections.component";
5
+ var SelectionsModule = /** @class */ (function () {
6
+ function SelectionsModule() {
7
+ }
8
+ SelectionsModule = __decorate([
9
+ NgModule({
10
+ imports: [
11
+ CommonModule
12
+ ],
13
+ declarations: [
14
+ SelectionsComponent
15
+ ],
16
+ exports: [
17
+ SelectionsComponent
18
+ ]
19
+ })
20
+ ], SelectionsModule);
21
+ return SelectionsModule;
22
+ }());
23
+ export { SelectionsModule };
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9ucy5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29saWpuaXQvY29uZmlndXJhdG9yLyIsInNvdXJjZXMiOlsiYXBwL2NvbXBvbmVudHMvc2VsZWN0aW9ucy9zZWxlY3Rpb25zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFhM0Q7SUFBQTtJQUVBLENBQUM7SUFGWSxnQkFBZ0I7UUFYNUIsUUFBUSxDQUFDO1lBQ04sT0FBTyxFQUFFO2dCQUNMLFlBQVk7YUFDZjtZQUNELFlBQVksRUFBRTtnQkFDVixtQkFBbUI7YUFDdEI7WUFDRCxPQUFPLEVBQUU7Z0JBQ0wsbUJBQW1CO2FBQ3RCO1NBQ0osQ0FBQztPQUNXLGdCQUFnQixDQUU1QjtJQUFELHVCQUFDO0NBQUEsQUFGRCxJQUVDO1NBRlksZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHtTZWxlY3Rpb25zQ29tcG9uZW50fSBmcm9tIFwiLi9zZWxlY3Rpb25zLmNvbXBvbmVudFwiO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBDb21tb25Nb2R1bGVcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgICBTZWxlY3Rpb25zQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIFNlbGVjdGlvbnNDb21wb25lbnRcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbnNNb2R1bGUge1xyXG5cclxufVxyXG4iXX0=
@@ -1,2 +1,6 @@
1
1
  export * from './app/builder';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb2xpam5pdC9jb25maWd1cmF0b3IvIiwic291cmNlcyI6WyJwdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hcHAvYnVpbGRlcic7XHJcbiJdfQ==
2
+ export * from './app/components/answers/answers.module';
3
+ export * from './app/components/answers/answers.component';
4
+ export * from './app/components/selections/selections.module';
5
+ export * from './app/components/selections/selections.component';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb2xpam5pdC9jb25maWd1cmF0b3IvIiwic291cmNlcyI6WyJwdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsa0RBQWtELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FwcC9idWlsZGVyJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHAvY29tcG9uZW50cy9hbnN3ZXJzL2Fuc3dlcnMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHAvY29tcG9uZW50cy9hbnN3ZXJzL2Fuc3dlcnMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHAvY29tcG9uZW50cy9zZWxlY3Rpb25zL3NlbGVjdGlvbnMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9hcHAvY29tcG9uZW50cy9zZWxlY3Rpb25zL3NlbGVjdGlvbnMuY29tcG9uZW50JztcclxuIl19
@@ -22,7 +22,8 @@ var ThreedUtils = /** @class */ (function () {
22
22
  fileName = fileName.replace('.unity3d', '');
23
23
  lookupFileName = fileName + (fileName.indexOf('.glb') < 0 ? '.glb' : '');
24
24
  if (this._objectCache.has(lookupFileName)) {
25
- return [2 /*return*/, Promise.resolve(this._objectCache.get(lookupFileName))];
25
+ resolve(this._objectCache.get(lookupFileName));
26
+ return [2 /*return*/];
26
27
  }
27
28
  return [4 /*yield*/, FileUtils.FileExists(lookupFileName, 'https://cdn1.colijn-it.nl/content43/')];
28
29
  case 1:
@@ -275,4 +276,4 @@ var ThreedUtils = /** @class */ (function () {
275
276
  return ThreedUtils;
276
277
  }());
277
278
  export { ThreedUtils };
278
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWVkLnV0aWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvbGlqbml0L2NvbmZpZ3VyYXRvci8iLCJzb3VyY2VzIjpbInV0aWxzL3RocmVlZC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFdkM7SUFBQTtRQUVVLGlCQUFZLEdBQWdDLElBQUksR0FBRyxFQUFFLENBQUM7SUFvTmhFLENBQUM7SUFqTlEsZ0NBQVUsR0FBakI7UUFDRSxJQUFNLElBQUksR0FBcUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQTVCLENBQTRCLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxzQ0FBZ0IsR0FBdkIsVUFBd0IsUUFBZ0I7UUFBeEMsaUJBZ0JDO1FBZkMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFPLE9BQWlCLEVBQUUsTUFBZ0I7Ozs7Ozt3QkFDM0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUN4QyxjQUFjLEdBQVcsUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3JGLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFD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LENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUM7Ozs7d0JBR3RDLHNCQUFPLEVBQUUsRUFBQzs7Ozs7S0FFYjtJQUVILGtCQUFDO0FBQUQsQ0FBQyxBQXRORCxJQXNOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gXCJ0aHJlZVwiO1xuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4vb2JqZWN0LnV0aWxzXCI7XG5pbXBvcnQge0ZpbGVVdGlsc30gZnJvbSBcIi4vZmlsZS51dGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgVGhyZWVkVXRpbHMge1xuXG4gIHByaXZhdGUgX29iamVjdENhY2hlOiBNYXA8c3RyaW5nLCBUSFJFRS5PYmplY3QzRD4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgX3NvdXJjZUNhY2hlXG5cbiAgcHVibGljIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3Qgb2JqczogVEhSRUUuT2JqZWN0M0RbXSA9IEFycmF5LmZyb20odGhpcy5fb2JqZWN0Q2FjaGUudmFsdWVzKCkpO1xuICAgIG9ianMuZm9yRWFjaChvID0+IE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QobykpO1xuICAgIHRoaXMuX29iamVjdENhY2hlLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWQzRFNvdXJjZShmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxUSFJFRS5PYmplY3QzRD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgnLnVuaXR5M2QnLCAnJyk7XG4gICAgICBsZXQgbG9va3VwRmlsZU5hbWU6IHN0cmluZyA9IGZpbGVOYW1lICsgKGZpbGVOYW1lLmluZGV4T2YoJy5nbGInKSA8IDAgPyAnLmdsYicgOiAnJyk7XG4gICAgICBpZiAodGhpcy5fb2JqZWN0Q2FjaGUuaGFzKGxvb2t1cEZpbGVOYW1lKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX29iamVjdENhY2hlLmdldChsb29rdXBGaWxlTmFtZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGF3YWl0IEZpbGVVdGlscy5GaWxlRXhpc3RzKGxvb2t1cEZpbGVOYW1lLCAnaHR0cHM6Ly9jZG4xLmNvbGlqbi1pdC5ubC9jb250ZW50NDMvJykpIHtcbiAgICAgICAgdGhpcy5sb2FkR2xiU291cmNlKGxvb2t1cEZpbGVOYW1lKS50aGVuKChvYmo6IFRIUkVFLk9iamVjdDNEKSA9PiB7XG4gICAgICAgICAgdGhpcy5fb2JqZWN0Q2FjaGUuc2V0KGxvb2t1cEZpbGVOYW1lLCBvYmopO1xuICAgICAgICAgIHJlc29sdmUob2JqKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWplY3QoYEdMQiBzb3VyY2Ugbm90IGZvdW5kISAoJHtsb29rdXBGaWxlTmFtZX0pYCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgcmVhZEZpbGVBc1RleHQoZmlsZTogRmlsZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZpbGVSZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4gcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpO1xuICAgICAgZmlsZVJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgIGZpbGVSZWFkZXIucmVhZEFzVGV4dChmaWxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkSnNvbk1vZGVsKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIGlmICh0aGlzLl9vYmplY3RDYWNoZS5oYXMoZmlsZVBhdGgpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX29iamVjdENhY2hlLmdldChmaWxlUGF0aCkpO1xuICAgIH1cbiAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBhd2FpdCB0aGlzLl9yZWFkSnNvbkZpbGUoZmlsZVBhdGgpO1xuICAgIGNvbnN0IGxvYWRlciA9IG5ldyBUSFJFRS5PYmplY3RMb2FkZXIoKTtcbiAgICBsb2FkZXIuY3Jvc3NPcmlnaW4gPSAnQW5vbnltb3VzJztcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb2JqID0gbG9hZGVyLnBhcnNlKGpzb24pO1xuICAgICAgICB0aGlzLl9vYmplY3RDYWNoZS5zZXQoZmlsZVBhdGgsIG9iaik7XG4gICAgICAgIHJlc29sdmUob2JqKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWRKc29uT2JqZWN0TW9kZWwoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHRoaXMuX29iamVjdENhY2hlLmhhcyhmaWxlUGF0aCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fb2JqZWN0Q2FjaGUuZ2V0KGZpbGVQYXRoKSk7XG4gICAgfVxuICAgIGNvbnN0IGxvYWRlciA9IG5ldyBUSFJFRS5PYmplY3RMb2FkZXIoKTtcbiAgICBsb2FkZXIuc2V0Q3Jvc3NPcmlnaW4oJ0Fub255bW91cycpO1xuICAgIGxvYWRlci5zZXRSZXNvdXJjZVBhdGgoJycpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsb2FkZXIubG9hZChmaWxlUGF0aCxcbiAgICAgICAgKG9iamVjdDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb2JqOiBUSFJFRS5PYmplY3QzRCA9IChvYmplY3QudHlwZSA9PT0gJ1NjZW5lJyAmJiBvYmplY3QuY2hpbGRyZW5bMF0udHlwZSA9PT0gJ09iamVjdDNEJykgPyBvYmplY3QuY2hpbGRyZW5bMF0gOiBvYmplY3Q7XG4gICAgICAgICAgdGhpcy5fb2JqZWN0Q2FjaGUuc2V0KGZpbGVQYXRoLCBvYmopO1xuICAgICAgICAgIHJlc29sdmUob2JqIGFzIFRIUkVFLk9iamVjdDNEKTtcbiAgICAgICAgfSxcbiAgICAgICAgeGhyID0+IG51bGwsXG4gICAgICAgIGVycm9yID0+IHJlamVjdChlcnJvcilcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEdsYk1vZGVsKGZpbGU6IHN0cmluZywgY2xlYW5VcDogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPFRIUkVFLk9iamVjdDNEPiB7XG4gICAgaWYgKHRoaXMuX29iamVjdENhY2hlLmhhcyhmaWxlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9vYmplY3RDYWNoZS5nZXQoZmlsZSkpO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnbG9hZEdMVEYnKSkge1xuICAgICAgY29uc29sZS5lcnJvcignbG9hZEdMVEYgbm90IGRlZmluZWQgaW4gd2luZG93IGdsb2JhbCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgICAgLy8gY29uc3QgbG9hZGVyID0gbmV3IEdMVEZMb2FkZXIoKTtcbiAgICBjb25zdCBvYmo6IFRIUkVFLk9iamVjdDNEID0gYXdhaXQgKHdpbmRvdyBhcyBhbnkpLmxvYWRHTFRGKGZpbGUpO1xuICAgIGlmIChvYmopIHtcbiAgICAgIHRoaXMuX2NsZWFuZWRVcE9iamVjdHMob2JqLCBjbGVhblVwKTtcbiAgICAgIHRoaXMuX29iamVjdENhY2hlLnNldChmaWxlLCBvYmopO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWRHbGJTb3VyY2UoZmlsZTogc3RyaW5nKTogUHJvbWlzZTxUSFJFRS5PYmplY3QzRD4ge1xuICAgIGNvbnN0IG9iaiA9IGF3YWl0IHRoaXMubG9hZEdsYk1vZGVsKGZpbGUsIGZhbHNlKTtcbiAgICBpZiAob2JqKSB7XG4gICAgICBvYmouY2hpbGRyZW4gPSBvYmouY2hpbGRyZW4uZmlsdGVyKGMgPT4gIShjIGluc3RhbmNlb2YgVEhSRUUuQ2FtZXJhKSk7XG4gICAgICBvYmouY2hpbGRyZW4uc29ydCgoYSwgYikgPT4gYVsnbmFtZSddIDwgYlsnbmFtZSddID8gMSA6IC0xKTtcbiAgICAgIG9iai5jaGlsZHJlbi5mb3JFYWNoKChjOiBUSFJFRS5PYmplY3QzRCkgPT4ge1xuICAgICAgICBjLnRyYXZlcnNlKCh0OiBUSFJFRS5PYmplY3QzRCkgPT4ge1xuICAgICAgICAgIHQudmlzaWJsZSA9ICF0Lm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdjXycpO1xuICAgICAgICB9KTtcbiAgICAgICAgYy52aXNpYmxlID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIGlmIChvYmouY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIG9iai5jaGlsZHJlblswXSBpbnN0YW5jZW9mIFRIUkVFLkdyb3VwKSB7IC8vIGZsYXR0ZW4gY2hpbGRyZW5cbiAgICAgICAgY29uc3QgY2hpbGRyZW46IGFueSA9IG9iai5jaGlsZHJlblswXS5jaGlsZHJlbi5zbGljZSgpO1xuICAgICAgICBvYmouY2hpbGRyZW4ubGVuZ3RoID0gMDtcbiAgICAgICAgb2JqLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgdGV4dHVyZUZyb21VcmwodXJsOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIHVybCA9IHRoaXMuX2luY2x1ZGVCYXNlVXJsKHVybCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHRleHR1cmVMb2FkZXIgPSBuZXcgVEhSRUUuVGV4dHVyZUxvYWRlcigpO1xuICAgICAgLy8gdGV4dHVyZUxvYWRlci5zZXRCYXNlVSh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoKTtcbiAgICAgIHRleHR1cmVMb2FkZXIubG9hZCh1cmwsXG4gICAgICAgICh0ZXh0dXJlOiBUSFJFRS5UZXh0dXJlKSA9PiB7XG4gICAgICAgICAgdGV4dHVyZS53cmFwVCA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xuICAgICAgICAgIHRleHR1cmUud3JhcFMgPSBUSFJFRS5SZXBlYXRXcmFwcGluZztcbiAgICAgICAgICB0ZXh0dXJlLnJlcGVhdC5zZXQoMSwgMSk7XG4gICAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodGV4dHVyZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIHJlamVjdFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFuZWRVcE9iamVjdHMob2JqZWN0OiBUSFJFRS5PYmplY3QzRCwgY2xlYW5VcDogYm9vbGVhbiA9IHRydWUpOiBUSFJFRS5PYmplY3QzRCB7XG4gICAgbGV0IG9iajogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgICBvYmplY3QuY2hpbGRyZW4uZm9yRWFjaCgoYzogVEhSRUUuT2JqZWN0M0QpID0+IHtcbiAgICAgIGlmICghKGMgaW5zdGFuY2VvZiBUSFJFRS5DYW1lcmEpKSB7XG4gICAgICAgIGlmIChjbGVhblVwICYmIGMgaW5zdGFuY2VvZiBUSFJFRS5Hcm91cCB8fCAoYy5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgYy5jaGlsZHJlblswXSBpbnN0YW5jZW9mIFRIUkVFLkdyb3VwKSkge1xuICAgICAgICAgIHRoaXMuX2FkZEdyb3VwQ2hpbGRyZW5Ub09iamVjdChjLCBvYmopO1xuICAgICAgICB9IGVsc2UgaWYgKChjbGVhblVwICYmICEoYyBpbnN0YW5jZW9mIFRIUkVFLk1lc2gpKSB8fCAoIShjIGluc3RhbmNlb2YgVEhSRUUuTWVzaCkgJiYgIWMubmFtZSAmJiBjLmNoaWxkcmVuLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgYy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgICAgICAgY2hpbGQudHJhbnNsYXRlWShjLnBvc2l0aW9uLnkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGMudHJhbnNsYXRlWSgtYy5wb3NpdGlvbi55KTtcbiAgICAgICAgICBpZiAob2JqLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG9iai5hZGQoYy5jbG9uZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqID0gYy5jbG9uZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpZiAoYy5wb3NpdGlvbi55ID4gMCB8fCBjLnBvc2l0aW9uLnkgPCAwKSB7XG4gICAgICAgICAgLy8gICBjLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgLy8gICAgIGNoaWxkLnRyYW5zbGF0ZVkoYy5wb3NpdGlvbi55KTtcbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vICAgYy50cmFuc2xhdGVZKC1jLnBvc2l0aW9uLnkpO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICBvYmouYWRkKGMuY2xvbmUoKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBib3VuZGluZ0JveCA9IG5ldyBUSFJFRS5Cb3gzKCkuc2V0RnJvbU9iamVjdChvYmopO1xuICAgIGNvbnN0IGJiQ2VudGVyUGl2b3QgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIGJvdW5kaW5nQm94LmdldENlbnRlcihiYkNlbnRlclBpdm90KTtcbiAgICBjb25zdCBkZWx0YTogVEhSRUUuVmVjdG9yMyA9IG5ldyBUSFJFRS5WZWN0b3IzKCkuYWRkKGJiQ2VudGVyUGl2b3QpLm5lZ2F0ZSgpO1xuICAgIG9iai5jaGlsZHJlbi5mb3JFYWNoKChjYykgPT4ge1xuICAgICAgY2MucG9zaXRpb24uYWRkKGRlbHRhKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWRkR3JvdXBDaGlsZHJlblRvT2JqZWN0KGdyb3VwOiBUSFJFRS5PYmplY3QzRCwgb2JqOiBUSFJFRS5PYmplY3QzRCwgY2xlYW5VcDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBncm91cC5jaGlsZHJlbi5mb3JFYWNoKChnYzogVEhSRUUuT2JqZWN0M0QpID0+IHtcbiAgICAgIGlmIChjbGVhblVwICYmIGdjIGluc3RhbmNlb2YgVEhSRUUuR3JvdXApIHtcbiAgICAgICAgdGhpcy5fYWRkR3JvdXBDaGlsZHJlblRvT2JqZWN0KGdjLCBvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZ2MudHJhbnNsYXRlWCgtZ3JvdXAucG9zaXRpb24ueCk7XG4gICAgICAgIGdjLnRyYW5zbGF0ZVkoZ3JvdXAucG9zaXRpb24ueSk7XG4gICAgICAgIC8vIGdjLnRyYW5zbGF0ZVooLWdyb3VwLnBvc2l0aW9uLnopO1xuICAgICAgICBvYmouYWRkKGdjLmNsb25lKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXRlcmF0ZUNoaWxkcmVuKGNoaWxkcmVuOiBUSFJFRS5PYmplY3QzRFtdLCBjYWxsYmFjazogKGNoaWxkOiBUSFJFRS5NZXNoKSA9PiB7fSk6IHZvaWQge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkOiBUSFJFRS5PYmplY3QzRCA9IGNoaWxkcmVuW2ldO1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgVEhSRUUuTWVzaCkge1xuICAgICAgICBjYWxsYmFjayhjaGlsZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9pdGVyYXRlQ2hpbGRyZW4oY2hpbGQuY2hpbGRyZW4sIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9yZWFkSnNvbkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmlsZVBhdGgpO1xuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgcmVzcG9uc2UuY2xvbmUoKS50ZXh0KCkudGhlbigodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICBlbXB0eSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVtcHR5ID8ge30gOiByZXNwb25zZS5qc29uKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
279
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWVkLnV0aWxzLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGNvbGlqbml0L2NvbmZpZ3VyYXRvci8iLCJzb3VyY2VzIjpbInV0aWxzL3RocmVlZC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFdkM7SUFBQTtRQUVVLGlCQUFZLEdBQWdDLElBQUksR0FBRyxFQUFFLENBQUM7SUFvTmhFLENBQUM7SUFsTlEsZ0NBQVUsR0FBakI7UUFDRSxJQUFNLElBQUksR0FBcUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQTVCLENBQTRCLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSxzQ0FBZ0IsR0FBdkIsVUFBd0IsUUFBZ0I7UUFBeEMsaUJBaUJDO1FBaEJDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBTyxPQUFpQixFQUFFLE1BQWdCOzs7Ozs7d0JBQzNELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDeEMsY0FBYyxHQUFXLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNyRixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FB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QUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUM7Ozs7d0JBR3RDLHNCQUFPLEVBQUUsRUFBQzs7Ozs7S0FFYjtJQUVILGtCQUFDO0FBQUQsQ0FBQyxBQXRORCxJQXNOQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gXCJ0aHJlZVwiO1xuaW1wb3J0IHtPYmplY3RVdGlsc30gZnJvbSBcIi4vb2JqZWN0LnV0aWxzXCI7XG5pbXBvcnQge0ZpbGVVdGlsc30gZnJvbSBcIi4vZmlsZS51dGlsc1wiO1xuXG5leHBvcnQgY2xhc3MgVGhyZWVkVXRpbHMge1xuXG4gIHByaXZhdGUgX29iamVjdENhY2hlOiBNYXA8c3RyaW5nLCBUSFJFRS5PYmplY3QzRD4gPSBuZXcgTWFwKCk7XG5cbiAgcHVibGljIGNsZWFyQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3Qgb2JqczogVEhSRUUuT2JqZWN0M0RbXSA9IEFycmF5LmZyb20odGhpcy5fb2JqZWN0Q2FjaGUudmFsdWVzKCkpO1xuICAgIG9ianMuZm9yRWFjaChvID0+IE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QobykpO1xuICAgIHRoaXMuX29iamVjdENhY2hlLmNsZWFyKCk7XG4gIH1cblxuICBwdWJsaWMgZG93bmxvYWQzRFNvdXJjZShmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxUSFJFRS5PYmplY3QzRD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgnLnVuaXR5M2QnLCAnJyk7XG4gICAgICBsZXQgbG9va3VwRmlsZU5hbWU6IHN0cmluZyA9IGZpbGVOYW1lICsgKGZpbGVOYW1lLmluZGV4T2YoJy5nbGInKSA8IDAgPyAnLmdsYicgOiAnJyk7XG4gICAgICBpZiAodGhpcy5fb2JqZWN0Q2FjaGUuaGFzKGxvb2t1cEZpbGVOYW1lKSkge1xuICAgICAgICByZXNvbHZlKHRoaXMuX29iamVjdENhY2hlLmdldChsb29rdXBGaWxlTmFtZSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoYXdhaXQgRmlsZVV0aWxzLkZpbGVFeGlzdHMobG9va3VwRmlsZU5hbWUsICdodHRwczovL2NkbjEuY29saWpuLWl0Lm5sL2NvbnRlbnQ0My8nKSkge1xuICAgICAgICB0aGlzLmxvYWRHbGJTb3VyY2UobG9va3VwRmlsZU5hbWUpLnRoZW4oKG9iajogVEhSRUUuT2JqZWN0M0QpID0+IHtcbiAgICAgICAgICB0aGlzLl9vYmplY3RDYWNoZS5zZXQobG9va3VwRmlsZU5hbWUsIG9iaik7XG4gICAgICAgICAgcmVzb2x2ZShvYmopO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlamVjdChgR0xCIHNvdXJjZSBub3QgZm91bmQhICgke2xvb2t1cEZpbGVOYW1lfSlgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkRmlsZUFzVGV4dChmaWxlOiBGaWxlKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiByZXNvbHZlKGUudGFyZ2V0LnJlc3VsdCk7XG4gICAgICBmaWxlUmVhZGVyLm9uZXJyb3IgPSBlcnJvciA9PiByZWplY3QoZXJyb3IpO1xuICAgICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWRKc29uTW9kZWwoZmlsZVBhdGg6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgaWYgKHRoaXMuX29iamVjdENhY2hlLmhhcyhmaWxlUGF0aCkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fb2JqZWN0Q2FjaGUuZ2V0KGZpbGVQYXRoKSk7XG4gICAgfVxuICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGF3YWl0IHRoaXMuX3JlYWRKc29uRmlsZShmaWxlUGF0aCk7XG4gICAgY29uc3QgbG9hZGVyID0gbmV3IFRIUkVFLk9iamVjdExvYWRlcigpO1xuICAgIGxvYWRlci5jcm9zc09yaWdpbiA9ICdBbm9ueW1vdXMnO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBvYmogPSBsb2FkZXIucGFyc2UoanNvbik7XG4gICAgICAgIHRoaXMuX29iamVjdENhY2hlLnNldChmaWxlUGF0aCwgb2JqKTtcbiAgICAgICAgcmVzb2x2ZShvYmopO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWplY3QobnVsbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEpzb25PYmplY3RNb2RlbChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBpZiAodGhpcy5fb2JqZWN0Q2FjaGUuaGFzKGZpbGVQYXRoKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9vYmplY3RDYWNoZS5nZXQoZmlsZVBhdGgpKTtcbiAgICB9XG4gICAgY29uc3QgbG9hZGVyID0gbmV3IFRIUkVFLk9iamVjdExvYWRlcigpO1xuICAgIGxvYWRlci5zZXRDcm9zc09yaWdpbignQW5vbnltb3VzJyk7XG4gICAgbG9hZGVyLnNldFJlc291cmNlUGF0aCgnJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxvYWRlci5sb2FkKGZpbGVQYXRoLFxuICAgICAgICAob2JqZWN0OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBvYmo6IFRIUkVFLk9iamVjdDNEID0gKG9iamVjdC50eXBlID09PSAnU2NlbmUnICYmIG9iamVjdC5jaGlsZHJlblswXS50eXBlID09PSAnT2JqZWN0M0QnKSA/IG9iamVjdC5jaGlsZHJlblswXSA6IG9iamVjdDtcbiAgICAgICAgICB0aGlzLl9vYmplY3RDYWNoZS5zZXQoZmlsZVBhdGgsIG9iaik7XG4gICAgICAgICAgcmVzb2x2ZShvYmogYXMgVEhSRUUuT2JqZWN0M0QpO1xuICAgICAgICB9LFxuICAgICAgICB4aHIgPT4gbnVsbCxcbiAgICAgICAgZXJyb3IgPT4gcmVqZWN0KGVycm9yKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkR2xiTW9kZWwoZmlsZTogc3RyaW5nLCBjbGVhblVwOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8VEhSRUUuT2JqZWN0M0Q+IHtcbiAgICBpZiAodGhpcy5fb2JqZWN0Q2FjaGUuaGFzKGZpbGUpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX29iamVjdENhY2hlLmdldChmaWxlKSk7XG4gICAgfVxuICAgIGlmICghd2luZG93Lmhhc093blByb3BlcnR5KCdsb2FkR0xURicpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdsb2FkR0xURiBub3QgZGVmaW5lZCBpbiB3aW5kb3cgZ2xvYmFsJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgICAvLyBjb25zdCBsb2FkZXIgPSBuZXcgR0xURkxvYWRlcigpO1xuICAgIGNvbnN0IG9iajogVEhSRUUuT2JqZWN0M0QgPSBhd2FpdCAod2luZG93IGFzIGFueSkubG9hZEdMVEYoZmlsZSk7XG4gICAgaWYgKG9iaikge1xuICAgICAgdGhpcy5fY2xlYW5lZFVwT2JqZWN0cyhvYmosIGNsZWFuVXApO1xuICAgICAgdGhpcy5fb2JqZWN0Q2FjaGUuc2V0KGZpbGUsIG9iaik7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbG9hZEdsYlNvdXJjZShmaWxlOiBzdHJpbmcpOiBQcm9taXNlPFRIUkVFLk9iamVjdDNEPiB7XG4gICAgY29uc3Qgb2JqID0gYXdhaXQgdGhpcy5sb2FkR2xiTW9kZWwoZmlsZSwgZmFsc2UpO1xuICAgIGlmIChvYmopIHtcbiAgICAgIG9iai5jaGlsZHJlbiA9IG9iai5jaGlsZHJlbi5maWx0ZXIoYyA9PiAhKGMgaW5zdGFuY2VvZiBUSFJFRS5DYW1lcmEpKTtcbiAgICAgIG9iai5jaGlsZHJlbi5zb3J0KChhLCBiKSA9PiBhWyduYW1lJ10gPCBiWyduYW1lJ10gPyAxIDogLTEpO1xuICAgICAgb2JqLmNoaWxkcmVuLmZvckVhY2goKGM6IFRIUkVFLk9iamVjdDNEKSA9PiB7XG4gICAgICAgIGMudHJhdmVyc2UoKHQ6IFRIUkVFLk9iamVjdDNEKSA9PiB7XG4gICAgICAgICAgdC52aXNpYmxlID0gIXQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2NfJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBjLnZpc2libGUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG9iai5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgb2JqLmNoaWxkcmVuWzBdIGluc3RhbmNlb2YgVEhSRUUuR3JvdXApIHsgLy8gZmxhdHRlbiBjaGlsZHJlblxuICAgICAgICBjb25zdCBjaGlsZHJlbjogYW55ID0gb2JqLmNoaWxkcmVuWzBdLmNoaWxkcmVuLnNsaWNlKCk7XG4gICAgICAgIG9iai5jaGlsZHJlbi5sZW5ndGggPSAwO1xuICAgICAgICBvYmouY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB0ZXh0dXJlRnJvbVVybCh1cmw6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gdXJsID0gdGhpcy5faW5jbHVkZUJhc2VVcmwodXJsKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgdGV4dHVyZUxvYWRlciA9IG5ldyBUSFJFRS5UZXh0dXJlTG9hZGVyKCk7XG4gICAgICAvLyB0ZXh0dXJlTG9hZGVyLnNldEJhc2VVKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5hc3NldFBhdGgpO1xuICAgICAgdGV4dHVyZUxvYWRlci5sb2FkKHVybCxcbiAgICAgICAgKHRleHR1cmU6IFRIUkVFLlRleHR1cmUpID0+IHtcbiAgICAgICAgICB0ZXh0dXJlLndyYXBUID0gVEhSRUUuUmVwZWF0V3JhcHBpbmc7XG4gICAgICAgICAgdGV4dHVyZS53cmFwUyA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xuICAgICAgICAgIHRleHR1cmUucmVwZWF0LnNldCgxLCAxKTtcbiAgICAgICAgICB0ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0ZXh0dXJlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgcmVqZWN0XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW5lZFVwT2JqZWN0cyhvYmplY3Q6IFRIUkVFLk9iamVjdDNELCBjbGVhblVwOiBib29sZWFuID0gdHJ1ZSk6IFRIUkVFLk9iamVjdDNEIHtcbiAgICBsZXQgb2JqOiBUSFJFRS5PYmplY3QzRCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICAgIG9iamVjdC5jaGlsZHJlbi5mb3JFYWNoKChjOiBUSFJFRS5PYmplY3QzRCkgPT4ge1xuICAgICAgaWYgKCEoYyBpbnN0YW5jZW9mIFRIUkVFLkNhbWVyYSkpIHtcbiAgICAgICAgaWYgKGNsZWFuVXAgJiYgYyBpbnN0YW5jZW9mIFRIUkVFLkdyb3VwIHx8IChjLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBjLmNoaWxkcmVuWzBdIGluc3RhbmNlb2YgVEhSRUUuR3JvdXApKSB7XG4gICAgICAgICAgdGhpcy5fYWRkR3JvdXBDaGlsZHJlblRvT2JqZWN0KGMsIG9iaik7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNsZWFuVXAgJiYgIShjIGluc3RhbmNlb2YgVEhSRUUuTWVzaCkpIHx8ICghKGMgaW5zdGFuY2VvZiBUSFJFRS5NZXNoKSAmJiAhYy5uYW1lICYmIGMuY2hpbGRyZW4ubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICBjLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICBjaGlsZC50cmFuc2xhdGVZKGMucG9zaXRpb24ueSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYy50cmFuc2xhdGVZKC1jLnBvc2l0aW9uLnkpO1xuICAgICAgICAgIGlmIChvYmouY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb2JqLmFkZChjLmNsb25lKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmogPSBjLmNsb25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGlmIChjLnBvc2l0aW9uLnkgPiAwIHx8IGMucG9zaXRpb24ueSA8IDApIHtcbiAgICAgICAgICAvLyAgIGMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAvLyAgICAgY2hpbGQudHJhbnNsYXRlWShjLnBvc2l0aW9uLnkpO1xuICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgLy8gICBjLnRyYW5zbGF0ZVkoLWMucG9zaXRpb24ueSk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIG9iai5hZGQoYy5jbG9uZSgpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IFRIUkVFLkJveDMoKS5zZXRGcm9tT2JqZWN0KG9iaik7XG4gICAgY29uc3QgYmJDZW50ZXJQaXZvdCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgYm91bmRpbmdCb3guZ2V0Q2VudGVyKGJiQ2VudGVyUGl2b3QpO1xuICAgIGNvbnN0IGRlbHRhOiBUSFJFRS5WZWN0b3IzID0gbmV3IFRIUkVFLlZlY3RvcjMoKS5hZGQoYmJDZW50ZXJQaXZvdCkubmVnYXRlKCk7XG4gICAgb2JqLmNoaWxkcmVuLmZvckVhY2goKGNjKSA9PiB7XG4gICAgICBjYy5wb3NpdGlvbi5hZGQoZGVsdGEpO1xuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwcml2YXRlIF9hZGRHcm91cENoaWxkcmVuVG9PYmplY3QoZ3JvdXA6IFRIUkVFLk9iamVjdDNELCBvYmo6IFRIUkVFLk9iamVjdDNELCBjbGVhblVwOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIGdyb3VwLmNoaWxkcmVuLmZvckVhY2goKGdjOiBUSFJFRS5PYmplY3QzRCkgPT4ge1xuICAgICAgaWYgKGNsZWFuVXAgJiYgZ2MgaW5zdGFuY2VvZiBUSFJFRS5Hcm91cCkge1xuICAgICAgICB0aGlzLl9hZGRHcm91cENoaWxkcmVuVG9PYmplY3QoZ2MsIG9iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBnYy50cmFuc2xhdGVYKC1ncm91cC5wb3NpdGlvbi54KTtcbiAgICAgICAgZ2MudHJhbnNsYXRlWShncm91cC5wb3NpdGlvbi55KTtcbiAgICAgICAgLy8gZ2MudHJhbnNsYXRlWigtZ3JvdXAucG9zaXRpb24ueik7XG4gICAgICAgIG9iai5hZGQoZ2MuY2xvbmUoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9pdGVyYXRlQ2hpbGRyZW4oY2hpbGRyZW46IFRIUkVFLk9iamVjdDNEW10sIGNhbGxiYWNrOiAoY2hpbGQ6IFRIUkVFLk1lc2gpID0+IHt9KTogdm9pZCB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2hpbGQ6IFRIUkVFLk9iamVjdDNEID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBUSFJFRS5NZXNoKSB7XG4gICAgICAgIGNhbGxiYWNrKGNoaWxkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2l0ZXJhdGVDaGlsZHJlbihjaGlsZC5jaGlsZHJlbiwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRKc29uRmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChmaWxlUGF0aCk7XG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBlbXB0eSA9IGZhbHNlO1xuICAgICAgICBhd2FpdCByZXNwb25zZS5jbG9uZSgpLnRleHQoKS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIGVtcHR5ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZW1wdHkgPyB7fSA6IHJlc3BvbnNlLmpzb24oKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { __awaiter } from 'tslib';
1
+ import { __awaiter, __decorate } from 'tslib';
2
2
  import { Mesh, ObjectLoader, Camera, Group, TextureLoader, RepeatWrapping, Object3D, Box3, Vector3, Vector2, Euler, Quaternion, Color, Texture, sRGBEncoding, MeshPhongMaterial, MeshStandardMaterial } from 'three';
3
3
  import { Configurator } from '@colijnit/configuratorapi/build/src/configurator';
4
4
  import { DecoNode } from '@colijnit/configuratorapi/build/src/model/deco-node';
@@ -10,6 +10,9 @@ import { DecoNodeKind } from '@colijnit/configuratorapi/build/src/enum/deco-node
10
10
  import * as JSZip from 'jszip';
11
11
  import { Article } from '@colijnit/configuratorapi/build/src/model/article';
12
12
  import { BehaviorSubject } from 'rxjs';
13
+ import { EventEmitter, Input, Output, Component, NgModule } from '@angular/core';
14
+ import { CommonModule } from '@angular/common';
15
+ import { trigger, state, style, transition, animate } from '@angular/animations';
13
16
 
14
17
  class ObjectUtils {
15
18
  static DisposeMaterial(material) {
@@ -210,7 +213,8 @@ class ThreedUtils {
210
213
  fileName = fileName.replace('.unity3d', '');
211
214
  let lookupFileName = fileName + (fileName.indexOf('.glb') < 0 ? '.glb' : '');
212
215
  if (this._objectCache.has(lookupFileName)) {
213
- return Promise.resolve(this._objectCache.get(lookupFileName));
216
+ resolve(this._objectCache.get(lookupFileName));
217
+ return;
214
218
  }
215
219
  if (yield FileUtils.FileExists(lookupFileName, 'https://cdn1.colijn-it.nl/content43/')) {
216
220
  this.loadGlbSource(lookupFileName).then((obj) => {
@@ -1057,12 +1061,16 @@ class VariationHelper {
1057
1061
  class Builder {
1058
1062
  constructor(scene, options) {
1059
1063
  this.selectionsReceived = new BehaviorSubject([]);
1064
+ this.answersReceived = new BehaviorSubject([]);
1065
+ this.questionReceived = new BehaviorSubject(undefined);
1060
1066
  this._selections = [];
1061
1067
  this._decos = [];
1062
1068
  this._placedAdjustables = [];
1063
1069
  this._placedAddables = [];
1064
1070
  this._adjustables = [];
1065
1071
  this._addables = [];
1072
+ this._articleCache = new Map();
1073
+ this._subs = [];
1066
1074
  if (!scene) {
1067
1075
  throw 'No scene object provided!';
1068
1076
  }
@@ -1074,6 +1082,7 @@ class Builder {
1074
1082
  this._boFactory = new BusinessObjectFactory();
1075
1083
  this._threedUtils = new ThreedUtils();
1076
1084
  this._variationHelper = new VariationHelper();
1085
+ this._subs.push(this._configuratorApi.selectionsReceived.subscribe(selections => this.selectionsReceived.next(selections)), this._configuratorApi.answersReceived.subscribe(answers => this.answersReceived.next(answers)), this._configuratorApi.questionReceived.subscribe(question => this.questionReceived.next(question)));
1077
1086
  }
1078
1087
  buildModel(instanceId, sku, goodId) {
1079
1088
  return __awaiter(this, void 0, void 0, function* () {
@@ -1081,39 +1090,18 @@ class Builder {
1081
1090
  return;
1082
1091
  }
1083
1092
  try {
1084
- if (!goodId) {
1085
- goodId = yield this._getGoodIdFromSku(sku)
1086
- .catch((error) => {
1087
- throw `Article with sku ${sku} not found!`;
1088
- });
1089
- }
1090
- const article = yield this._getArticle(goodId);
1091
- if (article && article.assetUrl) {
1092
- this._source = yield this._threedUtils.download3DSource(article.assetUrl)
1093
- .catch((error) => {
1094
- throw error;
1095
- });
1096
- if (this._source) {
1097
- if (article.contentDeliveryUrl) {
1098
- this._variationHelper.assetPath =
1099
- article.contentDeliveryUrl +
1100
- (article.contentDeliveryUrl.endsWith('/') ? '' : '/') +
1101
- (article.distSchema ? article.distSchema : 'UP_DBA');
1102
- }
1103
- yield this._configuratorApi.setInstanceToConfigure(instanceId);
1104
- const promises = [];
1105
- promises.push(this._getSelections());
1106
- promises.push(this._getDecos());
1107
- yield Promise.all(promises);
1108
- this._linkSelectionsAndDecos();
1109
- return this._build(instanceId);
1110
- }
1111
- else {
1112
- throw 'GLB source not found!';
1113
- }
1093
+ yield this._prepareConfiguration(sku, goodId);
1094
+ if (this._source) {
1095
+ yield this._configuratorApi.setInstanceToConfigure(instanceId);
1096
+ const promises = [];
1097
+ promises.push(this._getSelections(instanceId));
1098
+ promises.push(this._getDecos());
1099
+ yield Promise.all(promises);
1100
+ this._linkSelectionsAndDecos();
1101
+ return this._build(instanceId);
1114
1102
  }
1115
1103
  else {
1116
- return null;
1104
+ throw 'GLB source not found!';
1117
1105
  }
1118
1106
  }
1119
1107
  catch (e) {
@@ -1128,6 +1116,34 @@ class Builder {
1128
1116
  this._threedUtils.clearCache();
1129
1117
  this._variationHelper.clearCache();
1130
1118
  }
1119
+ selectSelection(selection) {
1120
+ this._configuratorApi.selectSelection(selection, false);
1121
+ }
1122
+ getQuestionAndAnswers() {
1123
+ return __awaiter(this, void 0, void 0, function* () {
1124
+ return this._configuratorApi.getQuestionAndAnswers(false);
1125
+ });
1126
+ }
1127
+ selectAnswer(answer) {
1128
+ this._configuratorApi.selectAnswer(answer, false);
1129
+ }
1130
+ _prepareConfiguration(sku, goodId) {
1131
+ return __awaiter(this, void 0, void 0, function* () {
1132
+ const article = yield this._getArticle(sku, goodId);
1133
+ if (article && article.assetUrl) {
1134
+ this._source = yield this._threedUtils.download3DSource(article.assetUrl)
1135
+ .catch((error) => {
1136
+ throw error;
1137
+ });
1138
+ if (article.contentDeliveryUrl) {
1139
+ this._variationHelper.assetPath =
1140
+ article.contentDeliveryUrl +
1141
+ (article.contentDeliveryUrl.endsWith('/') ? '' : '/') +
1142
+ (article.distSchema ? article.distSchema : 'UP_DBA');
1143
+ }
1144
+ }
1145
+ });
1146
+ }
1131
1147
  _build(instanceId) {
1132
1148
  return __awaiter(this, void 0, void 0, function* () {
1133
1149
  this._reset();
@@ -1344,27 +1360,39 @@ class Builder {
1344
1360
  }
1345
1361
  });
1346
1362
  }
1347
- _getArticle(id) {
1363
+ _getArticle(sku, goodId) {
1348
1364
  return __awaiter(this, void 0, void 0, function* () {
1349
- const articleResponse = yield this._configuratorApi.getArticleQuickSel(id, false);
1365
+ if (this._articleCache.has(sku)) {
1366
+ return this._articleCache.get(sku);
1367
+ }
1368
+ if (!goodId) {
1369
+ goodId = yield this._getGoodIdFromSku(sku)
1370
+ .catch((error) => {
1371
+ throw `Article with sku ${sku} not found!`;
1372
+ });
1373
+ }
1374
+ let article;
1375
+ const articleResponse = yield this._configuratorApi.getArticleQuickSel(goodId, false);
1350
1376
  if (articleResponse.validationResult.success && articleResponse.resultObject) {
1351
1377
  if (articleResponse.resultObject.hasOwnProperty('oArticle')) {
1352
1378
  const obj = Array.isArray(articleResponse.resultObject['oArticle']) ? articleResponse.resultObject['oArticle'][0] : articleResponse.resultObject['oArticle'];
1353
- return this._boFactory.makeWithRawBackendData(Article, obj);
1379
+ article = this._boFactory.makeWithRawBackendData(Article, obj);
1354
1380
  }
1355
1381
  else {
1356
- return this._boFactory.makeWithRawBackendData(Article, articleResponse.resultObject);
1382
+ article = this._boFactory.makeWithRawBackendData(Article, articleResponse.resultObject);
1357
1383
  }
1358
1384
  }
1385
+ this._articleCache.set(sku, article);
1386
+ return article;
1359
1387
  });
1360
1388
  }
1361
- _getSelections() {
1389
+ _getSelections(instanceId) {
1362
1390
  return __awaiter(this, void 0, void 0, function* () {
1363
1391
  this._selections.length = 0;
1364
1392
  const selectionResponse = yield this._configuratorApi.getSelections(false);
1365
1393
  if (selectionResponse.resultObjects && selectionResponse.resultObjects.length > 0) {
1366
1394
  this._selections = this._boFactory.makeBOArrayFromRawBackendDataArray(Selection, selectionResponse.resultObjects);
1367
- this.selectionsReceived.next(this._selections);
1395
+ this._selections.forEach(s => s.instanceId = instanceId);
1368
1396
  }
1369
1397
  else {
1370
1398
  throw 'No selections found!';
@@ -1438,9 +1466,146 @@ class Builder {
1438
1466
  }
1439
1467
  }
1440
1468
 
1469
+ let AnswersComponent = class AnswersComponent {
1470
+ constructor() {
1471
+ this.answers = [];
1472
+ this.answerClick = new EventEmitter();
1473
+ }
1474
+ };
1475
+ __decorate([
1476
+ Input()
1477
+ ], AnswersComponent.prototype, "answers", void 0);
1478
+ __decorate([
1479
+ Output()
1480
+ ], AnswersComponent.prototype, "answerClick", void 0);
1481
+ AnswersComponent = __decorate([
1482
+ Component({
1483
+ selector: "answers",
1484
+ template: `
1485
+ <ng-container *ngFor="let answer of answers">
1486
+ <div class="answers" (click)="answerClick.emit(answer)">
1487
+ <div class="answer" [textContent]="answer.commercialAnswer"></div>
1488
+ </div>
1489
+ </ng-container>
1490
+ `,
1491
+ styles: [":host{position:absolute;top:0;right:0;width:400px;height:100%;background:#fff}:host .answers{cursor:pointer}"]
1492
+ })
1493
+ ], AnswersComponent);
1494
+
1495
+ let AnswersModule = class AnswersModule {
1496
+ };
1497
+ AnswersModule = __decorate([
1498
+ NgModule({
1499
+ imports: [
1500
+ CommonModule
1501
+ ],
1502
+ declarations: [
1503
+ AnswersComponent
1504
+ ],
1505
+ exports: [
1506
+ AnswersComponent
1507
+ ]
1508
+ })
1509
+ ], AnswersModule);
1510
+
1511
+ class SelectionViewModel {
1512
+ constructor() {
1513
+ this.children = [];
1514
+ this.expanded = false;
1515
+ }
1516
+ }
1517
+ let SelectionsComponent = class SelectionsComponent {
1518
+ constructor() {
1519
+ this.selectionViewModels = [];
1520
+ this.selectionClick = new EventEmitter();
1521
+ }
1522
+ set selections(value) {
1523
+ this._prepareSelections(value);
1524
+ }
1525
+ expandClicked(selectionViewModel, mouseEvent) {
1526
+ mouseEvent.preventDefault();
1527
+ mouseEvent.stopImmediatePropagation();
1528
+ selectionViewModel.expanded = !selectionViewModel.expanded;
1529
+ }
1530
+ selectSelection(selection, mouseEvent) {
1531
+ mouseEvent.preventDefault();
1532
+ mouseEvent.stopImmediatePropagation();
1533
+ this.selectionClick.next(selection);
1534
+ }
1535
+ _prepareSelections(value) {
1536
+ this.selectionViewModels.length = 0;
1537
+ let selectionViewModel;
1538
+ value.forEach(s => {
1539
+ if (s.presentationLevel === 1) {
1540
+ selectionViewModel = new SelectionViewModel();
1541
+ selectionViewModel.selection = s;
1542
+ this.selectionViewModels.push(selectionViewModel);
1543
+ }
1544
+ else if (s.presentationLevel > 1) {
1545
+ if (selectionViewModel) {
1546
+ selectionViewModel.children.push(s);
1547
+ }
1548
+ }
1549
+ });
1550
+ }
1551
+ };
1552
+ __decorate([
1553
+ Input()
1554
+ ], SelectionsComponent.prototype, "selections", null);
1555
+ __decorate([
1556
+ Output()
1557
+ ], SelectionsComponent.prototype, "selectionClick", void 0);
1558
+ SelectionsComponent = __decorate([
1559
+ Component({
1560
+ selector: "selections",
1561
+ template: `
1562
+ <ng-container *ngFor="let selectionViewModel of selectionViewModels">
1563
+ <div class="selection" (click)="selectSelection(selectionViewModel.selection, $event)">
1564
+ <div class="question" [textContent]="selectionViewModel.selection.commercialQuestion"></div>
1565
+ <div class="answer" [textContent]="selectionViewModel.selection.answer"></div>
1566
+ <div class="collapse-handle" [class.expanded]="selectionViewModel.expanded"
1567
+ *ngIf="selectionViewModel.children.length > 0" (click)="expandClicked(selectionViewModel, $event)"></div>
1568
+ <div *ngIf="selectionViewModel.children.length > 0 && selectionViewModel.expanded" @showHideChildren>
1569
+ <div class="child-selection" *ngFor="let selection of selectionViewModel.children"
1570
+ (click)="selectSelection(selection, $event)"
1571
+ >
1572
+ <div class="question" [textContent]="selection.commercialQuestion"></div>
1573
+ <div class="answer" [textContent]="selection.answer"></div>
1574
+ </div>
1575
+ </div>
1576
+ </div>
1577
+ </ng-container>
1578
+ `,
1579
+ animations: [
1580
+ trigger('showHideChildren', [
1581
+ state('void', style({ 'height': '0' })),
1582
+ state('*', style({ 'height': '*' })),
1583
+ transition('void <=> *', animate(200))
1584
+ ])
1585
+ ],
1586
+ styles: [":host{position:absolute;top:0;right:0;width:300px}:host .selection{position:relative;overflow:hidden;cursor:pointer;font-size:12px;border:1px solid gray}:host .question{font-weight:700}:host .answer{font-size:10px}:host .collapse-handle{position:absolute;top:10px;right:12px;border:solid #000;border-width:0 3px 3px 0;display:inline-block;padding:3px;transform:rotate(45deg);-webkit-transform:rotate(45deg)}:host .collapse-handle.expanded{transform:rotate(-135deg);-webkit-transform:rotate(-135deg)}:host .child-selection{margin-left:10px}"]
1587
+ })
1588
+ ], SelectionsComponent);
1589
+
1590
+ let SelectionsModule = class SelectionsModule {
1591
+ };
1592
+ SelectionsModule = __decorate([
1593
+ NgModule({
1594
+ imports: [
1595
+ CommonModule
1596
+ ],
1597
+ declarations: [
1598
+ SelectionsComponent
1599
+ ],
1600
+ exports: [
1601
+ SelectionsComponent
1602
+ ]
1603
+ })
1604
+ ], SelectionsModule);
1605
+
1441
1606
  /**
1442
1607
  * Generated bundle index. Do not edit.
1443
1608
  */
1444
1609
 
1445
- export { Builder };
1610
+ export { AnswersComponent, AnswersModule, Builder, SelectionsComponent, SelectionsModule };
1446
1611
  //# sourceMappingURL=colijnit-configurator.js.map