Socket
Socket
Sign inDemoInstall

@limble/limble-tree

Package Overview
Dependencies
Maintainers
2
Versions
51
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@limble/limble-tree - npm Package Compare versions

Comparing version 0.3.1 to 0.4.0

esm2015/lib/limble-tree-placeholder/limble-tree-placeholder.component.js

4

bundles/limble-limble-tree.umd.min.js

@@ -1,2 +0,2 @@

!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs"),require("@angular/common")):"function"==typeof define&&define.amd?define("@limble/limble-tree",["exports","@angular/core","rxjs","@angular/common"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).limble=e.limble||{},e.limble["limble-tree"]={}),e.ng.core,e.rxjs,e.ng.common)}(this,(function(e,t,r,n){"use strict";
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@angular/core"),require("rxjs"),require("rxjs/operators"),require("@angular/common")):"function"==typeof define&&define.amd?define("@limble/limble-tree",["exports","@angular/core","rxjs","rxjs/operators","@angular/common"],t):t(((e="undefined"!=typeof globalThis?globalThis:e||self).limble=e.limble||{},e.limble["limble-tree"]={}),e.ng.core,e.rxjs,e.rxjs.operators,e.ng.common)}(this,(function(e,t,r,o,n){"use strict";
/*! *****************************************************************************

@@ -15,3 +15,3 @@ Copyright (c) Microsoft Corporation.

PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */Object.create;function o(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function i(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,o,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(n=i.next()).done;)a.push(n.value)}catch(e){o={error:e}}finally{try{n&&!n.done&&(r=i.return)&&r.call(i)}finally{if(o)throw o.error}}return a}function a(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(i(arguments[t]));return e}Object.create;var s=function(){function e(e){this.factoryResolver=e,this.factoryResolver=e}return e.prototype.appendComponent=function(e,t,r){void 0===r&&(r=null);var n=this.factoryResolver.resolveComponentFactory(e),o=t.createComponent(n);if(null!==r){var i=t.indexOf(o.hostView);t.detach(i),t.insert(o.hostView,r)}return o},e}();s.decorators=[{type:t.Injectable}],s.ctorParameters=function(){return[{type:t.ComponentFactoryResolver}]};var d=function(){function e(e){this.dropZoneService=e,this.active=!1}return e.prototype.dragenterHandler=function(){!0!==this.active&&void 0!==this.dropZoneInfo&&this.dropZoneService.swapActiveDropZone(this.dropZoneInfo)},e}();function c(e,t){var r,n;if(e.length!==t.length)return!1;try{for(var a=o(e.entries()),s=a.next();!s.done;s=a.next()){var d=i(s.value,2),l=d[0],p=d[1],h=t[l];if(p instanceof Array&&h instanceof Array){if(!c(p,h))return!1}else if(p!==h)return!1}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}return!0}function l(e,t){return void 0!==e&&(!0===e.allowNesting||"function"==typeof e.allowNesting&&void 0!==t&&!0===e.allowNesting(t))}d.decorators=[{type:t.Component,args:[{selector:"drop-zone",template:'<div class="dropZoneContainer" (dragenter)="dragenterHandler()">\r\n <div [ngClass]="{ active: active, related: !active }"></div>\r\n</div>\r\n',styles:[".active{background:#f0f9ff;border:2px dashed #bed2db;border-radius:5px;height:100px}.active,.related{box-sizing:border-box;margin:10px 0;width:calc(100% - 20px)}.related{background:#fff6f0;border:1px dashed #dbccbe;border-radius:5px;height:20px;opacity:.8}.dropZoneContainer{position:relative}"]}]}],d.ctorParameters=function(){return[{type:h}]},d.propDecorators={active:[{type:t.Input}],dropZoneInfo:[{type:t.Input}]};var p=function(){function e(){}return e.prototype.set=function(e){this._tempData=e},e.prototype.get=function(){return this._tempData},e.prototype.delete=function(){this._tempData=void 0},e}();p.decorators=[{type:t.Injectable}];var h=function(){function e(e,t){this.componentCreatorService=e,this.tempService=t,this.activeDropZoneInfo=null,this.secondaryDropZones=[],this.dropZones=[]}return e.prototype.init=function(e,t){this.treeData=e,this.treeOptions=t},e.prototype.showSingleDropZone=function(e,t){void 0===t&&(t=!0),!0===t&&this.removeActiveAndSecondaryZones();var r=this.componentCreatorService.appendComponent(d,e.container);r.instance.active=t,r.instance.dropZoneInfo=e,!0===t?this.activeDropZoneInfo=e:this.secondaryDropZones.push(e)},e.prototype.removeActiveAndSecondaryZones=function(){var e,t,r;null===(r=this.activeDropZoneInfo)||void 0===r||r.container.clear(),this.activeDropZoneInfo=null;try{for(var n=o(this.secondaryDropZones),i=n.next();!i.done;i=n.next()){i.value.container.clear()}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}this.secondaryDropZones=[]},e.prototype.getActiveDropZoneInfo=function(){return this.activeDropZoneInfo},e.prototype.getDropZones=function(){return this.dropZones},e.prototype.getSecondaryDropZones=function(){return this.secondaryDropZones},e.prototype.addDropZone=function(e){void 0===this.dropZones.find((function(t){return t.coordinates===e.coordinates}))&&this.dropZones.push(e)},e.prototype.clearDropZones=function(){this.removeActiveAndSecondaryZones(),this.dropZones=[]},e.prototype.isLastDropZoneInBranch=function(e){return this.getCoordinatesGroup(e).length-1<e[e.length-1]},e.prototype.isOnRoot=function(e){return 1===e.length},e.prototype.showDropZoneFamily=function(e,t,r){var n,o;if(void 0===t&&(t=!0),void 0===r&&(r=!1),this.showSingleDropZone(e,t),!this.isOnRoot(e.coordinates)&&this.isLastDropZoneInBranch(e.coordinates)&&"below"!==r){var i=a(e.coordinates);i.pop();var s=this.getNextSibling(i);if(null===s)throw new Error("Could not get secondary drop zone coordinates");void 0!==(f=this.getDropZones().find((function(e){return c(e.coordinates,s)})))&&this.showDropZoneFamily(f,!1,"above")}if("above"!==r){if(0===e.coordinates[e.coordinates.length-1])return;var d=a(e.coordinates);if(d[d.length-1]--,this.coordinatesHasChildren(d)){var p=a(d);p.push(0);for(var h=p,v=this.getNextSibling(h);null!==v;)h=v,v=this.getNextSibling(h);void 0!==(f=this.getDropZones().find((function(e){return c(e.coordinates,h)})))&&this.showDropZoneFamily(f,!1,"below")}else if(!c(null!==(o=null===(n=this.tempService.get())||void 0===n?void 0:n.getCoordinates())&&void 0!==o?o:[],d)){var u=this.getCoordinatesGroup(d)[d[d.length-1]];if(l(this.treeOptions,u)){var f,g=a(d);g.push(0),void 0!==(f=this.getDropZones().find((function(e){return c(e.coordinates,g)})))&&this.showDropZoneFamily(f,!1,"below")}}}},e.prototype.coordinatesHasChildren=function(e){var t=this.getCoordinatesChildren(e);return void 0!==t&&t.length>0},e.prototype.swapActiveDropZone=function(e){if(null===this.getActiveDropZoneInfo())throw new Error("could not get active drop zone");if(-1===this.getSecondaryDropZones().findIndex((function(t){return t.coordinates===e.coordinates})))throw new Error("failed to swap active drop zone");this.showDropZoneFamily(e)},e.prototype.getNextSibling=function(e){var t=a(e),r=this.getCoordinatesGroup(t),n=t[t.length-1]++;return r.length<=n?null:t},e.prototype.getCoordinatesGroup=function(e){var t,r;if(void 0===this.treeData)throw new Error("treeData is not defined");var n=this.treeData,a=!0;try{for(var s=o(e.entries()),d=s.next();!d.done;d=s.next()){var c=i(d.value,2),l=c[0],p=c[1];if(l===e.length-1)break;var h=n[p].nodes;if(void 0===h){if(!0!==a)throw new Error("bad coordinates");n[p].nodes=[],h=n[p].nodes,a=!1}n=h}}catch(e){t={error:e}}finally{try{d&&!d.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}return n},e.prototype.getCoordinatesChildren=function(e){var t,r;if(void 0===this.treeData)throw new Error("treeData is not defined");var n=this.treeData;try{for(var i=o(e),a=i.next();!a.done;a=i.next()){var s=n[a.value].nodes;if(void 0===s)return;n=s}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return n},e}();h.decorators=[{type:t.Injectable}],h.ctorParameters=function(){return[{type:s},{type:p}]};var v=function(){function e(e){this.data=e,this.children=[],this.parent=null}return e.prototype.isRoot=function(){return null===this.parent},e.prototype.getParent=function(){return this.parent},e.prototype.setParent=function(e){this.parent=e},e.prototype.getCoordinates=function(){for(var e=[],t=this;null!==t.parent;){var r=t.getIndex();if(void 0===r)throw new Error("Unreachable error");e.unshift(r),t=t.parent}return e},e.prototype.getChild=function(e){return this.children[e]},e.prototype.getChildren=function(){return this.children},e.prototype.getIndex=function(){var e,t,r=this;return null!==(t=null===(e=this.parent)||void 0===e?void 0:e.children.findIndex((function(e){return e===r})))&&void 0!==t?t:void 0},e.prototype.getDescendant=function(e){var t,r,n=this;try{for(var i=o(e),a=i.next();!a.done;a=i.next()){var s=a.value;if(void 0===(n=n.children[s]))return}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return n},e.prototype.findDescendant=function(e){var t,r;if(!0===e(this.data))return this;if(this.children.length>0)try{for(var n=o(this.children),i=n.next();!i.done;i=n.next()){var a=i.value.findDescendant(e);if(void 0!==a)return a}}catch(e){t={error:e}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}},e.prototype.appendChild=function(e){return null!==e.getParent()&&e.remove(),e.setParent(this),this.children.push(e),e},e.prototype.insertChild=function(e,t){var r=this.children.indexOf(e);return-1===r?(null!==e.getParent()&&e.remove(),e.setParent(this),this.children.splice(t,0,e)):t>r?(this.children.splice(t,0,e),this.removeChild(r),e.setParent(this)):(e.remove(),this.children.splice(t,0,e),e.setParent(this)),e},e.prototype.removeChild=function(e){var t=this.children.splice(e,1)[0];return t.setParent(null),t},e.prototype.remove=function(){var e=this.getIndex();if(null===this.parent||void 0===e)throw new Error("can't remove root");return this.parent.removeChild(e)},e}(),u=function(){function e(e,t){var n;this.treeService=e,this.changeDetectorRef=t,this.dropZoneInside$=new r.BehaviorSubject(this.dropZoneInside),this.indent=null===(n=this.treeService.treeOptions)||void 0===n?void 0:n.indent}return e.prototype.ngAfterViewInit=function(){this.dropZoneInside$.next(this.dropZoneInside),this.dropZoneInside$.complete(),this.reRender(),this.changeDetectorRef.detectChanges()},e.prototype.reRender=function(){if(void 0===this.host||void 0===this.branch)throw new Error("Failed to render limble tree branch");this.treeService.renderBranch(this.host,this.branch)},e}();u.decorators=[{type:t.Component,args:[{selector:"limble-tree-branch",template:'<div [style.marginLeft.px]="indent">\r\n <ng-template #dropZoneInside></ng-template>\r\n <span [hidden]="branch?.data.collapsed" class="limble-child-nodes">\r\n <ng-template #host></ng-template>\r\n </span>\r\n</div>\r\n',styles:["./limble-tree-branch.component.scss"]}]}],u.ctorParameters=function(){return[{type:g},{type:t.ChangeDetectorRef}]},u.propDecorators={branch:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.ViewChild,args:["dropZoneInside",{read:t.ViewContainerRef}]}],dropZoneInside$:[{type:t.Output}]};var f=function(){function e(e,t,r,n,o){this.componentCreatorService=e,this.changeDetectorRef=t,this.tempService=r,this.dropZoneService=n,this.treeService=o}return e.prototype.ngAfterViewInit=function(){this.registerDropZones(),this.renderSelf(),this.renderChildren(),this.checkForHandle(),this.changeDetectorRef.detectChanges()},e.prototype.dragstartHandler=function(e){var t;if(e.stopPropagation(),null!==e.dataTransfer&&void 0!==this.branch){var r=e.target;"LIMBLE-TREE-NODE"===(null===(t=r.parentElement)||void 0===t?void 0:t.tagName)&&(e.dataTransfer.effectAllowed="move",r.classList.add("dragging"),this.tempService.set(this.branch))}},e.prototype.dragendHandler=function(e){e.stopPropagation();var t=e.target,r=this.tempService.get();if(void 0!==r){this.tempService.delete(),t.classList.remove("dragging");var n=this.dropZoneService.getActiveDropZoneInfo();if(null!==n){if(this.dropZoneService.removeActiveAndSecondaryZones(),void 0===n.coordinates)throw new Error("could not determine drop zone location");this.treeService.move(r,n.coordinates)}}},e.prototype.dragoverHandler=function(e){var t,r,n;if(void 0!==this.tempService.get()&&void 0!==this.branch){var o=this.tempService.get();if(void 0!==o)if(o!==this.branch){var i=e.currentTarget.offsetHeight/3,s=2*i;if(e.offsetY<i&&void 0!==this.dropZoneAbove&&(null===(t=this.dropZoneService.getActiveDropZoneInfo())||void 0===t?void 0:t.container)!==this.dropZoneAbove){var d=a(this.branch.getCoordinates());this.dropZoneService.showDropZoneFamily({container:this.dropZoneAbove,coordinates:d})}else if(e.offsetY<s&&void 0!==this.dropZoneInside&&(null===(r=this.dropZoneService.getActiveDropZoneInfo())||void 0===r?void 0:r.container)!==this.dropZoneInside){(d=a(this.branch.getCoordinates())).push(0),this.dropZoneService.showDropZoneFamily({container:this.dropZoneInside,coordinates:d})}else if(e.offsetY>=s&&void 0!==this.dropZoneBelow&&(null===(n=this.dropZoneService.getActiveDropZoneInfo())||void 0===n?void 0:n.container)!==this.dropZoneBelow&&0===this.branch.getChildren().length){(d=a(this.branch.getCoordinates()))[d.length-1]++,this.dropZoneService.showDropZoneFamily({container:this.dropZoneBelow,coordinates:d})}}else null!==this.dropZoneService.getActiveDropZoneInfo()&&this.dropZoneService.removeActiveAndSecondaryZones()}},e.prototype.renderSelf=function(){var e;if(void 0===this.nodeHost||void 0===this.branch)throw new Error("Failed to render tree node");var t=this.branch.data.component;if(void 0===t&&(t=null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.defaultComponent),void 0===t)throw new Error("limbleTree requires a component to render");var r=this.componentCreatorService.appendComponent(t.class,this.nodeHost);for(var n in r.instance.nodeData=this.branch.data,t.bindings)r.instance[n]=t.bindings[n]},e.prototype.renderChildren=function(){var e=this;if(void 0!==this.children){if(void 0===this.branch)throw new Error("branch is undefined");var t=this.componentCreatorService.appendComponent(u,this.children);t.instance.branch=this.branch,l(this.treeService.treeOptions,this.branch.data)&&t.instance.dropZoneInside$.subscribe((function(t){var r;if(void 0!==t&&!1!==(null===(r=e.treeService.treeOptions)||void 0===r?void 0:r.allowDragging)){if(e.dropZoneInside=t,void 0===e.branch)throw new Error("failed to register inner drop zone");var n=e.branch.getCoordinates();n.push(0),e.dropZoneService.addDropZone({container:e.dropZoneInside,coordinates:n})}}))}},e.prototype.registerDropZones=function(){var e;if(!1!==(null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.allowDragging)){if(void 0===this.dropZoneAbove||void 0===this.dropZoneBelow||void 0===this.branch)throw new Error("failed to register drop zones");var t=this.branch.getCoordinates(),r=a(t);this.dropZoneService.addDropZone({container:this.dropZoneAbove,coordinates:r});var n=a(t);n[n.length-1]++,this.dropZoneService.addDropZone({container:this.dropZoneBelow,coordinates:n})}},e.prototype.checkForHandle=function(){var e;if(void 0!==this.draggableDiv){var t,r,n=this.draggableDiv.nativeElement,o=n.querySelector(".limble-tree-handle");t=this.treeService.treeOptions,r=null===(e=this.branch)||void 0===e?void 0:e.data,void 0===t||!0!==t.allowDragging&&("function"!=typeof t.allowDragging||void 0===r||!0!==t.allowDragging(r))?n.setAttribute("draggable","false"):null===o?n.setAttribute("draggable","true"):(o.addEventListener("mousedown",(function(){n.setAttribute("draggable","true")})),o.addEventListener("mouseup",(function(){n.setAttribute("draggable","false")})))}},e}();f.decorators=[{type:t.Component,args:[{selector:"limble-tree-node",template:'<ng-template #dropZoneAbove></ng-template>\r\n<div\r\n (dragstart)="dragstartHandler($event)"\r\n (dragend)="dragendHandler($event)"\r\n #draggableDiv\r\n>\r\n <div (dragover)="dragoverHandler($event)">\r\n <ng-template #nodeHost></ng-template>\r\n </div>\r\n <ng-template #children></ng-template>\r\n</div>\r\n<ng-template #dropZoneBelow></ng-template>\r\n',styles:[".dragging{opacity:.33}"]}]}],f.ctorParameters=function(){return[{type:s},{type:t.ChangeDetectorRef},{type:p},{type:h},{type:g}]},f.propDecorators={branch:[{type:t.Input}],nodeHost:[{type:t.ViewChild,args:["nodeHost",{read:t.ViewContainerRef}]}],dropZoneAbove:[{type:t.ViewChild,args:["dropZoneAbove",{read:t.ViewContainerRef}]}],dropZoneBelow:[{type:t.ViewChild,args:["dropZoneBelow",{read:t.ViewContainerRef}]}],children:[{type:t.ViewChild,args:["children",{read:t.ViewContainerRef}]}],draggableDiv:[{type:t.ViewChild,args:["draggableDiv",{read:t.ElementRef}]}]};var g=function(){function e(e,t){this.componentCreatorService=e,this.dropZoneService=t,this.changes$=new r.ReplaySubject(1),this.drops$=new r.ReplaySubject(1),this.treeModel=new v(null)}return e.prototype.init=function(e,t,r){this.host=e,this.treeData=t,this.treeOptions=this.processOptions(r),this.render()},e.prototype.render=function(){var e,t,r,n;if(void 0===this.host||void 0===this.treeData||void 0===this.treeOptions)throw new Error("TreeModel not initialized");this.host.clear(),this.treeModel=new v(null),this.dropZoneService.clearDropZones(),this.dropZoneService.init(this.treeData,this.treeOptions);try{for(var i=o(this.treeData),a=i.next();!a.done;a=i.next()){var s=a.value,d=new v(s);this.treeModel.appendChild(d)}}catch(t){e={error:t}}finally{try{a&&!a.done&&(t=i.return)&&t.call(i)}finally{if(e)throw e.error}}try{for(var c=o(this.treeModel.getChildren()),l=c.next();!l.done;l=c.next()){d=l.value;this.componentCreatorService.appendComponent(f,this.host).instance.branch=d}}catch(e){r={error:e}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}this.changes$.next(null)},e.prototype.renderBranch=function(e,t){var r,n,i;if(void 0===this.treeModel)throw new Error("TreeModel not initialized");e.clear();try{for(var a=o(null!==(i=t.data.nodes)&&void 0!==i?i:[]),s=a.next();!s.done;s=a.next()){var d=s.value,c=new v(d);t.appendChild(c),this.componentCreatorService.appendComponent(f,e).instance.branch=c}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}},e.prototype.processOptions=function(e){var t,r,n;return void 0===e&&(e={}),{defaultComponent:e.defaultComponent,indent:null!==(t=e.indent)&&void 0!==t?t:45,allowNesting:null===(r=e.allowNesting)||void 0===r||r,allowDragging:null===(n=e.allowDragging)||void 0===n||n}},e.prototype.move=function(e,t){var r=e.getParent(),n=e.getIndex();if(void 0===n)throw new Error("Cannot move the hidden root node");var o=a(t),i=o.pop();if(void 0===i)throw new Error("target coordinates are empty");var s=this.treeModel.getDescendant(o);if(void 0===s)throw new Error("could not get to target");s.insertChild(e,i),this.rebuildTreeData(),console.log(r),this.drops$.next({target:e.data,oldParent:null==r?void 0:r.data,oldIndex:n,newParent:s.data,newIndex:i}),this.render()},e.prototype.rebuildTreeData=function(){var e,t;if(null==this.treeData)throw new Error("Tree data not initialized");this.treeData.length=0;try{for(var r=o(this.treeModel.getChildren()),n=r.next();!n.done;n=r.next()){var i=n.value;this.treeData.push(this.rebuildBranch(i))}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}},e.prototype.rebuildBranch=function(e){var t,r,n=e.data;n.nodes=[];try{for(var i=o(e.getChildren()),a=i.next();!a.done;a=i.next()){var s=a.value;n.nodes.push(this.rebuildBranch(s))}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return n},e}();g.decorators=[{type:t.Injectable}],g.ctorParameters=function(){return[{type:s},{type:h}]};var y=function(){function e(e,n,o){var i=this;this.treeService=e,this.changeDetectorRef=n,this.dropZoneService=o,this.treeChange=new t.EventEmitter,this.treeDrop=new t.EventEmitter,this.dropZoneInside$=new r.BehaviorSubject(this.dropZoneInside),this.changesSubscription=this.treeService.changes$.subscribe((function(){i.treeChange.emit()})),this.dropSubscription=this.treeService.drops$.subscribe((function(e){i.treeDrop.emit(e)}))}return e.prototype.ngAfterViewInit=function(){this.dropZoneInside$.next(this.dropZoneInside),this.dropZoneInside$.complete(),this.update(),this.changeDetectorRef.detectChanges()},e.prototype.ngOnChanges=function(){void 0!==this.host&&void 0!==this.data&&this.update()},e.prototype.update=function(){if(void 0===this.host)throw new Error("Failed to render limble tree. Failure occurred at root.");if(void 0===this.data)throw new Error("limbleTree requires a data object");this.treeService.init(this.host,this.data,this.options)},e.prototype.dragoverHandler=function(e){null!==e.dataTransfer&&(e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="move")},e.prototype.dragleaveHandler=function(e){var t=e.currentTarget,r=e.relatedTarget;t instanceof Node&&r instanceof Node&&!1===function(e,t){if(e===t)return!0;for(var r=t.parentNode;r!==document;){if(null===r)return;if(r===e)return!0;r=r.parentNode}return!1}(t,r)&&this.dropZoneService.removeActiveAndSecondaryZones()},e.prototype.ngOnDestroy=function(){this.changesSubscription.unsubscribe()},e}();y.decorators=[{type:t.Component,args:[{selector:"limble-tree-root",template:'<div\r\n (dragover)="dragoverHandler($event)"\r\n (dragleave)="dragleaveHandler($event)"\r\n>\r\n <ng-template #dropZoneInside></ng-template>\r\n <ng-template #host></ng-template>\r\n</div>\r\n',providers:[g],styles:[""]}]}],y.ctorParameters=function(){return[{type:g},{type:t.ChangeDetectorRef},{type:h}]},y.propDecorators={data:[{type:t.Input}],options:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.ViewChild,args:["dropZoneInside",{read:t.ViewContainerRef}]}],dropZoneInside$:[{type:t.Output}],treeChange:[{type:t.Output}],treeDrop:[{type:t.Output}]};var m=function(){};m.decorators=[{type:t.NgModule,args:[{declarations:[u,d,f,y],imports:[n.CommonModule],exports:[y],providers:[s,p,h]}]}],e.LimbleTreeModule=m,e.LimbleTreeRootComponent=y,e.ɵa=g,e.ɵb=s,e.ɵc=h,e.ɵd=p,e.ɵe=u,e.ɵf=d,e.ɵg=f,Object.defineProperty(e,"__esModule",{value:!0})}));
***************************************************************************** */Object.create;function i(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],o=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&o>=e.length&&(e=void 0),{value:e&&e[o++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function a(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var o,n,i=r.call(e),a=[];try{for(;(void 0===t||t-- >0)&&!(o=i.next()).done;)a.push(o.value)}catch(e){n={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return a}function s(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(a(arguments[t]));return e}Object.create;var d=function(){function e(e){this.factoryResolver=e,this.factoryResolver=e}return e.prototype.appendComponent=function(e,t,r){void 0===r&&(r=null);var o=this.factoryResolver.resolveComponentFactory(e),n=t.createComponent(o);if(null!==r){var i=t.indexOf(n.hostView);t.detach(i),t.insert(n.hostView,r)}return n},e}();d.decorators=[{type:t.Injectable}],d.ctorParameters=function(){return[{type:t.ComponentFactoryResolver}]};var p=function(){function e(e){this.dropZoneService=e,this.active=!1}return e.prototype.dragenterHandler=function(){!0!==this.active&&void 0!==this.dropZoneInfo&&this.dropZoneService.swapActiveDropZone(this.dropZoneInfo)},e}();function h(e,t){var r,o;if(e.length!==t.length)return!1;try{for(var n=i(e.entries()),s=n.next();!s.done;s=n.next()){var d=a(s.value,2),p=d[0],c=d[1],l=t[p];if(c instanceof Array&&l instanceof Array){if(!h(c,l))return!1}else if(c!==l)return!1}}catch(e){r={error:e}}finally{try{s&&!s.done&&(o=n.return)&&o.call(n)}finally{if(r)throw r.error}}return!0}function c(e,t){return void 0!==e&&(!0===e.allowNesting||"function"==typeof e.allowNesting&&void 0!==t&&!0===e.allowNesting(t))}p.decorators=[{type:t.Component,args:[{selector:"drop-zone",template:'<div class="dropZoneContainer" (dragenter)="dragenterHandler()">\r\n <div [ngClass]="{ active: active, related: !active }"></div>\r\n</div>\r\n',styles:[".active{background:#f0f9ff;border:2px dashed #bed2db;border-radius:5px;height:100px}.active,.related{box-sizing:border-box;margin:10px 0;width:calc(100% - 20px)}.related{background:#fff6f0;border:1px dashed #dbccbe;border-radius:5px;height:20px;opacity:.8}.dropZoneContainer{position:relative}"]}]}],p.ctorParameters=function(){return[{type:v}]},p.propDecorators={active:[{type:t.Input}],dropZoneInfo:[{type:t.Input}]};var l=function(){function e(){this.state="idle",this.state$=new r.BehaviorSubject(this.state)}return e.prototype.dragging=function(e){this._tempData=e,this.state="dragging",this.state$.next(this.state)},e.prototype.droppable=function(){if("dragging"!==this.state)throw new Error("Can only move to `droppable` state from `dragging` state");this.state="droppable",this.state$.next(this.state)},e.prototype.notDroppable=function(){if("droppable"!==this.state)throw new Error("Can only call `notDroppable` when state is `droppable`");this.state="dragging",this.state$.next(this.state)},e.prototype.capture=function(){if("droppable"!==this.state)throw new Error("Can only move to `captured` state from `droppable` state");return this.state="captured",this.state$.next(this.state),this._tempData},e.prototype.release=function(){this._tempData=void 0,this.state="idle",this.state$.next(this.state)},e.prototype.getData=function(){return this._tempData},e.prototype.getState=function(){return this.state},e}();l.decorators=[{type:t.Injectable}],l.ctorParameters=function(){return[]};var v=function(){function e(e,t){this.componentCreatorService=e,this.dragStateService=t,this.activeDropZoneInfo=null,this.setActiveDropZoneInfo(null),this.secondaryDropZones=[],this.dropZones=[]}return e.prototype.init=function(e,t){this.treeData=e,this.treeOptions=t},e.prototype.showSingleDropZone=function(e,t){void 0===t&&(t=!0),!0===t&&this.removeActiveAndSecondaryZones();var r=this.componentCreatorService.appendComponent(p,e.container);r.instance.active=t,r.instance.dropZoneInfo=e,!0===t?this.setActiveDropZoneInfo(e):this.secondaryDropZones.push(e)},e.prototype.removeActiveAndSecondaryZones=function(){var e,t,r;null===(r=this.activeDropZoneInfo)||void 0===r||r.container.clear(),this.setActiveDropZoneInfo(null);try{for(var o=i(this.secondaryDropZones),n=o.next();!n.done;n=o.next()){n.value.container.clear()}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}this.secondaryDropZones=[]},e.prototype.getActiveDropZoneInfo=function(){return this.activeDropZoneInfo},e.prototype.setActiveDropZoneInfo=function(e){this.activeDropZoneInfo=e,null!==this.activeDropZoneInfo?this.dragStateService.droppable():"droppable"===this.dragStateService.getState()&&this.dragStateService.notDroppable()},e.prototype.getDropZones=function(){return this.dropZones},e.prototype.getSecondaryDropZones=function(){return this.secondaryDropZones},e.prototype.addDropZone=function(e){void 0===this.dropZones.find((function(t){return t.coordinates===e.coordinates}))&&this.dropZones.push(e)},e.prototype.clearDropZones=function(){this.removeActiveAndSecondaryZones(),this.dropZones=[]},e.prototype.isLastDropZoneInBranch=function(e){return this.getCoordinatesGroup(e).length-1<e[e.length-1]},e.prototype.isOnRoot=function(e){return 1===e.length},e.prototype.showDropZoneFamily=function(e,t,r){var o,n;if(void 0===t&&(t=!0),void 0===r&&(r=!1),this.showSingleDropZone(e,t),!this.isOnRoot(e.coordinates)&&this.isLastDropZoneInBranch(e.coordinates)&&"below"!==r){var i=s(e.coordinates);i.pop();var a=this.getNextSibling(i);if(null===a)throw new Error("Could not get secondary drop zone coordinates");void 0!==(f=this.getDropZones().find((function(e){return h(e.coordinates,a)})))&&this.showDropZoneFamily(f,!1,"above")}if("above"!==r){if(0===e.coordinates[e.coordinates.length-1])return;var d=s(e.coordinates);if(d[d.length-1]--,h(null!==(n=null===(o=this.dragStateService.getData())||void 0===o?void 0:o.getCoordinates())&&void 0!==n?n:[],d))return;if(this.coordinatesHasChildren(d)){var p=s(d);p.push(0);for(var l=p,v=this.getNextSibling(l);null!==v;)l=v,v=this.getNextSibling(l);void 0!==(f=this.getDropZones().find((function(e){return h(e.coordinates,l)})))&&this.showDropZoneFamily(f,!1,"below")}else{var u=this.getCoordinatesGroup(d)[d[d.length-1]];if(c(this.treeOptions,u)){var f,g=s(d);g.push(0),void 0!==(f=this.getDropZones().find((function(e){return h(e.coordinates,g)})))&&this.showDropZoneFamily(f,!1,"below")}}}},e.prototype.coordinatesHasChildren=function(e){var t=this.getCoordinatesChildren(e);return void 0!==t&&t.length>0},e.prototype.swapActiveDropZone=function(e){if(null===this.getActiveDropZoneInfo())throw new Error("could not get active drop zone");if(-1===this.getSecondaryDropZones().findIndex((function(t){return t.coordinates===e.coordinates})))throw new Error("failed to swap active drop zone");this.showDropZoneFamily(e)},e.prototype.getNextSibling=function(e){var t=s(e),r=this.getCoordinatesGroup(t),o=t[t.length-1]++;return r.length<=o?null:t},e.prototype.getCoordinatesGroup=function(e){var t,r;if(void 0===this.treeData)throw new Error("treeData is not defined");var o=this.treeData,n=!0;try{for(var s=i(e.entries()),d=s.next();!d.done;d=s.next()){var p=a(d.value,2),h=p[0],c=p[1];if(h===e.length-1)break;var l=o[c].nodes;if(void 0===l){if(!0!==n)throw new Error("bad coordinates");o[c].nodes=[],l=o[c].nodes,n=!1}o=l}}catch(e){t={error:e}}finally{try{d&&!d.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}return o},e.prototype.getCoordinatesChildren=function(e){var t,r;if(void 0===this.treeData)throw new Error("treeData is not defined");var o=this.treeData;try{for(var n=i(e),a=n.next();!a.done;a=n.next()){var s=o[a.value].nodes;if(void 0===s)return;o=s}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return o},e}();v.decorators=[{type:t.Injectable}],v.ctorParameters=function(){return[{type:d},{type:l}]};var u=function(){function e(e){this.data=e,this.children=[],this.parent=null}return e.prototype.isRoot=function(){return null===this.parent},e.prototype.getParent=function(){return this.parent},e.prototype.setParent=function(e){this.parent=e},e.prototype.getCoordinates=function(){for(var e=[],t=this;null!==t.parent;){var r=t.getIndex();if(void 0===r)throw new Error("Unreachable error");e.unshift(r),t=t.parent}return e},e.prototype.getChild=function(e){return this.children[e]},e.prototype.getChildren=function(){return this.children},e.prototype.getIndex=function(){var e,t,r=this;return null!==(t=null===(e=this.parent)||void 0===e?void 0:e.children.findIndex((function(e){return e===r})))&&void 0!==t?t:void 0},e.prototype.getDescendant=function(e){var t,r,o=this;try{for(var n=i(e),a=n.next();!a.done;a=n.next()){var s=a.value;if(void 0===(o=o.children[s]))return}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return o},e.prototype.findDescendant=function(e){var t,r;if(!0===e(this.data))return this;if(this.children.length>0)try{for(var o=i(this.children),n=o.next();!n.done;n=o.next()){var a=n.value.findDescendant(e);if(void 0!==a)return a}}catch(e){t={error:e}}finally{try{n&&!n.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}},e.prototype.getAncestors=function(){for(var e=[],t=this;null!==t.parent;)e.push(t.parent),t=t.parent;return e},e.prototype.appendChild=function(e){return null!==e.getParent()&&e.remove(),e.setParent(this),this.children.push(e),e},e.prototype.insertChild=function(e,t){var r=this.children.indexOf(e);return-1===r?(null!==e.getParent()&&e.remove(),e.setParent(this),this.children.splice(t,0,e)):t>r?(this.children.splice(t,0,e),this.removeChild(r),e.setParent(this)):(e.remove(),this.children.splice(t,0,e),e.setParent(this)),e},e.prototype.removeChild=function(e){var t=this.children.splice(e,1)[0];return t.setParent(null),t},e.prototype.remove=function(){var e=this.getIndex();if(null===this.parent||void 0===e)throw new Error("can't remove root");return this.parent.removeChild(e)},e}(),f=function(){function e(e,t){var o;this.treeService=e,this.changeDetectorRef=t,this.dropZoneInside$=new r.BehaviorSubject(this.dropZoneInside),this.indent=null===(o=this.treeService.treeOptions)||void 0===o?void 0:o.indent}return e.prototype.ngAfterViewInit=function(){this.dropZoneInside$.next(this.dropZoneInside),this.dropZoneInside$.complete(),this.reRender(),this.changeDetectorRef.detectChanges()},e.prototype.reRender=function(){if(void 0===this.host||void 0===this.branch)throw new Error("Failed to render limble tree branch");this.treeService.renderBranch(this.host,this.branch)},e}();f.decorators=[{type:t.Component,args:[{selector:"limble-tree-branch",template:'<div [style.marginLeft.px]="indent">\r\n <ng-template #dropZoneInside></ng-template>\r\n <span [hidden]="branch?.data.collapsed" class="limble-child-nodes">\r\n <ng-template #host></ng-template>\r\n </span>\r\n</div>\r\n',styles:["./limble-tree-branch.component.scss"]}]}],f.ctorParameters=function(){return[{type:b},{type:t.ChangeDetectorRef}]},f.propDecorators={branch:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.ViewChild,args:["dropZoneInside",{read:t.ViewContainerRef}]}],dropZoneInside$:[{type:t.Output}]};var g=function(){function e(e,t,r,o,n){this.componentCreatorService=e,this.changeDetectorRef=t,this.dragStateService=r,this.dropZoneService=o,this.treeService=n}return e.prototype.ngAfterViewInit=function(){this.registerDropZones(),this.renderSelf(),this.renderChildren(),this.checkForHandle(),this.changeDetectorRef.detectChanges()},e.prototype.dragstartHandler=function(e){var t;if(e.stopPropagation(),null===e.dataTransfer||void 0===this.branch)throw new Error("failed to run dragstartHandler");var r=e.target;"LIMBLE-TREE-NODE"===(null===(t=r.parentElement)||void 0===t?void 0:t.tagName)&&(e.dataTransfer.effectAllowed="move",r.classList.add("dragging"),this.dragStateService.dragging(this.branch))},e.prototype.dragendHandler=function(e){var t=this;if(e.stopPropagation(),e.target.classList.remove("dragging"),void 0===this.branch)throw new Error("failed to get current branch in dragendHandler");"captured"===this.dragStateService.getState()&&this.dragStateService.state$.pipe(o.take(2)).subscribe((function(e){"captured"===e&&void 0!==t.branch&&(t.treeService.remove(t.branch),t.dragStateService.release())}))},e.prototype.dragoverHandler=function(e){var t,r,o;if(void 0===this.branch)throw new Error("Can't get current branch during dragover event");var n=this.dragStateService.getData();if(void 0===n)throw new Error("Can't get source branch during dragover event");if(n===this.branch||this.branch.getAncestors().includes(n))null!==this.dropZoneService.getActiveDropZoneInfo()&&this.dropZoneService.removeActiveAndSecondaryZones();else if(!0!==this.treeService.getPlaceholder()||void 0===this.dropZoneAbove){var i,a=e.currentTarget.offsetHeight/3,d=2*a,p=this.branch.getParent();if(null!==p&&(i=p.data),e.offsetY<a&&void 0!==this.dropZoneAbove&&(null===(t=this.dropZoneService.getActiveDropZoneInfo())||void 0===t?void 0:t.container)!==this.dropZoneAbove&&c(this.treeService.treeOptions,i)){h=s(this.branch.getCoordinates());this.dropZoneService.showDropZoneFamily({container:this.dropZoneAbove,coordinates:h})}else if(e.offsetY<d&&void 0!==this.dropZoneInside&&(null===(r=this.dropZoneService.getActiveDropZoneInfo())||void 0===r?void 0:r.container)!==this.dropZoneInside){(h=s(this.branch.getCoordinates())).push(0),this.dropZoneService.showDropZoneFamily({container:this.dropZoneInside,coordinates:h})}else if(e.offsetY>=d&&void 0!==this.dropZoneBelow&&(null===(o=this.dropZoneService.getActiveDropZoneInfo())||void 0===o?void 0:o.container)!==this.dropZoneBelow&&0===this.branch.getChildren().length&&c(this.treeService.treeOptions,i)){(h=s(this.branch.getCoordinates()))[h.length-1]++,this.dropZoneService.showDropZoneFamily({container:this.dropZoneBelow,coordinates:h})}}else{var h=s(this.branch.getCoordinates());this.dropZoneService.showDropZoneFamily({container:this.dropZoneAbove,coordinates:h})}},e.prototype.renderSelf=function(){var e;if(void 0===this.nodeHost||void 0===this.branch)throw new Error("Failed to render tree node");var t=this.branch.data.component;if(void 0===t&&(t=null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.defaultComponent),void 0===t)throw new Error("limbleTree requires a component to render");var r=this.componentCreatorService.appendComponent(t.class,this.nodeHost);for(var o in r.instance.nodeData=this.branch.data,t.bindings)r.instance[o]=t.bindings[o]},e.prototype.renderChildren=function(){var e=this;if(void 0!==this.children){if(void 0===this.branch)throw new Error("branch is undefined");var t=this.componentCreatorService.appendComponent(f,this.children);t.instance.branch=this.branch,c(this.treeService.treeOptions,this.branch.data)&&!0==!this.treeService.getPlaceholder()&&t.instance.dropZoneInside$.subscribe((function(t){var r;if(void 0!==t&&!1!==(null===(r=e.treeService.treeOptions)||void 0===r?void 0:r.allowDragging)){if(e.dropZoneInside=t,void 0===e.branch)throw new Error("failed to register inner drop zone");var o=e.branch.getCoordinates();o.push(0),e.dropZoneService.addDropZone({container:e.dropZoneInside,coordinates:o})}}))}},e.prototype.registerDropZones=function(){var e;if(!1!==(null===(e=this.treeService.treeOptions)||void 0===e?void 0:e.allowDragging)){if(void 0===this.dropZoneAbove||void 0===this.dropZoneBelow||void 0===this.branch)throw new Error("failed to register drop zones");var t,r=this.branch.getParent();if(null!==r&&(t=r.data),c(this.treeService.treeOptions,t)){var o=this.branch.getCoordinates(),n=s(o);if(this.dropZoneService.addDropZone({container:this.dropZoneAbove,coordinates:n}),!0!==this.treeService.getPlaceholder()){var i=s(o);i[i.length-1]++,this.dropZoneService.addDropZone({container:this.dropZoneBelow,coordinates:i})}}}},e.prototype.checkForHandle=function(){var e;if(void 0!==this.draggableDiv){var t,r,o=this.draggableDiv.nativeElement,n=o.querySelector(".limble-tree-handle");t=this.treeService.treeOptions,r=null===(e=this.branch)||void 0===e?void 0:e.data,void 0===t||!0!==t.allowDragging&&("function"!=typeof t.allowDragging||void 0===r||!0!==t.allowDragging(r))?o.setAttribute("draggable","false"):null===n?o.setAttribute("draggable","true"):(n.addEventListener("mousedown",(function(){o.setAttribute("draggable","true")})),n.addEventListener("mouseup",(function(){o.setAttribute("draggable","false")})))}},e}();g.decorators=[{type:t.Component,args:[{selector:"limble-tree-node",template:'<ng-template #dropZoneAbove></ng-template>\r\n<div\r\n (dragstart)="dragstartHandler($event)"\r\n (dragend)="dragendHandler($event)"\r\n #draggableDiv\r\n>\r\n <div (dragover)="dragoverHandler($event)">\r\n <ng-template #nodeHost></ng-template>\r\n </div>\r\n <ng-template #children></ng-template>\r\n</div>\r\n<ng-template #dropZoneBelow></ng-template>\r\n',styles:[".dragging{opacity:.33}"]}]}],g.ctorParameters=function(){return[{type:d},{type:t.ChangeDetectorRef},{type:l},{type:v},{type:b}]},g.propDecorators={branch:[{type:t.Input}],nodeHost:[{type:t.ViewChild,args:["nodeHost",{read:t.ViewContainerRef}]}],dropZoneAbove:[{type:t.ViewChild,args:["dropZoneAbove",{read:t.ViewContainerRef}]}],dropZoneBelow:[{type:t.ViewChild,args:["dropZoneBelow",{read:t.ViewContainerRef}]}],children:[{type:t.ViewChild,args:["children",{read:t.ViewContainerRef}]}],draggableDiv:[{type:t.ViewChild,args:["draggableDiv",{read:t.ElementRef}]}]};var y=function(){};y.decorators=[{type:t.Component,args:[{selector:"limble-tree-placeholder",template:'<div class="placeholder"></div>\n',styles:[".placeholder{height:20px;width:100%}"]}]}];var b=function(){function e(e,t){this.componentCreatorService=e,this.dropZoneService=t,this.changes$=new r.ReplaySubject(1),this.drops$=new r.ReplaySubject(1),this.treeModel=new u(null),this.placeholder=!1}return e.prototype.init=function(e,t,r){this.host=e,this.treeData=t,this.treeOptions=this.processOptions(r),this.render()},e.prototype.render=function(){var e,t,r,o;if(void 0===this.host||void 0===this.treeData||void 0===this.treeOptions)throw new Error("TreeModel not initialized");if(this.host.clear(),this.treeModel=new u(null),this.dropZoneService.clearDropZones(),this.dropZoneService.init(this.treeData,this.treeOptions),0===this.treeData.length){this.placeholder=!0;var n=new u({component:{class:y}});this.treeModel.appendChild(n),this.componentCreatorService.appendComponent(g,this.host).instance.branch=n}else{try{for(var a=i(this.treeData),s=a.next();!s.done;s=a.next()){var d=s.value;n=new u(d);this.treeModel.appendChild(n)}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}try{for(var p=i(this.treeModel.getChildren()),h=p.next();!h.done;h=p.next()){n=h.value;this.componentCreatorService.appendComponent(g,this.host).instance.branch=n}}catch(e){r={error:e}}finally{try{h&&!h.done&&(o=p.return)&&o.call(p)}finally{if(r)throw r.error}}}this.changes$.next(null)},e.prototype.renderBranch=function(e,t){var r,o,n;if(void 0===this.treeModel)throw new Error("TreeModel not initialized");e.clear();try{for(var a=i(null!==(n=t.data.nodes)&&void 0!==n?n:[]),s=a.next();!s.done;s=a.next()){var d=s.value,p=new u(d);t.appendChild(p),this.componentCreatorService.appendComponent(g,e).instance.branch=p}}catch(e){r={error:e}}finally{try{s&&!s.done&&(o=a.return)&&o.call(a)}finally{if(r)throw r.error}}},e.prototype.processOptions=function(e){var t,r,o;return void 0===e&&(e={}),{defaultComponent:e.defaultComponent,indent:null!==(t=e.indent)&&void 0!==t?t:45,allowNesting:null===(r=e.allowNesting)||void 0===r||r,allowDragging:null===(o=e.allowDragging)||void 0===o||o}},e.prototype.drop=function(e,t){var r,o,n=e.getParent(),i=e.getIndex();if(void 0===i)throw new Error("Cannot move the hidden root node");if(!0===this.placeholder?(r=[],o=0,this.treeModel.removeChild(0),this.placeholder=!1):o=(r=s(t)).pop(),void 0===o)throw new Error("target coordinates are empty");var a=this.treeModel.getDescendant(r);if(void 0===a)throw new Error("could not get to target");a.insertChild(e,o),this.rebuildTreeData(),this.drops$.next({target:e.data,oldParent:null==n?void 0:n.data,oldIndex:i,newParent:a.data,newIndex:o}),this.render()},e.prototype.remove=function(e){e.remove(),this.rebuildTreeData(),this.render()},e.prototype.rebuildTreeData=function(){var e,t;if(null==this.treeData)throw new Error("Tree data not initialized");this.treeData.length=0;try{for(var r=i(this.treeModel.getChildren()),o=r.next();!o.done;o=r.next()){var n=o.value;this.treeData.push(this.rebuildBranch(n))}}catch(t){e={error:t}}finally{try{o&&!o.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}},e.prototype.rebuildBranch=function(e){var t,r,o=e.data;o.nodes=[];try{for(var n=i(e.getChildren()),a=n.next();!a.done;a=n.next()){var s=a.value;o.nodes.push(this.rebuildBranch(s))}}catch(e){t={error:e}}finally{try{a&&!a.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return o},e.prototype.getPlaceholder=function(){return this.placeholder},e}();b.decorators=[{type:t.Injectable}],b.ctorParameters=function(){return[{type:d},{type:v}]};var w=function(){function e(e,o,n,i){var a=this;this.treeService=e,this.changeDetectorRef=o,this.dropZoneService=n,this.dragStateService=i,this.treeChange=new t.EventEmitter,this.treeDrop=new t.EventEmitter,this.dropZoneInside$=new r.BehaviorSubject(this.dropZoneInside),this.changesSubscription=this.treeService.changes$.subscribe((function(){a.treeChange.emit()})),this.dropSubscription=this.treeService.drops$.subscribe((function(e){a.treeDrop.emit(e)}))}return e.prototype.ngAfterViewInit=function(){this.dropZoneInside$.next(this.dropZoneInside),this.dropZoneInside$.complete(),this.update(),this.changeDetectorRef.detectChanges()},e.prototype.ngOnChanges=function(){void 0!==this.host&&void 0!==this.data&&this.update()},e.prototype.update=function(){if(void 0===this.host)throw new Error("Failed to render limble tree. Failure occurred at root.");if(void 0===this.data)throw new Error("limbleTree requires a data object");this.treeService.init(this.host,this.data,this.options)},e.prototype.dragoverHandler=function(e){null!==e.dataTransfer&&(e.stopPropagation(),e.preventDefault(),e.dataTransfer.dropEffect="move")},e.prototype.dragleaveHandler=function(e){var t=e.currentTarget,r=e.relatedTarget;t instanceof Node&&r instanceof Node&&!1===function(e,t){if(e===t)return!0;for(var r=t.parentNode;r!==document;){if(null===r)return;if(r===e)return!0;r=r.parentNode}return!1}(t,r)&&this.dropZoneService.removeActiveAndSecondaryZones()},e.prototype.dropHandler=function(e){e.stopPropagation();var t=this.dropZoneService.getActiveDropZoneInfo();if("droppable"===this.dragStateService.getState()){if(null===t)throw new Error("failed to get active drop zone at drop handler");var r=this.dragStateService.capture();if(void 0===r)throw new Error("failed to get current branch in dragendHandler");this.dropZoneService.removeActiveAndSecondaryZones(),this.treeService.drop(r,t.coordinates)}},e.prototype.ngOnDestroy=function(){this.changesSubscription.unsubscribe(),this.dropSubscription.unsubscribe()},e}();w.decorators=[{type:t.Component,args:[{selector:"limble-tree-root",template:'<div\r\n (dragover)="dragoverHandler($event)"\r\n (dragleave)="dragleaveHandler($event)"\r\n (drop)="dropHandler($event)"\r\n>\r\n <ng-template #dropZoneInside></ng-template>\r\n <ng-template #host></ng-template>\r\n</div>\r\n',providers:[b,v],styles:[""]}]}],w.ctorParameters=function(){return[{type:b},{type:t.ChangeDetectorRef},{type:v},{type:l}]},w.propDecorators={data:[{type:t.Input}],options:[{type:t.Input}],host:[{type:t.ViewChild,args:["host",{read:t.ViewContainerRef}]}],dropZoneInside:[{type:t.ViewChild,args:["dropZoneInside",{read:t.ViewContainerRef}]}],dropZoneInside$:[{type:t.Output}],treeChange:[{type:t.Output}],treeDrop:[{type:t.Output}]};var m=function(){};m.decorators=[{type:t.NgModule,args:[{declarations:[f,p,g,w,y],imports:[n.CommonModule],exports:[w],providers:[d,l]}]}],e.LimbleTreeModule=m,e.LimbleTreeRootComponent=w,e.ɵa=b,e.ɵb=d,e.ɵc=v,e.ɵd=l,e.ɵe=f,e.ɵf=p,e.ɵg=g,e.ɵh=y,Object.defineProperty(e,"__esModule",{value:!0})}));
//# sourceMappingURL=limble-limble-tree.umd.min.js.map

@@ -63,2 +63,11 @@ export class Branch {

}
getAncestors() {
const result = [];
let cursor = this;
while (cursor.parent !== null) {
result.push(cursor.parent);
cursor = cursor.parent;
}
return result;
}
appendChild(child) {

@@ -110,2 +119,2 @@ if (child.getParent() !== null) {

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmNoLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9icmFuY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLE1BQU07SUFLaEIsWUFBbUIsSUFBTztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRU0sTUFBTTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVNLFNBQVM7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdEIsQ0FBQztJQUVNLFNBQVMsQ0FBSSxNQUF3QjtRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRU0sY0FBYztRQUNsQixNQUFNLFdBQVcsR0FBc0IsRUFBRSxDQUFDO1FBQzFDLElBQUksTUFBTSxHQUFvQixJQUFJLENBQUM7UUFDbkMsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUM1QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7YUFDMUU7WUFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDdEIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFhO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FB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QzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDO0lBQ2pCLENBQUM7SUFFTSxNQUFNO1FBQ1YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBYyxDQUFDO0lBQ3RELENBQUM7Q0FDSCIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBBbiBvYmplY3QgaW5kaWNhdGluZyBhIGxvY2F0aW9uIHdpdGhpbiBhIHRyZWUgKi9cclxuZXhwb3J0IHR5cGUgQnJhbmNoQ29vcmRpbmF0ZXMgPSBBcnJheTxudW1iZXI+O1xyXG5cclxuZXhwb3J0IGNsYXNzIEJyYW5jaDxUPiB7XHJcbiAgIHB1YmxpYyBkYXRhOiBUO1xyXG4gICBwcml2YXRlIGNoaWxkcmVuOiBBcnJheTxCcmFuY2g8VD4+O1xyXG4gICBwcml2YXRlIHBhcmVudDogQnJhbmNoPHVua25vd24+IHwgbnVsbDtcclxuXHJcbiAgIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBUKSB7XHJcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgaXNSb290KCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPT09IG51bGw7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBnZXRQYXJlbnQoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHNldFBhcmVudDxVPihwYXJlbnQ6IEJyYW5jaDxVPiB8IG51bGwpIHtcclxuICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBnZXRDb29yZGluYXRlcygpIHtcclxuICAgICAgY29uc3QgY29vcmRpbmF0ZXM6IEJyYW5jaENvb3JkaW5hdGVzID0gW107XHJcbiAgICAgIGxldCBjdXJzb3I6IEJyYW5jaDx1bmtub3duPiA9IHRoaXM7XHJcbiAgICAgIHdoaWxlIChjdXJzb3IucGFyZW50ICE9PSBudWxsKSB7XHJcbiAgICAgICAgIGNvbnN0IGN1cnNvckluZGV4ID0gY3Vyc29yLmdldEluZGV4KCk7XHJcbiAgICAgICAgIGlmIChjdXJzb3JJbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucmVhY2hhYmxlIGVycm9yXCIpOyAvL1RoaXMgc2hvdWxkIGJlIGltcG9zc2libGUgdG8gaGl0XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29vcmRpbmF0ZXMudW5zaGlmdChjdXJzb3JJbmRleCk7XHJcbiAgICAgICAgIGN1cnNvciA9IGN1cnNvci5wYXJlbnQ7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvb3JkaW5hdGVzO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZ2V0Q2hpbGQoaW5kZXg6IG51bWJlcik6IEJyYW5jaDxUPiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuW2luZGV4XTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldENoaWxkcmVuKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbjtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldEluZGV4KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgIHRoaXMucGFyZW50Py5jaGlsZHJlbi5maW5kSW5kZXgoKGJyYW5jaCkgPT4gYnJhbmNoID09PSB0aGlzKSA/P1xyXG4gICAgICAgICB1bmRlZmluZWRcclxuICAgICAgKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldERlc2NlbmRhbnQoXHJcbiAgICAgIHJlbGF0aXZlQ29vcmRpbmF0ZXM6IEJyYW5jaENvb3JkaW5hdGVzXHJcbiAgICk6IEJyYW5jaDxUPiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgIGxldCBjdXJzb3I6IEJyYW5jaDxUPiA9IHRoaXM7XHJcbiAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgcmVsYXRpdmVDb29yZGluYXRlcykge1xyXG4gICAgICAgICBjdXJzb3IgPSBjdXJzb3IuY2hpbGRyZW5baW5kZXhdO1xyXG4gICAgICAgICBpZiAoY3Vyc29yID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjdXJzb3I7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBmaW5kRGVzY2VuZGFudChcclxuICAgICAgcHJlZGljYXRlOiAoZGF0YTogVCkgPT4gYm9vbGVhblxyXG4gICApOiBCcmFuY2g8VD4gfCB1bmRlZmluZWQge1xyXG4gICAgICBpZiAocHJlZGljYXRlKHRoaXMuZGF0YSkgPT09IHRydWUpIHtcclxuICAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgY29uc3QgZm91bmREZWVwZXIgPSBjaGlsZC5maW5kRGVzY2VuZGFudChwcmVkaWNhdGUpO1xyXG4gICAgICAgICAgICBpZiAoZm91bmREZWVwZXIgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICByZXR1cm4gZm91bmREZWVwZXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBhcHBlbmRDaGlsZChjaGlsZDogQnJhbmNoPFQ+KTogQnJhbmNoPFQ+IHtcclxuICAgICAgaWYgKGNoaWxkLmdldFBhcmVudCgpICE9PSBudWxsKSB7XHJcbiAgICAgICAgIGNoaWxkLnJlbW92ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNoaWxkLnNldFBhcmVudCh0aGlzKTtcclxuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgaW5zZXJ0Q2hpbGQoY2hpbGQ6IEJyYW5jaDxUPiwgaW5kZXg6IG51bWJlcik6IEJyYW5jaDxUPiB7XHJcbiAgICAgIGNvbnN0IGlzT3duQ2hpbGQgPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICBpZiAoaXNPd25DaGlsZCA9PT0gLTEpIHtcclxuICAgICAgICAgaWYgKGNoaWxkLmdldFBhcmVudCgpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNoaWxkLnJlbW92ZSgpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGNoaWxkLnNldFBhcmVudCh0aGlzKTtcclxuICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgaWYgKGluZGV4ID4gaXNPd25DaGlsZCkge1xyXG4gICAgICAgICAgICAvL0luc2VydCBmaXJzdCwgdGhlbiByZW1vdmVcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChpc093bkNoaWxkKTtcclxuICAgICAgICAgICAgY2hpbGQuc2V0UGFyZW50KHRoaXMpO1xyXG4gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvL3JlbW92ZSBmaXJzdCwgdGhlbiBpbnNlcnRcclxuICAgICAgICAgICAgY2hpbGQucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XHJcbiAgICAgICAgICAgIGNoaWxkLnNldFBhcmVudCh0aGlzKTtcclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjaGlsZDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlbW92ZUNoaWxkKGluZGV4OiBudW1iZXIpOiBCcmFuY2g8VD4ge1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSlbMF07XHJcbiAgICAgIHRhcmdldC5zZXRQYXJlbnQobnVsbCk7XHJcbiAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyByZW1vdmUoKTogQnJhbmNoPFQ+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEluZGV4KCk7XHJcbiAgICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCB8fCBpbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbid0IHJlbW92ZSByb290XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZChpbmRleCkgYXMgQnJhbmNoPFQ+O1xyXG4gICB9XHJcbn1cclxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmNoLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9icmFuY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLE1BQU07SUFLaEIsWUFBbUIsSUFBTztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0lBRU0sTUFBTTtRQUNWLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVNLFNBQVM7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdEIsQ0FBQztJQUVNLFNBQVMsQ0FBSSxNQUF3QjtRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN4QixDQUFDO0lBRU0sY0FBYztRQUNsQixNQUFNLFdBQVcsR0FBc0IsRUFBRSxDQUFDO1FBQzFDLElBQUksTUFBTSxHQUFvQixJQUFJLENBQUM7UUFDbkMsT0FBTyxNQUFNLENBQUMsTUFBTSxLQUFLLElBQUksRUFBRTtZQUM1QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEMsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO2dCQUM1QixNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxrQ0FBa0M7YUFDMUU7WUFDRCxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDdEIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFhO1FBQzFCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FB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Q0FBQzthQUN4QjtpQkFBTTtnQkFDSiwyQkFBMkI7Z0JBQzNCLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDZixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN0QyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hCO1NBQ0g7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNoQixDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQWE7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsT0FBTyxNQUFNLENBQUM7SUFDakIsQ0FBQztJQUVNLE1BQU07UUFDVixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN2QztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFjLENBQUM7SUFDdEQsQ0FBQztDQUNIIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEFuIG9iamVjdCBpbmRpY2F0aW5nIGEgbG9jYXRpb24gd2l0aGluIGEgdHJlZSAqL1xyXG5leHBvcnQgdHlwZSBCcmFuY2hDb29yZGluYXRlcyA9IEFycmF5PG51bWJlcj47XHJcblxyXG5leHBvcnQgY2xhc3MgQnJhbmNoPFQ+IHtcclxuICAgcHVibGljIGRhdGE6IFQ7XHJcbiAgIHByaXZhdGUgY2hpbGRyZW46IEFycmF5PEJyYW5jaDxUPj47XHJcbiAgIHByaXZhdGUgcGFyZW50OiBCcmFuY2g8dW5rbm93bj4gfCBudWxsO1xyXG5cclxuICAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IFQpIHtcclxuICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xyXG4gICAgICB0aGlzLnBhcmVudCA9IG51bGw7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBpc1Jvb3QoKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudCA9PT0gbnVsbDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldFBhcmVudCgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgc2V0UGFyZW50PFU+KHBhcmVudDogQnJhbmNoPFU+IHwgbnVsbCkge1xyXG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldENvb3JkaW5hdGVzKCkge1xyXG4gICAgICBjb25zdCBjb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXMgPSBbXTtcclxuICAgICAgbGV0IGN1cnNvcjogQnJhbmNoPHVua25vd24+ID0gdGhpcztcclxuICAgICAgd2hpbGUgKGN1cnNvci5wYXJlbnQgIT09IG51bGwpIHtcclxuICAgICAgICAgY29uc3QgY3Vyc29ySW5kZXggPSBjdXJzb3IuZ2V0SW5kZXgoKTtcclxuICAgICAgICAgaWYgKGN1cnNvckluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5yZWFjaGFibGUgZXJyb3JcIik7IC8vVGhpcyBzaG91bGQgYmUgaW1wb3NzaWJsZSB0byBoaXRcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb29yZGluYXRlcy51bnNoaWZ0KGN1cnNvckluZGV4KTtcclxuICAgICAgICAgY3Vyc29yID0gY3Vyc29yLnBhcmVudDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29vcmRpbmF0ZXM7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBnZXRDaGlsZChpbmRleDogbnVtYmVyKTogQnJhbmNoPFQ+IHwgdW5kZWZpbmVkIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5baW5kZXhdO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZ2V0Q2hpbGRyZW4oKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZ2V0SW5kZXgoKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICAgdGhpcy5wYXJlbnQ/LmNoaWxkcmVuLmZpbmRJbmRleCgoYnJhbmNoKSA9PiBicmFuY2ggPT09IHRoaXMpID8/XHJcbiAgICAgICAgIHVuZGVmaW5lZFxyXG4gICAgICApO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZ2V0RGVzY2VuZGFudChcclxuICAgICAgcmVsYXRpdmVDb29yZGluYXRlczogQnJhbmNoQ29vcmRpbmF0ZXNcclxuICAgKTogQnJhbmNoPFQ+IHwgdW5kZWZpbmVkIHtcclxuICAgICAgbGV0IGN1cnNvcjogQnJhbmNoPFQ+ID0gdGhpcztcclxuICAgICAgZm9yIChjb25zdCBpbmRleCBvZiByZWxhdGl2ZUNvb3JkaW5hdGVzKSB7XHJcbiAgICAgICAgIGN1cnNvciA9IGN1cnNvci5jaGlsZHJlbltpbmRleF07XHJcbiAgICAgICAgIGlmIChjdXJzb3IgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGN1cnNvcjtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGZpbmREZXNjZW5kYW50KFxyXG4gICAgICBwcmVkaWNhdGU6IChkYXRhOiBUKSA9PiBib29sZWFuXHJcbiAgICk6IEJyYW5jaDxUPiB8IHVuZGVmaW5lZCB7XHJcbiAgICAgIGlmIChwcmVkaWNhdGUodGhpcy5kYXRhKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICByZXR1cm4gdGhpcztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZHJlbikge1xyXG4gICAgICAgICAgICBjb25zdCBmb3VuZERlZXBlciA9IGNoaWxkLmZpbmREZXNjZW5kYW50KHByZWRpY2F0ZSk7XHJcbiAgICAgICAgICAgIGlmIChmb3VuZERlZXBlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgIHJldHVybiBmb3VuZERlZXBlcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldEFuY2VzdG9ycygpOiBBcnJheTxCcmFuY2g8dW5rbm93bj4+IHtcclxuICAgICAgY29uc3QgcmVzdWx0OiBBcnJheTxCcmFuY2g8dW5rbm93bj4+ID0gW107XHJcbiAgICAgIGxldCBjdXJzb3I6IEJyYW5jaDx1bmtub3duPiA9IHRoaXM7XHJcbiAgICAgIHdoaWxlIChjdXJzb3IucGFyZW50ICE9PSBudWxsKSB7XHJcbiAgICAgICAgIHJlc3VsdC5wdXNoKGN1cnNvci5wYXJlbnQpO1xyXG4gICAgICAgICBjdXJzb3IgPSBjdXJzb3IucGFyZW50O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBhcHBlbmRDaGlsZChjaGlsZDogQnJhbmNoPFQ+KTogQnJhbmNoPFQ+IHtcclxuICAgICAgaWYgKGNoaWxkLmdldFBhcmVudCgpICE9PSBudWxsKSB7XHJcbiAgICAgICAgIGNoaWxkLnJlbW92ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNoaWxkLnNldFBhcmVudCh0aGlzKTtcclxuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcclxuICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgaW5zZXJ0Q2hpbGQoY2hpbGQ6IEJyYW5jaDxUPiwgaW5kZXg6IG51bWJlcik6IEJyYW5jaDxUPiB7XHJcbiAgICAgIGNvbnN0IGlzT3duQ2hpbGQgPSB0aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQpO1xyXG4gICAgICBpZiAoaXNPd25DaGlsZCA9PT0gLTEpIHtcclxuICAgICAgICAgaWYgKGNoaWxkLmdldFBhcmVudCgpICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNoaWxkLnJlbW92ZSgpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIGNoaWxkLnNldFBhcmVudCh0aGlzKTtcclxuICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgaWYgKGluZGV4ID4gaXNPd25DaGlsZCkge1xyXG4gICAgICAgICAgICAvL0luc2VydCBmaXJzdCwgdGhlbiByZW1vdmVcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDAsIGNoaWxkKTtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChpc093bkNoaWxkKTtcclxuICAgICAgICAgICAgY2hpbGQuc2V0UGFyZW50KHRoaXMpO1xyXG4gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvL3JlbW92ZSBmaXJzdCwgdGhlbiBpbnNlcnRcclxuICAgICAgICAgICAgY2hpbGQucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAwLCBjaGlsZCk7XHJcbiAgICAgICAgICAgIGNoaWxkLnNldFBhcmVudCh0aGlzKTtcclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBjaGlsZDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIHJlbW92ZUNoaWxkKGluZGV4OiBudW1iZXIpOiBCcmFuY2g8VD4ge1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmNoaWxkcmVuLnNwbGljZShpbmRleCwgMSlbMF07XHJcbiAgICAgIHRhcmdldC5zZXRQYXJlbnQobnVsbCk7XHJcbiAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyByZW1vdmUoKTogQnJhbmNoPFQ+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEluZGV4KCk7XHJcbiAgICAgIGlmICh0aGlzLnBhcmVudCA9PT0gbnVsbCB8fCBpbmRleCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhbid0IHJlbW92ZSByb290XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudC5yZW1vdmVDaGlsZChpbmRleCkgYXMgQnJhbmNoPFQ+O1xyXG4gICB9XHJcbn1cclxuIl19
import { Component, Input } from "@angular/core";
import { DropZoneService } from "../singletons/drop-zone.service";
import { DropZoneService } from "../limble-tree-root/drop-zone.service";
export class DropZoneComponent {

@@ -29,2 +29,2 @@ constructor(dropZoneService) {

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvIiwic291cmNlcyI6WyJsaWIvZHJvcC16b25lL2Ryb3Atem9uZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBT2xFLE1BQU0sT0FBTyxpQkFBaUI7SUFJM0IsWUFBNkIsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBSHBELFdBQU0sR0FBWSxLQUFLLENBQUM7SUFHK0IsQ0FBQztJQUUxRCxnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUMxRCxPQUFPO1NBQ1Q7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5RCxDQUFDOzs7WUFoQkgsU0FBUyxTQUFDO2dCQUNSLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixtS0FBeUM7O2FBRTNDOzs7WUFOUSxlQUFlOzs7cUJBUXBCLEtBQUs7MkJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgdHlwZSB7IERyb3Bab25lSW5mbyB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2Ryb3Atem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERyb3Bab25lU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2Ryb3Atem9uZS5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwiZHJvcC16b25lXCIsXHJcbiAgIHRlbXBsYXRlVXJsOiBcIi4vZHJvcC16b25lLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlVXJsczogW1wiLi9kcm9wLXpvbmUuY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bab25lQ29tcG9uZW50IHtcclxuICAgQElucHV0KCkgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgIEBJbnB1dCgpIGRyb3Bab25lSW5mbzogRHJvcFpvbmVJbmZvIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZSkge31cclxuXHJcbiAgIHB1YmxpYyBkcmFnZW50ZXJIYW5kbGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmUgPT09IHRydWUgfHwgdGhpcy5kcm9wWm9uZUluZm8gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc3dhcEFjdGl2ZURyb3Bab25lKHRoaXMuZHJvcFpvbmVJbmZvKTtcclxuICAgfVxyXG59XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC16b25lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi9wcm9qZWN0cy9saW1ibGUtdHJlZS9zcmMvIiwic291cmNlcyI6WyJsaWIvZHJvcC16b25lL2Ryb3Atem9uZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBT3hFLE1BQU0sT0FBTyxpQkFBaUI7SUFJM0IsWUFBNkIsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBSHBELFdBQU0sR0FBWSxLQUFLLENBQUM7SUFHK0IsQ0FBQztJQUUxRCxnQkFBZ0I7UUFDcEIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUMxRCxPQUFPO1NBQ1Q7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5RCxDQUFDOzs7WUFoQkgsU0FBUyxTQUFDO2dCQUNSLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixtS0FBeUM7O2FBRTNDOzs7WUFOUSxlQUFlOzs7cUJBUXBCLEtBQUs7MkJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgdHlwZSB7IERyb3Bab25lSW5mbyB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L2Ryb3Atem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERyb3Bab25lU2VydmljZSB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L2Ryb3Atem9uZS5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwiZHJvcC16b25lXCIsXHJcbiAgIHRlbXBsYXRlVXJsOiBcIi4vZHJvcC16b25lLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlVXJsczogW1wiLi9kcm9wLXpvbmUuY29tcG9uZW50LnNjc3NcIl1cclxufSlcclxuZXhwb3J0IGNsYXNzIERyb3Bab25lQ29tcG9uZW50IHtcclxuICAgQElucHV0KCkgYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgIEBJbnB1dCgpIGRyb3Bab25lSW5mbzogRHJvcFpvbmVJbmZvIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZSkge31cclxuXHJcbiAgIHB1YmxpYyBkcmFnZW50ZXJIYW5kbGVyKCkge1xyXG4gICAgICBpZiAodGhpcy5hY3RpdmUgPT09IHRydWUgfHwgdGhpcy5kcm9wWm9uZUluZm8gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc3dhcEFjdGl2ZURyb3Bab25lKHRoaXMuZHJvcFpvbmVJbmZvKTtcclxuICAgfVxyXG59XHJcbiJdfQ==
import { ChangeDetectorRef, Component, ElementRef, Input, ViewChild, ViewContainerRef } from "@angular/core";
import { ComponentCreatorService } from "../singletons/component-creator.service";
import { DropZoneService } from "../singletons/drop-zone.service";
import { DropZoneService } from "../limble-tree-root/drop-zone.service";
import { LimbleTreeBranchComponent } from "../limble-tree-branch/limble-tree-branch.component";
import { TempService } from "../singletons/temp.service";
import { DragStateService } from "../singletons/drag-state.service";
import { TreeService } from "../limble-tree-root/tree.service";
import { isDraggingAllowed, isNestingAllowed } from "../util";
import { take } from "rxjs/operators";
export class LimbleTreeNodeComponent {
constructor(componentCreatorService, changeDetectorRef, tempService, dropZoneService, treeService) {
constructor(componentCreatorService, changeDetectorRef, dragStateService, dropZoneService, treeService) {
this.componentCreatorService = componentCreatorService;
this.changeDetectorRef = changeDetectorRef;
this.tempService = tempService;
this.dragStateService = dragStateService;
this.dropZoneService = dropZoneService;

@@ -27,6 +28,7 @@ this.treeService = treeService;

if (event.dataTransfer === null || this.branch === undefined) {
return;
throw new Error("failed to run dragstartHandler");
}
const draggedElement = event.target;
if (((_a = draggedElement.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) !== "LIMBLE-TREE-NODE") {
//Don't drag stuff that isn't part of the tree
return;

@@ -36,3 +38,3 @@ }

draggedElement.classList.add("dragging");
this.tempService.set(this.branch);
this.dragStateService.dragging(this.branch);
}

@@ -42,29 +44,28 @@ dragendHandler(event) {

const draggedElement = event.target;
const sourceBranch = this.tempService.get();
if (sourceBranch === undefined) {
return;
draggedElement.classList.remove("dragging");
if (this.branch === undefined) {
throw new Error("failed to get current branch in dragendHandler");
}
this.tempService.delete();
draggedElement.classList.remove("dragging");
const dropZoneInfo = this.dropZoneService.getActiveDropZoneInfo();
if (dropZoneInfo === null) {
if (this.dragStateService.getState() !== "captured") {
return;
}
this.dropZoneService.removeActiveAndSecondaryZones();
if (dropZoneInfo.coordinates === undefined) {
throw new Error("could not determine drop zone location");
}
this.treeService.move(sourceBranch, dropZoneInfo.coordinates);
this.dragStateService.state$.pipe(take(2)).subscribe((state) => {
if (state === "captured" && this.branch !== undefined) {
this.treeService.remove(this.branch);
this.dragStateService.release();
}
});
}
dragoverHandler(event) {
var _a, _b, _c;
if (this.tempService.get() === undefined || this.branch === undefined) {
return;
if (this.branch === undefined) {
throw new Error("Can't get current branch during dragover event");
}
const sourceBranch = this.tempService.get();
const sourceBranch = this.dragStateService.getData();
if (sourceBranch === undefined) {
return;
throw new Error("Can't get source branch during dragover event");
}
//If trying to drop on self, remove any remaining drop zones and return.
if (sourceBranch === this.branch) {
//If trying to drop on self, remove any existing drop zones and return.
if (sourceBranch === this.branch ||
this.branch.getAncestors().includes(sourceBranch)) {
if (this.dropZoneService.getActiveDropZoneInfo() !== null) {

@@ -75,9 +76,26 @@ this.dropZoneService.removeActiveAndSecondaryZones();

}
if (this.treeService.getPlaceholder() === true &&
this.dropZoneAbove !== undefined) {
//If placeholder system is active, then activate the only existing drop zone
//and skip the rest of the logic in this function
const dropCoordinates = [...this.branch.getCoordinates()];
this.dropZoneService.showDropZoneFamily({
container: this.dropZoneAbove,
coordinates: dropCoordinates
});
return;
}
const target = event.currentTarget;
const topLine = target.offsetHeight / 3; //an imaginary line 1/3 of the way down from the top of the element;
const bottomLine = topLine * 2; //an imaginary line 1/3 of the way up from the bottom of the element;
const parent = this.branch.getParent();
let parentData;
if (parent !== null) {
parentData = parent.data;
}
if (event.offsetY < topLine &&
this.dropZoneAbove !== undefined &&
((_a = this.dropZoneService.getActiveDropZoneInfo()) === null || _a === void 0 ? void 0 : _a.container) !==
this.dropZoneAbove) {
this.dropZoneAbove &&
isNestingAllowed(this.treeService.treeOptions, parentData)) {
const dropCoordinates = [...this.branch.getCoordinates()];

@@ -104,3 +122,4 @@ this.dropZoneService.showDropZoneFamily({

this.dropZoneBelow &&
this.branch.getChildren().length === 0) {
this.branch.getChildren().length === 0 &&
isNestingAllowed(this.treeService.treeOptions, parentData)) {
const dropCoordinates = [...this.branch.getCoordinates()];

@@ -139,3 +158,4 @@ dropCoordinates[dropCoordinates.length - 1]++;

newBranchComponent.instance.branch = this.branch;
if (isNestingAllowed(this.treeService.treeOptions, this.branch.data)) {
if (isNestingAllowed(this.treeService.treeOptions, this.branch.data) &&
!this.treeService.getPlaceholder() === true) {
newBranchComponent.instance.dropZoneInside$.subscribe((dropZone) => {

@@ -170,2 +190,10 @@ var _a;

}
const parent = this.branch.getParent();
let parentData;
if (parent !== null) {
parentData = parent.data;
}
if (!isNestingAllowed(this.treeService.treeOptions, parentData)) {
return;
}
const currentCoordinates = this.branch.getCoordinates();

@@ -177,2 +205,6 @@ const dropCoordinatesAbove = [...currentCoordinates];

});
if (this.treeService.getPlaceholder() === true) {
//Only register one drop zone if the placeholder system is active
return;
}
const dropCoordinatesBelow = [...currentCoordinates];

@@ -218,3 +250,3 @@ dropCoordinatesBelow[dropCoordinatesBelow.length - 1]++;

{ type: ChangeDetectorRef },
{ type: TempService },
{ type: DragStateService },
{ type: DropZoneService },

@@ -231,2 +263,2 @@ { type: TreeService }

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjLyIsInNvdXJjZXMiOlsibGliL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVKLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRS9ELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU85RCxNQUFNLE9BQU8sdUJBQXVCO0lBaUJqQyxZQUNvQix1QkFBZ0QsRUFDaEQsaUJBQW9DLEVBQ3BDLFdBQXdCLEVBQ3hCLGVBQWdDLEVBQ2hDLFdBQXdCO1FBSnhCLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBeUI7UUFDaEQsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7SUFDekMsQ0FBQztJQUVKLGVBQWU7UUFDWixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGNB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RSxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM3QzthQUFNLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtZQUN6QixPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0osTUFBTSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUU7Z0JBQ3ZDLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUU7Z0JBQ3JDLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxDQUFDO1NBQ0w7SUFDSixDQUFDOzs7WUFuT0gsU0FBUyxTQUFDO2dCQUNSLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLHdZQUFnRDs7YUFFbEQ7OztZQVpRLHVCQUF1QjtZQVA3QixpQkFBaUI7WUFVWCxXQUFXO1lBRlgsZUFBZTtZQUdmLFdBQVc7OztxQkFVaEIsS0FBSzt1QkFDTCxTQUFTLFNBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFOzRCQUdoRCxTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFOzRCQUVyRCxTQUFTLFNBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO3VCQUdyRCxTQUFTLFNBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFOzJCQUdoRCxTQUFTLFNBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgIEFmdGVyVmlld0luaXQsXHJcbiAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICBDb21wb25lbnQsXHJcbiAgIEVsZW1lbnRSZWYsXHJcbiAgIElucHV0LFxyXG4gICBWaWV3Q2hpbGQsXHJcbiAgIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2NvbXBvbmVudC1jcmVhdG9yLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvZHJvcC16b25lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1icmFuY2gvbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBUZW1wU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL3RlbXAuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgdHlwZSB7IEJyYW5jaCB9IGZyb20gXCIuLi9icmFuY2hcIjtcclxuaW1wb3J0IHsgaXNEcmFnZ2luZ0FsbG93ZWQsIGlzTmVzdGluZ0FsbG93ZWQgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgIHNlbGVjdG9yOiBcImxpbWJsZS10cmVlLW5vZGVcIixcclxuICAgdGVtcGxhdGVVcmw6IFwiLi9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlVXJsczogW1wiLi9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gICBASW5wdXQoKSBicmFuY2g6IEJyYW5jaDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICBAVmlld0NoaWxkKFwibm9kZUhvc3RcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHByaXZhdGUgbm9kZUhvc3Q6XHJcbiAgICAgIHwgVmlld0NvbnRhaW5lclJlZlxyXG4gICAgICB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcImRyb3Bab25lQWJvdmVcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgIHByaXZhdGUgZHJvcFpvbmVBYm92ZTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcImRyb3Bab25lQmVsb3dcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgIHByaXZhdGUgZHJvcFpvbmVCZWxvdzogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSBkcm9wWm9uZUluc2lkZTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcImNoaWxkcmVuXCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwcml2YXRlIGNoaWxkcmVuOlxyXG4gICAgICB8IFZpZXdDb250YWluZXJSZWZcclxuICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgIEBWaWV3Q2hpbGQoXCJkcmFnZ2FibGVEaXZcIiwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgZHJhZ2dhYmxlRGl2OlxyXG4gICAgICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XHJcbiAgICAgIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50Q3JlYXRvclNlcnZpY2U6IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wU2VydmljZTogVGVtcFNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVTZXJ2aWNlOiBEcm9wWm9uZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlXHJcbiAgICkge31cclxuXHJcbiAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgdGhpcy5yZWdpc3RlckRyb3Bab25lcygpO1xyXG4gICAgICB0aGlzLnJlbmRlclNlbGYoKTtcclxuICAgICAgdGhpcy5yZW5kZXJDaGlsZHJlbigpO1xyXG4gICAgICB0aGlzLmNoZWNrRm9ySGFuZGxlKCk7XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJhZ3N0YXJ0SGFuZGxlcihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyID09PSBudWxsIHx8IHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoZHJhZ2dlZEVsZW1lbnQucGFyZW50RWxlbWVudD8udGFnTmFtZSAhPT0gXCJMSU1CTEUtVFJFRS1OT0RFXCIpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gXCJtb3ZlXCI7XHJcbiAgICAgIGRyYWdnZWRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkcmFnZ2luZ1wiKTtcclxuICAgICAgdGhpcy50ZW1wU2VydmljZS5zZXQodGhpcy5icmFuY2gpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJhZ2VuZEhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IHNvdXJjZUJyYW5jaCA9IHRoaXMudGVtcFNlcnZpY2UuZ2V0KCk7XHJcbiAgICAgIGlmIChzb3VyY2VCcmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50ZW1wU2VydmljZS5kZWxldGUoKTtcclxuICAgICAgZHJhZ2dlZEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImRyYWdnaW5nXCIpO1xyXG4gICAgICBjb25zdCBkcm9wWm9uZUluZm8gPSB0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZUluZm8oKTtcclxuICAgICAgaWYgKGRyb3Bab25lSW5mbyA9PT0gbnVsbCkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UucmVtb3ZlQWN0aXZlQW5kU2Vjb25kYXJ5Wm9uZXMoKTtcclxuICAgICAgaWYgKGRyb3Bab25lSW5mby5jb29yZGluYXRlcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvdWxkIG5vdCBkZXRlcm1pbmUgZHJvcCB6b25lIGxvY2F0aW9uXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJlZVNlcnZpY2UubW92ZShzb3VyY2VCcmFuY2gsIGRyb3Bab25lSW5mby5jb29yZGluYXRlcyk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnb3ZlckhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgICBpZiAodGhpcy50ZW1wU2VydmljZS5nZXQoKSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNvdXJjZUJyYW5jaCA9IHRoaXMudGVtcFNlcnZpY2UuZ2V0KCk7XHJcbiAgICAgIGlmIChzb3VyY2VCcmFuY2ggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy9JZiB0cnlpbmcgdG8gZHJvcCBvbiBzZWxmLCByZW1vdmUgYW55IHJlbWFpbmluZyBkcm9wIHpvbmVzIGFuZCByZXR1cm4uXHJcbiAgICAgIGlmIChzb3VyY2VCcmFuY2ggPT09IHRoaXMuYnJhbmNoKSB7XHJcbiAgICAgICAgIGlmICh0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZUluZm8oKSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5yZW1vdmVBY3RpdmVBbmRTZWNvbmRhcnlab25lcygpO1xyXG4gICAgICAgICB9XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBjb25zdCB0b3BMaW5lID0gdGFyZ2V0Lm9mZnNldEhlaWdodCAvIDM7IC8vYW4gaW1hZ2luYXJ5IGxpbmUgMS8zIG9mIHRoZSB3YXkgZG93biBmcm9tIHRoZSB0b3Agb2YgdGhlIGVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IGJvdHRvbUxpbmUgPSB0b3BMaW5lICogMjsgLy9hbiBpbWFnaW5hcnkgbGluZSAxLzMgb2YgdGhlIHdheSB1cCBmcm9tIHRoZSBib3R0b20gb2YgdGhlIGVsZW1lbnQ7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgZXZlbnQub2Zmc2V0WSA8IHRvcExpbmUgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuZ2V0QWN0aXZlRHJvcFpvbmVJbmZvKCk/LmNvbnRhaW5lciAhPT1cclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zdCBkcm9wQ29vcmRpbmF0ZXMgPSBbLi4udGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKV07XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnNob3dEcm9wWm9uZUZhbWlseSh7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5kcm9wWm9uZUFib3ZlLFxyXG4gICAgICAgICAgICBjb29yZGluYXRlczogZHJvcENvb3JkaW5hdGVzXHJcbiAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICBldmVudC5vZmZzZXRZIDwgYm90dG9tTGluZSAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lSW5zaWRlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuZ2V0QWN0aXZlRHJvcFpvbmVJbmZvKCk/LmNvbnRhaW5lciAhPT1cclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZVxyXG4gICAgICApIHtcclxuICAgICAgICAgY29uc3QgZHJvcENvb3JkaW5hdGVzID0gWy4uLnRoaXMuYnJhbmNoLmdldENvb3JkaW5hdGVzKCldO1xyXG4gICAgICAgICBkcm9wQ29vcmRpbmF0ZXMucHVzaCgwKTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc2hvd0Ryb3Bab25lRmFtaWx5KHtcclxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmRyb3Bab25lSW5zaWRlLFxyXG4gICAgICAgICAgICBjb29yZGluYXRlczogZHJvcENvb3JkaW5hdGVzXHJcbiAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICBldmVudC5vZmZzZXRZID49IGJvdHRvbUxpbmUgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUJlbG93ICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuZ2V0QWN0aXZlRHJvcFpvbmVJbmZvKCk/LmNvbnRhaW5lciAhPT1cclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUJlbG93ICYmXHJcbiAgICAgICAgIHRoaXMuYnJhbmNoLmdldENoaWxkcmVuKCkubGVuZ3RoID09PSAwXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zdCBkcm9wQ29vcmRpbmF0ZXMgPSBbLi4udGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKV07XHJcbiAgICAgICAgIGRyb3BDb29yZGluYXRlc1tkcm9wQ29vcmRpbmF0ZXMubGVuZ3RoIC0gMV0rKztcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc2hvd0Ryb3Bab25lRmFtaWx5KHtcclxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmRyb3Bab25lQmVsb3csXHJcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBkcm9wQ29vcmRpbmF0ZXNcclxuICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSByZW5kZXJTZWxmKCkge1xyXG4gICAgICBpZiAodGhpcy5ub2RlSG9zdCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlbmRlciB0cmVlIG5vZGVcIik7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGNvbXBvbmVudCA9IHRoaXMuYnJhbmNoLmRhdGEuY29tcG9uZW50O1xyXG4gICAgICBpZiAoY29tcG9uZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgY29tcG9uZW50ID0gdGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucz8uZGVmYXVsdENvbXBvbmVudDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29tcG9uZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibGltYmxlVHJlZSByZXF1aXJlcyBhIGNvbXBvbmVudCB0byByZW5kZXJcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRDcmVhdG9yU2VydmljZS5hcHBlbmRDb21wb25lbnQ8YW55PihcclxuICAgICAgICAgY29tcG9uZW50LmNsYXNzLFxyXG4gICAgICAgICB0aGlzLm5vZGVIb3N0XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5ub2RlRGF0YSA9IHRoaXMuYnJhbmNoLmRhdGE7XHJcbiAgICAgIGZvciAoY29uc3QgYmluZGluZyBpbiBjb21wb25lbnQuYmluZGluZ3MpIHtcclxuICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlW2JpbmRpbmddID0gY29tcG9uZW50LmJpbmRpbmdzW2JpbmRpbmddO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgcmVuZGVyQ2hpbGRyZW4oKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkcmVuICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgaWYgKHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYnJhbmNoIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBjb25zdCBuZXdCcmFuY2hDb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlQnJhbmNoQ29tcG9uZW50PihcclxuICAgICAgICAgICAgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5jaGlsZHJlblxyXG4gICAgICAgICApO1xyXG4gICAgICAgICBuZXdCcmFuY2hDb21wb25lbnQuaW5zdGFuY2UuYnJhbmNoID0gdGhpcy5icmFuY2g7XHJcbiAgICAgICAgIGlmIChpc05lc3RpbmdBbGxvd2VkKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsIHRoaXMuYnJhbmNoLmRhdGEpKSB7XHJcbiAgICAgICAgICAgIG5ld0JyYW5jaENvbXBvbmVudC5pbnN0YW5jZS5kcm9wWm9uZUluc2lkZSQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAoZHJvcFpvbmUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICBkcm9wWm9uZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/LmFsbG93RHJhZ2dpbmcgIT09IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bab25lSW5zaWRlID0gZHJvcFpvbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byByZWdpc3RlciBpbm5lciBkcm9wIHpvbmVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgY29uc3QgZHJvcENvb3JkaW5hdGVzSW5zaWRlID0gdGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgZHJvcENvb3JkaW5hdGVzSW5zaWRlLnB1c2goMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmFkZERyb3Bab25lKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmRyb3Bab25lSW5zaWRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlczogZHJvcENvb3JkaW5hdGVzSW5zaWRlXHJcbiAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgcmVnaXN0ZXJEcm9wWm9uZXMoKSB7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zPy5hbGxvd0RyYWdnaW5nID09PSBmYWxzZSkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lQWJvdmUgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lQmVsb3cgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICB0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJmYWlsZWQgdG8gcmVnaXN0ZXIgZHJvcCB6b25lc1wiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICBjb25zdCBkcm9wQ29vcmRpbmF0ZXNBYm92ZSA9IFsuLi5jdXJyZW50Q29vcmRpbmF0ZXNdO1xyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5hZGREcm9wWm9uZSh7XHJcbiAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5kcm9wWm9uZUFib3ZlLFxyXG4gICAgICAgICBjb29yZGluYXRlczogZHJvcENvb3JkaW5hdGVzQWJvdmVcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IGRyb3BDb29yZGluYXRlc0JlbG93ID0gWy4uLmN1cnJlbnRDb29yZGluYXRlc107XHJcbiAgICAgIGRyb3BDb29yZGluYXRlc0JlbG93W2Ryb3BDb29yZGluYXRlc0JlbG93Lmxlbmd0aCAtIDFdKys7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmFkZERyb3Bab25lKHtcclxuICAgICAgICAgY29udGFpbmVyOiB0aGlzLmRyb3Bab25lQmVsb3csXHJcbiAgICAgICAgIGNvb3JkaW5hdGVzOiBkcm9wQ29vcmRpbmF0ZXNCZWxvd1xyXG4gICAgICB9KTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBjaGVja0ZvckhhbmRsZSgpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMuZHJhZ2dhYmxlRGl2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRyYWdnYWJsZURpdi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCBoYW5kbGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubGltYmxlLXRyZWUtaGFuZGxlXCIpO1xyXG4gICAgICBpZiAoIWlzRHJhZ2dpbmdBbGxvd2VkKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsIHRoaXMuYnJhbmNoPy5kYXRhKSkge1xyXG4gICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRyYWdnYWJsZVwiLCBcImZhbHNlXCIpO1xyXG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRyYWdnYWJsZVwiLCBcInRydWVcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgXCJ0cnVlXCIpO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgfVxyXG59XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjLyIsInNvdXJjZXMiOlsibGliL2xpbWJsZS10cmVlLW5vZGUvbGltYmxlLXRyZWUtbm9kZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVKLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLEtBQUssRUFDTCxTQUFTLEVBQ1QsZ0JBQWdCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMvRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQWtCLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPdEMsTUFBTSxPQUFPLHVCQUF1QjtJQWlCakMsWUFDb0IsdUJBQWdELEVBQ2hELGlCQUFvQyxFQUNwQyxnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsV0FBd0I7UUFKeEIsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUF5QjtRQUNoRCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQ3pDLENBQUM7SUFFSixlQUFlO1FBQ1osSUFBSSxDQUFDLGlCQUFpQixFQUFFLENB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ZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO3VCQUdyRCxTQUFTLFNBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFOzJCQUdoRCxTQUFTLFNBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgIEFmdGVyVmlld0luaXQsXHJcbiAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICBDb21wb25lbnQsXHJcbiAgIEVsZW1lbnRSZWYsXHJcbiAgIElucHV0LFxyXG4gICBWaWV3Q2hpbGQsXHJcbiAgIFZpZXdDb250YWluZXJSZWZcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2NvbXBvbmVudC1jcmVhdG9yLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvZHJvcC16b25lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1icmFuY2gvbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvZHJhZy1zdGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlLCBUcmVlU2VydmljZSB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCcmFuY2ggfSBmcm9tIFwiLi4vYnJhbmNoXCI7XHJcbmltcG9ydCB7IGlzRHJhZ2dpbmdBbGxvd2VkLCBpc05lc3RpbmdBbGxvd2VkIH0gZnJvbSBcIi4uL3V0aWxcIjtcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgIHNlbGVjdG9yOiBcImxpbWJsZS10cmVlLW5vZGVcIixcclxuICAgdGVtcGxhdGVVcmw6IFwiLi9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlVXJsczogW1wiLi9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gICBASW5wdXQoKSBicmFuY2g6IEJyYW5jaDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICBAVmlld0NoaWxkKFwibm9kZUhvc3RcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHByaXZhdGUgbm9kZUhvc3Q6XHJcbiAgICAgIHwgVmlld0NvbnRhaW5lclJlZlxyXG4gICAgICB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcImRyb3Bab25lQWJvdmVcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgIHByaXZhdGUgZHJvcFpvbmVBYm92ZTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcImRyb3Bab25lQmVsb3dcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgIHByaXZhdGUgZHJvcFpvbmVCZWxvdzogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgcHJpdmF0ZSBkcm9wWm9uZUluc2lkZTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgQFZpZXdDaGlsZChcImNoaWxkcmVuXCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KSBwcml2YXRlIGNoaWxkcmVuOlxyXG4gICAgICB8IFZpZXdDb250YWluZXJSZWZcclxuICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgIEBWaWV3Q2hpbGQoXCJkcmFnZ2FibGVEaXZcIiwgeyByZWFkOiBFbGVtZW50UmVmIH0pIHByaXZhdGUgZHJhZ2dhYmxlRGl2OlxyXG4gICAgICB8IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+XHJcbiAgICAgIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50Q3JlYXRvclNlcnZpY2U6IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcmFnU3RhdGVTZXJ2aWNlOiBEcmFnU3RhdGVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU2VydmljZTogRHJvcFpvbmVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHRyZWVTZXJ2aWNlOiBUcmVlU2VydmljZVxyXG4gICApIHt9XHJcblxyXG4gICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgIHRoaXMucmVnaXN0ZXJEcm9wWm9uZXMoKTtcclxuICAgICAgdGhpcy5yZW5kZXJTZWxmKCk7XHJcbiAgICAgIHRoaXMucmVuZGVyQ2hpbGRyZW4oKTtcclxuICAgICAgdGhpcy5jaGVja0ZvckhhbmRsZSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGRyYWdzdGFydEhhbmRsZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2ZlciA9PT0gbnVsbCB8fCB0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBydW4gZHJhZ3N0YXJ0SGFuZGxlclwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkcmFnZ2VkRWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKGRyYWdnZWRFbGVtZW50LnBhcmVudEVsZW1lbnQ/LnRhZ05hbWUgIT09IFwiTElNQkxFLVRSRUUtTk9ERVwiKSB7XHJcbiAgICAgICAgIC8vRG9uJ3QgZHJhZyBzdHVmZiB0aGF0IGlzbid0IHBhcnQgb2YgdGhlIHRyZWVcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gXCJtb3ZlXCI7XHJcbiAgICAgIGRyYWdnZWRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJkcmFnZ2luZ1wiKTtcclxuICAgICAgdGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmRyYWdnaW5nKHRoaXMuYnJhbmNoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGRyYWdlbmRIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBkcmFnZ2VkRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwiZHJhZ2dpbmdcIik7XHJcbiAgICAgIGlmICh0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byBnZXQgY3VycmVudCBicmFuY2ggaW4gZHJhZ2VuZEhhbmRsZXJcIik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZHJhZ1N0YXRlU2VydmljZS5nZXRTdGF0ZSgpICE9PSBcImNhcHR1cmVkXCIpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZHJhZ1N0YXRlU2VydmljZS5zdGF0ZSQucGlwZSh0YWtlKDIpKS5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XHJcbiAgICAgICAgIGlmIChzdGF0ZSA9PT0gXCJjYXB0dXJlZFwiICYmIHRoaXMuYnJhbmNoICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS5yZW1vdmUodGhpcy5icmFuY2gpO1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UucmVsZWFzZSgpO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJhZ292ZXJIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgaWYgKHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZ2V0IGN1cnJlbnQgYnJhbmNoIGR1cmluZyBkcmFnb3ZlciBldmVudFwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzb3VyY2VCcmFuY2ggPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuZ2V0RGF0YSgpO1xyXG4gICAgICBpZiAoc291cmNlQnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgZ2V0IHNvdXJjZSBicmFuY2ggZHVyaW5nIGRyYWdvdmVyIGV2ZW50XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vSWYgdHJ5aW5nIHRvIGRyb3Agb24gc2VsZiwgcmVtb3ZlIGFueSBleGlzdGluZyBkcm9wIHpvbmVzIGFuZCByZXR1cm4uXHJcbiAgICAgIGlmIChcclxuICAgICAgICAgc291cmNlQnJhbmNoID09PSB0aGlzLmJyYW5jaCB8fFxyXG4gICAgICAgICB0aGlzLmJyYW5jaC5nZXRBbmNlc3RvcnMoKS5pbmNsdWRlcyhzb3VyY2VCcmFuY2gpXHJcbiAgICAgICkge1xyXG4gICAgICAgICBpZiAodGhpcy5kcm9wWm9uZVNlcnZpY2UuZ2V0QWN0aXZlRHJvcFpvbmVJbmZvKCkgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UucmVtb3ZlQWN0aXZlQW5kU2Vjb25kYXJ5Wm9uZXMoKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFxyXG4gICAgICAgICB0aGlzLnRyZWVTZXJ2aWNlLmdldFBsYWNlaG9sZGVyKCkgPT09IHRydWUgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlICE9PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIC8vSWYgcGxhY2Vob2xkZXIgc3lzdGVtIGlzIGFjdGl2ZSwgdGhlbiBhY3RpdmF0ZSB0aGUgb25seSBleGlzdGluZyBkcm9wIHpvbmVcclxuICAgICAgICAgLy9hbmQgc2tpcCB0aGUgcmVzdCBvZiB0aGUgbG9naWMgaW4gdGhpcyBmdW5jdGlvblxyXG4gICAgICAgICBjb25zdCBkcm9wQ29vcmRpbmF0ZXMgPSBbLi4udGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKV07XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnNob3dEcm9wWm9uZUZhbWlseSh7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5kcm9wWm9uZUFib3ZlLFxyXG4gICAgICAgICAgICBjb29yZGluYXRlczogZHJvcENvb3JkaW5hdGVzXHJcbiAgICAgICAgIH0pO1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgY29uc3QgdG9wTGluZSA9IHRhcmdldC5vZmZzZXRIZWlnaHQgLyAzOyAvL2FuIGltYWdpbmFyeSBsaW5lIDEvMyBvZiB0aGUgd2F5IGRvd24gZnJvbSB0aGUgdG9wIG9mIHRoZSBlbGVtZW50O1xyXG4gICAgICBjb25zdCBib3R0b21MaW5lID0gdG9wTGluZSAqIDI7IC8vYW4gaW1hZ2luYXJ5IGxpbmUgMS8zIG9mIHRoZSB3YXkgdXAgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBlbGVtZW50O1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmJyYW5jaC5nZXRQYXJlbnQoKTtcclxuICAgICAgbGV0IHBhcmVudERhdGE7XHJcbiAgICAgIGlmIChwYXJlbnQgIT09IG51bGwpIHtcclxuICAgICAgICAgcGFyZW50RGF0YSA9IHBhcmVudC5kYXRhIGFzIExpbWJsZVRyZWVOb2RlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgZXZlbnQub2Zmc2V0WSA8IHRvcExpbmUgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuZ2V0QWN0aXZlRHJvcFpvbmVJbmZvKCk/LmNvbnRhaW5lciAhPT1cclxuICAgICAgICAgICAgdGhpcy5kcm9wWm9uZUFib3ZlICYmXHJcbiAgICAgICAgIGlzTmVzdGluZ0FsbG93ZWQodGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucywgcGFyZW50RGF0YSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgIGNvbnN0IGRyb3BDb29yZGluYXRlcyA9IFsuLi50aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpXTtcclxuICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2Uuc2hvd0Ryb3Bab25lRmFtaWx5KHtcclxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmRyb3Bab25lQWJvdmUsXHJcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBkcm9wQ29vcmRpbmF0ZXNcclxuICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgIGV2ZW50Lm9mZnNldFkgPCBib3R0b21MaW5lICYmXHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZUluZm8oKT8uY29udGFpbmVyICE9PVxyXG4gICAgICAgICAgICB0aGlzLmRyb3Bab25lSW5zaWRlXHJcbiAgICAgICkge1xyXG4gICAgICAgICBjb25zdCBkcm9wQ29vcmRpbmF0ZXMgPSBbLi4udGhpcy5icmFuY2guZ2V0Q29vcmRpbmF0ZXMoKV07XHJcbiAgICAgICAgIGRyb3BDb29yZGluYXRlcy5wdXNoKDApO1xyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5zaG93RHJvcFpvbmVGYW1pbHkoe1xyXG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuZHJvcFpvbmVJbnNpZGUsXHJcbiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBkcm9wQ29vcmRpbmF0ZXNcclxuICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgIGV2ZW50Lm9mZnNldFkgPj0gYm90dG9tTGluZSAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lQmVsb3cgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5nZXRBY3RpdmVEcm9wWm9uZUluZm8oKT8uY29udGFpbmVyICE9PVxyXG4gICAgICAgICAgICB0aGlzLmRyb3Bab25lQmVsb3cgJiZcclxuICAgICAgICAgdGhpcy5icmFuY2guZ2V0Q2hpbGRyZW4oKS5sZW5ndGggPT09IDAgJiZcclxuICAgICAgICAgaXNOZXN0aW5nQWxsb3dlZCh0aGlzLnRyZWVTZXJ2aWNlLnRyZWVPcHRpb25zLCBwYXJlbnREYXRhKVxyXG4gICAgICApIHtcclxuICAgICAgICAgY29uc3QgZHJvcENvb3JkaW5hdGVzID0gWy4uLnRoaXMuYnJhbmNoLmdldENvb3JkaW5hdGVzKCldO1xyXG4gICAgICAgICBkcm9wQ29vcmRpbmF0ZXNbZHJvcENvb3JkaW5hdGVzLmxlbmd0aCAtIDFdKys7XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLnNob3dEcm9wWm9uZUZhbWlseSh7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5kcm9wWm9uZUJlbG93LFxyXG4gICAgICAgICAgICBjb29yZGluYXRlczogZHJvcENvb3JkaW5hdGVzXHJcbiAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgcmVuZGVyU2VsZigpIHtcclxuICAgICAgaWYgKHRoaXMubm9kZUhvc3QgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byByZW5kZXIgdHJlZSBub2RlXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBjb21wb25lbnQgPSB0aGlzLmJyYW5jaC5kYXRhLmNvbXBvbmVudDtcclxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIGNvbXBvbmVudCA9IHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/LmRlZmF1bHRDb21wb25lbnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImxpbWJsZVRyZWUgcmVxdWlyZXMgYSBjb21wb25lbnQgdG8gcmVuZGVyXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50Q3JlYXRvclNlcnZpY2UuYXBwZW5kQ29tcG9uZW50PGFueT4oXHJcbiAgICAgICAgIGNvbXBvbmVudC5jbGFzcyxcclxuICAgICAgICAgdGhpcy5ub2RlSG9zdFxyXG4gICAgICApO1xyXG4gICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2Uubm9kZURhdGEgPSB0aGlzLmJyYW5jaC5kYXRhO1xyXG4gICAgICBmb3IgKGNvbnN0IGJpbmRpbmcgaW4gY29tcG9uZW50LmJpbmRpbmdzKSB7XHJcbiAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZVtiaW5kaW5nXSA9IGNvbXBvbmVudC5iaW5kaW5nc1tiaW5kaW5nXTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlbmRlckNoaWxkcmVuKCkge1xyXG4gICAgICBpZiAodGhpcy5jaGlsZHJlbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIGlmICh0aGlzLmJyYW5jaCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImJyYW5jaCBpcyB1bmRlZmluZWRcIik7XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgY29uc3QgbmV3QnJhbmNoQ29tcG9uZW50ID0gdGhpcy5jb21wb25lbnRDcmVhdG9yU2VydmljZS5hcHBlbmRDb21wb25lbnQ8TGltYmxlVHJlZUJyYW5jaENvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQsXHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5cclxuICAgICAgICAgKTtcclxuICAgICAgICAgbmV3QnJhbmNoQ29tcG9uZW50Lmluc3RhbmNlLmJyYW5jaCA9IHRoaXMuYnJhbmNoO1xyXG4gICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGlzTmVzdGluZ0FsbG93ZWQodGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucywgdGhpcy5icmFuY2guZGF0YSkgJiZcclxuICAgICAgICAgICAgIXRoaXMudHJlZVNlcnZpY2UuZ2V0UGxhY2Vob2xkZXIoKSA9PT0gdHJ1ZVxyXG4gICAgICAgICApIHtcclxuICAgICAgICAgICAgbmV3QnJhbmNoQ29tcG9uZW50Lmluc3RhbmNlLmRyb3Bab25lSW5zaWRlJC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgIChkcm9wWm9uZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgIGRyb3Bab25lICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlU2VydmljZS50cmVlT3B0aW9ucz8uYWxsb3dEcmFnZ2luZyAhPT0gZmFsc2VcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcFpvbmVJbnNpZGUgPSBkcm9wWm9uZTtcclxuICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIHJlZ2lzdGVyIGlubmVyIGRyb3Agem9uZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICBjb25zdCBkcm9wQ29vcmRpbmF0ZXNJbnNpZGUgPSB0aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICBkcm9wQ29vcmRpbmF0ZXNJbnNpZGUucHVzaCgwKTtcclxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuYWRkRHJvcFpvbmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IHRoaXMuZHJvcFpvbmVJbnNpZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBkcm9wQ29vcmRpbmF0ZXNJbnNpZGVcclxuICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSByZWdpc3RlckRyb3Bab25lcygpIHtcclxuICAgICAgaWYgKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnM/LmFsbG93RHJhZ2dpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVBYm92ZSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMuZHJvcFpvbmVCZWxvdyA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMuYnJhbmNoID09PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImZhaWxlZCB0byByZWdpc3RlciBkcm9wIHpvbmVzXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuYnJhbmNoLmdldFBhcmVudCgpO1xyXG4gICAgICBsZXQgcGFyZW50RGF0YTtcclxuICAgICAgaWYgKHBhcmVudCAhPT0gbnVsbCkge1xyXG4gICAgICAgICBwYXJlbnREYXRhID0gcGFyZW50LmRhdGEgYXMgTGltYmxlVHJlZU5vZGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFpc05lc3RpbmdBbGxvd2VkKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsIHBhcmVudERhdGEpKSB7XHJcbiAgICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBjdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmJyYW5jaC5nZXRDb29yZGluYXRlcygpO1xyXG4gICAgICBjb25zdCBkcm9wQ29vcmRpbmF0ZXNBYm92ZSA9IFsuLi5jdXJyZW50Q29vcmRpbmF0ZXNdO1xyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5hZGREcm9wWm9uZSh7XHJcbiAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5kcm9wWm9uZUFib3ZlLFxyXG4gICAgICAgICBjb29yZGluYXRlczogZHJvcENvb3JkaW5hdGVzQWJvdmVcclxuICAgICAgfSk7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVTZXJ2aWNlLmdldFBsYWNlaG9sZGVyKCkgPT09IHRydWUpIHtcclxuICAgICAgICAgLy9Pbmx5IHJlZ2lzdGVyIG9uZSBkcm9wIHpvbmUgaWYgdGhlIHBsYWNlaG9sZGVyIHN5c3RlbSBpcyBhY3RpdmVcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGRyb3BDb29yZGluYXRlc0JlbG93ID0gWy4uLmN1cnJlbnRDb29yZGluYXRlc107XHJcbiAgICAgIGRyb3BDb29yZGluYXRlc0JlbG93W2Ryb3BDb29yZGluYXRlc0JlbG93Lmxlbmd0aCAtIDFdKys7XHJcbiAgICAgIHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmFkZERyb3Bab25lKHtcclxuICAgICAgICAgY29udGFpbmVyOiB0aGlzLmRyb3Bab25lQmVsb3csXHJcbiAgICAgICAgIGNvb3JkaW5hdGVzOiBkcm9wQ29vcmRpbmF0ZXNCZWxvd1xyXG4gICAgICB9KTtcclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBjaGVja0ZvckhhbmRsZSgpOiB2b2lkIHtcclxuICAgICAgaWYgKHRoaXMuZHJhZ2dhYmxlRGl2ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRyYWdnYWJsZURpdi5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCBoYW5kbGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIubGltYmxlLXRyZWUtaGFuZGxlXCIpO1xyXG4gICAgICBpZiAoIWlzRHJhZ2dpbmdBbGxvd2VkKHRoaXMudHJlZVNlcnZpY2UudHJlZU9wdGlvbnMsIHRoaXMuYnJhbmNoPy5kYXRhKSkge1xyXG4gICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRyYWdnYWJsZVwiLCBcImZhbHNlXCIpO1xyXG4gICAgICB9IGVsc2UgaWYgKGhhbmRsZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShcImRyYWdnYWJsZVwiLCBcInRydWVcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgXCJ0cnVlXCIpO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsICgpID0+IHtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkcmFnZ2FibGVcIiwgXCJmYWxzZVwiKTtcclxuICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgfVxyXG59XHJcbiJdfQ==
import { ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef } from "@angular/core";
import { BehaviorSubject } from "rxjs";
import { DropZoneService } from "../singletons/drop-zone.service";
import { DropZoneService } from "./drop-zone.service";
import { TreeService } from "./tree.service";
import { isElementDescendant } from "../util";
import { DragStateService } from "../singletons/drag-state.service";
export class LimbleTreeRootComponent {
constructor(treeService, changeDetectorRef, dropZoneService) {
constructor(treeService, changeDetectorRef, dropZoneService, dragStateService) {
this.treeService = treeService;
this.changeDetectorRef = changeDetectorRef;
this.dropZoneService = dropZoneService;
this.dragStateService = dragStateService;
this.treeChange = new EventEmitter();

@@ -59,4 +61,21 @@ this.treeDrop = new EventEmitter();

}
dropHandler(event) {
event.stopPropagation();
const dropZoneInfo = this.dropZoneService.getActiveDropZoneInfo();
if (this.dragStateService.getState() !== "droppable") {
return;
}
if (dropZoneInfo === null) {
throw new Error("failed to get active drop zone at drop handler");
}
const sourceBranch = this.dragStateService.capture();
if (sourceBranch === undefined) {
throw new Error("failed to get current branch in dragendHandler");
}
this.dropZoneService.removeActiveAndSecondaryZones();
this.treeService.drop(sourceBranch, dropZoneInfo.coordinates);
}
ngOnDestroy() {
this.changesSubscription.unsubscribe();
this.dropSubscription.unsubscribe();
}

@@ -67,4 +86,4 @@ }

selector: "limble-tree-root",
template: "<div\r\n (dragover)=\"dragoverHandler($event)\"\r\n (dragleave)=\"dragleaveHandler($event)\"\r\n>\r\n <ng-template #dropZoneInside></ng-template>\r\n <ng-template #host></ng-template>\r\n</div>\r\n",
providers: [TreeService],
template: "<div\r\n (dragover)=\"dragoverHandler($event)\"\r\n (dragleave)=\"dragleaveHandler($event)\"\r\n (drop)=\"dropHandler($event)\"\r\n>\r\n <ng-template #dropZoneInside></ng-template>\r\n <ng-template #host></ng-template>\r\n</div>\r\n",
providers: [TreeService, DropZoneService],
styles: [""]

@@ -76,3 +95,4 @@ },] }

{ type: ChangeDetectorRef },
{ type: DropZoneService }
{ type: DropZoneService },
{ type: DragStateService }
];

@@ -88,2 +108,2 @@ LimbleTreeRootComponent.propDecorators = {

};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjLyIsInNvdXJjZXMiOlsibGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVKLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQVE5QyxNQUFNLE9BQU8sdUJBQXVCO0lBc0JqQyxZQUNvQixXQUF3QixFQUN4QixpQkFBb0MsRUFDcEMsZUFBZ0M7UUFGaEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFWakMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFVeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxlQUFlO1FBQ1osSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxXQUFXO1FBQ1IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUNyRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDaEI7SUFDSixDQUFDO0lBRU0sTUFBTTtRQUNWLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FDWix5REFBeUQsQ0FDM0QsQ0FBQztTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUMxQixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7U0FDdkQ7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTSxlQUFlLENBQUMsS0FBZ0I7UUFDcEMsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLElBQUksRUFBRTtZQUM5QixPQUFPO1NBQ1Q7UUFDRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUMxQyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsS0FBZ0I7UUFDckMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztRQUMxQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQzFDLElBQ0csQ0FBQyxDQUFDLGFBQWEsWUFBWSxJQUFJLENBQUM7WUFDaEMsQ0FBQyxDQUFDLGFBQWEsWUFBWSxJQUFJLENBQUM7WUFDaEMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEtBQUssRUFDNUQ7WUFDQyxPQUFPO1NBQ1Q7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVELFdBQVc7UUFDUixJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDMUMsQ0FBQzs7O1lBM0ZILFNBQVMsU0FBQztnQkFDUixRQUFRLEVBQUUsa0JBQWtCO2dCQUM1Qix5TkFBZ0Q7Z0JBRWhELFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQzs7YUFDMUI7OztZQVJRLFdBQVc7WUFqQmpCLGlCQUFpQjtZQVdYLGVBQWU7OzttQkFpQnBCLEtBQUs7c0JBQ0wsS0FBSzttQkFFTCxTQUFTLFNBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFOzZCQUk1QyxTQUFTLFNBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7OEJBR3RELE1BQU07eUJBR04sTUFBTTt1QkFFTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgIENvbXBvbmVudCxcclxuICAgRXZlbnRFbWl0dGVyLFxyXG4gICBJbnB1dCxcclxuICAgT25DaGFuZ2VzLFxyXG4gICBPbkRlc3Ryb3ksXHJcbiAgIE91dHB1dCxcclxuICAgVmlld0NoaWxkLFxyXG4gICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi4vc2luZ2xldG9ucy9kcm9wLXpvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gICBMaW1ibGVUcmVlRGF0YSxcclxuICAgTGltYmxlVHJlZU9wdGlvbnMsXHJcbiAgIFRyZWVEcm9wXHJcbn0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSBcIi4vdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGlzRWxlbWVudERlc2NlbmRhbnQgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgIHNlbGVjdG9yOiBcImxpbWJsZS10cmVlLXJvb3RcIixcclxuICAgdGVtcGxhdGVVcmw6IFwiLi9saW1ibGUtdHJlZS1yb290LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgIHN0eWxlVXJsczogW1wiLi9saW1ibGUtdHJlZS1yb290LmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gICBwcm92aWRlcnM6IFtUcmVlU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVSb290Q29tcG9uZW50XHJcbiAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gICBASW5wdXQoKSBkYXRhOiBMaW1ibGVUcmVlRGF0YSB8IHVuZGVmaW5lZDtcclxuICAgQElucHV0KCkgb3B0aW9uczogTGltYmxlVHJlZU9wdGlvbnMgfCB1bmRlZmluZWQ7XHJcblxyXG4gICBAVmlld0NoaWxkKFwiaG9zdFwiLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgcHJpdmF0ZSBob3N0OlxyXG4gICAgICB8IFZpZXdDb250YWluZXJSZWZcclxuICAgICAgfCB1bmRlZmluZWQ7XHJcblxyXG4gICBAVmlld0NoaWxkKFwiZHJvcFpvbmVJbnNpZGVcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgIGRyb3Bab25lSW5zaWRlOiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgQE91dHB1dCgpXHJcbiAgIHJlYWRvbmx5IGRyb3Bab25lSW5zaWRlJDogQmVoYXZpb3JTdWJqZWN0PFZpZXdDb250YWluZXJSZWYgfCB1bmRlZmluZWQ+O1xyXG5cclxuICAgQE91dHB1dCgpIHJlYWRvbmx5IHRyZWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bGw+KCk7XHJcblxyXG4gICBAT3V0cHV0KCkgcmVhZG9ubHkgdHJlZURyb3AgPSBuZXcgRXZlbnRFbWl0dGVyPFRyZWVEcm9wPigpO1xyXG5cclxuICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VzU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZVxyXG4gICApIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuZHJvcFpvbmVJbnNpZGUpO1xyXG4gICAgICB0aGlzLmNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnRyZWVTZXJ2aWNlLmNoYW5nZXMkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgIHRoaXMudHJlZUNoYW5nZS5lbWl0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRyb3BTdWJzY3JpcHRpb24gPSB0aGlzLnRyZWVTZXJ2aWNlLmRyb3BzJC5zdWJzY3JpYmUoKGRyb3ApID0+IHtcclxuICAgICAgICAgdGhpcy50cmVlRHJvcC5lbWl0KGRyb3ApO1xyXG4gICAgICB9KTtcclxuICAgfVxyXG5cclxuICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW5zaWRlJC5uZXh0KHRoaXMuZHJvcFpvbmVJbnNpZGUpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW5zaWRlJC5jb21wbGV0ZSgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgfVxyXG5cclxuICAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAgIGlmICh0aGlzLmhvc3QgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyB1cGRhdGUoKSB7XHJcbiAgICAgIGlmICh0aGlzLmhvc3QgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIFwiRmFpbGVkIHRvIHJlbmRlciBsaW1ibGUgdHJlZS4gRmFpbHVyZSBvY2N1cnJlZCBhdCByb290LlwiXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbGltYmxlVHJlZSByZXF1aXJlcyBhIGRhdGEgb2JqZWN0YCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmVlU2VydmljZS5pbml0KHRoaXMuaG9zdCwgdGhpcy5kYXRhLCB0aGlzLm9wdGlvbnMpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJhZ292ZXJIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2ZlciA9PT0gbnVsbCkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gXCJtb3ZlXCI7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnbGVhdmVIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XHJcbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgICEoY3VycmVudFRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHx8XHJcbiAgICAgICAgICEocmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHx8XHJcbiAgICAgICAgIGlzRWxlbWVudERlc2NlbmRhbnQoY3VycmVudFRhcmdldCwgcmVsYXRlZFRhcmdldCkgIT09IGZhbHNlXHJcbiAgICAgICkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UucmVtb3ZlQWN0aXZlQW5kU2Vjb25kYXJ5Wm9uZXMoKTtcclxuICAgfVxyXG5cclxuICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICB9XHJcbn1cclxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvbGltYmxlLXRyZWUvc3JjLyIsInNvdXJjZXMiOlsibGliL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVKLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGdCQUFnQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFNdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQVFwRSxNQUFNLE9BQU8sdUJBQXVCO0lBc0JqQyxZQUNvQixXQUF3QixFQUN4QixpQkFBb0MsRUFDcEMsZUFBZ0MsRUFDaEMsZ0JBQWtDO1FBSGxDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFYbkMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFdEMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFXeEQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFB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QUFDLDZCQUE2QixFQUFFLENBQUM7UUFDckQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsV0FBVztRQUNSLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkMsQ0FBQzs7O1lBOUdILFNBQVMsU0FBQztnQkFDUixRQUFRLEVBQUUsa0JBQWtCO2dCQUM1Qiw4UEFBZ0Q7Z0JBRWhELFNBQVMsRUFBRSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUM7O2FBQzNDOzs7WUFUUSxXQUFXO1lBakJqQixpQkFBaUI7WUFXWCxlQUFlO1lBUWYsZ0JBQWdCOzs7bUJBVXJCLEtBQUs7c0JBQ0wsS0FBSzttQkFFTCxTQUFTLFNBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFOzZCQUk1QyxTQUFTLFNBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7OEJBR3RELE1BQU07eUJBR04sTUFBTTt1QkFFTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgIENvbXBvbmVudCxcclxuICAgRXZlbnRFbWl0dGVyLFxyXG4gICBJbnB1dCxcclxuICAgT25DaGFuZ2VzLFxyXG4gICBPbkRlc3Ryb3ksXHJcbiAgIE91dHB1dCxcclxuICAgVmlld0NoaWxkLFxyXG4gICBWaWV3Q29udGFpbmVyUmVmXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9kcm9wLXpvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gICBMaW1ibGVUcmVlRGF0YSxcclxuICAgTGltYmxlVHJlZU9wdGlvbnMsXHJcbiAgIFRyZWVEcm9wXHJcbn0gZnJvbSBcIi4uL2xpbWJsZS10cmVlLXJvb3QvdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRyZWVTZXJ2aWNlIH0gZnJvbSBcIi4vdHJlZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IGlzRWxlbWVudERlc2NlbmRhbnQgfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvZHJhZy1zdGF0ZS5zZXJ2aWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgc2VsZWN0b3I6IFwibGltYmxlLXRyZWUtcm9vdFwiLFxyXG4gICB0ZW1wbGF0ZVVybDogXCIuL2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50Lmh0bWxcIixcclxuICAgc3R5bGVVcmxzOiBbXCIuL2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgIHByb3ZpZGVyczogW1RyZWVTZXJ2aWNlLCBEcm9wWm9uZVNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMaW1ibGVUcmVlUm9vdENvbXBvbmVudFxyXG4gICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAgQElucHV0KCkgZGF0YTogTGltYmxlVHJlZURhdGEgfCB1bmRlZmluZWQ7XHJcbiAgIEBJbnB1dCgpIG9wdGlvbnM6IExpbWJsZVRyZWVPcHRpb25zIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgQFZpZXdDaGlsZChcImhvc3RcIiwgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIHByaXZhdGUgaG9zdDpcclxuICAgICAgfCBWaWV3Q29udGFpbmVyUmVmXHJcbiAgICAgIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgQFZpZXdDaGlsZChcImRyb3Bab25lSW5zaWRlXCIsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxyXG4gICBkcm9wWm9uZUluc2lkZTogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgIEBPdXRwdXQoKVxyXG4gICByZWFkb25seSBkcm9wWm9uZUluc2lkZSQ6IEJlaGF2aW9yU3ViamVjdDxWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgIEBPdXRwdXQoKSByZWFkb25seSB0cmVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudWxsPigpO1xyXG5cclxuICAgQE91dHB1dCgpIHJlYWRvbmx5IHRyZWVEcm9wID0gbmV3IEV2ZW50RW1pdHRlcjxUcmVlRHJvcD4oKTtcclxuXHJcbiAgIHByaXZhdGUgcmVhZG9ubHkgY2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gICBwcml2YXRlIHJlYWRvbmx5IGRyb3BTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IHRyZWVTZXJ2aWNlOiBUcmVlU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcFpvbmVTZXJ2aWNlOiBEcm9wWm9uZVNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZ1N0YXRlU2VydmljZTogRHJhZ1N0YXRlU2VydmljZVxyXG4gICApIHtcclxuICAgICAgdGhpcy5kcm9wWm9uZUluc2lkZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuZHJvcFpvbmVJbnNpZGUpO1xyXG4gICAgICB0aGlzLmNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnRyZWVTZXJ2aWNlLmNoYW5nZXMkLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgIHRoaXMudHJlZUNoYW5nZS5lbWl0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRyb3BTdWJzY3JpcHRpb24gPSB0aGlzLnRyZWVTZXJ2aWNlLmRyb3BzJC5zdWJzY3JpYmUoKGRyb3ApID0+IHtcclxuICAgICAgICAgdGhpcy50cmVlRHJvcC5lbWl0KGRyb3ApO1xyXG4gICAgICB9KTtcclxuICAgfVxyXG5cclxuICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW5zaWRlJC5uZXh0KHRoaXMuZHJvcFpvbmVJbnNpZGUpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lSW5zaWRlJC5jb21wbGV0ZSgpO1xyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgfVxyXG5cclxuICAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICAgIGlmICh0aGlzLmhvc3QgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGEgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyB1cGRhdGUoKSB7XHJcbiAgICAgIGlmICh0aGlzLmhvc3QgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXHJcbiAgICAgICAgICAgIFwiRmFpbGVkIHRvIHJlbmRlciBsaW1ibGUgdHJlZS4gRmFpbHVyZSBvY2N1cnJlZCBhdCByb290LlwiXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGF0YSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbGltYmxlVHJlZSByZXF1aXJlcyBhIGRhdGEgb2JqZWN0YCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmVlU2VydmljZS5pbml0KHRoaXMuaG9zdCwgdGhpcy5kYXRhLCB0aGlzLm9wdGlvbnMpO1xyXG4gICB9XHJcblxyXG4gICBwdWJsaWMgZHJhZ292ZXJIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgaWYgKGV2ZW50LmRhdGFUcmFuc2ZlciA9PT0gbnVsbCkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gXCJtb3ZlXCI7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyBkcmFnbGVhdmVIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XHJcbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgICEoY3VycmVudFRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHx8XHJcbiAgICAgICAgICEocmVsYXRlZFRhcmdldCBpbnN0YW5jZW9mIE5vZGUpIHx8XHJcbiAgICAgICAgIGlzRWxlbWVudERlc2NlbmRhbnQoY3VycmVudFRhcmdldCwgcmVsYXRlZFRhcmdldCkgIT09IGZhbHNlXHJcbiAgICAgICkge1xyXG4gICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UucmVtb3ZlQWN0aXZlQW5kU2Vjb25kYXJ5Wm9uZXMoKTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGRyb3BIYW5kbGVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIGNvbnN0IGRyb3Bab25lSW5mbyA9IHRoaXMuZHJvcFpvbmVTZXJ2aWNlLmdldEFjdGl2ZURyb3Bab25lSW5mbygpO1xyXG4gICAgICBpZiAodGhpcy5kcmFnU3RhdGVTZXJ2aWNlLmdldFN0YXRlKCkgIT09IFwiZHJvcHBhYmxlXCIpIHtcclxuICAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkcm9wWm9uZUluZm8gPT09IG51bGwpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIGdldCBhY3RpdmUgZHJvcCB6b25lIGF0IGRyb3AgaGFuZGxlclwiKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzb3VyY2VCcmFuY2ggPSB0aGlzLmRyYWdTdGF0ZVNlcnZpY2UuY2FwdHVyZSgpO1xyXG4gICAgICBpZiAoc291cmNlQnJhbmNoID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZmFpbGVkIHRvIGdldCBjdXJyZW50IGJyYW5jaCBpbiBkcmFnZW5kSGFuZGxlclwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5yZW1vdmVBY3RpdmVBbmRTZWNvbmRhcnlab25lcygpO1xyXG4gICAgICB0aGlzLnRyZWVTZXJ2aWNlLmRyb3Aoc291cmNlQnJhbmNoLCBkcm9wWm9uZUluZm8uY29vcmRpbmF0ZXMpO1xyXG4gICB9XHJcblxyXG4gICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIHRoaXMuZHJvcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICB9XHJcbn1cclxuIl19
import { Injectable } from "@angular/core";
import { ReplaySubject } from "rxjs";
import { ComponentCreatorService } from "../singletons/component-creator.service";
import { DropZoneService } from "../singletons/drop-zone.service";
import { DropZoneService } from "./drop-zone.service";
import { Branch } from "../branch";
import { LimbleTreeNodeComponent } from "../limble-tree-node/limble-tree-node.component";
import { LimbleTreePlaceholderComponent } from "../limble-tree-placeholder/limble-tree-placeholder.component";
/** The default value for the `indent` option */

@@ -16,2 +17,3 @@ export const INDENT = 45;

this.treeModel = new Branch(null);
this.placeholder = false;
}

@@ -41,12 +43,25 @@ /** Initializes the service and renders the tree.

this.dropZoneService.init(this.treeData, this.treeOptions);
for (const node of this.treeData) {
const branch = new Branch(node);
if (this.treeData.length === 0) {
//Tree is empty, but we have to to have something there so other trees' items can be dropped into it
this.placeholder = true;
const placeholderNode = {
component: { class: LimbleTreePlaceholderComponent }
};
const branch = new Branch(placeholderNode);
this.treeModel.appendChild(branch);
}
for (const branch of this.treeModel.getChildren()) {
const componentRef = this.componentCreatorService.appendComponent(LimbleTreeNodeComponent, this.host);
componentRef.instance.branch = branch;
//The LimbleTreeNodeComponent will (indirectly) call the `renderBranch` method of this service to render
//its own children
}
else {
for (const node of this.treeData) {
const branch = new Branch(node);
this.treeModel.appendChild(branch);
}
for (const branch of this.treeModel.getChildren()) {
const componentRef = this.componentCreatorService.appendComponent(LimbleTreeNodeComponent, this.host);
componentRef.instance.branch = branch;
//The LimbleTreeNodeComponent will (indirectly) call the `renderBranch` method of this service to render
//its own children
}
}
this.changes$.next(null);

@@ -79,3 +94,3 @@ }

}
move(source, targetCoordinates) {
drop(source, targetCoordinates) {
const sourceParent = source.getParent();

@@ -86,4 +101,14 @@ const sourceIndex = source.getIndex();

}
const targetParentCoordinates = [...targetCoordinates];
const index = targetParentCoordinates.pop();
let targetParentCoordinates;
let index;
if (this.placeholder === true) {
targetParentCoordinates = [];
index = 0;
this.treeModel.removeChild(0); //remove the placeholder
this.placeholder = false;
}
else {
targetParentCoordinates = [...targetCoordinates];
index = targetParentCoordinates.pop();
}
if (index === undefined) {

@@ -98,3 +123,2 @@ throw new Error("target coordinates are empty");

this.rebuildTreeData();
console.log(sourceParent);
this.drops$.next({

@@ -109,2 +133,7 @@ target: source.data,

}
remove(target) {
target.remove();
this.rebuildTreeData();
this.render();
}
rebuildTreeData() {

@@ -127,2 +156,5 @@ if (this.treeData == undefined) {

}
getPlaceholder() {
return this.placeholder;
}
}

@@ -136,2 +168,2 @@ TreeService.decorators = [

];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsTUFBTSxFQUFxQixNQUFNLFdBQVcsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQXlDekYsZ0RBQWdEO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUF5QnpCLE1BQU0sT0FBTyxXQUFXO0lBUXJCLFlBQ29CLHVCQUFnRCxFQUNoRCxlQUFnQztRQURoQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUVqRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxJQUFJLENBQ1IsSUFBc0IsRUFDdEIsSUFBb0IsRUFDcEIsT0FBMkI7UUFFM0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFD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S0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUNqRDtJQUNKLENBQUM7SUFFTyxhQUFhLENBQUMsTUFBbUI7UUFDdEMsTUFBTSxJQUFJLEdBQW1CLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQzdDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZixDQUFDOzs7WUEzSUgsVUFBVTs7O1lBckVGLHVCQUF1QjtZQUN2QixlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgVHlwZSwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuLi9zaW5nbGV0b25zL2NvbXBvbmVudC1jcmVhdG9yLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvZHJvcC16b25lLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQnJhbmNoLCBCcmFuY2hDb29yZGluYXRlcyB9IGZyb20gXCIuLi9icmFuY2hcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgfSBmcm9tIFwiLi4vbGltYmxlLXRyZWUtbm9kZS9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqIEFuIG9iamVjdCBkZXNjcmliaW5nIGEgbm9kZSBvZiB0aGUgdHJlZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExpbWJsZVRyZWVOb2RlIHtcclxuICAgLyoqIEEgbGlzdCBvZiBub2RlcyB0byBiZSByZW5kZXJlZCBcInVuZGVyXCIgdGhpcyBvbmUsIG9uZSBsZXZlbCBkZWVwZXIgaW4gdGhlIHRyZWUuICovXHJcbiAgIG5vZGVzPzogTGltYmxlVHJlZURhdGE7XHJcbiAgIC8vIC8qKiBBIGN1c3RvbSBkYXRhIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIGludG8gdGhlIGNvbXBvbmVudCBhcyBhbiBgSW5wdXQoKWAgYmluZGluZyBjYWxsZWQgYG5vZGVEYXRhYCAqL1xyXG4gICAvLyBkYXRhOiB1bmtub3duO1xyXG4gICAvKiogQW4gb2JqZWN0IHRoYXQgZGVzY3JpYmVzIHRoZSBjb21wb25lbnQgd2hpY2ggd2lsbCByZXByZXNlbnQgdGhpcyBub2RlIGluIHRoZSB2aXN1YWwgdHJlZSAqL1xyXG4gICBjb21wb25lbnQ/OiBDb21wb25lbnRPYmo7XHJcbiAgIGNvbGxhcHNlZD86IGJvb2xlYW47XHJcbiAgIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcclxufVxyXG5cclxuLyoqIEFuIG9iamVjdCB0aGF0IHRoZSBsaW1ibGUtdHJlZS1yb290IGNvbXBvbmVudCB1c2VzIHRvIGJ1aWxkIHRoZSB0cmVlICovXHJcbmV4cG9ydCB0eXBlIExpbWJsZVRyZWVEYXRhID0gQXJyYXk8TGltYmxlVHJlZU5vZGU+O1xyXG5cclxuLyoqIEEgZ3JvdXAgb2Ygc2V0dGluZ3MgZm9yIGNoYW5naW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSB0cmVlICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGltYmxlVHJlZU9wdGlvbnMge1xyXG4gICAvKiogVGhlIGNvbXBvbmVudCBvYmplY3QgdG8gdXNlIGlmIG9uZSBpcyBub3Qgc3BlY2lmaWVkIGZvciBhIHBhcnRpY3VsYXIgbm9kZSAqL1xyXG4gICBkZWZhdWx0Q29tcG9uZW50PzogQ29tcG9uZW50T2JqO1xyXG4gICAvKiogVGhlIG51bWJlciBvZiBwaXhlbHMgdG8gaW5kZW50IGVhY2ggbGV2ZWwgb2YgdGhlIHRyZWUuIERlZmF1bHRzIHRvIDQ1ICovXHJcbiAgIGluZGVudD86IG51bWJlcjtcclxuICAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgXCJuZXN0aW5nXCIgKHBsYWNpbmcgYSBub2RlIG9uZSBsZXZlbCBkZWVwZXIgdGhhbiBjdXJyZW50bHkgZXhpc3RzIG9uIHRoZSBicmFuY2gpXHJcbiAgICAqIHdoZW4gZHJhZ2dpbmcgYSBub2RlLiBEZWZhdWx0cyB0byB0cnVlLlxyXG4gICAgKi9cclxuICAgYWxsb3dOZXN0aW5nPzogYm9vbGVhbiB8ICgobm9kZURhdGE6IExpbWJsZVRyZWVOb2RlKSA9PiBib29sZWFuKTtcclxuICAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgZHJhZy1hbmQtZHJvcCBmdW5jdGlvbmFsaXR5LiBEZWZhdWx0cyB0byB0cnVlLiovXHJcbiAgIGFsbG93RHJhZ2dpbmc/OiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG59XHJcblxyXG4vKiogQW4gb2JqZWN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgY29tcG9uZW50IHRvIGJlIHJlbmRlcmVkIGFuZCBpdHMgYmluZGluZ3MgKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRPYmoge1xyXG4gICAvKiogVGhlIGNvbXBvbmVudCBjbGFzcyAqL1xyXG4gICBjbGFzczogVHlwZTx1bmtub3duPjtcclxuICAgLyoqIFRoZSBiaW5kaW5ncyAoaW5wdXRzIGFuZCBvdXRwdXRzKSBvZiB0aGUgY2xhc3MgKi9cclxuICAgYmluZGluZ3M/OiB7XHJcbiAgICAgIFtpbmRleDogc3RyaW5nXTogdW5rbm93bjtcclxuICAgfTtcclxufVxyXG5cclxuLyoqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgYGluZGVudGAgb3B0aW9uICovXHJcbmV4cG9ydCBjb25zdCBJTkRFTlQgPSA0NTtcclxuXHJcbi8qKiBBbiBvcHRpb25zIG9iamVjdCB3aXRoIGRlZmF1bHQgdmFsdWVzIGxvYWRlZCB3aGVyZSBhcHBsaWNhYmxlICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc2VkT3B0aW9ucyBleHRlbmRzIExpbWJsZVRyZWVPcHRpb25zIHtcclxuICAgZGVmYXVsdENvbXBvbmVudD86IENvbXBvbmVudE9iajtcclxuICAgaW5kZW50OiBudW1iZXI7XHJcbiAgIGFsbG93TmVzdGluZzogYm9vbGVhbiB8ICgobm9kZURhdGE6IExpbWJsZVRyZWVOb2RlKSA9PiBib29sZWFuKTtcclxuICAgYWxsb3dEcmFnZ2luZzogYm9vbGVhbiB8ICgobm9kZURhdGE6IExpbWJsZVRyZWVOb2RlKSA9PiBib29sZWFuKTtcclxufVxyXG5cclxuLyoqIHRoZSB2YWx1ZSBlbWl0dGVkIGZyb20gdGhlIHJvb3QgY29tcG9uZW50IGFmdGVyIGEgbm9kZSBpcyBkcm9wcGVkICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVHJlZURyb3Age1xyXG4gICAvKiogVGhlIG5vZGUgdGhhdCB3YXMgZHJvcHBlZCAqL1xyXG4gICB0YXJnZXQ6IExpbWJsZVRyZWVOb2RlO1xyXG4gICAvKiogdGhlIHRhcmdldCdzIHBhcmVudCBiZWZvcmUgdGhlIGRyYWcgYW5kIGRyb3AsIG9yIG51bGwgaWYgaXQgd2FzIGEgdG9wLWxldmVsIG5vZGUgKi9cclxuICAgb2xkUGFyZW50OiBMaW1ibGVUcmVlTm9kZSB8IG51bGw7XHJcbiAgIC8qKiB0aGUgaW5kZXggb2YgdGhlIG5vZGUgYmVmb3JlIHRoZSBkcmFnIGFuZCBkcm9wIHJlbGF0aXZlIHRvIGl0cyBvbGQgc2libGluZ3MgKi9cclxuICAgb2xkSW5kZXg6IG51bWJlcjtcclxuICAgLyoqIHRoZSB0YXJnZXQncyBwYXJlbnQgYWZ0ZXIgdGhlIGRyYWcgYW5kIGRyb3AsIG9yIG51bGwgaWYgaXQgaXMgbm93IGEgdG9wLWxldmVsIG5vZGUgKi9cclxuICAgbmV3UGFyZW50OiBMaW1ibGVUcmVlTm9kZSB8IG51bGw7XHJcbiAgIC8qKiB0aGUgaW5kZXggb2YgdGhlIG5vZGUgYWZ0ZXIgdGhlIGRyYWcgYW5kIGRyb3AgcmVsYXRpdmUgdG8gaXRzIG5ldyBzaWJsaW5ncyAqL1xyXG4gICBuZXdJbmRleDogbnVtYmVyO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUcmVlU2VydmljZSB7XHJcbiAgIHB1YmxpYyBjaGFuZ2VzJDogUmVwbGF5U3ViamVjdDxudWxsPjtcclxuICAgcHVibGljIGRyb3BzJDogUmVwbGF5U3ViamVjdDxUcmVlRHJvcD47XHJcbiAgIHByaXZhdGUgaG9zdDogVmlld0NvbnRhaW5lclJlZiB8IHVuZGVmaW5lZDtcclxuICAgcHVibGljIHRyZWVEYXRhOiBMaW1ibGVUcmVlRGF0YSB8IHVuZGVmaW5lZDtcclxuICAgcHVibGljIHRyZWVPcHRpb25zOiBQcm9jZXNzZWRPcHRpb25zIHwgdW5kZWZpbmVkO1xyXG4gICBwdWJsaWMgdHJlZU1vZGVsOiBCcmFuY2g8YW55PjtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudENyZWF0b3JTZXJ2aWNlOiBDb21wb25lbnRDcmVhdG9yU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByZWFkb25seSBkcm9wWm9uZVNlcnZpY2U6IERyb3Bab25lU2VydmljZVxyXG4gICApIHtcclxuICAgICAgdGhpcy5jaGFuZ2VzJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xyXG4gICAgICB0aGlzLmRyb3BzJCA9IG5ldyBSZXBsYXlTdWJqZWN0KDEpO1xyXG4gICAgICB0aGlzLnRyZWVNb2RlbCA9IG5ldyBCcmFuY2gobnVsbCk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBJbml0aWFsaXplcyB0aGUgc2VydmljZSBhbmQgcmVuZGVycyB0aGUgdHJlZS5cclxuICAgICogQHBhcmFtIGhvc3QgLSBUaGUgVmlld0NvbnRhaW5lclJlZiBpbnRvIHdoaWNoIHRoZSB0cmVlIHdpbGwgYmUgcmVuZGVyZWQuXHJcbiAgICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgYXJyYXkgdGhhdCB3YXMgcGFzc2VkIGluIHRvIExpbWJsZVRyZWVSb290LCB3aGljaCBpc1xyXG4gICAgKiB0aGUgdXNlcnMnIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmVlXHJcbiAgICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgb2JqZWN0IHRoYXQgd2FzIHBhc3NlZCBpbiB0byBMaW1ibGVUcmVlUm9vdFxyXG4gICAgKi9cclxuICAgcHVibGljIGluaXQoXHJcbiAgICAgIGhvc3Q6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgIGRhdGE6IExpbWJsZVRyZWVEYXRhLFxyXG4gICAgICBvcHRpb25zPzogTGltYmxlVHJlZU9wdGlvbnNcclxuICAgKTogdm9pZCB7XHJcbiAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7XHJcbiAgICAgIHRoaXMudHJlZURhdGEgPSBkYXRhO1xyXG4gICAgICB0aGlzLnRyZWVPcHRpb25zID0gdGhpcy5wcm9jZXNzT3B0aW9ucyhvcHRpb25zKTtcclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgfVxyXG5cclxuICAgLyoqIFJlbmRlcnMgdGhlIGVudGlyZSB0cmVlIGZyb20gcm9vdCB0byBsZWF2ZXMgKi9cclxuICAgcHJpdmF0ZSByZW5kZXIoKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAgdGhpcy5ob3N0ID09PSB1bmRlZmluZWQgfHxcclxuICAgICAgICAgdGhpcy50cmVlRGF0YSA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMudHJlZU9wdGlvbnMgPT09IHVuZGVmaW5lZFxyXG4gICAgICApIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJlZU1vZGVsIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmhvc3QuY2xlYXIoKTtcclxuICAgICAgdGhpcy50cmVlTW9kZWwgPSBuZXcgQnJhbmNoKG51bGwpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5jbGVhckRyb3Bab25lcygpO1xyXG4gICAgICB0aGlzLmRyb3Bab25lU2VydmljZS5pbml0KHRoaXMudHJlZURhdGEsIHRoaXMudHJlZU9wdGlvbnMpO1xyXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy50cmVlRGF0YSkge1xyXG4gICAgICAgICBjb25zdCBicmFuY2ggPSBuZXcgQnJhbmNoKG5vZGUpO1xyXG4gICAgICAgICB0aGlzLnRyZWVNb2RlbC5hcHBlbmRDaGlsZChicmFuY2gpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIHRoaXMudHJlZU1vZGVsLmdldENoaWxkcmVuKCkpIHtcclxuICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5jb21wb25lbnRDcmVhdG9yU2VydmljZS5hcHBlbmRDb21wb25lbnQ8TGltYmxlVHJlZU5vZGVDb21wb25lbnQ+KFxyXG4gICAgICAgICAgICBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCxcclxuICAgICAgICAgICAgdGhpcy5ob3N0XHJcbiAgICAgICAgICk7XHJcbiAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5icmFuY2ggPSBicmFuY2g7XHJcbiAgICAgICAgIC8vVGhlIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IHdpbGwgKGluZGlyZWN0bHkpIGNhbGwgdGhlIGByZW5kZXJCcmFuY2hgIG1ldGhvZCBvZiB0aGlzIHNlcnZpY2UgdG8gcmVuZGVyXHJcbiAgICAgICAgIC8vaXRzIG93biBjaGlsZHJlblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlcyQubmV4dChudWxsKTtcclxuICAgfVxyXG5cclxuICAgLyoqIFJlbmRlcnMgYSBicmFuY2ggb2YgdGhlIHRyZWUgYW5kIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMgKi9cclxuICAgcHVibGljIHJlbmRlckJyYW5jaChob3N0OiBWaWV3Q29udGFpbmVyUmVmLCBicmFuY2g6IEJyYW5jaDxhbnk+KSB7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVNb2RlbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgaG9zdC5jbGVhcigpO1xyXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYnJhbmNoLmRhdGEubm9kZXMgPz8gW10pIHtcclxuICAgICAgICAgY29uc3QgbmV3QnJhbmNoID0gbmV3IEJyYW5jaChub2RlKTtcclxuICAgICAgICAgYnJhbmNoLmFwcGVuZENoaWxkKG5ld0JyYW5jaCk7XHJcbiAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50Q3JlYXRvclNlcnZpY2UuYXBwZW5kQ29tcG9uZW50PExpbWJsZVRyZWVOb2RlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIGhvc3RcclxuICAgICAgICAgKTtcclxuICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IG5ld0JyYW5jaDtcclxuICAgICAgICAgLy9UaGUgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgd2lsbCAoaW5kaXJlY3RseSkgY2FsbCB0aGUgYHJlbmRlckJyYW5jaGAgbWV0aG9kIG9mIHRoaXMgc2VydmljZSB0byByZW5kZXJcclxuICAgICAgICAgLy9pdHMgb3duIGNoaWxkcmVuXHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBwcm9jZXNzT3B0aW9ucyhvcHRpb25zOiBMaW1ibGVUcmVlT3B0aW9ucyA9IHt9KTogUHJvY2Vzc2VkT3B0aW9ucyB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgIGRlZmF1bHRDb21wb25lbnQ6IG9wdGlvbnMuZGVmYXVsdENvbXBvbmVudCxcclxuICAgICAgICAgaW5kZW50OiBvcHRpb25zLmluZGVudCA/PyBJTkRFTlQsXHJcbiAgICAgICAgIGFsbG93TmVzdGluZzogb3B0aW9ucy5hbGxvd05lc3RpbmcgPz8gdHJ1ZSxcclxuICAgICAgICAgYWxsb3dEcmFnZ2luZzogb3B0aW9ucy5hbGxvd0RyYWdnaW5nID8/IHRydWVcclxuICAgICAgfTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIG1vdmUoc291cmNlOiBCcmFuY2g8YW55PiwgdGFyZ2V0Q29vcmRpbmF0ZXM6IEJyYW5jaENvb3JkaW5hdGVzKSB7XHJcbiAgICAgIGNvbnN0IHNvdXJjZVBhcmVudCA9IHNvdXJjZS5nZXRQYXJlbnQoKTtcclxuICAgICAgY29uc3Qgc291cmNlSW5kZXggPSBzb3VyY2UuZ2V0SW5kZXgoKTtcclxuICAgICAgaWYgKHNvdXJjZUluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IG1vdmUgdGhlIGhpZGRlbiByb290IG5vZGVcIik7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdGFyZ2V0UGFyZW50Q29vcmRpbmF0ZXMgPSBbLi4udGFyZ2V0Q29vcmRpbmF0ZXNdO1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRhcmdldFBhcmVudENvb3JkaW5hdGVzLnBvcCgpO1xyXG4gICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgY29vcmRpbmF0ZXMgYXJlIGVtcHR5XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHRoaXMudHJlZU1vZGVsLmdldERlc2NlbmRhbnQoXHJcbiAgICAgICAgIHRhcmdldFBhcmVudENvb3JkaW5hdGVzXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0YXJnZXRQYXJlbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZ2V0IHRvIHRhcmdldFwiKTtcclxuICAgICAgfVxyXG4gICAgICB0YXJnZXRQYXJlbnQuaW5zZXJ0Q2hpbGQoc291cmNlLCBpbmRleCk7XHJcbiAgICAgIHRoaXMucmVidWlsZFRyZWVEYXRhKCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKHNvdXJjZVBhcmVudCk7XHJcbiAgICAgIHRoaXMuZHJvcHMkLm5leHQoe1xyXG4gICAgICAgICB0YXJnZXQ6IHNvdXJjZS5kYXRhLFxyXG4gICAgICAgICBvbGRQYXJlbnQ6IHNvdXJjZVBhcmVudD8uZGF0YSBhcyBMaW1ibGVUcmVlTm9kZSxcclxuICAgICAgICAgb2xkSW5kZXg6IHNvdXJjZUluZGV4LFxyXG4gICAgICAgICBuZXdQYXJlbnQ6IHRhcmdldFBhcmVudC5kYXRhLFxyXG4gICAgICAgICBuZXdJbmRleDogaW5kZXhcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgcmVidWlsZFRyZWVEYXRhKCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy50cmVlRGF0YSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJlZSBkYXRhIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyZWVEYXRhLmxlbmd0aCA9IDA7XHJcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIHRoaXMudHJlZU1vZGVsLmdldENoaWxkcmVuKCkpIHtcclxuICAgICAgICAgdGhpcy50cmVlRGF0YS5wdXNoKHRoaXMucmVidWlsZEJyYW5jaChicmFuY2gpKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlYnVpbGRCcmFuY2goYnJhbmNoOiBCcmFuY2g8YW55Pik6IExpbWJsZVRyZWVOb2RlIHtcclxuICAgICAgY29uc3QgdGVtcDogTGltYmxlVHJlZU5vZGUgPSBicmFuY2guZGF0YTtcclxuICAgICAgdGVtcC5ub2RlcyA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJyYW5jaC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgIHRlbXAubm9kZXMucHVzaCh0aGlzLnJlYnVpbGRCcmFuY2goY2hpbGQpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGVtcDtcclxuICAgfVxyXG59XHJcbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFxQixNQUFNLFdBQVcsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQztBQTBDOUcsZ0RBQWdEO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7QUF5QnpCLE1BQU0sT0FBTyxXQUFXO0lBU3JCLFlBQ29CLHVCQUFnRCxFQUNoRCxlQUFnQztRQURoQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQ2hELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUVqRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxJQUFJLENBQ1IsSUFBc0IsRUFDdEIsSUFBb0IsRUFDcEIs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QUNoRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDakQ7SUFDSixDQUFDO0lBRU8sYUFBYSxDQUFDLE1BQW1CO1FBQ3RDLE1BQU0sSUFBSSxHQUFtQixNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUM3QztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQUVNLGNBQWM7UUFDbEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzNCLENBQUM7OztZQTlLSCxVQUFVOzs7WUF2RUYsdUJBQXVCO1lBQ3ZCLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlIH0gZnJvbSBcIi4uL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9kcm9wLXpvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCcmFuY2gsIEJyYW5jaENvb3JkaW5hdGVzIH0gZnJvbSBcIi4uL2JyYW5jaFwiO1xyXG5pbXBvcnQgeyBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1ub2RlL2xpbWJsZS10cmVlLW5vZGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVQbGFjZWhvbGRlckNvbXBvbmVudCB9IGZyb20gXCIuLi9saW1ibGUtdHJlZS1wbGFjZWhvbGRlci9saW1ibGUtdHJlZS1wbGFjZWhvbGRlci5jb21wb25lbnRcIjtcclxuXHJcbi8qKiBBbiBvYmplY3QgZGVzY3JpYmluZyBhIG5vZGUgb2YgdGhlIHRyZWUgKi9cclxuZXhwb3J0IGludGVyZmFjZSBMaW1ibGVUcmVlTm9kZSB7XHJcbiAgIC8qKiBBIGxpc3Qgb2Ygbm9kZXMgdG8gYmUgcmVuZGVyZWQgXCJ1bmRlclwiIHRoaXMgb25lLCBvbmUgbGV2ZWwgZGVlcGVyIGluIHRoZSB0cmVlLiAqL1xyXG4gICBub2Rlcz86IExpbWJsZVRyZWVEYXRhO1xyXG4gICAvLyAvKiogQSBjdXN0b20gZGF0YSBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZSBjb21wb25lbnQgYXMgYW4gYElucHV0KClgIGJpbmRpbmcgY2FsbGVkIGBub2RlRGF0YWAgKi9cclxuICAgLy8gZGF0YTogdW5rbm93bjtcclxuICAgLyoqIEFuIG9iamVjdCB0aGF0IGRlc2NyaWJlcyB0aGUgY29tcG9uZW50IHdoaWNoIHdpbGwgcmVwcmVzZW50IHRoaXMgbm9kZSBpbiB0aGUgdmlzdWFsIHRyZWUgKi9cclxuICAgY29tcG9uZW50PzogQ29tcG9uZW50T2JqO1xyXG4gICBjb2xsYXBzZWQ/OiBib29sZWFuO1xyXG4gICBbaW5kZXg6IHN0cmluZ106IHVua25vd247XHJcbn1cclxuXHJcbi8qKiBBbiBvYmplY3QgdGhhdCB0aGUgbGltYmxlLXRyZWUtcm9vdCBjb21wb25lbnQgdXNlcyB0byBidWlsZCB0aGUgdHJlZSAqL1xyXG5leHBvcnQgdHlwZSBMaW1ibGVUcmVlRGF0YSA9IEFycmF5PExpbWJsZVRyZWVOb2RlPjtcclxuXHJcbi8qKiBBIGdyb3VwIG9mIHNldHRpbmdzIGZvciBjaGFuZ2luZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgdHJlZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIExpbWJsZVRyZWVPcHRpb25zIHtcclxuICAgLyoqIFRoZSBjb21wb25lbnQgb2JqZWN0IHRvIHVzZSBpZiBvbmUgaXMgbm90IHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIG5vZGUgKi9cclxuICAgZGVmYXVsdENvbXBvbmVudD86IENvbXBvbmVudE9iajtcclxuICAgLyoqIFRoZSBudW1iZXIgb2YgcGl4ZWxzIHRvIGluZGVudCBlYWNoIGxldmVsIG9mIHRoZSB0cmVlLiBEZWZhdWx0cyB0byA0NSAqL1xyXG4gICBpbmRlbnQ/OiBudW1iZXI7XHJcbiAgIC8qKlxyXG4gICAgKiBXaGV0aGVyIHRvIGFsbG93IFwibmVzdGluZ1wiIChwbGFjaW5nIGEgbm9kZSBvbmUgbGV2ZWwgZGVlcGVyIHRoYW4gY3VycmVudGx5IGV4aXN0cyBvbiB0aGUgYnJhbmNoKVxyXG4gICAgKiB3aGVuIGRyYWdnaW5nIGEgbm9kZS4gRGVmYXVsdHMgdG8gdHJ1ZS5cclxuICAgICovXHJcbiAgIGFsbG93TmVzdGluZz86IGJvb2xlYW4gfCAoKG5vZGVEYXRhOiBMaW1ibGVUcmVlTm9kZSkgPT4gYm9vbGVhbik7XHJcbiAgIC8qKiBXaGV0aGVyIHRvIGFsbG93IGRyYWctYW5kLWRyb3AgZnVuY3Rpb25hbGl0eS4gRGVmYXVsdHMgdG8gdHJ1ZS4gKi9cclxuICAgYWxsb3dEcmFnZ2luZz86IGJvb2xlYW4gfCAoKG5vZGVEYXRhOiBMaW1ibGVUcmVlTm9kZSkgPT4gYm9vbGVhbik7XHJcbn1cclxuXHJcbi8qKiBBbiBvYmplY3QgdGhhdCByZWZlcmVuY2VzIHRoZSBjb21wb25lbnQgdG8gYmUgcmVuZGVyZWQgYW5kIGl0cyBiaW5kaW5ncyAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudE9iaiB7XHJcbiAgIC8qKiBUaGUgY29tcG9uZW50IGNsYXNzICovXHJcbiAgIGNsYXNzOiBUeXBlPHVua25vd24+O1xyXG4gICAvKiogVGhlIGJpbmRpbmdzIChpbnB1dHMgYW5kIG91dHB1dHMpIG9mIHRoZSBjbGFzcyAqL1xyXG4gICBiaW5kaW5ncz86IHtcclxuICAgICAgW2luZGV4OiBzdHJpbmddOiB1bmtub3duO1xyXG4gICB9O1xyXG59XHJcblxyXG4vKiogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBgaW5kZW50YCBvcHRpb24gKi9cclxuZXhwb3J0IGNvbnN0IElOREVOVCA9IDQ1O1xyXG5cclxuLyoqIEFuIG9wdGlvbnMgb2JqZWN0IHdpdGggZGVmYXVsdCB2YWx1ZXMgbG9hZGVkIHdoZXJlIGFwcGxpY2FibGUgKi9cclxuZXhwb3J0IGludGVyZmFjZSBQcm9jZXNzZWRPcHRpb25zIGV4dGVuZHMgTGltYmxlVHJlZU9wdGlvbnMge1xyXG4gICBkZWZhdWx0Q29tcG9uZW50PzogQ29tcG9uZW50T2JqO1xyXG4gICBpbmRlbnQ6IG51bWJlcjtcclxuICAgYWxsb3dOZXN0aW5nOiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG4gICBhbGxvd0RyYWdnaW5nOiBib29sZWFuIHwgKChub2RlRGF0YTogTGltYmxlVHJlZU5vZGUpID0+IGJvb2xlYW4pO1xyXG59XHJcblxyXG4vKiogdGhlIHZhbHVlIGVtaXR0ZWQgZnJvbSB0aGUgcm9vdCBjb21wb25lbnQgYWZ0ZXIgYSBub2RlIGlzIGRyb3BwZWQgKi9cclxuZXhwb3J0IGludGVyZmFjZSBUcmVlRHJvcCB7XHJcbiAgIC8qKiBUaGUgbm9kZSB0aGF0IHdhcyBkcm9wcGVkICovXHJcbiAgIHRhcmdldDogTGltYmxlVHJlZU5vZGU7XHJcbiAgIC8qKiB0aGUgdGFyZ2V0J3MgcGFyZW50IGJlZm9yZSB0aGUgZHJhZyBhbmQgZHJvcCwgb3IgbnVsbCBpZiBpdCB3YXMgYSB0b3AtbGV2ZWwgbm9kZSAqL1xyXG4gICBvbGRQYXJlbnQ6IExpbWJsZVRyZWVOb2RlIHwgbnVsbDtcclxuICAgLyoqIHRoZSBpbmRleCBvZiB0aGUgbm9kZSBiZWZvcmUgdGhlIGRyYWcgYW5kIGRyb3AgcmVsYXRpdmUgdG8gaXRzIG9sZCBzaWJsaW5ncyAqL1xyXG4gICBvbGRJbmRleDogbnVtYmVyO1xyXG4gICAvKiogdGhlIHRhcmdldCdzIHBhcmVudCBhZnRlciB0aGUgZHJhZyBhbmQgZHJvcCwgb3IgbnVsbCBpZiBpdCBpcyBub3cgYSB0b3AtbGV2ZWwgbm9kZSAqL1xyXG4gICBuZXdQYXJlbnQ6IExpbWJsZVRyZWVOb2RlIHwgbnVsbDtcclxuICAgLyoqIHRoZSBpbmRleCBvZiB0aGUgbm9kZSBhZnRlciB0aGUgZHJhZyBhbmQgZHJvcCByZWxhdGl2ZSB0byBpdHMgbmV3IHNpYmxpbmdzICovXHJcbiAgIG5ld0luZGV4OiBudW1iZXI7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFRyZWVTZXJ2aWNlIHtcclxuICAgcHVibGljIGNoYW5nZXMkOiBSZXBsYXlTdWJqZWN0PG51bGw+O1xyXG4gICBwdWJsaWMgZHJvcHMkOiBSZXBsYXlTdWJqZWN0PFRyZWVEcm9wPjtcclxuICAgcHJpdmF0ZSBob3N0OiBWaWV3Q29udGFpbmVyUmVmIHwgdW5kZWZpbmVkO1xyXG4gICBwdWJsaWMgdHJlZURhdGE6IExpbWJsZVRyZWVEYXRhIHwgdW5kZWZpbmVkO1xyXG4gICBwdWJsaWMgdHJlZU9wdGlvbnM6IFByb2Nlc3NlZE9wdGlvbnMgfCB1bmRlZmluZWQ7XHJcbiAgIHB1YmxpYyB0cmVlTW9kZWw6IEJyYW5jaDxhbnk+O1xyXG4gICBwcml2YXRlIHBsYWNlaG9sZGVyOiBib29sZWFuO1xyXG5cclxuICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50Q3JlYXRvclNlcnZpY2U6IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGRyb3Bab25lU2VydmljZTogRHJvcFpvbmVTZXJ2aWNlXHJcbiAgICkge1xyXG4gICAgICB0aGlzLmNoYW5nZXMkID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XHJcbiAgICAgIHRoaXMuZHJvcHMkID0gbmV3IFJlcGxheVN1YmplY3QoMSk7XHJcbiAgICAgIHRoaXMudHJlZU1vZGVsID0gbmV3IEJyYW5jaChudWxsKTtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xyXG4gICB9XHJcblxyXG4gICAvKiogSW5pdGlhbGl6ZXMgdGhlIHNlcnZpY2UgYW5kIHJlbmRlcnMgdGhlIHRyZWUuXHJcbiAgICAqIEBwYXJhbSBob3N0IC0gVGhlIFZpZXdDb250YWluZXJSZWYgaW50byB3aGljaCB0aGUgdHJlZSB3aWxsIGJlIHJlbmRlcmVkLlxyXG4gICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIGFycmF5IHRoYXQgd2FzIHBhc3NlZCBpbiB0byBMaW1ibGVUcmVlUm9vdCwgd2hpY2ggaXNcclxuICAgICogdGhlIHVzZXJzJyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZVxyXG4gICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCB0aGF0IHdhcyBwYXNzZWQgaW4gdG8gTGltYmxlVHJlZVJvb3RcclxuICAgICovXHJcbiAgIHB1YmxpYyBpbml0KFxyXG4gICAgICBob3N0OiBWaWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICBkYXRhOiBMaW1ibGVUcmVlRGF0YSxcclxuICAgICAgb3B0aW9ucz86IExpbWJsZVRyZWVPcHRpb25zXHJcbiAgICk6IHZvaWQge1xyXG4gICAgICB0aGlzLmhvc3QgPSBob3N0O1xyXG4gICAgICB0aGlzLnRyZWVEYXRhID0gZGF0YTtcclxuICAgICAgdGhpcy50cmVlT3B0aW9ucyA9IHRoaXMucHJvY2Vzc09wdGlvbnMob3B0aW9ucyk7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgIH1cclxuXHJcbiAgIC8qKiBSZW5kZXJzIHRoZSBlbnRpcmUgdHJlZSBmcm9tIHJvb3QgdG8gbGVhdmVzICovXHJcbiAgIHByaXZhdGUgcmVuZGVyKCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgIHRoaXMuaG9zdCA9PT0gdW5kZWZpbmVkIHx8XHJcbiAgICAgICAgIHRoaXMudHJlZURhdGEgPT09IHVuZGVmaW5lZCB8fFxyXG4gICAgICAgICB0aGlzLnRyZWVPcHRpb25zID09PSB1bmRlZmluZWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ob3N0LmNsZWFyKCk7XHJcbiAgICAgIHRoaXMudHJlZU1vZGVsID0gbmV3IEJyYW5jaChudWxsKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuY2xlYXJEcm9wWm9uZXMoKTtcclxuICAgICAgdGhpcy5kcm9wWm9uZVNlcnZpY2UuaW5pdCh0aGlzLnRyZWVEYXRhLCB0aGlzLnRyZWVPcHRpb25zKTtcclxuICAgICAgaWYgKHRoaXMudHJlZURhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgIC8vVHJlZSBpcyBlbXB0eSwgYnV0IHdlIGhhdmUgdG8gdG8gaGF2ZSBzb21ldGhpbmcgdGhlcmUgc28gb3RoZXIgdHJlZXMnIGl0ZW1zIGNhbiBiZSBkcm9wcGVkIGludG8gaXRcclxuICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XHJcbiAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyTm9kZTogTGltYmxlVHJlZU5vZGUgPSB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudDogeyBjbGFzczogTGltYmxlVHJlZVBsYWNlaG9sZGVyQ29tcG9uZW50IH1cclxuICAgICAgICAgfTtcclxuICAgICAgICAgY29uc3QgYnJhbmNoID0gbmV3IEJyYW5jaChwbGFjZWhvbGRlck5vZGUpO1xyXG4gICAgICAgICB0aGlzLnRyZWVNb2RlbC5hcHBlbmRDaGlsZChicmFuY2gpO1xyXG4gICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmNvbXBvbmVudENyZWF0b3JTZXJ2aWNlLmFwcGVuZENvbXBvbmVudDxMaW1ibGVUcmVlTm9kZUNvbXBvbmVudD4oXHJcbiAgICAgICAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB0aGlzLmhvc3RcclxuICAgICAgICAgKTtcclxuICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IGJyYW5jaDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMudHJlZURhdGEpIHtcclxuICAgICAgICAgICAgY29uc3QgYnJhbmNoID0gbmV3IEJyYW5jaChub2RlKTtcclxuICAgICAgICAgICAgdGhpcy50cmVlTW9kZWwuYXBwZW5kQ2hpbGQoYnJhbmNoKTtcclxuICAgICAgICAgfVxyXG4gICAgICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiB0aGlzLnRyZWVNb2RlbC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50Q3JlYXRvclNlcnZpY2UuYXBwZW5kQ29tcG9uZW50PExpbWJsZVRyZWVOb2RlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgIHRoaXMuaG9zdFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb21wb25lbnRSZWYuaW5zdGFuY2UuYnJhbmNoID0gYnJhbmNoO1xyXG4gICAgICAgICAgICAvL1RoZSBMaW1ibGVUcmVlTm9kZUNvbXBvbmVudCB3aWxsIChpbmRpcmVjdGx5KSBjYWxsIHRoZSBgcmVuZGVyQnJhbmNoYCBtZXRob2Qgb2YgdGhpcyBzZXJ2aWNlIHRvIHJlbmRlclxyXG4gICAgICAgICAgICAvL2l0cyBvd24gY2hpbGRyZW5cclxuICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY2hhbmdlcyQubmV4dChudWxsKTtcclxuICAgfVxyXG5cclxuICAgLyoqIFJlbmRlcnMgYSBicmFuY2ggb2YgdGhlIHRyZWUgYW5kIGFsbCBvZiBpdHMgZGVzY2VuZGFudHMgKi9cclxuICAgcHVibGljIHJlbmRlckJyYW5jaChob3N0OiBWaWV3Q29udGFpbmVyUmVmLCBicmFuY2g6IEJyYW5jaDxhbnk+KSB7XHJcbiAgICAgIGlmICh0aGlzLnRyZWVNb2RlbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRyZWVNb2RlbCBub3QgaW5pdGlhbGl6ZWRcIik7XHJcbiAgICAgIH1cclxuICAgICAgaG9zdC5jbGVhcigpO1xyXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgYnJhbmNoLmRhdGEubm9kZXMgPz8gW10pIHtcclxuICAgICAgICAgY29uc3QgbmV3QnJhbmNoID0gbmV3IEJyYW5jaChub2RlKTtcclxuICAgICAgICAgYnJhbmNoLmFwcGVuZENoaWxkKG5ld0JyYW5jaCk7XHJcbiAgICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuY29tcG9uZW50Q3JlYXRvclNlcnZpY2UuYXBwZW5kQ29tcG9uZW50PExpbWJsZVRyZWVOb2RlQ29tcG9uZW50PihcclxuICAgICAgICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgICAgICAgIGhvc3RcclxuICAgICAgICAgKTtcclxuICAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmJyYW5jaCA9IG5ld0JyYW5jaDtcclxuICAgICAgICAgLy9UaGUgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgd2lsbCAoaW5kaXJlY3RseSkgY2FsbCB0aGUgYHJlbmRlckJyYW5jaGAgbWV0aG9kIG9mIHRoaXMgc2VydmljZSB0byByZW5kZXJcclxuICAgICAgICAgLy9pdHMgb3duIGNoaWxkcmVuXHJcbiAgICAgIH1cclxuICAgfVxyXG5cclxuICAgcHJpdmF0ZSBwcm9jZXNzT3B0aW9ucyhvcHRpb25zOiBMaW1ibGVUcmVlT3B0aW9ucyA9IHt9KTogUHJvY2Vzc2VkT3B0aW9ucyB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgIGRlZmF1bHRDb21wb25lbnQ6IG9wdGlvbnMuZGVmYXVsdENvbXBvbmVudCxcclxuICAgICAgICAgaW5kZW50OiBvcHRpb25zLmluZGVudCA/PyBJTkRFTlQsXHJcbiAgICAgICAgIGFsbG93TmVzdGluZzogb3B0aW9ucy5hbGxvd05lc3RpbmcgPz8gdHJ1ZSxcclxuICAgICAgICAgYWxsb3dEcmFnZ2luZzogb3B0aW9ucy5hbGxvd0RyYWdnaW5nID8/IHRydWVcclxuICAgICAgfTtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGRyb3Aoc291cmNlOiBCcmFuY2g8YW55PiwgdGFyZ2V0Q29vcmRpbmF0ZXM6IEJyYW5jaENvb3JkaW5hdGVzKSB7XHJcbiAgICAgIGNvbnN0IHNvdXJjZVBhcmVudCA9IHNvdXJjZS5nZXRQYXJlbnQoKTtcclxuICAgICAgY29uc3Qgc291cmNlSW5kZXggPSBzb3VyY2UuZ2V0SW5kZXgoKTtcclxuICAgICAgaWYgKHNvdXJjZUluZGV4ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IG1vdmUgdGhlIGhpZGRlbiByb290IG5vZGVcIik7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHRhcmdldFBhcmVudENvb3JkaW5hdGVzOiBCcmFuY2hDb29yZGluYXRlcztcclxuICAgICAgbGV0IGluZGV4OiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyID09PSB0cnVlKSB7XHJcbiAgICAgICAgIHRhcmdldFBhcmVudENvb3JkaW5hdGVzID0gW107XHJcbiAgICAgICAgIGluZGV4ID0gMDtcclxuICAgICAgICAgdGhpcy50cmVlTW9kZWwucmVtb3ZlQ2hpbGQoMCk7IC8vcmVtb3ZlIHRoZSBwbGFjZWhvbGRlclxyXG4gICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIHRhcmdldFBhcmVudENvb3JkaW5hdGVzID0gWy4uLnRhcmdldENvb3JkaW5hdGVzXTtcclxuICAgICAgICAgaW5kZXggPSB0YXJnZXRQYXJlbnRDb29yZGluYXRlcy5wb3AoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0YXJnZXQgY29vcmRpbmF0ZXMgYXJlIGVtcHR5XCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHRhcmdldFBhcmVudCA9IHRoaXMudHJlZU1vZGVsLmdldERlc2NlbmRhbnQoXHJcbiAgICAgICAgIHRhcmdldFBhcmVudENvb3JkaW5hdGVzXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICh0YXJnZXRQYXJlbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZ2V0IHRvIHRhcmdldFwiKTtcclxuICAgICAgfVxyXG4gICAgICB0YXJnZXRQYXJlbnQuaW5zZXJ0Q2hpbGQoc291cmNlLCBpbmRleCk7XHJcbiAgICAgIHRoaXMucmVidWlsZFRyZWVEYXRhKCk7XHJcbiAgICAgIHRoaXMuZHJvcHMkLm5leHQoe1xyXG4gICAgICAgICB0YXJnZXQ6IHNvdXJjZS5kYXRhLFxyXG4gICAgICAgICBvbGRQYXJlbnQ6IHNvdXJjZVBhcmVudD8uZGF0YSBhcyBMaW1ibGVUcmVlTm9kZSxcclxuICAgICAgICAgb2xkSW5kZXg6IHNvdXJjZUluZGV4LFxyXG4gICAgICAgICBuZXdQYXJlbnQ6IHRhcmdldFBhcmVudC5kYXRhLFxyXG4gICAgICAgICBuZXdJbmRleDogaW5kZXhcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgIH1cclxuXHJcbiAgIHB1YmxpYyByZW1vdmUodGFyZ2V0OiBCcmFuY2g8YW55Pikge1xyXG4gICAgICB0YXJnZXQucmVtb3ZlKCk7XHJcbiAgICAgIHRoaXMucmVidWlsZFRyZWVEYXRhKCk7XHJcbiAgICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgIH1cclxuXHJcbiAgIHByaXZhdGUgcmVidWlsZFRyZWVEYXRhKCk6IHZvaWQge1xyXG4gICAgICBpZiAodGhpcy50cmVlRGF0YSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJlZSBkYXRhIG5vdCBpbml0aWFsaXplZFwiKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRyZWVEYXRhLmxlbmd0aCA9IDA7XHJcbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIHRoaXMudHJlZU1vZGVsLmdldENoaWxkcmVuKCkpIHtcclxuICAgICAgICAgdGhpcy50cmVlRGF0YS5wdXNoKHRoaXMucmVidWlsZEJyYW5jaChicmFuY2gpKTtcclxuICAgICAgfVxyXG4gICB9XHJcblxyXG4gICBwcml2YXRlIHJlYnVpbGRCcmFuY2goYnJhbmNoOiBCcmFuY2g8YW55Pik6IExpbWJsZVRyZWVOb2RlIHtcclxuICAgICAgY29uc3QgdGVtcDogTGltYmxlVHJlZU5vZGUgPSBicmFuY2guZGF0YTtcclxuICAgICAgdGVtcC5ub2RlcyA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGJyYW5jaC5nZXRDaGlsZHJlbigpKSB7XHJcbiAgICAgICAgIHRlbXAubm9kZXMucHVzaCh0aGlzLnJlYnVpbGRCcmFuY2goY2hpbGQpKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGVtcDtcclxuICAgfVxyXG5cclxuICAgcHVibGljIGdldFBsYWNlaG9sZGVyKCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcclxuICAgfVxyXG59XHJcbiJdfQ==

@@ -7,5 +7,5 @@ import { NgModule } from "@angular/core";

import { LimbleTreeNodeComponent } from "./limble-tree-node/limble-tree-node.component";
import { TempService } from "./singletons/temp.service";
import { DropZoneService } from "./singletons/drop-zone.service";
import { DragStateService } from "./singletons/drag-state.service";
import { LimbleTreeRootComponent } from "./limble-tree-root/limble-tree-root.component";
import { LimbleTreePlaceholderComponent } from './limble-tree-placeholder/limble-tree-placeholder.component';
export class LimbleTreeModule {

@@ -19,9 +19,10 @@ }

LimbleTreeNodeComponent,
LimbleTreeRootComponent
LimbleTreeRootComponent,
LimbleTreePlaceholderComponent
],
imports: [CommonModule],
exports: [LimbleTreeRootComponent],
providers: [ComponentCreatorService, TempService, DropZoneService]
providers: [ComponentCreatorService, DragStateService]
},] }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQWF4RixNQUFNLE9BQU8sZ0JBQWdCOzs7WUFYNUIsUUFBUSxTQUFDO2dCQUNQLFlBQVksRUFBRTtvQkFDWCx5QkFBeUI7b0JBQ3pCLGlCQUFpQjtvQkFDakIsdUJBQXVCO29CQUN2Qix1QkFBdUI7aUJBQ3pCO2dCQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztnQkFDdkIsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7Z0JBQ2xDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLFdBQVcsRUFBRSxlQUFlLENBQUM7YUFDcEUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudENyZWF0b3JTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9jb21wb25lbnQtY3JlYXRvci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERyb3Bab25lQ29tcG9uZW50IH0gZnJvbSBcIi4vZHJvcC16b25lL2Ryb3Atem9uZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZU5vZGVDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1ub2RlL2xpbWJsZS10cmVlLW5vZGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFRlbXBTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy90ZW1wLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRHJvcFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9kcm9wLXpvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMaW1ibGVUcmVlUm9vdENvbXBvbmVudCB9IGZyb20gXCIuL2xpbWJsZS10cmVlLXJvb3QvbGltYmxlLXRyZWUtcm9vdC5jb21wb25lbnRcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBMaW1ibGVUcmVlQnJhbmNoQ29tcG9uZW50LFxyXG4gICAgICBEcm9wWm9uZUNvbXBvbmVudCxcclxuICAgICAgTGltYmxlVHJlZU5vZGVDb21wb25lbnQsXHJcbiAgICAgIExpbWJsZVRyZWVSb290Q29tcG9uZW50XHJcbiAgIF0sXHJcbiAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gICBleHBvcnRzOiBbTGltYmxlVHJlZVJvb3RDb21wb25lbnRdLFxyXG4gICBwcm92aWRlcnM6IFtDb21wb25lbnRDcmVhdG9yU2VydmljZSwgVGVtcFNlcnZpY2UsIERyb3Bab25lU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVNb2R1bGUge31cclxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLXRyZWUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi9saW1ibGUtdHJlZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFjN0csTUFBTSxPQUFPLGdCQUFnQjs7O1lBWjVCLFFBQVEsU0FBQztnQkFDUCxZQUFZLEVBQUU7b0JBQ1gseUJBQXlCO29CQUN6QixpQkFBaUI7b0JBQ2pCLHVCQUF1QjtvQkFDdkIsdUJBQXVCO29CQUN2Qiw4QkFBOEI7aUJBQ2hDO2dCQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztnQkFDdkIsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7Z0JBQ2xDLFNBQVMsRUFBRSxDQUFDLHVCQUF1QixFQUFFLGdCQUFnQixDQUFDO2FBQ3hEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDcmVhdG9yU2VydmljZSB9IGZyb20gXCIuL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEcm9wWm9uZUNvbXBvbmVudCB9IGZyb20gXCIuL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVCcmFuY2hDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1icmFuY2gvbGltYmxlLXRyZWUtYnJhbmNoLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IExpbWJsZVRyZWVOb2RlQ29tcG9uZW50IH0gZnJvbSBcIi4vbGltYmxlLXRyZWUtbm9kZS9saW1ibGUtdHJlZS1ub2RlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEcmFnU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4vc2luZ2xldG9ucy9kcmFnLXN0YXRlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGltYmxlVHJlZVJvb3RDb21wb25lbnQgfSBmcm9tIFwiLi9saW1ibGUtdHJlZS1yb290L2xpbWJsZS10cmVlLXJvb3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBMaW1ibGVUcmVlUGxhY2Vob2xkZXJDb21wb25lbnQgfSBmcm9tICcuL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyL2xpbWJsZS10cmVlLXBsYWNlaG9sZGVyLmNvbXBvbmVudCc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgTGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCxcclxuICAgICAgRHJvcFpvbmVDb21wb25lbnQsXHJcbiAgICAgIExpbWJsZVRyZWVOb2RlQ29tcG9uZW50LFxyXG4gICAgICBMaW1ibGVUcmVlUm9vdENvbXBvbmVudCxcclxuICAgICAgTGltYmxlVHJlZVBsYWNlaG9sZGVyQ29tcG9uZW50XHJcbiAgIF0sXHJcbiAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxyXG4gICBleHBvcnRzOiBbTGltYmxlVHJlZVJvb3RDb21wb25lbnRdLFxyXG4gICBwcm92aWRlcnM6IFtDb21wb25lbnRDcmVhdG9yU2VydmljZSwgRHJhZ1N0YXRlU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExpbWJsZVRyZWVNb2R1bGUge31cclxuIl19

@@ -8,6 +8,7 @@ /**

export { LimbleTreeNodeComponent as ɵg } from './lib/limble-tree-node/limble-tree-node.component';
export { LimbleTreePlaceholderComponent as ɵh } from './lib/limble-tree-placeholder/limble-tree-placeholder.component';
export { DropZoneService as ɵc } from './lib/limble-tree-root/drop-zone.service';
export { TreeService as ɵa } from './lib/limble-tree-root/tree.service';
export { ComponentCreatorService as ɵb } from './lib/singletons/component-creator.service';
export { DropZoneService as ɵc } from './lib/singletons/drop-zone.service';
export { TempService as ɵd } from './lib/singletons/temp.service';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLWxpbWJsZS10cmVlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy8iLCJzb3VyY2VzIjpbImxpbWJsZS1saW1ibGUtdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxpQkFBaUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUMseUJBQXlCLElBQUksRUFBRSxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDdEcsT0FBTyxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyxXQUFXLElBQUksRUFBRSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBQyxlQUFlLElBQUksRUFBRSxFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFDLFdBQVcsSUFBSSxFQUFFLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcblxuZXhwb3J0IHtEcm9wWm9uZUNvbXBvbmVudCBhcyDJtWZ9IGZyb20gJy4vbGliL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50JztcbmV4cG9ydCB7TGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCBhcyDJtWV9IGZyb20gJy4vbGliL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50JztcbmV4cG9ydCB7TGltYmxlVHJlZU5vZGVDb21wb25lbnQgYXMgybVnfSBmcm9tICcuL2xpYi9saW1ibGUtdHJlZS1ub2RlL2xpbWJsZS10cmVlLW5vZGUuY29tcG9uZW50JztcbmV4cG9ydCB7VHJlZVNlcnZpY2UgYXMgybVhfSBmcm9tICcuL2xpYi9saW1ibGUtdHJlZS1yb290L3RyZWUuc2VydmljZSc7XG5leHBvcnQge0NvbXBvbmVudENyZWF0b3JTZXJ2aWNlIGFzIMm1Yn0gZnJvbSAnLi9saWIvc2luZ2xldG9ucy9jb21wb25lbnQtY3JlYXRvci5zZXJ2aWNlJztcbmV4cG9ydCB7RHJvcFpvbmVTZXJ2aWNlIGFzIMm1Y30gZnJvbSAnLi9saWIvc2luZ2xldG9ucy9kcm9wLXpvbmUuc2VydmljZSc7XG5leHBvcnQge1RlbXBTZXJ2aWNlIGFzIMm1ZH0gZnJvbSAnLi9saWIvc2luZ2xldG9ucy90ZW1wLnNlcnZpY2UnOyJdfQ==
export { DragStateService as ɵd } from './lib/singletons/drag-state.service';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGltYmxlLWxpbWJsZS10cmVlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL2xpbWJsZS10cmVlL3NyYy8iLCJzb3VyY2VzIjpbImxpbWJsZS1saW1ibGUtdHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxpQkFBaUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUMseUJBQXlCLElBQUksRUFBRSxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDdEcsT0FBTyxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyxNQUFNLG1EQUFtRCxDQUFDO0FBQ2hHLE9BQU8sRUFBQyw4QkFBOEIsSUFBSSxFQUFFLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUNySCxPQUFPLEVBQUMsZUFBZSxJQUFJLEVBQUUsRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQy9FLE9BQU8sRUFBQyxXQUFXLElBQUksRUFBRSxFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3pGLE9BQU8sRUFBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcblxuZXhwb3J0IHtEcm9wWm9uZUNvbXBvbmVudCBhcyDJtWZ9IGZyb20gJy4vbGliL2Ryb3Atem9uZS9kcm9wLXpvbmUuY29tcG9uZW50JztcbmV4cG9ydCB7TGltYmxlVHJlZUJyYW5jaENvbXBvbmVudCBhcyDJtWV9IGZyb20gJy4vbGliL2xpbWJsZS10cmVlLWJyYW5jaC9saW1ibGUtdHJlZS1icmFuY2guY29tcG9uZW50JztcbmV4cG9ydCB7TGltYmxlVHJlZU5vZGVDb21wb25lbnQgYXMgybVnfSBmcm9tICcuL2xpYi9saW1ibGUtdHJlZS1ub2RlL2xpbWJsZS10cmVlLW5vZGUuY29tcG9uZW50JztcbmV4cG9ydCB7TGltYmxlVHJlZVBsYWNlaG9sZGVyQ29tcG9uZW50IGFzIMm1aH0gZnJvbSAnLi9saWIvbGltYmxlLXRyZWUtcGxhY2Vob2xkZXIvbGltYmxlLXRyZWUtcGxhY2Vob2xkZXIuY29tcG9uZW50JztcbmV4cG9ydCB7RHJvcFpvbmVTZXJ2aWNlIGFzIMm1Y30gZnJvbSAnLi9saWIvbGltYmxlLXRyZWUtcm9vdC9kcm9wLXpvbmUuc2VydmljZSc7XG5leHBvcnQge1RyZWVTZXJ2aWNlIGFzIMm1YX0gZnJvbSAnLi9saWIvbGltYmxlLXRyZWUtcm9vdC90cmVlLnNlcnZpY2UnO1xuZXhwb3J0IHtDb21wb25lbnRDcmVhdG9yU2VydmljZSBhcyDJtWJ9IGZyb20gJy4vbGliL3NpbmdsZXRvbnMvY29tcG9uZW50LWNyZWF0b3Iuc2VydmljZSc7XG5leHBvcnQge0RyYWdTdGF0ZVNlcnZpY2UgYXMgybVkfSBmcm9tICcuL2xpYi9zaW5nbGV0b25zL2RyYWctc3RhdGUuc2VydmljZSc7Il19
import { Injectable, ComponentFactoryResolver, Component, Input, ChangeDetectorRef, ViewChild, ViewContainerRef, Output, ElementRef, EventEmitter, NgModule } from '@angular/core';
import { BehaviorSubject, ReplaySubject } from 'rxjs';
import { take } from 'rxjs/operators';
import { CommonModule } from '@angular/common';

@@ -104,22 +105,64 @@

class TempService {
set(value) {
class DragStateService {
constructor() {
this.state = "idle";
this.state$ = new BehaviorSubject(this.state);
}
/** Called to indicate that something is being dragged. Stores that something for later. */
dragging(value) {
this._tempData = value;
this.state = "dragging";
this.state$.next(this.state);
}
get() {
/** Called to indicate that there is a valid active drop zone. Drop is now possible. */
droppable() {
if (this.state !== "dragging") {
throw new Error("Can only move to `droppable` state from `dragging` state");
}
this.state = "droppable";
this.state$.next(this.state);
}
/** Called to indicate that there is no longer a valid active drop zone. Drop is no longer possible. */
notDroppable() {
if (this.state !== "droppable") {
throw new Error("Can only call `notDroppable` when state is `droppable`");
}
this.state = "dragging";
this.state$.next(this.state);
}
/** Called to indicate that a drop into a valid drop zone has occurred. Returns the item that was dropped. */
capture() {
if (this.state !== "droppable") {
throw new Error("Can only move to `captured` state from `droppable` state");
}
this.state = "captured";
this.state$.next(this.state);
return this._tempData;
}
delete() {
/** Called to reset the service for future drags */
release() {
this._tempData = undefined;
this.state = "idle";
this.state$.next(this.state);
}
/** gets the current thing being dragged, if any. */
getData() {
return this._tempData;
}
/** gets the current state */
getState() {
return this.state;
}
}
TempService.decorators = [
DragStateService.decorators = [
{ type: Injectable }
];
DragStateService.ctorParameters = () => [];
class DropZoneService {
constructor(componentCreatorService, tempService) {
constructor(componentCreatorService, dragStateService) {
this.componentCreatorService = componentCreatorService;
this.tempService = tempService;
this.dragStateService = dragStateService;
this.activeDropZoneInfo = null;
this.setActiveDropZoneInfo(null);
this.secondaryDropZones = [];

@@ -140,3 +183,3 @@ this.dropZones = [];

if (active === true) {
this.activeDropZoneInfo = dropZone;
this.setActiveDropZoneInfo(dropZone);
}

@@ -150,3 +193,3 @@ else {

(_a = this.activeDropZoneInfo) === null || _a === void 0 ? void 0 : _a.container.clear();
this.activeDropZoneInfo = null;
this.setActiveDropZoneInfo(null);
for (const secondaryZone of this.secondaryDropZones) {

@@ -160,2 +203,11 @@ secondaryZone.container.clear();

}
setActiveDropZoneInfo(dropZoneInfo) {
this.activeDropZoneInfo = dropZoneInfo;
if (this.activeDropZoneInfo !== null) {
this.dragStateService.droppable();
}
else if (this.dragStateService.getState() === "droppable") {
this.dragStateService.notDroppable();
}
}
getDropZones() {

@@ -214,2 +266,6 @@ return this.dropZones;

previousSibling[previousSibling.length - 1]--;
const currentNode = (_b = (_a = this.dragStateService.getData()) === null || _a === void 0 ? void 0 : _a.getCoordinates()) !== null && _b !== void 0 ? _b : [];
if (arraysAreEqual(currentNode, previousSibling)) {
return;
}
const hasChildren = this.coordinatesHasChildren(previousSibling);

@@ -232,3 +288,3 @@ if (hasChildren) {

}
else if (!arraysAreEqual((_b = (_a = this.tempService.get()) === null || _a === void 0 ? void 0 : _a.getCoordinates()) !== null && _b !== void 0 ? _b : [], previousSibling)) {
else {
const previousSiblingNode = this.getCoordinatesGroup(previousSibling)[previousSibling[previousSibling.length - 1]];

@@ -320,3 +376,3 @@ if (isNestingAllowed(this.treeOptions, previousSiblingNode)) {

{ type: ComponentCreatorService },
{ type: TempService }
{ type: DragStateService }
];

@@ -386,2 +442,11 @@

}
getAncestors() {
const result = [];
let cursor = this;
while (cursor.parent !== null) {
result.push(cursor.parent);
cursor = cursor.parent;
}
return result;
}
appendChild(child) {

@@ -474,6 +539,6 @@ if (child.getParent() !== null) {

class LimbleTreeNodeComponent {
constructor(componentCreatorService, changeDetectorRef, tempService, dropZoneService, treeService) {
constructor(componentCreatorService, changeDetectorRef, dragStateService, dropZoneService, treeService) {
this.componentCreatorService = componentCreatorService;
this.changeDetectorRef = changeDetectorRef;
this.tempService = tempService;
this.dragStateService = dragStateService;
this.dropZoneService = dropZoneService;

@@ -493,6 +558,7 @@ this.treeService = treeService;

if (event.dataTransfer === null || this.branch === undefined) {
return;
throw new Error("failed to run dragstartHandler");
}
const draggedElement = event.target;
if (((_a = draggedElement.parentElement) === null || _a === void 0 ? void 0 : _a.tagName) !== "LIMBLE-TREE-NODE") {
//Don't drag stuff that isn't part of the tree
return;

@@ -502,3 +568,3 @@ }

draggedElement.classList.add("dragging");
this.tempService.set(this.branch);
this.dragStateService.dragging(this.branch);
}

@@ -508,29 +574,28 @@ dragendHandler(event) {

const draggedElement = event.target;
const sourceBranch = this.tempService.get();
if (sourceBranch === undefined) {
return;
draggedElement.classList.remove("dragging");
if (this.branch === undefined) {
throw new Error("failed to get current branch in dragendHandler");
}
this.tempService.delete();
draggedElement.classList.remove("dragging");
const dropZoneInfo = this.dropZoneService.getActiveDropZoneInfo();
if (dropZoneInfo === null) {
if (this.dragStateService.getState() !== "captured") {
return;
}
this.dropZoneService.removeActiveAndSecondaryZones();
if (dropZoneInfo.coordinates === undefined) {
throw new Error("could not determine drop zone location");
}
this.treeService.move(sourceBranch, dropZoneInfo.coordinates);
this.dragStateService.state$.pipe(take(2)).subscribe((state) => {
if (state === "captured" && this.branch !== undefined) {
this.treeService.remove(this.branch);
this.dragStateService.release();
}
});
}
dragoverHandler(event) {
var _a, _b, _c;
if (this.tempService.get() === undefined || this.branch === undefined) {
return;
if (this.branch === undefined) {
throw new Error("Can't get current branch during dragover event");
}
const sourceBranch = this.tempService.get();
const sourceBranch = this.dragStateService.getData();
if (sourceBranch === undefined) {
return;
throw new Error("Can't get source branch during dragover event");
}
//If trying to drop on self, remove any remaining drop zones and return.
if (sourceBranch === this.branch) {
//If trying to drop on self, remove any existing drop zones and return.
if (sourceBranch === this.branch ||
this.branch.getAncestors().includes(sourceBranch)) {
if (this.dropZoneService.getActiveDropZoneInfo() !== null) {

@@ -541,9 +606,26 @@ this.dropZoneService.removeActiveAndSecondaryZones();

}
if (this.treeService.getPlaceholder() === true &&
this.dropZoneAbove !== undefined) {
//If placeholder system is active, then activate the only existing drop zone
//and skip the rest of the logic in this function
const dropCoordinates = [...this.branch.getCoordinates()];
this.dropZoneService.showDropZoneFamily({
container: this.dropZoneAbove,
coordinates: dropCoordinates
});
return;
}
const target = event.currentTarget;
const topLine = target.offsetHeight / 3; //an imaginary line 1/3 of the way down from the top of the element;
const bottomLine = topLine * 2; //an imaginary line 1/3 of the way up from the bottom of the element;
const parent = this.branch.getParent();
let parentData;
if (parent !== null) {
parentData = parent.data;
}
if (event.offsetY < topLine &&
this.dropZoneAbove !== undefined &&
((_a = this.dropZoneService.getActiveDropZoneInfo()) === null || _a === void 0 ? void 0 : _a.container) !==
this.dropZoneAbove) {
this.dropZoneAbove &&
isNestingAllowed(this.treeService.treeOptions, parentData)) {
const dropCoordinates = [...this.branch.getCoordinates()];

@@ -570,3 +652,4 @@ this.dropZoneService.showDropZoneFamily({

this.dropZoneBelow &&
this.branch.getChildren().length === 0) {
this.branch.getChildren().length === 0 &&
isNestingAllowed(this.treeService.treeOptions, parentData)) {
const dropCoordinates = [...this.branch.getCoordinates()];

@@ -605,3 +688,4 @@ dropCoordinates[dropCoordinates.length - 1]++;

newBranchComponent.instance.branch = this.branch;
if (isNestingAllowed(this.treeService.treeOptions, this.branch.data)) {
if (isNestingAllowed(this.treeService.treeOptions, this.branch.data) &&
!this.treeService.getPlaceholder() === true) {
newBranchComponent.instance.dropZoneInside$.subscribe((dropZone) => {

@@ -636,2 +720,10 @@ var _a;

}
const parent = this.branch.getParent();
let parentData;
if (parent !== null) {
parentData = parent.data;
}
if (!isNestingAllowed(this.treeService.treeOptions, parentData)) {
return;
}
const currentCoordinates = this.branch.getCoordinates();

@@ -643,2 +735,6 @@ const dropCoordinatesAbove = [...currentCoordinates];

});
if (this.treeService.getPlaceholder() === true) {
//Only register one drop zone if the placeholder system is active
return;
}
const dropCoordinatesBelow = [...currentCoordinates];

@@ -684,3 +780,3 @@ dropCoordinatesBelow[dropCoordinatesBelow.length - 1]++;

{ type: ChangeDetectorRef },
{ type: TempService },
{ type: DragStateService },
{ type: DropZoneService },

@@ -698,2 +794,12 @@ { type: TreeService }

class LimbleTreePlaceholderComponent {
}
LimbleTreePlaceholderComponent.decorators = [
{ type: Component, args: [{
selector: "limble-tree-placeholder",
template: "<div class=\"placeholder\"></div>\n",
styles: [".placeholder{height:20px;width:100%}"]
},] }
];
/** The default value for the `indent` option */

@@ -708,2 +814,3 @@ const INDENT = 45;

this.treeModel = new Branch(null);
this.placeholder = false;
}

@@ -733,12 +840,25 @@ /** Initializes the service and renders the tree.

this.dropZoneService.init(this.treeData, this.treeOptions);
for (const node of this.treeData) {
const branch = new Branch(node);
if (this.treeData.length === 0) {
//Tree is empty, but we have to to have something there so other trees' items can be dropped into it
this.placeholder = true;
const placeholderNode = {
component: { class: LimbleTreePlaceholderComponent }
};
const branch = new Branch(placeholderNode);
this.treeModel.appendChild(branch);
}
for (const branch of this.treeModel.getChildren()) {
const componentRef = this.componentCreatorService.appendComponent(LimbleTreeNodeComponent, this.host);
componentRef.instance.branch = branch;
//The LimbleTreeNodeComponent will (indirectly) call the `renderBranch` method of this service to render
//its own children
}
else {
for (const node of this.treeData) {
const branch = new Branch(node);
this.treeModel.appendChild(branch);
}
for (const branch of this.treeModel.getChildren()) {
const componentRef = this.componentCreatorService.appendComponent(LimbleTreeNodeComponent, this.host);
componentRef.instance.branch = branch;
//The LimbleTreeNodeComponent will (indirectly) call the `renderBranch` method of this service to render
//its own children
}
}
this.changes$.next(null);

@@ -771,3 +891,3 @@ }

}
move(source, targetCoordinates) {
drop(source, targetCoordinates) {
const sourceParent = source.getParent();

@@ -778,4 +898,14 @@ const sourceIndex = source.getIndex();

}
const targetParentCoordinates = [...targetCoordinates];
const index = targetParentCoordinates.pop();
let targetParentCoordinates;
let index;
if (this.placeholder === true) {
targetParentCoordinates = [];
index = 0;
this.treeModel.removeChild(0); //remove the placeholder
this.placeholder = false;
}
else {
targetParentCoordinates = [...targetCoordinates];
index = targetParentCoordinates.pop();
}
if (index === undefined) {

@@ -790,3 +920,2 @@ throw new Error("target coordinates are empty");

this.rebuildTreeData();
console.log(sourceParent);
this.drops$.next({

@@ -801,2 +930,7 @@ target: source.data,

}
remove(target) {
target.remove();
this.rebuildTreeData();
this.render();
}
rebuildTreeData() {

@@ -819,2 +953,5 @@ if (this.treeData == undefined) {

}
getPlaceholder() {
return this.placeholder;
}
}

@@ -830,6 +967,7 @@ TreeService.decorators = [

class LimbleTreeRootComponent {
constructor(treeService, changeDetectorRef, dropZoneService) {
constructor(treeService, changeDetectorRef, dropZoneService, dragStateService) {
this.treeService = treeService;
this.changeDetectorRef = changeDetectorRef;
this.dropZoneService = dropZoneService;
this.dragStateService = dragStateService;
this.treeChange = new EventEmitter();

@@ -883,4 +1021,21 @@ this.treeDrop = new EventEmitter();

}
dropHandler(event) {
event.stopPropagation();
const dropZoneInfo = this.dropZoneService.getActiveDropZoneInfo();
if (this.dragStateService.getState() !== "droppable") {
return;
}
if (dropZoneInfo === null) {
throw new Error("failed to get active drop zone at drop handler");
}
const sourceBranch = this.dragStateService.capture();
if (sourceBranch === undefined) {
throw new Error("failed to get current branch in dragendHandler");
}
this.dropZoneService.removeActiveAndSecondaryZones();
this.treeService.drop(sourceBranch, dropZoneInfo.coordinates);
}
ngOnDestroy() {
this.changesSubscription.unsubscribe();
this.dropSubscription.unsubscribe();
}

@@ -891,4 +1046,4 @@ }

selector: "limble-tree-root",
template: "<div\r\n (dragover)=\"dragoverHandler($event)\"\r\n (dragleave)=\"dragleaveHandler($event)\"\r\n>\r\n <ng-template #dropZoneInside></ng-template>\r\n <ng-template #host></ng-template>\r\n</div>\r\n",
providers: [TreeService],
template: "<div\r\n (dragover)=\"dragoverHandler($event)\"\r\n (dragleave)=\"dragleaveHandler($event)\"\r\n (drop)=\"dropHandler($event)\"\r\n>\r\n <ng-template #dropZoneInside></ng-template>\r\n <ng-template #host></ng-template>\r\n</div>\r\n",
providers: [TreeService, DropZoneService],
styles: [""]

@@ -900,3 +1055,4 @@ },] }

{ type: ChangeDetectorRef },
{ type: DropZoneService }
{ type: DropZoneService },
{ type: DragStateService }
];

@@ -921,7 +1077,8 @@ LimbleTreeRootComponent.propDecorators = {

LimbleTreeNodeComponent,
LimbleTreeRootComponent
LimbleTreeRootComponent,
LimbleTreePlaceholderComponent
],
imports: [CommonModule],
exports: [LimbleTreeRootComponent],
providers: [ComponentCreatorService, TempService, DropZoneService]
providers: [ComponentCreatorService, DragStateService]
},] }

@@ -938,3 +1095,3 @@ ];

export { LimbleTreeModule, LimbleTreeRootComponent, TreeService as ɵa, ComponentCreatorService as ɵb, DropZoneService as ɵc, TempService as ɵd, LimbleTreeBranchComponent as ɵe, DropZoneComponent as ɵf, LimbleTreeNodeComponent as ɵg };
export { LimbleTreeModule, LimbleTreeRootComponent, TreeService as ɵa, ComponentCreatorService as ɵb, DropZoneService as ɵc, DragStateService as ɵd, LimbleTreeBranchComponent as ɵe, DropZoneComponent as ɵf, LimbleTreeNodeComponent as ɵg, LimbleTreePlaceholderComponent as ɵh };
//# sourceMappingURL=limble-limble-tree.js.map

@@ -17,2 +17,3 @@ /** An object indicating a location within a tree */

findDescendant(predicate: (data: T) => boolean): Branch<T> | undefined;
getAncestors(): Array<Branch<unknown>>;
appendChild(child: Branch<T>): Branch<T>;

@@ -19,0 +20,0 @@ insertChild(child: Branch<T>, index: number): Branch<T>;

@@ -1,3 +0,3 @@

import type { DropZoneInfo } from "../singletons/drop-zone.service";
import { DropZoneService } from "../singletons/drop-zone.service";
import type { DropZoneInfo } from "../limble-tree-root/drop-zone.service";
import { DropZoneService } from "../limble-tree-root/drop-zone.service";
export declare class DropZoneComponent {

@@ -4,0 +4,0 @@ private readonly dropZoneService;

import { AfterViewInit, ChangeDetectorRef } from "@angular/core";
import { ComponentCreatorService } from "../singletons/component-creator.service";
import { DropZoneService } from "../singletons/drop-zone.service";
import { TempService } from "../singletons/temp.service";
import { DropZoneService } from "../limble-tree-root/drop-zone.service";
import { DragStateService } from "../singletons/drag-state.service";
import { TreeService } from "../limble-tree-root/tree.service";
import type { Branch } from "../branch";
import { Branch } from "../branch";
export declare class LimbleTreeNodeComponent implements AfterViewInit {
private readonly componentCreatorService;
private readonly changeDetectorRef;
private readonly tempService;
private readonly dragStateService;
private readonly dropZoneService;

@@ -20,3 +20,3 @@ private readonly treeService;

private draggableDiv;
constructor(componentCreatorService: ComponentCreatorService, changeDetectorRef: ChangeDetectorRef, tempService: TempService, dropZoneService: DropZoneService, treeService: TreeService);
constructor(componentCreatorService: ComponentCreatorService, changeDetectorRef: ChangeDetectorRef, dragStateService: DragStateService, dropZoneService: DropZoneService, treeService: TreeService);
ngAfterViewInit(): void;

@@ -23,0 +23,0 @@ dragstartHandler(event: DragEvent): void;

import { AfterViewInit, ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, ViewContainerRef } from "@angular/core";
import { BehaviorSubject } from "rxjs";
import { DropZoneService } from "../singletons/drop-zone.service";
import { DropZoneService } from "./drop-zone.service";
import { LimbleTreeData, LimbleTreeOptions, TreeDrop } from "../limble-tree-root/tree.service";
import { TreeService } from "./tree.service";
import { DragStateService } from "../singletons/drag-state.service";
export declare class LimbleTreeRootComponent implements AfterViewInit, OnChanges, OnDestroy {

@@ -10,2 +11,3 @@ private readonly treeService;

private readonly dropZoneService;
private readonly dragStateService;
data: LimbleTreeData | undefined;

@@ -20,3 +22,3 @@ options: LimbleTreeOptions | undefined;

private readonly dropSubscription;
constructor(treeService: TreeService, changeDetectorRef: ChangeDetectorRef, dropZoneService: DropZoneService);
constructor(treeService: TreeService, changeDetectorRef: ChangeDetectorRef, dropZoneService: DropZoneService, dragStateService: DragStateService);
ngAfterViewInit(): void;

@@ -27,3 +29,4 @@ ngOnChanges(): void;

dragleaveHandler(event: DragEvent): void;
dropHandler(event: DragEvent): void;
ngOnDestroy(): void;
}
import { Type, ViewContainerRef } from "@angular/core";
import { ReplaySubject } from "rxjs";
import { ComponentCreatorService } from "../singletons/component-creator.service";
import { DropZoneService } from "../singletons/drop-zone.service";
import { DropZoneService } from "./drop-zone.service";
import { Branch, BranchCoordinates } from "../branch";

@@ -23,7 +23,8 @@ /** An object describing a node of the tree */

indent?: number;
/** Whether to allow "nesting" (placing a node one level deeper than currently exists on the branch)
/**
* Whether to allow "nesting" (placing a node one level deeper than currently exists on the branch)
* when dragging a node. Defaults to true.
*/
allowNesting?: boolean | ((nodeData: LimbleTreeNode) => boolean);
/** Whether to allow drag-and-drop functionality. Defaults to true.*/
/** Whether to allow drag-and-drop functionality. Defaults to true. */
allowDragging?: boolean | ((nodeData: LimbleTreeNode) => boolean);

@@ -71,2 +72,3 @@ }

treeModel: Branch<any>;
private placeholder;
constructor(componentCreatorService: ComponentCreatorService, dropZoneService: DropZoneService);

@@ -85,5 +87,7 @@ /** Initializes the service and renders the tree.

private processOptions;
move(source: Branch<any>, targetCoordinates: BranchCoordinates): void;
drop(source: Branch<any>, targetCoordinates: BranchCoordinates): void;
remove(target: Branch<any>): void;
private rebuildTreeData;
private rebuildBranch;
getPlaceholder(): boolean;
}

@@ -8,5 +8,6 @@ /**

export { LimbleTreeNodeComponent as ɵg } from './lib/limble-tree-node/limble-tree-node.component';
export { LimbleTreePlaceholderComponent as ɵh } from './lib/limble-tree-placeholder/limble-tree-placeholder.component';
export { DropZoneService as ɵc } from './lib/limble-tree-root/drop-zone.service';
export { TreeService as ɵa } from './lib/limble-tree-root/tree.service';
export { ComponentCreatorService as ɵb } from './lib/singletons/component-creator.service';
export { DropZoneService as ɵc } from './lib/singletons/drop-zone.service';
export { TempService as ɵd } from './lib/singletons/temp.service';
export { DragStateService as ɵd } from './lib/singletons/drag-state.service';

@@ -1,1 +0,1 @@

{"__symbolic":"module","version":4,"metadata":{"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":71,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"}]}],"init":[{"__symbolic":"method"}],"render":[{"__symbolic":"method"}],"renderBranch":[{"__symbolic":"method"}],"processOptions":[{"__symbolic":"method"}],"move":[{"__symbolic":"method"}],"rebuildTreeData":[{"__symbolic":"method"}],"rebuildBranch":[{"__symbolic":"method"}]}},"LimbleTreeNode":{"__symbolic":"interface"},"LimbleTreeData":{"__symbolic":"interface"},"LimbleTreeOptions":{"__symbolic":"interface"},"ComponentObj":{"__symbolic":"interface"},"TreeDrop":{"__symbolic":"interface"},"LimbleTreeRootComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":22,"character":1},"arguments":[{"selector":"limble-tree-root","providers":[{"__symbolic":"reference","name":"ɵa"}],"template":"<div\r\n (dragover)=\"dragoverHandler($event)\"\r\n (dragleave)=\"dragleaveHandler($event)\"\r\n>\r\n <ng-template #dropZoneInside></ng-template>\r\n <ng-template #host></ng-template>\r\n</div>\r\n","styles":[""]}]}],"members":{"data":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":30,"character":4}}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":4}}]}],"host":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":33,"character":4},"arguments":["host",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":33,"character":30}}]}]}],"dropZoneInside":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":37,"character":4},"arguments":["dropZoneInside",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":37,"character":40}}]}]}],"dropZoneInside$":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":40,"character":4}}]}],"treeChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":43,"character":4}}]}],"treeDrop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":45,"character":4}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":52,"character":42},{"__symbolic":"reference","name":"ɵc"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"update":[{"__symbolic":"method"}],"dragoverHandler":[{"__symbolic":"method"}],"dragleaveHandler":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"LimbleTreeModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵg"},{"__symbolic":"reference","name":"LimbleTreeRootComponent"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":17,"character":13}],"exports":[{"__symbolic":"reference","name":"LimbleTreeRootComponent"}],"providers":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"ɵc"}]}]}],"members":{}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":7,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":9,"character":49}]}],"appendComponent":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":17,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵd"}]}],"init":[{"__symbolic":"method"}],"showSingleDropZone":[{"__symbolic":"method"}],"removeActiveAndSecondaryZones":[{"__symbolic":"method"}],"getActiveDropZoneInfo":[{"__symbolic":"method"}],"getDropZones":[{"__symbolic":"method"}],"getSecondaryDropZones":[{"__symbolic":"method"}],"addDropZone":[{"__symbolic":"method"}],"clearDropZones":[{"__symbolic":"method"}],"isLastDropZoneInBranch":[{"__symbolic":"method"}],"isOnRoot":[{"__symbolic":"method"}],"showDropZoneFamily":[{"__symbolic":"method"}],"coordinatesHasChildren":[{"__symbolic":"method"}],"swapActiveDropZone":[{"__symbolic":"method"}],"getNextSibling":[{"__symbolic":"method"}],"getCoordinatesGroup":[{"__symbolic":"method"}],"getCoordinatesChildren":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":3,"character":1}}],"members":{"set":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}],"delete":[{"__symbolic":"method"}]}},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":13,"character":1},"arguments":[{"selector":"limble-tree-branch","styles":["./limble-tree-branch.component.scss"],"template":"<div [style.marginLeft.px]=\"indent\">\r\n <ng-template #dropZoneInside></ng-template>\r\n <span [hidden]=\"branch?.data.collapsed\" class=\"limble-child-nodes\">\r\n <ng-template #host></ng-template>\r\n </span>\r\n</div>\r\n"}]}],"members":{"branch":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":4}}]}],"host":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":21,"character":4},"arguments":["host",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":21,"character":30}}]}]}],"dropZoneInside":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":25,"character":4},"arguments":["dropZoneInside",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":25,"character":40}}]}]}],"dropZoneInside$":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":28,"character":4}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":35,"character":42}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"reRender":[{"__symbolic":"method"}]}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"drop-zone","template":"<div class=\"dropZoneContainer\" (dragenter)=\"dragenterHandler()\">\r\n <div [ngClass]=\"{ active: active, related: !active }\"></div>\r\n</div>\r\n","styles":[".active{background:#f0f9ff;border:2px dashed #bed2db;border-radius:5px;height:100px}.active,.related{box-sizing:border-box;margin:10px 0;width:calc(100% - 20px)}.related{background:#fff6f0;border:1px dashed #dbccbe;border-radius:5px;height:20px;opacity:.8}.dropZoneContainer{position:relative}"]}]}],"members":{"active":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":4}}]}],"dropZoneInfo":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":4}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵc"}]}],"dragenterHandler":[{"__symbolic":"method"}]}},"ɵg":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":17,"character":1},"arguments":[{"selector":"limble-tree-node","template":"<ng-template #dropZoneAbove></ng-template>\r\n<div\r\n (dragstart)=\"dragstartHandler($event)\"\r\n (dragend)=\"dragendHandler($event)\"\r\n #draggableDiv\r\n>\r\n <div (dragover)=\"dragoverHandler($event)\">\r\n <ng-template #nodeHost></ng-template>\r\n </div>\r\n <ng-template #children></ng-template>\r\n</div>\r\n<ng-template #dropZoneBelow></ng-template>\r\n","styles":[".dragging{opacity:.33}"]}]}],"members":{"branch":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":23,"character":4}}]}],"nodeHost":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":24,"character":4},"arguments":["nodeHost",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":24,"character":34}}]}]}],"dropZoneAbove":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":27,"character":4},"arguments":["dropZoneAbove",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":27,"character":39}}]}]}],"dropZoneBelow":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":29,"character":4},"arguments":["dropZoneBelow",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":29,"character":39}}]}]}],"children":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":32,"character":4},"arguments":["children",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":32,"character":34}}]}]}],"draggableDiv":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":35,"character":4},"arguments":["draggableDiv",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":35,"character":38}}]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":41,"character":42},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵa"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"dragstartHandler":[{"__symbolic":"method"}],"dragendHandler":[{"__symbolic":"method"}],"dragoverHandler":[{"__symbolic":"method"}],"renderSelf":[{"__symbolic":"method"}],"renderChildren":[{"__symbolic":"method"}],"registerDropZones":[{"__symbolic":"method"}],"checkForHandle":[{"__symbolic":"method"}]}}},"origins":{"ɵa":"./lib/limble-tree-root/tree.service","LimbleTreeNode":"./lib/limble-tree-root/tree.service","LimbleTreeData":"./lib/limble-tree-root/tree.service","LimbleTreeOptions":"./lib/limble-tree-root/tree.service","ComponentObj":"./lib/limble-tree-root/tree.service","TreeDrop":"./lib/limble-tree-root/tree.service","LimbleTreeRootComponent":"./lib/limble-tree-root/limble-tree-root.component","LimbleTreeModule":"./lib/limble-tree.module","ɵb":"./lib/singletons/component-creator.service","ɵc":"./lib/singletons/drop-zone.service","ɵd":"./lib/singletons/temp.service","ɵe":"./lib/limble-tree-branch/limble-tree-branch.component","ɵf":"./lib/drop-zone/drop-zone.component","ɵg":"./lib/limble-tree-node/limble-tree-node.component"},"importAs":"@limble/limble-tree"}
{"__symbolic":"module","version":4,"metadata":{"ɵa":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":73,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵc"}]}],"init":[{"__symbolic":"method"}],"render":[{"__symbolic":"method"}],"renderBranch":[{"__symbolic":"method"}],"processOptions":[{"__symbolic":"method"}],"drop":[{"__symbolic":"method"}],"remove":[{"__symbolic":"method"}],"rebuildTreeData":[{"__symbolic":"method"}],"rebuildBranch":[{"__symbolic":"method"}],"getPlaceholder":[{"__symbolic":"method"}]}},"LimbleTreeNode":{"__symbolic":"interface"},"LimbleTreeData":{"__symbolic":"interface"},"LimbleTreeOptions":{"__symbolic":"interface"},"ComponentObj":{"__symbolic":"interface"},"TreeDrop":{"__symbolic":"interface"},"LimbleTreeRootComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":23,"character":1},"arguments":[{"selector":"limble-tree-root","providers":[{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","name":"ɵc"}],"template":"<div\r\n (dragover)=\"dragoverHandler($event)\"\r\n (dragleave)=\"dragleaveHandler($event)\"\r\n (drop)=\"dropHandler($event)\"\r\n>\r\n <ng-template #dropZoneInside></ng-template>\r\n <ng-template #host></ng-template>\r\n</div>\r\n","styles":[""]}]}],"members":{"data":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":4}}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":4}}]}],"host":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":34,"character":4},"arguments":["host",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":34,"character":30}}]}]}],"dropZoneInside":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":38,"character":4},"arguments":["dropZoneInside",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":38,"character":40}}]}]}],"dropZoneInside$":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":41,"character":4}}]}],"treeChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":44,"character":4}}]}],"treeDrop":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":46,"character":4}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":53,"character":42},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵd"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"update":[{"__symbolic":"method"}],"dragoverHandler":[{"__symbolic":"method"}],"dragleaveHandler":[{"__symbolic":"method"}],"dropHandler":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"LimbleTreeModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"ɵe"},{"__symbolic":"reference","name":"ɵf"},{"__symbolic":"reference","name":"ɵg"},{"__symbolic":"reference","name":"LimbleTreeRootComponent"},{"__symbolic":"reference","name":"ɵh"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":18,"character":13}],"exports":[{"__symbolic":"reference","name":"LimbleTreeRootComponent"}],"providers":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵd"}]}]}],"members":{}},"ɵb":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":7,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ComponentFactoryResolver","line":9,"character":49}]}],"appendComponent":[{"__symbolic":"method"}]}},"ɵc":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":17,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","name":"ɵd"}]}],"init":[{"__symbolic":"method"}],"showSingleDropZone":[{"__symbolic":"method"}],"removeActiveAndSecondaryZones":[{"__symbolic":"method"}],"getActiveDropZoneInfo":[{"__symbolic":"method"}],"setActiveDropZoneInfo":[{"__symbolic":"method"}],"getDropZones":[{"__symbolic":"method"}],"getSecondaryDropZones":[{"__symbolic":"method"}],"addDropZone":[{"__symbolic":"method"}],"clearDropZones":[{"__symbolic":"method"}],"isLastDropZoneInBranch":[{"__symbolic":"method"}],"isOnRoot":[{"__symbolic":"method"}],"showDropZoneFamily":[{"__symbolic":"method"}],"coordinatesHasChildren":[{"__symbolic":"method"}],"swapActiveDropZone":[{"__symbolic":"method"}],"getNextSibling":[{"__symbolic":"method"}],"getCoordinatesGroup":[{"__symbolic":"method"}],"getCoordinatesChildren":[{"__symbolic":"method"}]}},"ɵd":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":6,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor"}],"dragging":[{"__symbolic":"method"}],"droppable":[{"__symbolic":"method"}],"notDroppable":[{"__symbolic":"method"}],"capture":[{"__symbolic":"method"}],"release":[{"__symbolic":"method"}],"getData":[{"__symbolic":"method"}],"getState":[{"__symbolic":"method"}]}},"ɵe":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":13,"character":1},"arguments":[{"selector":"limble-tree-branch","styles":["./limble-tree-branch.component.scss"],"template":"<div [style.marginLeft.px]=\"indent\">\r\n <ng-template #dropZoneInside></ng-template>\r\n <span [hidden]=\"branch?.data.collapsed\" class=\"limble-child-nodes\">\r\n <ng-template #host></ng-template>\r\n </span>\r\n</div>\r\n"}]}],"members":{"branch":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":19,"character":4}}]}],"host":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":21,"character":4},"arguments":["host",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":21,"character":30}}]}]}],"dropZoneInside":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":25,"character":4},"arguments":["dropZoneInside",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":25,"character":40}}]}]}],"dropZoneInside$":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":28,"character":4}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵa"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":35,"character":42}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"reRender":[{"__symbolic":"method"}]}},"ɵf":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":4,"character":1},"arguments":[{"selector":"drop-zone","template":"<div class=\"dropZoneContainer\" (dragenter)=\"dragenterHandler()\">\r\n <div [ngClass]=\"{ active: active, related: !active }\"></div>\r\n</div>\r\n","styles":[".active{background:#f0f9ff;border:2px dashed #bed2db;border-radius:5px;height:100px}.active,.related{box-sizing:border-box;margin:10px 0;width:calc(100% - 20px)}.related{background:#fff6f0;border:1px dashed #dbccbe;border-radius:5px;height:20px;opacity:.8}.dropZoneContainer{position:relative}"]}]}],"members":{"active":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":10,"character":4}}]}],"dropZoneInfo":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":11,"character":4}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵc"}]}],"dragenterHandler":[{"__symbolic":"method"}]}},"ɵg":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":18,"character":1},"arguments":[{"selector":"limble-tree-node","template":"<ng-template #dropZoneAbove></ng-template>\r\n<div\r\n (dragstart)=\"dragstartHandler($event)\"\r\n (dragend)=\"dragendHandler($event)\"\r\n #draggableDiv\r\n>\r\n <div (dragover)=\"dragoverHandler($event)\">\r\n <ng-template #nodeHost></ng-template>\r\n </div>\r\n <ng-template #children></ng-template>\r\n</div>\r\n<ng-template #dropZoneBelow></ng-template>\r\n","styles":[".dragging{opacity:.33}"]}]}],"members":{"branch":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":24,"character":4}}]}],"nodeHost":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":25,"character":4},"arguments":["nodeHost",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":25,"character":34}}]}]}],"dropZoneAbove":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":28,"character":4},"arguments":["dropZoneAbove",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":28,"character":39}}]}]}],"dropZoneBelow":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":30,"character":4},"arguments":["dropZoneBelow",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":30,"character":39}}]}]}],"children":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":33,"character":4},"arguments":["children",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ViewContainerRef","line":33,"character":34}}]}]}],"draggableDiv":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":36,"character":4},"arguments":["draggableDiv",{"read":{"__symbolic":"reference","module":"@angular/core","name":"ElementRef","line":36,"character":38}}]}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ɵb"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":42,"character":42},{"__symbolic":"reference","name":"ɵd"},{"__symbolic":"reference","name":"ɵc"},{"__symbolic":"reference","name":"ɵa"}]}],"ngAfterViewInit":[{"__symbolic":"method"}],"dragstartHandler":[{"__symbolic":"method"}],"dragendHandler":[{"__symbolic":"method"}],"dragoverHandler":[{"__symbolic":"method"}],"renderSelf":[{"__symbolic":"method"}],"renderChildren":[{"__symbolic":"method"}],"registerDropZones":[{"__symbolic":"method"}],"checkForHandle":[{"__symbolic":"method"}]}},"ɵh":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":2,"character":1},"arguments":[{"selector":"limble-tree-placeholder","template":"<div class=\"placeholder\"></div>\n","styles":[".placeholder{height:20px;width:100%}"]}]}],"members":{}}},"origins":{"ɵa":"./lib/limble-tree-root/tree.service","LimbleTreeNode":"./lib/limble-tree-root/tree.service","LimbleTreeData":"./lib/limble-tree-root/tree.service","LimbleTreeOptions":"./lib/limble-tree-root/tree.service","ComponentObj":"./lib/limble-tree-root/tree.service","TreeDrop":"./lib/limble-tree-root/tree.service","LimbleTreeRootComponent":"./lib/limble-tree-root/limble-tree-root.component","LimbleTreeModule":"./lib/limble-tree.module","ɵb":"./lib/singletons/component-creator.service","ɵc":"./lib/limble-tree-root/drop-zone.service","ɵd":"./lib/singletons/drag-state.service","ɵe":"./lib/limble-tree-branch/limble-tree-branch.component","ɵf":"./lib/drop-zone/drop-zone.component","ɵg":"./lib/limble-tree-node/limble-tree-node.component","ɵh":"./lib/limble-tree-placeholder/limble-tree-placeholder.component"},"importAs":"@limble/limble-tree"}
{
"name": "@limble/limble-tree",
"version": "0.3.1",
"version": "0.4.0",
"peerDependencies": {

@@ -5,0 +5,0 @@ "@angular/common": "^11.0.9",

@@ -15,2 +15,14 @@ # Limble Tree

### Features
- Unlimited tree depth
- Can have a different component rendered for each node in the tree
- Can drag nodes from one location in the tree to other locations
- Dragging can be turned off for all or some of the nodes
- Easy nesting of nodes
- Nesting can be turned off for all or some of the nodes
- Nodes can be dropped into other limble trees
- Supports drag handles
- Catchable events are fired when the tree renders and when a drop occurs
### Versioning

@@ -86,4 +98,4 @@

- `indent`: The number of pixels to indent for each level of the tree. Defaults to 45.
- `allowNesting`: Whether to allow "nesting" (placing a node one level deeper than currently exists on the branch) when dragging a node. May be a boolean or a callback function that returns a boolean. If it is a callback, the callback will be called for each node and the node will be passed in to the callback. Defaults to true.
- `allowDragging`: Whether to allow drag-and-drop functionality. May be a boolean or a callback function that returns a boolean. If it is a callback, the callback will be called for each node and the node will be passed in to the callback. Defaults to true.
- `allowNesting`: Whether to allow "nesting" (placing a node one level deeper than currently exists on the branch) under a node. May be a boolean or a callback function that returns a boolean. If it is a callback, the callback will be called for each node when another node is attempting to nest under it. The parent node (the one which is potentially being nested under) will be passed in to the callback. Defaults to true.
- `allowDragging`: Whether to allow drag-and-drop functionality. May be a boolean or a callback function that returns a boolean. If it is a callback, the callback will be called for each node when a drag is attempted on it, and that node will be passed in to the callback. Defaults to true.

@@ -114,2 +126,6 @@ ### The LimbleTreeRoot Component

### Drag Handles
Adding the `limble-tree-handle` css class to an element in a node component will designate that element as the drag handle, making it so the node can only be dragged by clicking on that element.
### Demo App

@@ -116,0 +132,0 @@

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc