@plait/common 0.32.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -59,7 +59,7 @@ export class ImageBaseComponent {
59
59
  drawFocus() {
60
60
  if (this.initialized) {
61
61
  const activeG = PlaitBoard.getElementActiveHost(this.board);
62
- this.activeGenerator.draw({}, activeG, { selected: this._isFocus });
62
+ this.activeGenerator.processDrawing({}, activeG, { selected: this._isFocus });
63
63
  }
64
64
  }
65
65
  ngOnDestroy() {
@@ -90,4 +90,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
90
90
  }], hasResizeHandle: [{
91
91
  type: Input
92
92
  }] } });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvcmUvaW1hZ2UtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWMsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFpQyxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNySSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVFoRCxNQUFNLE9BQWdCLGtCQUFrQjtJQVlwQyxJQUNJLFNBQVMsQ0FBQyxLQUFzQjtRQUNoQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBS0QsSUFDSSxPQUFPLENBQUMsS0FBYztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxDQUFDO0lBUUQsWUFBc0IsVUFBbUMsRUFBUyxHQUFzQjtRQUFsRSxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBekN4RixnQkFBVyxHQUFHLEtBQUssQ0FBQztJQXlDdUUsQ0FBQztJQUU1RixRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ25ELGNBQWMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2pCLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ3BFLE9BQU8sbUJBQW1CLENBQUM7aUJBQzlCO3FCQUFNO29CQUNILE9BQU8sbUJBQW1CLENBQUM7aUJBQzlCO1lBQ0wsQ0FBQztZQUNELGdCQUFnQixFQUFFLEdBQUcsRUFBRTtnQkFDbkIsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7b0JBQy9GLE9BQU8sQ0FBQyxDQUFDO2lCQUNaO3FCQUFNO29CQUNILE9BQU8sR0FBRyxDQUFDO2lCQUNkO1lBQ0wsQ0FBQztZQUNELFlBQVksRUFBRSxHQUFHLEVBQUU7Z0JBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0IsQ0FBQztZQUNELGVBQWUsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xCLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQ3pHLENBQUM7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQWtCLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZGO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQztJQUNMLENBQUM7K0dBeEZpQixrQkFBa0I7bUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFMdkMsU0FBUzttQkFBQztvQkFDUCxJQUFJLEVBQUU7d0JBQ0YsS0FBSyxFQUFFLHVCQUF1QjtxQkFDakM7aUJBQ0o7aUlBV0csT0FBTztzQkFETixLQUFLO2dCQUlGLFNBQVM7c0JBRFosS0FBSztnQkFZTixLQUFLO3NCQURKLEtBQUs7Z0JBSUYsT0FBTztzQkFEVixLQUFLO2dCQWdCRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFDVElWRV9TVFJPS0VfV0lEVEgsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUmVjdGFuZ2xlQ2xpZW50LCBnZXRTZWxlY3RlZEVsZW1lbnRzLCBpc1NlbGVjdGlvbk1vdmluZyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEFjdGl2ZUdlbmVyYXRvciB9IGZyb20gJy4uL2dlbmVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tbW9uSW1hZ2VJdGVtIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAncGxhaXQtaW1hZ2UtY29udGFpbmVyJ1xuICAgIH1cbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW1hZ2VCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIF9pbWFnZUl0ZW0hOiBDb21tb25JbWFnZUl0ZW07XG5cbiAgICBfaXNGb2N1cyE6IGJvb2xlYW47XG5cbiAgICBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgYWN0aXZlR2VuZXJhdG9yITogQWN0aXZlR2VuZXJhdG9yO1xuXG4gICAgQElucHV0KClcbiAgICBlbGVtZW50ITogUGxhaXRFbGVtZW50O1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgaW1hZ2VJdGVtKHZhbHVlOiBDb21tb25JbWFnZUl0ZW0pIHtcbiAgICAgICAgdGhpcy5hZnRlckltYWdlSXRlbUNoYW5nZSh0aGlzLl9pbWFnZUl0ZW0sIHZhbHVlKTtcbiAgICAgICAgdGhpcy5faW1hZ2VJdGVtID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZHJhd0ZvY3VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGltYWdlSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlSXRlbTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGJvYXJkITogUGxhaXRCb2FyZDtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGlzRm9jdXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faXNGb2N1cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmRyYXdGb2N1cygpO1xuICAgIH1cblxuICAgIGdldCBpc0ZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNGb2N1cztcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGFic3RyYWN0IGFmdGVySW1hZ2VJdGVtQ2hhbmdlKHByZXZpb3VzOiBDb21tb25JbWFnZUl0ZW0sIGN1cnJlbnQ6IENvbW1vbkltYWdlSXRlbSk6IHZvaWQ7XG5cbiAgICBASW5wdXQoKSBnZXRSZWN0YW5nbGUhOiAoKSA9PiBSZWN0YW5nbGVDbGllbnQ7XG5cbiAgICBASW5wdXQoKSBoYXNSZXNpemVIYW5kbGUhOiAoKSA9PiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZUdlbmVyYXRvciA9IG5ldyBBY3RpdmVHZW5lcmF0b3IodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgZ2V0U3Ryb2tlV2lkdGg6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyh0aGlzLmJvYXJkKTtcbiAgICAgICAgICAgICAgICBpZiAoIShzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAhaXNTZWxlY3Rpb25Nb3ZpbmcodGhpcy5ib2FyZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBQ1RJVkVfU1RST0tFX1dJRFRIO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBQ1RJVkVfU1RST0tFX1dJRFRIO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRTdHJva2VPcGFjaXR5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHModGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgaWYgKChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAhaXNTZWxlY3Rpb25Nb3ZpbmcodGhpcy5ib2FyZCkpIHx8ICFzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC41O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRSZWN0YW5nbGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN0YW5nbGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNSZXNpemVIYW5kbGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyh0aGlzLmJvYXJkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxICYmICFpc1NlbGVjdGlvbk1vdmluZyh0aGlzLmJvYXJkKSkgfHwgIXNlbGVjdGVkRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZHJhd0ZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlRyA9IFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUdlbmVyYXRvci5kcmF3KHt9IGFzIFBsYWl0RWxlbWVudCwgYWN0aXZlRywgeyBzZWxlY3RlZDogdGhpcy5faXNGb2N1cyB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVHZW5lcmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlR2VuZXJhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvcmUvaW1hZ2UtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWMsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFpQyxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNySSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVFoRCxNQUFNLE9BQWdCLGtCQUFrQjtJQVlwQyxJQUNJLFNBQVMsQ0FBQyxLQUFzQjtRQUNoQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBS0QsSUFDSSxPQUFPLENBQUMsS0FBYztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxDQUFDO0lBUUQsWUFBc0IsVUFBbUMsRUFBUyxHQUFzQjtRQUFsRSxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBekN4RixnQkFBVyxHQUFHLEtBQUssQ0FBQztJQXlDdUUsQ0FBQztJQUU1RixRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ25ELGNBQWMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2pCLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0JBQ3BFLE9BQU8sbUJBQW1CLENBQUM7aUJBQzlCO3FCQUFNO29CQUNILE9BQU8sbUJBQW1CLENBQUM7aUJBQzlCO1lBQ0wsQ0FBQztZQUNELGdCQUFnQixFQUFFLEdBQUcsRUFBRTtnQkFDbkIsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7b0JBQy9GLE9BQU8sQ0FBQyxDQUFDO2lCQUNaO3FCQUFNO29CQUNILE9BQU8sR0FBRyxDQUFDO2lCQUNkO1lBQ0wsQ0FBQztZQUNELFlBQVksRUFBRSxHQUFHLEVBQUU7Z0JBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDL0IsQ0FBQztZQUNELGVBQWUsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xCLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQ3pHLENBQUM7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLEVBQWtCLEVBQUUsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ2pHO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQztJQUNMLENBQUM7K0dBeEZpQixrQkFBa0I7bUdBQWxCLGtCQUFrQjs7NEZBQWxCLGtCQUFrQjtrQkFMdkMsU0FBUzttQkFBQztvQkFDUCxJQUFJLEVBQUU7d0JBQ0YsS0FBSyxFQUFFLHVCQUF1QjtxQkFDakM7aUJBQ0o7aUlBV0csT0FBTztzQkFETixLQUFLO2dCQUlGLFNBQVM7c0JBRFosS0FBSztnQkFZTixLQUFLO3NCQURKLEtBQUs7Z0JBSUYsT0FBTztzQkFEVixLQUFLO2dCQWdCRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFDVElWRV9TVFJPS0VfV0lEVEgsIFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUmVjdGFuZ2xlQ2xpZW50LCBnZXRTZWxlY3RlZEVsZW1lbnRzLCBpc1NlbGVjdGlvbk1vdmluZyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEFjdGl2ZUdlbmVyYXRvciB9IGZyb20gJy4uL2dlbmVyYXRvcnMnO1xuaW1wb3J0IHsgQ29tbW9uSW1hZ2VJdGVtIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAncGxhaXQtaW1hZ2UtY29udGFpbmVyJ1xuICAgIH1cbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgSW1hZ2VCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIF9pbWFnZUl0ZW0hOiBDb21tb25JbWFnZUl0ZW07XG5cbiAgICBfaXNGb2N1cyE6IGJvb2xlYW47XG5cbiAgICBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gICAgYWN0aXZlR2VuZXJhdG9yITogQWN0aXZlR2VuZXJhdG9yO1xuXG4gICAgQElucHV0KClcbiAgICBlbGVtZW50ITogUGxhaXRFbGVtZW50O1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgaW1hZ2VJdGVtKHZhbHVlOiBDb21tb25JbWFnZUl0ZW0pIHtcbiAgICAgICAgdGhpcy5hZnRlckltYWdlSXRlbUNoYW5nZSh0aGlzLl9pbWFnZUl0ZW0sIHZhbHVlKTtcbiAgICAgICAgdGhpcy5faW1hZ2VJdGVtID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZHJhd0ZvY3VzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGltYWdlSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ltYWdlSXRlbTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIGJvYXJkITogUGxhaXRCb2FyZDtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGlzRm9jdXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faXNGb2N1cyA9IHZhbHVlO1xuICAgICAgICB0aGlzLmRyYXdGb2N1cygpO1xuICAgIH1cblxuICAgIGdldCBpc0ZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNGb2N1cztcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGFic3RyYWN0IGFmdGVySW1hZ2VJdGVtQ2hhbmdlKHByZXZpb3VzOiBDb21tb25JbWFnZUl0ZW0sIGN1cnJlbnQ6IENvbW1vbkltYWdlSXRlbSk6IHZvaWQ7XG5cbiAgICBASW5wdXQoKSBnZXRSZWN0YW5nbGUhOiAoKSA9PiBSZWN0YW5nbGVDbGllbnQ7XG5cbiAgICBASW5wdXQoKSBoYXNSZXNpemVIYW5kbGUhOiAoKSA9PiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LCBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZUdlbmVyYXRvciA9IG5ldyBBY3RpdmVHZW5lcmF0b3IodGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgZ2V0U3Ryb2tlV2lkdGg6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyh0aGlzLmJvYXJkKTtcbiAgICAgICAgICAgICAgICBpZiAoIShzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAhaXNTZWxlY3Rpb25Nb3ZpbmcodGhpcy5ib2FyZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBQ1RJVkVfU1RST0tFX1dJRFRIO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBQ1RJVkVfU1RST0tFX1dJRFRIO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRTdHJva2VPcGFjaXR5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHModGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgaWYgKChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAhaXNTZWxlY3Rpb25Nb3ZpbmcodGhpcy5ib2FyZCkpIHx8ICFzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC41O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXRSZWN0YW5nbGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZWN0YW5nbGUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYXNSZXNpemVIYW5kbGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyh0aGlzLmJvYXJkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxICYmICFpc1NlbGVjdGlvbk1vdmluZyh0aGlzLmJvYXJkKSkgfHwgIXNlbGVjdGVkRWxlbWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZHJhd0ZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aXZlRyA9IFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUdlbmVyYXRvci5wcm9jZXNzRHJhd2luZyh7fSBhcyBQbGFpdEVsZW1lbnQsIGFjdGl2ZUcsIHsgc2VsZWN0ZWQ6IHRoaXMuX2lzRm9jdXMgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlR2VuZXJhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUdlbmVyYXRvci5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -16,7 +16,7 @@ export class ActiveGenerator extends Generator {
16
16
  return false;
17
17
  }
18
18
  }
19
- baseDraw(element, data) {
19
+ draw(element, data) {
20
20
  const activeG = createG();
21
21
  const rectangle = this.options.getRectangle(element);
22
22
  const delta = this.options.getStrokeWidth();
@@ -43,4 +43,4 @@ export class ActiveGenerator extends Generator {
43
43
  return activeG;
44
44
  }
45
45
  }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLmdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvZ2VuZXJhdG9ycy9hY3RpdmUuZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWdCLGVBQWUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWM3RSxNQUFNLE9BQU8sZUFBdUQsU0FBUSxTQUkzRTtJQUdHLFlBQW1CLEtBQWlCLEVBQVMsT0FBa0M7UUFDM0UsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQURQLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQUYvRSxvQkFBZSxHQUFHLEtBQUssQ0FBQztJQUl4QixDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQVUsRUFBRSxJQUE4QjtRQUM5QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQztTQUNmO2FBQU07WUFDSCxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7SUFFRCxRQUFRLENBQUMsT0FBVSxFQUFFLElBQThCO1FBQy9DLE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUMsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbEUsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO1lBQ3ZELE1BQU0sRUFBRSxhQUFhO1lBQ3JCLFdBQVcsRUFBRSxLQUFLO1NBQ3JCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztRQUM3RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsZ0JBQWdCO1lBQ2hCLE1BQU0sT0FBTyxHQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2pHLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FDN0IsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ2xDLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQ3RDLHNCQUFzQixFQUN0QixPQUFPLENBQ1YsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FDOUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ2xDLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFDOUQsc0JBQXNCLEVBQ3RCLE9BQU8sQ0FDVixDQUFDO1lBQ0YsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQ2pDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNsQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFDdkYsc0JBQXNCLEVBQ3RCLE9BQU8sQ0FDVixDQUFDO1lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQ2hDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNsQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQy9ELHNCQUFzQixFQUN0QixPQUFPLENBQ1YsQ0FBQztZQUNGLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1NBQy9GO2FBQU07WUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztTQUNoQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUmVjdGFuZ2xlQ2xpZW50LCBjcmVhdGVHLCBkcmF3Q2lyY2xlLCBkcmF3UmVjdGFuZ2xlIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3InO1xuaW1wb3J0IHsgUFJJTUFSWV9DT0xPUiwgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUiB9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0JztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBY3RpdmVHZW5lcmF0b3JFeHRyYURhdGEge1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2ZUdlbmVyYXRvck9wdGlvbnM8VD4ge1xuICAgIGdldFJlY3RhbmdsZTogKGVsZW1lbnQ6IFQpID0+IFJlY3RhbmdsZUNsaWVudDtcbiAgICBnZXRTdHJva2VXaWR0aDogKCkgPT4gbnVtYmVyO1xuICAgIGdldFN0cm9rZU9wYWNpdHk6ICgpID0+IG51bWJlcjtcbiAgICBoYXNSZXNpemVIYW5kbGU6ICgpID0+IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmVHZW5lcmF0b3I8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudD4gZXh0ZW5kcyBHZW5lcmF0b3I8XG4gICAgVCxcbiAgICBBY3RpdmVHZW5lcmF0b3JFeHRyYURhdGEsXG4gICAgQWN0aXZlR2VuZXJhdG9yT3B0aW9uczxUPlxuPiB7XG4gICAgaGFzUmVzaXplSGFuZGxlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgYm9hcmQ6IFBsYWl0Qm9hcmQsIHB1YmxpYyBvcHRpb25zOiBBY3RpdmVHZW5lcmF0b3JPcHRpb25zPFQ+KSB7XG4gICAgICAgIHN1cGVyKGJvYXJkLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjYW5EcmF3KGVsZW1lbnQ6IFQsIGRhdGE6IEFjdGl2ZUdlbmVyYXRvckV4dHJhRGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZGF0YS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiYXNlRHJhdyhlbGVtZW50OiBULCBkYXRhOiBBY3RpdmVHZW5lcmF0b3JFeHRyYURhdGEpOiBTVkdHRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUcgPSBjcmVhdGVHKCk7XG4gICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IHRoaXMub3B0aW9ucy5nZXRSZWN0YW5nbGUoZWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgZGVsdGEgPSB0aGlzLm9wdGlvbnMuZ2V0U3Ryb2tlV2lkdGgoKTtcbiAgICAgICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUocmVjdGFuZ2xlLCBkZWx0YSk7XG5cbiAgICAgICAgY29uc3Qgc3Ryb2tlRyA9IGRyYXdSZWN0YW5nbGUodGhpcy5ib2FyZCwgYWN0aXZlUmVjdGFuZ2xlLCB7XG4gICAgICAgICAgICBzdHJva2U6IFBSSU1BUllfQ09MT1IsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogZGVsdGFcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWN0aXZlRy5hcHBlbmQoc3Ryb2tlRyk7XG4gICAgICAgIHN0cm9rZUcuc3R5bGUub3BhY2l0eSA9IGAke3RoaXMub3B0aW9ucy5nZXRTdHJva2VPcGFjaXR5KCl9YDtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oYXNSZXNpemVIYW5kbGUoKSkge1xuICAgICAgICAgICAgdGhpcy5oYXNSZXNpemVIYW5kbGUgPSB0cnVlO1xuICAgICAgICAgICAgLy8gcmVzaXplIGhhbmRsZVxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uczogT3B0aW9ucyA9IHsgc3Ryb2tlOiAnIzk5OTk5OScsIHN0cm9rZVdpZHRoOiAxLCBmaWxsOiAnI0ZGRicsIGZpbGxTdHlsZTogJ3NvbGlkJyB9O1xuICAgICAgICAgICAgY29uc3QgbGVmdFRvcEhhbmRsZUcgPSBkcmF3Q2lyY2xlKFxuICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCksXG4gICAgICAgICAgICAgICAgW2FjdGl2ZVJlY3RhbmdsZS54LCBhY3RpdmVSZWN0YW5nbGUueV0sXG4gICAgICAgICAgICAgICAgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRUb3BIYW5kbGVHID0gZHJhd0NpcmNsZShcbiAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLFxuICAgICAgICAgICAgICAgIFthY3RpdmVSZWN0YW5nbGUueCArIGFjdGl2ZVJlY3RhbmdsZS53aWR0aCwgYWN0aXZlUmVjdGFuZ2xlLnldLFxuICAgICAgICAgICAgICAgIFJFU0laRV9IQU5ETEVfRElBTUVURVIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Qm90dG9tSGFuZGxlRyA9IGRyYXdDaXJjbGUoXG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKSxcbiAgICAgICAgICAgICAgICBbYWN0aXZlUmVjdGFuZ2xlLnggKyBhY3RpdmVSZWN0YW5nbGUud2lkdGgsIGFjdGl2ZVJlY3RhbmdsZS55ICsgYWN0aXZlUmVjdGFuZ2xlLmhlaWdodF0sXG4gICAgICAgICAgICAgICAgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbGVmdEJvdHRvbUhhbmRsZUcgPSBkcmF3Q2lyY2xlKFxuICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCksXG4gICAgICAgICAgICAgICAgW2FjdGl2ZVJlY3RhbmdsZS54LCBhY3RpdmVSZWN0YW5nbGUueSArIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICAgICAgICAgIFJFU0laRV9IQU5ETEVfRElBTUVURVIsXG4gICAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGFjdGl2ZUcuYXBwZW5kKC4uLltsZWZ0VG9wSGFuZGxlRywgcmlnaHRUb3BIYW5kbGVHLCByaWdodEJvdHRvbUhhbmRsZUcsIGxlZnRCb3R0b21IYW5kbGVHXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhc1Jlc2l6ZUhhbmRsZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3RpdmVHO1xuICAgIH1cbn1cbiJdfQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLmdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvZ2VuZXJhdG9ycy9hY3RpdmUuZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWdCLGVBQWUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM1RyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWM3RSxNQUFNLE9BQU8sZUFBdUQsU0FBUSxTQUkzRTtJQUdHLFlBQW1CLEtBQWlCLEVBQVMsT0FBa0M7UUFDM0UsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQURQLFVBQUssR0FBTCxLQUFLLENBQVk7UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUEyQjtRQUYvRSxvQkFBZSxHQUFHLEtBQUssQ0FBQztJQUl4QixDQUFDO0lBRUQsT0FBTyxDQUFDLE9BQVUsRUFBRSxJQUE4QjtRQUM5QyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPLElBQUksQ0FBQztTQUNmO2FBQU07WUFDSCxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBVSxFQUFFLElBQThCO1FBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQzFCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDNUMsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbEUsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFO1lBQ3ZELE1BQU0sRUFBRSxhQUFhO1lBQ3JCLFdBQVcsRUFBRSxLQUFLO1NBQ3JCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztRQUM3RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7WUFDNUIsZ0JBQWdCO1lBQ2hCLE1BQU0sT0FBTyxHQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2pHLE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FDN0IsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ2xDLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEVBQ3RDLHNCQUFzQixFQUN0QixPQUFPLENBQ1YsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FDOUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQ2xDLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFDOUQsc0JBQXNCLEVBQ3RCLE9BQU8sQ0FDVixDQUFDO1lBQ0YsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQ2pDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNsQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFDdkYsc0JBQXNCLEVBQ3RCLE9BQU8sQ0FDVixDQUFDO1lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQ2hDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUNsQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQy9ELHNCQUFzQixFQUN0QixPQUFPLENBQ1YsQ0FBQztZQUNGLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1NBQy9GO2FBQU07WUFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztTQUNoQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUmVjdGFuZ2xlQ2xpZW50LCBjcmVhdGVHLCBkcmF3Q2lyY2xlLCBkcmF3UmVjdGFuZ2xlIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3InO1xuaW1wb3J0IHsgUFJJTUFSWV9DT0xPUiwgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUiB9IGZyb20gJy4uL2NvbnN0YW50cy9kZWZhdWx0JztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBBY3RpdmVHZW5lcmF0b3JFeHRyYURhdGEge1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2ZUdlbmVyYXRvck9wdGlvbnM8VD4ge1xuICAgIGdldFJlY3RhbmdsZTogKGVsZW1lbnQ6IFQpID0+IFJlY3RhbmdsZUNsaWVudDtcbiAgICBnZXRTdHJva2VXaWR0aDogKCkgPT4gbnVtYmVyO1xuICAgIGdldFN0cm9rZU9wYWNpdHk6ICgpID0+IG51bWJlcjtcbiAgICBoYXNSZXNpemVIYW5kbGU6ICgpID0+IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBBY3RpdmVHZW5lcmF0b3I8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudD4gZXh0ZW5kcyBHZW5lcmF0b3I8XG4gICAgVCxcbiAgICBBY3RpdmVHZW5lcmF0b3JFeHRyYURhdGEsXG4gICAgQWN0aXZlR2VuZXJhdG9yT3B0aW9uczxUPlxuPiB7XG4gICAgaGFzUmVzaXplSGFuZGxlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgYm9hcmQ6IFBsYWl0Qm9hcmQsIHB1YmxpYyBvcHRpb25zOiBBY3RpdmVHZW5lcmF0b3JPcHRpb25zPFQ+KSB7XG4gICAgICAgIHN1cGVyKGJvYXJkLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjYW5EcmF3KGVsZW1lbnQ6IFQsIGRhdGE6IEFjdGl2ZUdlbmVyYXRvckV4dHJhRGF0YSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoZGF0YS5zZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcmF3KGVsZW1lbnQ6IFQsIGRhdGE6IEFjdGl2ZUdlbmVyYXRvckV4dHJhRGF0YSk6IFNWR0dFbGVtZW50IHtcbiAgICAgICAgY29uc3QgYWN0aXZlRyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gdGhpcy5vcHRpb25zLmdldFJlY3RhbmdsZShlbGVtZW50KTtcblxuICAgICAgICBjb25zdCBkZWx0YSA9IHRoaXMub3B0aW9ucy5nZXRTdHJva2VXaWR0aCgpO1xuICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShyZWN0YW5nbGUsIGRlbHRhKTtcblxuICAgICAgICBjb25zdCBzdHJva2VHID0gZHJhd1JlY3RhbmdsZSh0aGlzLmJvYXJkLCBhY3RpdmVSZWN0YW5nbGUsIHtcbiAgICAgICAgICAgIHN0cm9rZTogUFJJTUFSWV9DT0xPUixcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBkZWx0YVxuICAgICAgICB9KTtcblxuICAgICAgICBhY3RpdmVHLmFwcGVuZChzdHJva2VHKTtcbiAgICAgICAgc3Ryb2tlRy5zdHlsZS5vcGFjaXR5ID0gYCR7dGhpcy5vcHRpb25zLmdldFN0cm9rZU9wYWNpdHkoKX1gO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmhhc1Jlc2l6ZUhhbmRsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmhhc1Jlc2l6ZUhhbmRsZSA9IHRydWU7XG4gICAgICAgICAgICAvLyByZXNpemUgaGFuZGxlXG4gICAgICAgICAgICBjb25zdCBvcHRpb25zOiBPcHRpb25zID0geyBzdHJva2U6ICcjOTk5OTk5Jywgc3Ryb2tlV2lkdGg6IDEsIGZpbGw6ICcjRkZGJywgZmlsbFN0eWxlOiAnc29saWQnIH07XG4gICAgICAgICAgICBjb25zdCBsZWZ0VG9wSGFuZGxlRyA9IGRyYXdDaXJjbGUoXG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKSxcbiAgICAgICAgICAgICAgICBbYWN0aXZlUmVjdGFuZ2xlLngsIGFjdGl2ZVJlY3RhbmdsZS55XSxcbiAgICAgICAgICAgICAgICBSRVNJWkVfSEFORExFX0RJQU1FVEVSLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCByaWdodFRvcEhhbmRsZUcgPSBkcmF3Q2lyY2xlKFxuICAgICAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCksXG4gICAgICAgICAgICAgICAgW2FjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoLCBhY3RpdmVSZWN0YW5nbGUueV0sXG4gICAgICAgICAgICAgICAgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRCb3R0b21IYW5kbGVHID0gZHJhd0NpcmNsZShcbiAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLFxuICAgICAgICAgICAgICAgIFthY3RpdmVSZWN0YW5nbGUueCArIGFjdGl2ZVJlY3RhbmdsZS53aWR0aCwgYWN0aXZlUmVjdGFuZ2xlLnkgKyBhY3RpdmVSZWN0YW5nbGUuaGVpZ2h0XSxcbiAgICAgICAgICAgICAgICBSRVNJWkVfSEFORExFX0RJQU1FVEVSLFxuICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0Qm90dG9tSGFuZGxlRyA9IGRyYXdDaXJjbGUoXG4gICAgICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKSxcbiAgICAgICAgICAgICAgICBbYWN0aXZlUmVjdGFuZ2xlLngsIGFjdGl2ZVJlY3RhbmdsZS55ICsgYWN0aXZlUmVjdGFuZ2xlLmhlaWdodF0sXG4gICAgICAgICAgICAgICAgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYWN0aXZlRy5hcHBlbmQoLi4uW2xlZnRUb3BIYW5kbGVHLCByaWdodFRvcEhhbmRsZUcsIHJpZ2h0Qm90dG9tSGFuZGxlRywgbGVmdEJvdHRvbUhhbmRsZUddKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFzUmVzaXplSGFuZGxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjdGl2ZUc7XG4gICAgfVxufVxuIl19
@@ -3,11 +3,11 @@ export class Generator {
3
3
  this.board = board;
4
4
  this.options = options;
5
5
  }
6
- draw(element, parentG, data) {
6
+ processDrawing(element, parentG, data) {
7
7
  if (this.canDraw && this.canDraw(element, data)) {
8
- const g = this.baseDraw(element, data);
8
+ const g = this.draw(element, data);
9
9
  if (g) {
10
- if (this.g) {
10
+ if (this.g && parentG.contains(this.g)) {
11
11
  this.g.replaceWith(g);
12
12
  }
13
13
  else {
@@ -39,4 +39,4 @@ export function hasAfterDraw(value) {
39
39
  }
40
40
  return false;
41
41
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLE9BQWdCLFNBQVM7SUFTM0IsWUFBc0IsS0FBaUIsRUFBRSxPQUFXO1FBQTlCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFVLEVBQUUsT0FBb0IsRUFBRSxJQUFRO1FBQzNDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUM3QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsRUFBRTtnQkFDSCxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7b0JBQ1IsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pCO3FCQUFNO29CQUNILE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzFCO2dCQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2Q7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ2xCO1lBQ0QsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDM0I7U0FDSjthQUFNO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2xCO0lBQ0wsQ0FBQztJQU1ELE9BQU87UUFDSCxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDUixJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO1NBQ3RCO0lBQ0wsQ0FBQztDQUNKO0FBTUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFVO0lBQ25DLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtRQUNqQixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0b3JFeHRyYURhdGEge31cblxuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0b3JPcHRpb25zIHt9XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmF0b3I8XG4gICAgVCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudCxcbiAgICBLIGV4dGVuZHMgR2VuZXJhdG9yRXh0cmFEYXRhID0gR2VuZXJhdG9yRXh0cmFEYXRhLFxuICAgIFYgZXh0ZW5kcyBHZW5lcmF0b3JPcHRpb25zID0gR2VuZXJhdG9yT3B0aW9uc1xuPiB7XG4gICAgZz86IFNWR0dFbGVtZW50O1xuXG4gICAgb3B0aW9ucz86IFY7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYm9hcmQ6IFBsYWl0Qm9hcmQsIG9wdGlvbnM/OiBWKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgfVxuXG4gICAgZHJhdyhlbGVtZW50OiBULCBwYXJlbnRHOiBTVkdHRWxlbWVudCwgZGF0YT86IEspIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuRHJhdyAmJiB0aGlzLmNhbkRyYXcoZWxlbWVudCwgZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGcgPSB0aGlzLmJhc2VEcmF3KGVsZW1lbnQsIGRhdGEpO1xuICAgICAgICAgICAgaWYgKGcpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZy5yZXBsYWNlV2l0aChnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRHLmFwcGVuZENoaWxkKGcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmcgPSBnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNBZnRlckRyYXcodGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyRHJhdyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWJzdHJhY3QgY2FuRHJhdyhlbGVtZW50OiBULCBkYXRhPzogSyk6IGJvb2xlYW47XG5cbiAgICBhYnN0cmFjdCBiYXNlRHJhdyhlbGVtZW50OiBULCBkYXRhPzogSyk6IFNWR0dFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZykge1xuICAgICAgICAgICAgdGhpcy5nLnJlbW92ZSgpO1xuICAgICAgICAgICAgdGhpcy5nID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFmdGVyRHJhdzxUIGV4dGVuZHMgUGxhaXRFbGVtZW50ID0gUGxhaXRFbGVtZW50PiB7XG4gICAgYWZ0ZXJEcmF3KGVsZW1lbnQ6IFQpOiB2b2lkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzQWZ0ZXJEcmF3KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBZnRlckRyYXcge1xuICAgIGlmICh2YWx1ZS5hZnRlckRyYXcpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLE9BQWdCLFNBQVM7SUFTM0IsWUFBc0IsS0FBaUIsRUFBRSxPQUFXO1FBQTlCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFVLEVBQUUsT0FBb0IsRUFBRSxJQUFRO1FBQ3JELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUM3QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsRUFBRTtnQkFDSCxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6QjtxQkFBTTtvQkFDSCxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxQjtnQkFDRCxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNkO2lCQUFNO2dCQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUNsQjtZQUNELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzNCO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQjtJQUNMLENBQUM7SUFZRCxPQUFPO1FBQ0gsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFO1lBQ1IsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztTQUN0QjtJQUNMLENBQUM7Q0FDSjtBQU1ELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBVTtJQUNuQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7UUFDakIsT0FBTyxJQUFJLENBQUM7S0FDZjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdG9yRXh0cmFEYXRhIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdG9yT3B0aW9ucyB7fVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJhdG9yPFxuICAgIFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQsXG4gICAgSyBleHRlbmRzIEdlbmVyYXRvckV4dHJhRGF0YSA9IEdlbmVyYXRvckV4dHJhRGF0YSxcbiAgICBWIGV4dGVuZHMgR2VuZXJhdG9yT3B0aW9ucyA9IEdlbmVyYXRvck9wdGlvbnNcbj4ge1xuICAgIGc/OiBTVkdHRWxlbWVudDtcblxuICAgIHByb3RlY3RlZCBvcHRpb25zPzogVjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBib2FyZDogUGxhaXRCb2FyZCwgb3B0aW9ucz86IFYpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB9XG5cbiAgICBwcm9jZXNzRHJhd2luZyhlbGVtZW50OiBULCBwYXJlbnRHOiBTVkdHRWxlbWVudCwgZGF0YT86IEspIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuRHJhdyAmJiB0aGlzLmNhbkRyYXcoZWxlbWVudCwgZGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGcgPSB0aGlzLmRyYXcoZWxlbWVudCwgZGF0YSk7XG4gICAgICAgICAgICBpZiAoZykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmcgJiYgcGFyZW50Ry5jb250YWlucyh0aGlzLmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZy5yZXBsYWNlV2l0aChnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRHLmFwcGVuZENoaWxkKGcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmcgPSBnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNBZnRlckRyYXcodGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyRHJhdyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWJzdHJhY3QgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2FuRHJhdyhlbGVtZW50OiBULCBkYXRhPzogSyk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBhYnN0cmFjdCBmdW5jdGlvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBkcmF3KGVsZW1lbnQ6IFQsIGRhdGE/OiBLKTogU1ZHR0VsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5nKSB7XG4gICAgICAgICAgICB0aGlzLmcucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWZ0ZXJEcmF3PFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+IHtcbiAgICBhZnRlckRyYXcoZWxlbWVudDogVCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNBZnRlckRyYXcodmFsdWU6IGFueSk6IHZhbHVlIGlzIEFmdGVyRHJhdyB7XG4gICAgaWYgKHZhbHVlLmFmdGVyRHJhdykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIl19
@@ -10,7 +10,7 @@ export class ImageGenerator extends Generator {
10
10
  canDraw(element, data) {
11
11
  return !!this.options.getImageItem(element);
12
12
  }
13
- baseDraw(element, viewContainerRef) {
13
+ draw(element, viewContainerRef) {
14
14
  const g = createG();
15
15
  const foreignRectangle = this.options.getRectangle(element);
16
16
  this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
@@ -51,4 +51,4 @@ export class ImageGenerator extends Generator {
51
51
  this.componentRef?.destroy();
52
52
  }
53
53
  }
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9nZW5lcmF0b3JzL2ltYWdlLmdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0gsbUJBQW1CLEVBQ25CLE9BQU8sRUFDUCxtQkFBbUIsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFVbkQsTUFBTSxPQUFPLGNBQXNELFNBQVEsU0FBd0Q7SUFLL0gsWUFBbUIsS0FBaUIsRUFBUyxPQUFpQztRQUMxRSxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRFAsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUFTLFlBQU8sR0FBUCxPQUFPLENBQTBCO0lBRTlFLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBVSxFQUFFLElBQXNCO1FBQ3RDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxRQUFRLENBQUMsT0FBVSxFQUFFLGdCQUFrQztRQUNuRCxNQUFNLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0IsTUFBTSxhQUFhLEdBQUksSUFBSSxDQUFDLEtBQTJCLENBQUMsZ0JBQWdCLENBQTBCLG1CQUFtQixDQUFDO2FBQ2pILGtCQUFrQixDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBa0IsRUFBRSxRQUFXLEVBQUUsT0FBVTtRQUNuRCxJQUFJLFFBQVEsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFlBQWEsQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRTtnQkFDNUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUM7U0FDTDtRQUNELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEUsbUJBQW1CLENBQ2YsSUFBSSxDQUFDLENBQUUsRUFDUCxvQkFBb0IsQ0FBQyxLQUFLLEVBQzFCLG9CQUFvQixDQUFDLE1BQU0sRUFDM0Isb0JBQW9CLENBQUMsQ0FBQyxFQUN0QixvQkFBb0IsQ0FBQyxDQUFDLENBQ3pCLENBQUM7UUFDRixnQ0FBZ0M7UUFDaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxPQUFPO1FBQ0gsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDakMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQbGFpdE9wdGlvbnNCb2FyZCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgY3JlYXRlRm9yZWlnbk9iamVjdCxcbiAgICBjcmVhdGVHLFxuICAgIHVwZGF0ZUZvcmVpZ25PYmplY3Rcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3InO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbWFnZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlL2ltYWdlLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbkltYWdlSXRlbSwgV2l0aENvbW1vblBsdWdpbk9wdGlvbnMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBXaXRoQ29tbW9uUGx1Z2luS2V5IH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgU2hhcGVEYXRhIHtcbiAgICB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlR2VuZXJhdG9yT3B0aW9uczxUPiB7XG4gICAgZ2V0UmVjdGFuZ2xlOiAoZWxlbWVudDogVCkgPT4gUmVjdGFuZ2xlQ2xpZW50O1xuICAgIGdldEltYWdlSXRlbTogKGVsZW1lbnQ6IFQpID0+IENvbW1vbkltYWdlSXRlbTtcbn1cblxuZXhwb3J0IGNsYXNzIEltYWdlR2VuZXJhdG9yPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+IGV4dGVuZHMgR2VuZXJhdG9yPFQsIFZpZXdDb250YWluZXJSZWYsIEltYWdlR2VuZXJhdG9yT3B0aW9uczxUPj4ge1xuICAgIGZvcmVpZ25PYmplY3QhOiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDtcblxuICAgIGNvbXBvbmVudFJlZiE6IENvbXBvbmVudFJlZjxJbWFnZUJhc2VDb21wb25lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGJvYXJkOiBQbGFpdEJvYXJkLCBwdWJsaWMgb3B0aW9uczogSW1hZ2VHZW5lcmF0b3JPcHRpb25zPFQ+KSB7XG4gICAgICAgIHN1cGVyKGJvYXJkLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjYW5EcmF3KGVsZW1lbnQ6IFQsIGRhdGE6IFZpZXdDb250YWluZXJSZWYpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5vcHRpb25zLmdldEltYWdlSXRlbShlbGVtZW50KTtcbiAgICB9XG5cbiAgICBiYXNlRHJhdyhlbGVtZW50OiBULCB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKTogU1ZHR0VsZW1lbnQge1xuICAgICAgICBjb25zdCBnID0gY3JlYXRlRygpO1xuICAgICAgICBjb25zdCBmb3JlaWduUmVjdGFuZ2xlID0gdGhpcy5vcHRpb25zLmdldFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICAgICAgdGhpcy5mb3JlaWduT2JqZWN0ID0gY3JlYXRlRm9yZWlnbk9iamVjdChmb3JlaWduUmVjdGFuZ2xlLngsIGZvcmVpZ25SZWN0YW5nbGUueSwgZm9yZWlnblJlY3RhbmdsZS53aWR0aCwgZm9yZWlnblJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICBnLmFwcGVuZCh0aGlzLmZvcmVpZ25PYmplY3QpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRUeXBlID0gKHRoaXMuYm9hcmQgYXMgUGxhaXRPcHRpb25zQm9hcmQpLmdldFBsdWdpbk9wdGlvbnM8V2l0aENvbW1vblBsdWdpbk9wdGlvbnM+KFdpdGhDb21tb25QbHVnaW5LZXkpXG4gICAgICAgICAgICAuaW1hZ2VDb21wb25lbnRUeXBlO1xuICAgICAgICBpZiAoIWNvbXBvbmVudFR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudCBJbWFnZUJhc2VDb21wb25lbnQgZXJyb3IuJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB2aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuYm9hcmQgPSB0aGlzLmJvYXJkO1xuXG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmltYWdlSXRlbSA9IHRoaXMub3B0aW9ucy5nZXRJbWFnZUl0ZW0oZWxlbWVudCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5nZXRSZWN0YW5nbGUgPSAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmdldFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmZvcmVpZ25PYmplY3QuYXBwZW5kKHRoaXMuY29tcG9uZW50UmVmIS5pbnN0YW5jZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGc7XG4gICAgfVxuXG4gICAgdXBkYXRlSW1hZ2Uobm9kZUc6IFNWR0dFbGVtZW50LCBwcmV2aW91czogVCwgY3VycmVudDogVCkge1xuICAgICAgICBpZiAocHJldmlvdXMgIT09IGN1cnJlbnQgJiYgdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmltYWdlSXRlbSA9IHRoaXMub3B0aW9ucy5nZXRJbWFnZUl0ZW0oY3VycmVudCk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiEuaW5zdGFuY2UuZ2V0UmVjdGFuZ2xlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZ2V0UmVjdGFuZ2xlKGN1cnJlbnQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50Rm9yZWlnbk9iamVjdCA9IHRoaXMub3B0aW9ucy5nZXRSZWN0YW5nbGUoY3VycmVudCk7XG4gICAgICAgIHVwZGF0ZUZvcmVpZ25PYmplY3QoXG4gICAgICAgICAgICB0aGlzLmchLFxuICAgICAgICAgICAgY3VycmVudEZvcmVpZ25PYmplY3Qud2lkdGgsXG4gICAgICAgICAgICBjdXJyZW50Rm9yZWlnbk9iamVjdC5oZWlnaHQsXG4gICAgICAgICAgICBjdXJyZW50Rm9yZWlnbk9iamVjdC54LFxuICAgICAgICAgICAgY3VycmVudEZvcmVpZ25PYmplY3QueVxuICAgICAgICApO1xuICAgICAgICAvLyBzb2x2ZSBpbWFnZSBsb3NlIG9uIG1vdmUgbm9kZVxuICAgICAgICBpZiAodGhpcy5mb3JlaWduT2JqZWN0LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5mb3JlaWduT2JqZWN0LmFwcGVuZCh0aGlzLmNvbXBvbmVudFJlZiEuaW5zdGFuY2UubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG4gICAgfVxufVxuIl19
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9nZW5lcmF0b3JzL2ltYWdlLmdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBS0gsbUJBQW1CLEVBQ25CLE9BQU8sRUFDUCxtQkFBbUIsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUl4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFVbkQsTUFBTSxPQUFPLGNBQXNELFNBQVEsU0FBd0Q7SUFLL0gsWUFBbUIsS0FBaUIsRUFBUyxPQUFpQztRQUMxRSxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRFAsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUFTLFlBQU8sR0FBUCxPQUFPLENBQTBCO0lBRTlFLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBVSxFQUFFLElBQXNCO1FBQ3RDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUFJLENBQUMsT0FBVSxFQUFFLGdCQUFrQztRQUMvQyxNQUFNLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0IsTUFBTSxhQUFhLEdBQUksSUFBSSxDQUFDLEtBQTJCLENBQUMsZ0JBQWdCLENBQTBCLG1CQUFtQixDQUFDO2FBQ2pILGtCQUFrQixDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBa0IsRUFBRSxRQUFXLEVBQUUsT0FBVTtRQUNuRCxJQUFJLFFBQVEsS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMzQyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDMUUsSUFBSSxDQUFDLFlBQWEsQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLEdBQUcsRUFBRTtnQkFDNUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUM7U0FDTDtRQUNELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEUsbUJBQW1CLENBQ2YsSUFBSSxDQUFDLENBQUUsRUFDUCxvQkFBb0IsQ0FBQyxLQUFLLEVBQzFCLG9CQUFvQixDQUFDLE1BQU0sRUFDM0Isb0JBQW9CLENBQUMsQ0FBQyxFQUN0QixvQkFBb0IsQ0FBQyxDQUFDLENBQ3pCLENBQUM7UUFDRixnQ0FBZ0M7UUFDaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFhLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxPQUFPO1FBQ0gsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDakMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQbGFpdE9wdGlvbnNCb2FyZCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgY3JlYXRlRm9yZWlnbk9iamVjdCxcbiAgICBjcmVhdGVHLFxuICAgIHVwZGF0ZUZvcmVpZ25PYmplY3Rcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3InO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJbWFnZUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlL2ltYWdlLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbkltYWdlSXRlbSwgV2l0aENvbW1vblBsdWdpbk9wdGlvbnMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBXaXRoQ29tbW9uUGx1Z2luS2V5IH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmV4cG9ydCBpbnRlcmZhY2UgU2hhcGVEYXRhIHtcbiAgICB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlR2VuZXJhdG9yT3B0aW9uczxUPiB7XG4gICAgZ2V0UmVjdGFuZ2xlOiAoZWxlbWVudDogVCkgPT4gUmVjdGFuZ2xlQ2xpZW50O1xuICAgIGdldEltYWdlSXRlbTogKGVsZW1lbnQ6IFQpID0+IENvbW1vbkltYWdlSXRlbTtcbn1cblxuZXhwb3J0IGNsYXNzIEltYWdlR2VuZXJhdG9yPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+IGV4dGVuZHMgR2VuZXJhdG9yPFQsIFZpZXdDb250YWluZXJSZWYsIEltYWdlR2VuZXJhdG9yT3B0aW9uczxUPj4ge1xuICAgIGZvcmVpZ25PYmplY3QhOiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDtcblxuICAgIGNvbXBvbmVudFJlZiE6IENvbXBvbmVudFJlZjxJbWFnZUJhc2VDb21wb25lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGJvYXJkOiBQbGFpdEJvYXJkLCBwdWJsaWMgb3B0aW9uczogSW1hZ2VHZW5lcmF0b3JPcHRpb25zPFQ+KSB7XG4gICAgICAgIHN1cGVyKGJvYXJkLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjYW5EcmF3KGVsZW1lbnQ6IFQsIGRhdGE6IFZpZXdDb250YWluZXJSZWYpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5vcHRpb25zLmdldEltYWdlSXRlbShlbGVtZW50KTtcbiAgICB9XG5cbiAgICBkcmF3KGVsZW1lbnQ6IFQsIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpOiBTVkdHRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGcgPSBjcmVhdGVHKCk7XG4gICAgICAgIGNvbnN0IGZvcmVpZ25SZWN0YW5nbGUgPSB0aGlzLm9wdGlvbnMuZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICB0aGlzLmZvcmVpZ25PYmplY3QgPSBjcmVhdGVGb3JlaWduT2JqZWN0KGZvcmVpZ25SZWN0YW5nbGUueCwgZm9yZWlnblJlY3RhbmdsZS55LCBmb3JlaWduUmVjdGFuZ2xlLndpZHRoLCBmb3JlaWduUmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgIGcuYXBwZW5kKHRoaXMuZm9yZWlnbk9iamVjdCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSAodGhpcy5ib2FyZCBhcyBQbGFpdE9wdGlvbnNCb2FyZCkuZ2V0UGx1Z2luT3B0aW9uczxXaXRoQ29tbW9uUGx1Z2luT3B0aW9ucz4oV2l0aENvbW1vblBsdWdpbktleSlcbiAgICAgICAgICAgIC5pbWFnZUNvbXBvbmVudFR5cGU7XG4gICAgICAgIGlmICghY29tcG9uZW50VHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50IEltYWdlQmFzZUNvbXBvbmVudCBlcnJvci4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5ib2FyZCA9IHRoaXMuYm9hcmQ7XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuaW1hZ2VJdGVtID0gdGhpcy5vcHRpb25zLmdldEltYWdlSXRlbShlbGVtZW50KTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmdldFJlY3RhbmdsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZm9yZWlnbk9iamVjdC5hcHBlbmQodGhpcy5jb21wb25lbnRSZWYhLmluc3RhbmNlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gZztcbiAgICB9XG5cbiAgICB1cGRhdGVJbWFnZShub2RlRzogU1ZHR0VsZW1lbnQsIHByZXZpb3VzOiBULCBjdXJyZW50OiBUKSB7XG4gICAgICAgIGlmIChwcmV2aW91cyAhPT0gY3VycmVudCAmJiB0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuaW1hZ2VJdGVtID0gdGhpcy5vcHRpb25zLmdldEltYWdlSXRlbShjdXJyZW50KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmIS5pbnN0YW5jZS5nZXRSZWN0YW5nbGUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5nZXRSZWN0YW5nbGUoY3VycmVudCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb3JlaWduT2JqZWN0ID0gdGhpcy5vcHRpb25zLmdldFJlY3RhbmdsZShjdXJyZW50KTtcbiAgICAgICAgdXBkYXRlRm9yZWlnbk9iamVjdChcbiAgICAgICAgICAgIHRoaXMuZyEsXG4gICAgICAgICAgICBjdXJyZW50Rm9yZWlnbk9iamVjdC53aWR0aCxcbiAgICAgICAgICAgIGN1cnJlbnRGb3JlaWduT2JqZWN0LmhlaWdodCxcbiAgICAgICAgICAgIGN1cnJlbnRGb3JlaWduT2JqZWN0LngsXG4gICAgICAgICAgICBjdXJyZW50Rm9yZWlnbk9iamVjdC55XG4gICAgICAgICk7XG4gICAgICAgIC8vIHNvbHZlIGltYWdlIGxvc2Ugb24gbW92ZSBub2RlXG4gICAgICAgIGlmICh0aGlzLmZvcmVpZ25PYmplY3QuY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvcmVpZ25PYmplY3QuYXBwZW5kKHRoaXMuY29tcG9uZW50UmVmIS5pbnN0YW5jZS5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZj8uaW5zdGFuY2UuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWY/LmRlc3Ryb3koKTtcbiAgICB9XG59XG4iXX0=
@@ -1,4 +1,16 @@
1
- import { setProperty } from './common';
1
+ import { PlaitBoard, Transforms, getSelectedElements } from '@plait/core';
2
+ export const setProperty = (board, options, callback) => {
3
+ const selectedElements = getSelectedElements(board);
4
+ selectedElements.forEach(element => {
5
+ const path = PlaitBoard.findPath(board, element);
6
+ if (callback) {
7
+ callback(element, path);
8
+ }
9
+ else {
10
+ Transforms.setNode(board, options, path);
11
+ }
12
+ });
13
+ };
2
14
  const setStrokeStyle = (board, strokeStyle) => {
3
15
  setProperty(board, { strokeStyle });
4
16
  };
@@ -18,4 +30,4 @@ export const PropertyTransforms = {
18
30
  setStrokeWidth,
19
31
  setStrokeColor
20
32
  };
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3RyYW5zZm9ybXMvcHJvcGVydHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUV2QyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsV0FBbUIsRUFBRSxFQUFFO0lBQzlELFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBaUIsRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUNyRCxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsV0FBbUIsRUFBRSxFQUFFO0lBQzlELFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxXQUFtQixFQUFFLEVBQUU7SUFDOUQsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDOUIsWUFBWTtJQUNaLGNBQWM7SUFDZCxXQUFXO0lBQ1gsY0FBYztJQUNkLGNBQWM7Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBzZXRQcm9wZXJ0eSB9IGZyb20gJy4vY29tbW9uJztcblxuY29uc3Qgc2V0U3Ryb2tlU3R5bGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0cm9rZVN0eWxlOiBzdHJpbmcpID0+IHtcbiAgICBzZXRQcm9wZXJ0eShib2FyZCwgeyBzdHJva2VTdHlsZSB9KTtcbn07XG5cbmNvbnN0IHNldEZpbGxDb2xvciA9IChib2FyZDogUGxhaXRCb2FyZCwgZmlsbDogc3RyaW5nKSA9PiB7XG4gICAgc2V0UHJvcGVydHkoYm9hcmQsIHsgZmlsbCB9KTtcbn07XG5cbmNvbnN0IHNldFN0cm9rZUNvbG9yID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzdHJva2VDb2xvcjogc3RyaW5nKSA9PiB7XG4gICAgc2V0UHJvcGVydHkoYm9hcmQsIHsgc3Ryb2tlQ29sb3IgfSk7XG59O1xuXG5jb25zdCBzZXRTdHJva2VXaWR0aCA9IChib2FyZDogUGxhaXRCb2FyZCwgc3Ryb2tlV2lkdGg6IG51bWJlcikgPT4ge1xuICAgIHNldFByb3BlcnR5KGJvYXJkLCB7IHN0cm9rZVdpZHRoIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IFByb3BlcnR5VHJhbnNmb3JtcyA9IHtcbiAgICBzZXRGaWxsQ29sb3IsXG4gICAgc2V0U3Ryb2tlU3R5bGUsXG4gICAgc2V0UHJvcGVydHksXG4gICAgc2V0U3Ryb2tlV2lkdGgsXG4gICAgc2V0U3Ryb2tlQ29sb3Jcbn07XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3RyYW5zZm9ybXMvcHJvcGVydHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFRLFVBQVUsRUFBZ0IsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUN2QixLQUFpQixFQUNqQixPQUFtQixFQUNuQixRQUEyQyxFQUM3QyxFQUFFO0lBQ0EsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQVEsQ0FBQztJQUMzRCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDL0IsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakQsSUFBSSxRQUFRLEVBQUU7WUFDVixRQUFRLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDSCxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDNUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxXQUFtQixFQUFFLEVBQUU7SUFDOUQsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFpQixFQUFFLElBQVksRUFBRSxFQUFFO0lBQ3JELFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQztBQUVGLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxXQUFtQixFQUFFLEVBQUU7SUFDOUQsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLFdBQW1CLEVBQUUsRUFBRTtJQUM5RCxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRztJQUM5QixZQUFZO0lBQ1osY0FBYztJQUNkLFdBQVc7SUFDWCxjQUFjO0lBQ2QsY0FBYztDQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGF0aCwgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBUcmFuc2Zvcm1zLCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuXG5leHBvcnQgY29uc3Qgc2V0UHJvcGVydHkgPSA8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudD4oXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgb3B0aW9uczogUGFydGlhbDxUPixcbiAgICBjYWxsYmFjaz86IChlbGVtZW50OiBULCBwYXRoOiBQYXRoKSA9PiB2b2lkXG4pID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCkgYXMgVFtdO1xuICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGVsZW1lbnQsIHBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCBvcHRpb25zLCBwYXRoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuY29uc3Qgc2V0U3Ryb2tlU3R5bGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0cm9rZVN0eWxlOiBzdHJpbmcpID0+IHtcbiAgICBzZXRQcm9wZXJ0eShib2FyZCwgeyBzdHJva2VTdHlsZSB9KTtcbn07XG5cbmNvbnN0IHNldEZpbGxDb2xvciA9IChib2FyZDogUGxhaXRCb2FyZCwgZmlsbDogc3RyaW5nKSA9PiB7XG4gICAgc2V0UHJvcGVydHkoYm9hcmQsIHsgZmlsbCB9KTtcbn07XG5cbmNvbnN0IHNldFN0cm9rZUNvbG9yID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzdHJva2VDb2xvcjogc3RyaW5nKSA9PiB7XG4gICAgc2V0UHJvcGVydHkoYm9hcmQsIHsgc3Ryb2tlQ29sb3IgfSk7XG59O1xuXG5jb25zdCBzZXRTdHJva2VXaWR0aCA9IChib2FyZDogUGxhaXRCb2FyZCwgc3Ryb2tlV2lkdGg6IG51bWJlcikgPT4ge1xuICAgIHNldFByb3BlcnR5KGJvYXJkLCB7IHN0cm9rZVdpZHRoIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IFByb3BlcnR5VHJhbnNmb3JtcyA9IHtcbiAgICBzZXRGaWxsQ29sb3IsXG4gICAgc2V0U3Ryb2tlU3R5bGUsXG4gICAgc2V0UHJvcGVydHksXG4gICAgc2V0U3Ryb2tlV2lkdGgsXG4gICAgc2V0U3Ryb2tlQ29sb3Jcbn07XG4iXX0=
@@ -17,7 +17,7 @@ export const generateElbowLineRoute = (options) => {
17
17
  route = routeAdjust(route, { xAxis, yAxis, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle });
18
18
  return route;
19
19
  };
20
- const routeAdjust = (path, options) => {
20
+ export const routeAdjust = (path, options) => {
21
21
  // 基于 middleX/middleY 中线纠正 path
22
22
  // 1. 找垂直/水平的线段
23
23
  // 2. 找到和middleX/middleY相交的点
@@ -245,4 +245,4 @@ export const getNextPoint = (point, outerRectangle, direction) => {
245
245
  }
246
246
  }
247
247
  };
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxib3ctbGluZS1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvZWxib3ctbGluZS1yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFTLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTJCbEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxPQUE4QixFQUFFLEVBQUU7SUFDckUsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BFLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdELEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5RSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMs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QUFDLENBQUMsQ0FBQyxDQUFDO1NBQzlEO1FBQ0QsT0FBTyxDQUFDLENBQUM7WUFDTCxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN2QztLQUNKO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aW9uLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBkb3duU2NhbGUgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyByZW1vdmVEdXBsaWNhdGVQb2ludHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBERUZBVUxUX1JPVVRFX01BUkdJTiB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBU3RhciwgUG9pbnRHcmFwaCB9IGZyb20gJy4uL2FsZ29yaXRobXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVsYm93TGluZVJvdXRlT3B0aW9ucyB7XG4gICAgc291cmNlUG9pbnQ6IFBvaW50O1xuICAgIG5leHRTb3VyY2VQb2ludDogUG9pbnQ7XG4gICAgc291cmNlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgc291cmNlT3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbiAgICB0YXJnZXRQb2ludDogUG9pbnQ7XG4gICAgbmV4dFRhcmdldFBvaW50OiBQb2ludDtcbiAgICB0YXJnZXRPdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xuICAgIHRhcmdldFJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlQWRqdXN0T3B0aW9ucyB7XG4gICAgeEF4aXM/OiBudW1iZXI7XG4gICAgeUF4aXM/OiBudW1iZXI7XG4gICAgc291cmNlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgdGFyZ2V0UmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWRqdXN0T3B0aW9ucyB7XG4gICAgcGFyYWxsZWxQYXRoczogW1BvaW50LCBQb2ludF1bXTtcbiAgICBwb2ludE9mSGl0OiBQb2ludDtcbiAgICBzb3VyY2VSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbiAgICB0YXJnZXRSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlRWxib3dMaW5lUm91dGUgPSAob3B0aW9uczogRWxib3dMaW5lUm91dGVPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBuZXh0U291cmNlUG9pbnQsIG5leHRUYXJnZXRQb2ludCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBwb2ludHMgPSBnZXRHcmFwaFBvaW50cyhvcHRpb25zKTtcbiAgICBjb25zdCBncmFwaCA9IGNyZWF0ZUdyYXBoKHBvaW50cyk7XG4gICAgY29uc3QgYVN0YXIgPSBuZXcgQVN0YXIoZ3JhcGgpO1xuICAgIGFTdGFyLnNlYXJjaChuZXh0U291cmNlUG9pbnQsIG5leHRUYXJnZXRQb2ludCwgb3B0aW9ucy5zb3VyY2VQb2ludCk7XG4gICAgbGV0IHJvdXRlID0gYVN0YXIuZ2V0Um91dGUobmV4dFNvdXJjZVBvaW50LCBuZXh0VGFyZ2V0UG9pbnQpO1xuICAgIHJvdXRlID0gW29wdGlvbnMuc291cmNlUG9pbnQsIC4uLnJvdXRlLCBuZXh0VGFyZ2V0UG9pbnQsIG9wdGlvbnMudGFyZ2V0UG9pbnRdO1xuICAgIGNvbnN0IGlzSGl0WCA9IFJlY3RhbmdsZUNsaWVudC5pc0hpdFgob3B0aW9ucy5zb3VyY2VPdXRlclJlY3RhbmdsZSwgb3B0aW9ucy50YXJnZXRPdXRlclJlY3RhbmdsZSk7XG4gICAgY29uc3QgaXNIaXRZID0gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0WShvcHRpb25zLnNvdXJjZU91dGVyUmVjdGFuZ2xlLCBvcHRpb25zLnRhcmdldE91dGVyUmVjdGFuZ2xlKTtcbiAgICBjb25zdCB4QXhpcyA9IGlzSGl0WCA/IHVuZGVmaW5lZCA6IFJlY3RhbmdsZUNsaWVudC5nZXRHYXBDZW50ZXIob3B0aW9ucy5zb3VyY2VPdXRlclJlY3RhbmdsZSwgb3B0aW9ucy50YXJnZXRPdXRlclJlY3RhbmdsZSwgZmFsc2UpO1xuICAgIGNvbnN0IHlBeGlzID0gaXNIaXRZID8gdW5kZWZpbmVkIDogUmVjdGFuZ2xlQ2xpZW50LmdldEdhcENlbnRlcihvcHRpb25zLnNvdXJjZU91dGVyUmVjdGFuZ2xlLCBvcHRpb25zLnRhcmdldE91dGVyUmVjdGFuZ2xlLCB0cnVlKTtcbiAgICByb3V0ZSA9IHJvdXRlQWRqdXN0KHJvdXRlLCB7IHhBeGlzLCB5QXhpcywgc291cmNlUmVjdGFuZ2xlOiBvcHRpb25zLnNvdXJjZVJlY3RhbmdsZSwgdGFyZ2V0UmVjdGFuZ2xlOiBvcHRpb25zLnRhcmdldFJlY3RhbmdsZSB9KTtcbiAgICByZXR1cm4gcm91dGU7XG59O1xuXG5jb25zdCByb3V0ZUFkanVzdCA9IChwYXRoOiBQb2ludFtdLCBvcHRpb25zOiBSb3V0ZUFkanVzdE9wdGlvbnMpID0+IHtcbiAgICAvLyDln7rkuo4gbWlkZGxlWC9taWRkbGVZIOS4ree6v+e6oOatoyBwYXRoXG4gICAgLy8gMS4g5om+5Z6C55u0L+awtOW5s+eahOe6v+autVxuICAgIC8vIDIuIOaJvuWIsOWSjG1pZGRsZVgvbWlkZGxlWeebuOS6pOeahOeCuVxuICAgIC8vIDMuIOWfuuS6juWeguebtC/msLTlubPnmoTnur/mrrXliIbliKvlkoznm7jkuqTngrnmnoTlu7rnn6nlvaJcbiAgICAvLyA0LiDliKTmlq3nn6nlvaLnm7jkuqRcbiAgICAvLyA1LiDlpITnkIYgcGF0aFxuICAgIGNvbnN0IHsgc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUsIHhBeGlzLCB5QXhpcyB9ID0gb3B0aW9ucztcbiAgICBpZiAoeEF4aXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcHRpb25zWCA9IGdldEFkanVzdE9wdGlvbnMocGF0aCwgeEF4aXMsIHRydWUpO1xuICAgICAgICBjb25zdCByZXN1bHRYID1cbiAgICAgICAgICAgIG9wdGlvbnNYLnBvaW50T2ZIaXQgJiZcbiAgICAgICAgICAgIGFkanVzdChwYXRoLCB7IHBhcmFsbGVsUGF0aHM6IG9wdGlvbnNYLnBhcmFsbGVsUGF0aHMsIHBvaW50T2ZIaXQ6IG9wdGlvbnNYLnBvaW50T2ZIaXQsIHNvdXJjZVJlY3RhbmdsZSwgdGFyZ2V0UmVjdGFuZ2xlIH0pO1xuICAgICAgICBpZiAocmVzdWx0WCkge1xuICAgICAgICAgICAgcGF0aCA9IHJlc3VsdFg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHlBeGlzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc1kgPSBnZXRBZGp1c3RPcHRpb25zKHBhdGgsIHlBeGlzLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFkgPVxuICAgICAgICAgICAgb3B0aW9uc1kucG9pbnRPZkhpdCAmJlxuICAgICAgICAgICAgYWRqdXN0KHBhdGgsIHsgcGFyYWxsZWxQYXRoczogb3B0aW9uc1kucGFyYWxsZWxQYXRocywgcG9pbnRPZkhpdDogb3B0aW9uc1kucG9pbnRPZkhpdCwgc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUgfSk7XG4gICAgICAgIGlmIChyZXN1bHRZKSB7XG4gICAgICAgICAgICBwYXRoID0gcmVzdWx0WTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF0aDtcbn07XG5cbmNvbnN0IGFkanVzdCA9IChyb3V0ZTogUG9pbnRbXSwgb3B0aW9uczogQWRqdXN0T3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgcGFyYWxsZWxQYXRocywgcG9pbnRPZkhpdCwgc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUgfSA9IG9wdGlvbnM7XG4gICAgbGV0IHJlc3VsdCA9IG51bGw7XG4gICAgcGFyYWxsZWxQYXRocy5mb3JFYWNoKHBhcmFsbGVsUGF0aCA9PiB7XG4gICAgICAgIC8vIOaehOW7uuefqeW9olxuICAgICAgICBjb25zdCB0ZW1wUmVjdCA9IFJlY3RhbmdsZUNsaWVudC50b1JlY3RhbmdsZUNsaWVudChbcG9pbnRPZkhpdCwgcGFyYWxsZWxQYXRoWzBdLCBwYXJhbGxlbFBhdGhbMV1dKTtcbiAgICAgICAgaWYgKCFSZWN0YW5nbGVDbGllbnQuaXNIaXQodGVtcFJlY3QsIHNvdXJjZVJlY3RhbmdsZSkgJiYgIVJlY3RhbmdsZUNsaWVudC5pc0hpdCh0ZW1wUmVjdCwgdGFyZ2V0UmVjdGFuZ2xlKSkge1xuICAgICAgICAgICAgY29uc3QgZ2V0Q29ybmVyQ291bnQgPSAocGF0aDogUG9pbnRbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjb3JuZXJDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IHBhdGgubGVuZ3RoIC0gMTsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmUgPSBwYXRoW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBwYXRoW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IHBhdGhbaW5kZXggKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3duU2NhbGUoY3VycmVudFswXSkgPT09IGRvd25TY2FsZShwcmVbMF0pICYmIGRvd25TY2FsZShjdXJyZW50WzBdKSA9PT0gZG93blNjYWxlKG5leHRbMF0pKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3duU2NhbGUoY3VycmVudFsxXSkgPT09IGRvd25TY2FsZShwcmVbMV0pICYmIGRvd25TY2FsZShjdXJyZW50WzFdKSA9PT0gZG93blNjYWxlKG5leHRbMV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcm5lckNvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvcm5lckNvdW50O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBDb3JuZXJzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyh0ZW1wUmVjdCk7XG4gICAgICAgICAgICBjb25zdCBpbmRleFJhbmdlSW5QYXRoOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICAgICAgY29uc3QgaW5kZXhSYW5nZUluQ29ybmVyOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICAgICAgcm91dGUuZm9yRWFjaCgocG9pbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29ybmVyUmVzdWx0ID0gdGVtcENvcm5lcnMuZmluZEluZGV4KFxuICAgICAgICAgICAgICAgICAgICBjb3JuZXIgPT4gTWF0aC5mbG9vcihjb3JuZXJbMF0pID09PSBNYXRoLmZsb29yKHBvaW50WzBdKSAmJiBNYXRoLmZsb29yKGNvcm5lclsxXSkgPT09IE1hdGguZmxvb3IocG9pbnRbMV0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoY29ybmVyUmVzdWx0ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpbmRleFJhbmdlSW5QYXRoLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBpbmRleFJhbmdlSW5Db3JuZXIucHVzaChjb3JuZXJSZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgbmV3UGF0aCA9IFsuLi5yb3V0ZV07XG4gICAgICAgICAgICBjb25zdCBtaXNzQ29ybmVyID0gdGVtcENvcm5lcnMuZmluZCgoYywgaW5kZXgpID0+ICFpbmRleFJhbmdlSW5Db3JuZXIuaW5jbHVkZXMoaW5kZXgpKSBhcyBQb2ludDtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZUxlbmd0aCA9IE1hdGguYWJzKGluZGV4UmFuZ2VJblBhdGhbMF0gLSBpbmRleFJhbmdlSW5QYXRoW2luZGV4UmFuZ2VJblBhdGgubGVuZ3RoIC0gMV0pICsgMTtcbiAgICAgICAgICAgIG5ld1BhdGguc3BsaWNlKGluZGV4UmFuZ2VJblBhdGhbMF0gKyAxLCByZW1vdmVMZW5ndGggLSAyLCBtaXNzQ29ybmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGNvcm5lckNvdW50ID0gZ2V0Q29ybmVyQ291bnQoWy4uLnJvdXRlXSk7XG4gICAgICAgICAgICBjb25zdCBuZXdDb3JuZXJDb3VudCA9IGdldENvcm5lckNvdW50KFsuLi5uZXdQYXRoXSk7XG4gICAgICAgICAgICBpZiAobmV3Q29ybmVyQ291bnQgPD0gY29ybmVyQ291bnQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXdQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBnZXRBZGp1c3RPcHRpb25zID0gKHBhdGg6IFBvaW50W10sIG1pZGRsZTogbnVtYmVyLCBpc0hvcml6b250YWw6IGJvb2xlYW4pID0+IHtcbiAgICBjb25zdCBwYXJhbGxlbFBhdGhzOiBbUG9pbnQsIFBvaW50XVtdID0gW107XG4gICAgbGV0IHN0YXJ0OiBudWxsIHwgUG9pbnQgPSBudWxsO1xuICAgIGxldCBwb2ludE9mSGl0OiBudWxsIHwgUG9pbnQgPSBudWxsO1xuICAgIGNvbnN0IGF4aXMgPSBpc0hvcml6b250YWwgPyAwIDogMTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBwYXRoLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IHBhdGhbaW5kZXggLSAxXTtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHBhdGhbaW5kZXhdO1xuICAgICAgICBpZiAoc3RhcnQgPT09IG51bGwgJiYgcHJldmlvdXMgJiYgcHJldmlvdXNbYXhpc10gPT09IGN1cnJlbnRbYXhpc10pIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gcHJldmlvdXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXJ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocHJldmlvdXNbYXhpc10gIT09IGN1cnJlbnRbYXhpc10pIHtcbiAgICAgICAgICAgICAgICBwYXJhbGxlbFBhdGhzLnB1c2goW3N0YXJ0LCBwcmV2aW91c10pO1xuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudFtheGlzXSA9PT0gbWlkZGxlKSB7XG4gICAgICAgICAgICBwb2ludE9mSGl0ID0gY3VycmVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3RhcnQpIHtcbiAgICAgICAgcGFyYWxsZWxQYXRocy5wdXNoKFtzdGFydCwgcGF0aFtwYXRoLmxlbmd0aCAtIDFdXSk7XG4gICAgfVxuICAgIHJldHVybiB7IHBvaW50T2ZIaXQsIHBhcmFsbGVsUGF0aHMgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHcmFwaFBvaW50cyA9IChvcHRpb25zOiBFbGJvd0xpbmVSb3V0ZU9wdGlvbnMpID0+IHtcbiAgICBjb25zdCB7IG5leHRTb3VyY2VQb2ludCwgbmV4dFRhcmdldFBvaW50LCBzb3VyY2VPdXRlclJlY3RhbmdsZSwgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgeDogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCB5OiBudW1iZXJbXSA9IFtdO1xuICAgIGxldCByZXN1bHQ6IFBvaW50W10gPSBbXTtcblxuICAgIFtzb3VyY2VPdXRlclJlY3RhbmdsZSwgdGFyZ2V0T3V0ZXJSZWN0YW5nbGVdLmZvckVhY2gocmVjdGFuZ2xlID0+IHtcbiAgICAgICAgeC5wdXNoKHJlY3RhbmdsZS54LCByZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgICAgeS5wdXNoKHJlY3RhbmdsZS55LCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlY3RhbmdsZXNYID0gW1xuICAgICAgICBzb3VyY2VPdXRlclJlY3RhbmdsZS54LFxuICAgICAgICBzb3VyY2VPdXRlclJlY3RhbmdsZS54ICsgc291cmNlT3V0ZXJSZWN0YW5nbGUud2lkdGgsXG4gICAgICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlLngsXG4gICAgICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlLnggKyB0YXJnZXRPdXRlclJlY3RhbmdsZS53aWR0aFxuICAgIF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIHgucHVzaCgocmVjdGFuZ2xlc1hbMV0gKyByZWN0YW5nbGVzWFsyXSkgLyAyLCBuZXh0U291cmNlUG9pbnRbMF0sIG5leHRUYXJnZXRQb2ludFswXSk7XG4gICAgY29uc3QgcmVjdGFuZ2xlc1kgPSBbXG4gICAgICAgIHNvdXJjZU91dGVyUmVjdGFuZ2xlLnksXG4gICAgICAgIHNvdXJjZU91dGVyUmVjdGFuZ2xlLnkgKyBzb3VyY2VPdXRlclJlY3RhbmdsZS5oZWlnaHQsXG4gICAgICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlLnksXG4gICAgICAgIHRhcmdldE91dGVyUmVjdGFuZ2xlLnkgKyB0YXJnZXRPdXRlclJlY3RhbmdsZS5oZWlnaHRcbiAgICBdLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICB5LnB1c2goKHJlY3RhbmdsZXNZWzFdICsgcmVjdGFuZ2xlc1lbMl0pIC8gMiwgbmV4dFNvdXJjZVBvaW50WzFdLCBuZXh0VGFyZ2V0UG9pbnRbMV0pO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkrKykge1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHkubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50OiBQb2ludCA9IFt4W2ldLCB5W2pdXTtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5Tb3VyY2UgPSBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHNvdXJjZU91dGVyUmVjdGFuZ2xlLCBwb2ludCk7XG4gICAgICAgICAgICBjb25zdCBpc0luVGFyZ2V0ID0gUmVjdGFuZ2xlQ2xpZW50LmlzUG9pbnRJblJlY3RhbmdsZSh0YXJnZXRPdXRlclJlY3RhbmdsZSwgcG9pbnQpO1xuICAgICAgICAgICAgaWYgKCFpc0luU291cmNlICYmICFpc0luVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IHJlbW92ZUR1cGxpY2F0ZVBvaW50cyhyZXN1bHQpLmZpbHRlcihwb2ludCA9PiB7XG4gICAgICAgIGNvbnN0IGlzSW5Tb3VyY2UgPSBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHNvdXJjZU91dGVyUmVjdGFuZ2xlLCBwb2ludCk7XG4gICAgICAgIGNvbnN0IGlzSW5UYXJnZXQgPSBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRhcmdldE91dGVyUmVjdGFuZ2xlLCBwb2ludCk7XG4gICAgICAgIHJldHVybiAhaXNJblNvdXJjZSAmJiAhaXNJblRhcmdldDtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyYXBoID0gKHBvaW50czogUG9pbnRbXSkgPT4ge1xuICAgIGNvbnN0IGdyYXBoID0gbmV3IFBvaW50R3JhcGgoKTtcbiAgICBjb25zdCBYczogbnVtYmVyW10gPSBbXTtcbiAgICBjb25zdCBZczogbnVtYmVyW10gPSBbXTtcbiAgICBwb2ludHMuZm9yRWFjaChwID0+IHtcbiAgICAgICAgY29uc3QgeCA9IHBbMF0sXG4gICAgICAgICAgICB5ID0gcFsxXTtcbiAgICAgICAgaWYgKFhzLmluZGV4T2YoeCkgPCAwKSBYcy5wdXNoKHgpO1xuICAgICAgICBpZiAoWXMuaW5kZXhPZih5KSA8IDApIFlzLnB1c2goeSk7XG4gICAgICAgIGdyYXBoLmFkZChwKTtcbiAgICB9KTtcbiAgICBYcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgWXMuc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIGNvbnN0IGluSG90SW5kZXggPSAocDogUG9pbnQpOiBib29sZWFuID0+IGdyYXBoLmhhcyhwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IFhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgWXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50OiBQb2ludCA9IFtYc1tpXSwgWXNbal1dO1xuICAgICAgICAgICAgaWYgKCFpbkhvdEluZGV4KHBvaW50KSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlclBvaW50OiBQb2ludCA9IFtYc1tpIC0gMV0sIFlzW2pdXTtcbiAgICAgICAgICAgICAgICBpZiAoaW5Ib3RJbmRleChvdGhlclBvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICBncmFwaC5jb25uZWN0KG90aGVyUG9pbnQsIHBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGguY29ubmVjdChwb2ludCwgb3RoZXJQb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJQb2ludDogUG9pbnQgPSBbWHNbaV0sIFlzW2ogLSAxXV07XG4gICAgICAgICAgICAgICAgaWYgKGluSG90SW5kZXgob3RoZXJQb2ludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGguY29ubmVjdChvdGhlclBvaW50LCBwb2ludCk7XG4gICAgICAgICAgICAgICAgICAgIGdyYXBoLmNvbm5lY3QocG9pbnQsIG90aGVyUG9pbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZ3JhcGg7XG59O1xuXG5leHBvcnQgY29uc3QgcmVkdWNlUm91dGVNYXJnaW4gPSAoc291cmNlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHRhcmdldFJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdE9mZnNldCA9IERFRkFVTFRfUk9VVEVfTUFSR0lOO1xuICAgIGxldCBzb3VyY2VPZmZzZXQ6IG51bWJlcltdID0gbmV3IEFycmF5KDQpLmZpbGwoZGVmYXVsdE9mZnNldCk7XG4gICAgbGV0IHRhcmdldE9mZnNldDogbnVtYmVyW10gPSBuZXcgQXJyYXkoNCkuZmlsbChkZWZhdWx0T2Zmc2V0KTtcbiAgICBjb25zdCBzb3VyY2VPdXRlclJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHNvdXJjZVJlY3RhbmdsZSwgZGVmYXVsdE9mZnNldCAqIDIpO1xuICAgIGNvbnN0IHRhcmdldE91dGVyUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUodGFyZ2V0UmVjdGFuZ2xlLCBkZWZhdWx0T2Zmc2V0ICogMik7XG4gICAgY29uc3QgaXNIaXQgPSBSZWN0YW5nbGVDbGllbnQuaXNIaXQoc291cmNlT3V0ZXJSZWN0YW5nbGUsIHRhcmdldE91dGVyUmVjdGFuZ2xlKTtcbiAgICBpZiAoaXNIaXQpIHtcbiAgICAgICAgY29uc3QgbGVmdFRvUmlnaHQgPSBzb3VyY2VSZWN0YW5nbGUueCAtICh0YXJnZXRSZWN0YW5nbGUueCArIHRhcmdldFJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0VG9MZWZ0ID0gdGFyZ2V0UmVjdGFuZ2xlLnggLSAoc291cmNlUmVjdGFuZ2xlLnggKyBzb3VyY2VSZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICBpZiAobGVmdFRvUmlnaHQgPiAwICYmIGxlZnRUb1JpZ2h0IDwgZGVmYXVsdE9mZnNldCAqIDIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IGxlZnRUb1JpZ2h0IC8gMjtcbiAgICAgICAgICAgIHNvdXJjZU9mZnNldFszXSA9IG9mZnNldDtcbiAgICAgICAgICAgIHRhcmdldE9mZnNldFsxXSA9IG9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyaWdodFRvTGVmdCA+IDAgJiYgcmlnaHRUb0xlZnQgPCBkZWZhdWx0T2Zmc2V0ICogMikge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcmlnaHRUb0xlZnQgLyAyO1xuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0WzNdID0gb2Zmc2V0O1xuICAgICAgICAgICAgc291cmNlT2Zmc2V0WzFdID0gb2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdG9wVG9Cb3R0b20gPSBzb3VyY2VSZWN0YW5nbGUueSAtICh0YXJnZXRSZWN0YW5nbGUueSArIHRhcmdldFJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICBjb25zdCBib3R0b21Ub1RvcCA9IHRhcmdldFJlY3RhbmdsZS55IC0gKHNvdXJjZVJlY3RhbmdsZS55ICsgc291cmNlUmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgIGlmICh0b3BUb0JvdHRvbSA+IDAgJiYgdG9wVG9Cb3R0b20gPCBkZWZhdWx0T2Zmc2V0ICogMikge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdG9wVG9Cb3R0b20gLyAyO1xuICAgICAgICAgICAgc291cmNlT2Zmc2V0WzBdID0gb2Zmc2V0O1xuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0WzJdID0gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChib3R0b21Ub1RvcCA+IDAgJiYgYm90dG9tVG9Ub3AgPCBkZWZhdWx0T2Zmc2V0ICogMikge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gYm90dG9tVG9Ub3AgLyAyO1xuICAgICAgICAgICAgc291cmNlT2Zmc2V0WzJdID0gb2Zmc2V0O1xuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0WzBdID0gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHNvdXJjZU9mZnNldCwgdGFyZ2V0T2Zmc2V0IH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmV4dFBvaW50ID0gKHBvaW50OiBQb2ludCwgb3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgZGlyZWN0aW9uOiBEaXJlY3Rpb24pOiBQb2ludCA9PiB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSBEaXJlY3Rpb24udG9wOiB7XG4gICAgICAgICAgICByZXR1cm4gW3BvaW50WzBdLCBvdXRlclJlY3RhbmdsZS55XTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIERpcmVjdGlvbi5ib3R0b206IHtcbiAgICAgICAgICAgIHJldHVybiBbcG9pbnRbMF0sIG91dGVyUmVjdGFuZ2xlLnkgKyBvdXRlclJlY3RhbmdsZS5oZWlnaHRdO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRGlyZWN0aW9uLnJpZ2h0OiB7XG4gICAgICAgICAgICByZXR1cm4gW291dGVyUmVjdGFuZ2xlLnggKyBvdXRlclJlY3RhbmdsZS53aWR0aCwgcG9pbnRbMV1dO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBbb3V0ZXJSZWN0YW5nbGUueCwgcG9pbnRbMV1dO1xuICAgICAgICB9XG4gICAgfVxufTtcbiJdfQ==
248
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxib3ctbGluZS1yb3V0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvZWxib3ctbGluZS1yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFTLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTJCbEQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxPQUE4QixFQUFFLEVBQUU7SUFDckUsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixLQUFLLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BFLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdELEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLEVBQUUsZUFBZSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5RSxNQUFNLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxPQUFPLENBQUMs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QUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM5RDtRQUNELE9BQU8sQ0FBQyxDQUFDO1lBQ0wsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkM7S0FDSjtBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGlvbiwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgZG93blNjYWxlIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgcmVtb3ZlRHVwbGljYXRlUG9pbnRzIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgREVGQVVMVF9ST1VURV9NQVJHSU4gfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQVN0YXIsIFBvaW50R3JhcGggfSBmcm9tICcuLi9hbGdvcml0aG1zJztcblxuZXhwb3J0IGludGVyZmFjZSBFbGJvd0xpbmVSb3V0ZU9wdGlvbnMge1xuICAgIHNvdXJjZVBvaW50OiBQb2ludDtcbiAgICBuZXh0U291cmNlUG9pbnQ6IFBvaW50O1xuICAgIHNvdXJjZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xuICAgIHNvdXJjZU91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgdGFyZ2V0UG9pbnQ6IFBvaW50O1xuICAgIG5leHRUYXJnZXRQb2ludDogUG9pbnQ7XG4gICAgdGFyZ2V0T3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbiAgICB0YXJnZXRSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZUFkanVzdE9wdGlvbnMge1xuICAgIHhBeGlzPzogbnVtYmVyO1xuICAgIHlBeGlzPzogbnVtYmVyO1xuICAgIHNvdXJjZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xuICAgIHRhcmdldFJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkanVzdE9wdGlvbnMge1xuICAgIHBhcmFsbGVsUGF0aHM6IFtQb2ludCwgUG9pbnRdW107XG4gICAgcG9pbnRPZkhpdDogUG9pbnQ7XG4gICAgc291cmNlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgdGFyZ2V0UmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQ7XG59XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUVsYm93TGluZVJvdXRlID0gKG9wdGlvbnM6IEVsYm93TGluZVJvdXRlT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgbmV4dFNvdXJjZVBvaW50LCBuZXh0VGFyZ2V0UG9pbnQgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcG9pbnRzID0gZ2V0R3JhcGhQb2ludHMob3B0aW9ucyk7XG4gICAgY29uc3QgZ3JhcGggPSBjcmVhdGVHcmFwaChwb2ludHMpO1xuICAgIGNvbnN0IGFTdGFyID0gbmV3IEFTdGFyKGdyYXBoKTtcbiAgICBhU3Rhci5zZWFyY2gobmV4dFNvdXJjZVBvaW50LCBuZXh0VGFyZ2V0UG9pbnQsIG9wdGlvbnMuc291cmNlUG9pbnQpO1xuICAgIGxldCByb3V0ZSA9IGFTdGFyLmdldFJvdXRlKG5leHRTb3VyY2VQb2ludCwgbmV4dFRhcmdldFBvaW50KTtcbiAgICByb3V0ZSA9IFtvcHRpb25zLnNvdXJjZVBvaW50LCAuLi5yb3V0ZSwgbmV4dFRhcmdldFBvaW50LCBvcHRpb25zLnRhcmdldFBvaW50XTtcbiAgICBjb25zdCBpc0hpdFggPSBSZWN0YW5nbGVDbGllbnQuaXNIaXRYKG9wdGlvbnMuc291cmNlT3V0ZXJSZWN0YW5nbGUsIG9wdGlvbnMudGFyZ2V0T3V0ZXJSZWN0YW5nbGUpO1xuICAgIGNvbnN0IGlzSGl0WSA9IFJlY3RhbmdsZUNsaWVudC5pc0hpdFkob3B0aW9ucy5zb3VyY2VPdXRlclJlY3RhbmdsZSwgb3B0aW9ucy50YXJnZXRPdXRlclJlY3RhbmdsZSk7XG4gICAgY29uc3QgeEF4aXMgPSBpc0hpdFggPyB1bmRlZmluZWQgOiBSZWN0YW5nbGVDbGllbnQuZ2V0R2FwQ2VudGVyKG9wdGlvbnMuc291cmNlT3V0ZXJSZWN0YW5nbGUsIG9wdGlvbnMudGFyZ2V0T3V0ZXJSZWN0YW5nbGUsIGZhbHNlKTtcbiAgICBjb25zdCB5QXhpcyA9IGlzSGl0WSA/IHVuZGVmaW5lZCA6IFJlY3RhbmdsZUNsaWVudC5nZXRHYXBDZW50ZXIob3B0aW9ucy5zb3VyY2VPdXRlclJlY3RhbmdsZSwgb3B0aW9ucy50YXJnZXRPdXRlclJlY3RhbmdsZSwgdHJ1ZSk7XG4gICAgcm91dGUgPSByb3V0ZUFkanVzdChyb3V0ZSwgeyB4QXhpcywgeUF4aXMsIHNvdXJjZVJlY3RhbmdsZTogb3B0aW9ucy5zb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZTogb3B0aW9ucy50YXJnZXRSZWN0YW5nbGUgfSk7XG4gICAgcmV0dXJuIHJvdXRlO1xufTtcblxuZXhwb3J0IGNvbnN0IHJvdXRlQWRqdXN0ID0gKHBhdGg6IFBvaW50W10sIG9wdGlvbnM6IFJvdXRlQWRqdXN0T3B0aW9ucykgPT4ge1xuICAgIC8vIOWfuuS6jiBtaWRkbGVYL21pZGRsZVkg5Lit57q/57qg5q2jIHBhdGhcbiAgICAvLyAxLiDmib7lnoLnm7Qv5rC05bmz55qE57q/5q61XG4gICAgLy8gMi4g5om+5Yiw5ZKMbWlkZGxlWC9taWRkbGVZ55u45Lqk55qE54K5XG4gICAgLy8gMy4g5Z+65LqO5Z6C55u0L+awtOW5s+eahOe6v+auteWIhuWIq+WSjOebuOS6pOeCueaehOW7uuefqeW9olxuICAgIC8vIDQuIOWIpOaWreefqeW9ouebuOS6pFxuICAgIC8vIDUuIOWkhOeQhiBwYXRoXG4gICAgY29uc3QgeyBzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSwgeEF4aXMsIHlBeGlzIH0gPSBvcHRpb25zO1xuICAgIGlmICh4QXhpcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnNYID0gZ2V0QWRqdXN0T3B0aW9ucyhwYXRoLCB4QXhpcywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdFggPVxuICAgICAgICAgICAgb3B0aW9uc1gucG9pbnRPZkhpdCAmJlxuICAgICAgICAgICAgYWRqdXN0KHBhdGgsIHsgcGFyYWxsZWxQYXRoczogb3B0aW9uc1gucGFyYWxsZWxQYXRocywgcG9pbnRPZkhpdDogb3B0aW9uc1gucG9pbnRPZkhpdCwgc291cmNlUmVjdGFuZ2xlLCB0YXJnZXRSZWN0YW5nbGUgfSk7XG4gICAgICAgIGlmIChyZXN1bHRYKSB7XG4gICAgICAgICAgICBwYXRoID0gcmVzdWx0WDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoeUF4aXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBvcHRpb25zWSA9IGdldEFkanVzdE9wdGlvbnMocGF0aCwgeUF4aXMsIGZhbHNlKTtcbiAgICAgICAgY29uc3QgcmVzdWx0WSA9XG4gICAgICAgICAgICBvcHRpb25zWS5wb2ludE9mSGl0ICYmXG4gICAgICAgICAgICBhZGp1c3QocGF0aCwgeyBwYXJhbGxlbFBhdGhzOiBvcHRpb25zWS5wYXJhbGxlbFBhdGhzLCBwb2ludE9mSGl0OiBvcHRpb25zWS5wb2ludE9mSGl0LCBzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSB9KTtcbiAgICAgICAgaWYgKHJlc3VsdFkpIHtcbiAgICAgICAgICAgIHBhdGggPSByZXN1bHRZO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXRoO1xufTtcblxuY29uc3QgYWRqdXN0ID0gKHJvdXRlOiBQb2ludFtdLCBvcHRpb25zOiBBZGp1c3RPcHRpb25zKSA9PiB7XG4gICAgY29uc3QgeyBwYXJhbGxlbFBhdGhzLCBwb2ludE9mSGl0LCBzb3VyY2VSZWN0YW5nbGUsIHRhcmdldFJlY3RhbmdsZSB9ID0gb3B0aW9ucztcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcbiAgICBwYXJhbGxlbFBhdGhzLmZvckVhY2gocGFyYWxsZWxQYXRoID0+IHtcbiAgICAgICAgLy8g5p6E5bu655+p5b2iXG4gICAgICAgIGNvbnN0IHRlbXBSZWN0ID0gUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtwb2ludE9mSGl0LCBwYXJhbGxlbFBhdGhbMF0sIHBhcmFsbGVsUGF0aFsxXV0pO1xuICAgICAgICBpZiAoIVJlY3RhbmdsZUNsaWVudC5pc0hpdCh0ZW1wUmVjdCwgc291cmNlUmVjdGFuZ2xlKSAmJiAhUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHRlbXBSZWN0LCB0YXJnZXRSZWN0YW5nbGUpKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRDb3JuZXJDb3VudCA9IChwYXRoOiBQb2ludFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNvcm5lckNvdW50ID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgcGF0aC5sZW5ndGggLSAxOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZSA9IHBhdGhbaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHBhdGhbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gcGF0aFtpbmRleCArIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvd25TY2FsZShjdXJyZW50WzBdKSA9PT0gZG93blNjYWxlKHByZVswXSkgJiYgZG93blNjYWxlKGN1cnJlbnRbMF0pID09PSBkb3duU2NhbGUobmV4dFswXSkpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRvd25TY2FsZShjdXJyZW50WzFdKSA9PT0gZG93blNjYWxlKHByZVsxXSkgJiYgZG93blNjYWxlKGN1cnJlbnRbMV0pID09PSBkb3duU2NhbGUobmV4dFsxXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29ybmVyQ291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY29ybmVyQ291bnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgdGVtcENvcm5lcnMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHRlbXBSZWN0KTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4UmFuZ2VJblBhdGg6IG51bWJlcltdID0gW107XG4gICAgICAgICAgICBjb25zdCBpbmRleFJhbmdlSW5Db3JuZXI6IG51bWJlcltdID0gW107XG4gICAgICAgICAgICByb3V0ZS5mb3JFYWNoKChwb2ludCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb3JuZXJSZXN1bHQgPSB0ZW1wQ29ybmVycy5maW5kSW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIGNvcm5lciA9PiBNYXRoLmZsb29yKGNvcm5lclswXSkgPT09IE1hdGguZmxvb3IocG9pbnRbMF0pICYmIE1hdGguZmxvb3IoY29ybmVyWzFdKSA9PT0gTWF0aC5mbG9vcihwb2ludFsxXSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChjb3JuZXJSZXN1bHQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4UmFuZ2VJblBhdGgucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4UmFuZ2VJbkNvcm5lci5wdXNoKGNvcm5lclJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gWy4uLnJvdXRlXTtcbiAgICAgICAgICAgIGNvbnN0IG1pc3NDb3JuZXIgPSB0ZW1wQ29ybmVycy5maW5kKChjLCBpbmRleCkgPT4gIWluZGV4UmFuZ2VJbkNvcm5lci5pbmNsdWRlcyhpbmRleCkpIGFzIFBvaW50O1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlTGVuZ3RoID0gTWF0aC5hYnMoaW5kZXhSYW5nZUluUGF0aFswXSAtIGluZGV4UmFuZ2VJblBhdGhbaW5kZXhSYW5nZUluUGF0aC5sZW5ndGggLSAxXSkgKyAxO1xuICAgICAgICAgICAgbmV3UGF0aC5zcGxpY2UoaW5kZXhSYW5nZUluUGF0aFswXSArIDEsIHJlbW92ZUxlbmd0aCAtIDIsIG1pc3NDb3JuZXIpO1xuICAgICAgICAgICAgY29uc3QgY29ybmVyQ291bnQgPSBnZXRDb3JuZXJDb3VudChbLi4ucm91dGVdKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Nvcm5lckNvdW50ID0gZ2V0Q29ybmVyQ291bnQoWy4uLm5ld1BhdGhdKTtcbiAgICAgICAgICAgIGlmIChuZXdDb3JuZXJDb3VudCA8PSBjb3JuZXJDb3VudCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ld1BhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IGdldEFkanVzdE9wdGlvbnMgPSAocGF0aDogUG9pbnRbXSwgbWlkZGxlOiBudW1iZXIsIGlzSG9yaXpvbnRhbDogYm9vbGVhbikgPT4ge1xuICAgIGNvbnN0IHBhcmFsbGVsUGF0aHM6IFtQb2ludCwgUG9pbnRdW10gPSBbXTtcbiAgICBsZXQgc3RhcnQ6IG51bGwgfCBQb2ludCA9IG51bGw7XG4gICAgbGV0IHBvaW50T2ZIaXQ6IG51bGwgfCBQb2ludCA9IG51bGw7XG4gICAgY29uc3QgYXhpcyA9IGlzSG9yaXpvbnRhbCA/IDAgOiAxO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHBhdGgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gcGF0aFtpbmRleCAtIDFdO1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gcGF0aFtpbmRleF07XG4gICAgICAgIGlmIChzdGFydCA9PT0gbnVsbCAmJiBwcmV2aW91cyAmJiBwcmV2aW91c1theGlzXSA9PT0gY3VycmVudFtheGlzXSkge1xuICAgICAgICAgICAgc3RhcnQgPSBwcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChwcmV2aW91c1theGlzXSAhPT0gY3VycmVudFtheGlzXSkge1xuICAgICAgICAgICAgICAgIHBhcmFsbGVsUGF0aHMucHVzaChbc3RhcnQsIHByZXZpb3VzXSk7XG4gICAgICAgICAgICAgICAgc3RhcnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50W2F4aXNdID09PSBtaWRkbGUpIHtcbiAgICAgICAgICAgIHBvaW50T2ZIaXQgPSBjdXJyZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChzdGFydCkge1xuICAgICAgICBwYXJhbGxlbFBhdGhzLnB1c2goW3N0YXJ0LCBwYXRoW3BhdGgubGVuZ3RoIC0gMV1dKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgcG9pbnRPZkhpdCwgcGFyYWxsZWxQYXRocyB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyYXBoUG9pbnRzID0gKG9wdGlvbnM6IEVsYm93TGluZVJvdXRlT3B0aW9ucykgPT4ge1xuICAgIGNvbnN0IHsgbmV4dFNvdXJjZVBvaW50LCBuZXh0VGFyZ2V0UG9pbnQsIHNvdXJjZU91dGVyUmVjdGFuZ2xlLCB0YXJnZXRPdXRlclJlY3RhbmdsZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCB4OiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IHk6IG51bWJlcltdID0gW107XG4gICAgbGV0IHJlc3VsdDogUG9pbnRbXSA9IFtdO1xuXG4gICAgW3NvdXJjZU91dGVyUmVjdGFuZ2xlLCB0YXJnZXRPdXRlclJlY3RhbmdsZV0uZm9yRWFjaChyZWN0YW5nbGUgPT4ge1xuICAgICAgICB4LnB1c2gocmVjdGFuZ2xlLngsIHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICB5LnB1c2gocmVjdGFuZ2xlLnksIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDIsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVjdGFuZ2xlc1ggPSBbXG4gICAgICAgIHNvdXJjZU91dGVyUmVjdGFuZ2xlLngsXG4gICAgICAgIHNvdXJjZU91dGVyUmVjdGFuZ2xlLnggKyBzb3VyY2VPdXRlclJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUueCxcbiAgICAgICAgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUueCArIHRhcmdldE91dGVyUmVjdGFuZ2xlLndpZHRoXG4gICAgXS5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgeC5wdXNoKChyZWN0YW5nbGVzWFsxXSArIHJlY3RhbmdsZXNYWzJdKSAvIDIsIG5leHRTb3VyY2VQb2ludFswXSwgbmV4dFRhcmdldFBvaW50WzBdKTtcbiAgICBjb25zdCByZWN0YW5nbGVzWSA9IFtcbiAgICAgICAgc291cmNlT3V0ZXJSZWN0YW5nbGUueSxcbiAgICAgICAgc291cmNlT3V0ZXJSZWN0YW5nbGUueSArIHNvdXJjZU91dGVyUmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUueSxcbiAgICAgICAgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUueSArIHRhcmdldE91dGVyUmVjdGFuZ2xlLmhlaWdodFxuICAgIF0uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgIHkucHVzaCgocmVjdGFuZ2xlc1lbMV0gKyByZWN0YW5nbGVzWVsyXSkgLyAyLCBuZXh0U291cmNlUG9pbnRbMV0sIG5leHRUYXJnZXRQb2ludFsxXSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgeS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQ6IFBvaW50ID0gW3hbaV0sIHlbal1dO1xuICAgICAgICAgICAgY29uc3QgaXNJblNvdXJjZSA9IFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUoc291cmNlT3V0ZXJSZWN0YW5nbGUsIHBvaW50KTtcbiAgICAgICAgICAgIGNvbnN0IGlzSW5UYXJnZXQgPSBSZWN0YW5nbGVDbGllbnQuaXNQb2ludEluUmVjdGFuZ2xlKHRhcmdldE91dGVyUmVjdGFuZ2xlLCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoIWlzSW5Tb3VyY2UgJiYgIWlzSW5UYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChwb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0ID0gcmVtb3ZlRHVwbGljYXRlUG9pbnRzKHJlc3VsdCkuZmlsdGVyKHBvaW50ID0+IHtcbiAgICAgICAgY29uc3QgaXNJblNvdXJjZSA9IFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUoc291cmNlT3V0ZXJSZWN0YW5nbGUsIHBvaW50KTtcbiAgICAgICAgY29uc3QgaXNJblRhcmdldCA9IFJlY3RhbmdsZUNsaWVudC5pc1BvaW50SW5SZWN0YW5nbGUodGFyZ2V0T3V0ZXJSZWN0YW5nbGUsIHBvaW50KTtcbiAgICAgICAgcmV0dXJuICFpc0luU291cmNlICYmICFpc0luVGFyZ2V0O1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR3JhcGggPSAocG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgY29uc3QgZ3JhcGggPSBuZXcgUG9pbnRHcmFwaCgpO1xuICAgIGNvbnN0IFhzOiBudW1iZXJbXSA9IFtdO1xuICAgIGNvbnN0IFlzOiBudW1iZXJbXSA9IFtdO1xuICAgIHBvaW50cy5mb3JFYWNoKHAgPT4ge1xuICAgICAgICBjb25zdCB4ID0gcFswXSxcbiAgICAgICAgICAgIHkgPSBwWzFdO1xuICAgICAgICBpZiAoWHMuaW5kZXhPZih4KSA8IDApIFhzLnB1c2goeCk7XG4gICAgICAgIGlmIChZcy5pbmRleE9mKHkpIDwgMCkgWXMucHVzaCh5KTtcbiAgICAgICAgZ3JhcGguYWRkKHApO1xuICAgIH0pO1xuICAgIFhzLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICBZcy5zb3J0KChhLCBiKSA9PiBhIC0gYik7XG4gICAgY29uc3QgaW5Ib3RJbmRleCA9IChwOiBQb2ludCk6IGJvb2xlYW4gPT4gZ3JhcGguaGFzKHApO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgWHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBZcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQ6IFBvaW50ID0gW1hzW2ldLCBZc1tqXV07XG4gICAgICAgICAgICBpZiAoIWluSG90SW5kZXgocG9pbnQpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyUG9pbnQ6IFBvaW50ID0gW1hzW2kgLSAxXSwgWXNbal1dO1xuICAgICAgICAgICAgICAgIGlmIChpbkhvdEluZGV4KG90aGVyUG9pbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyYXBoLmNvbm5lY3Qob3RoZXJQb2ludCwgcG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICBncmFwaC5jb25uZWN0KHBvaW50LCBvdGhlclBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdGhlclBvaW50OiBQb2ludCA9IFtYc1tpXSwgWXNbaiAtIDFdXTtcbiAgICAgICAgICAgICAgICBpZiAoaW5Ib3RJbmRleChvdGhlclBvaW50KSkge1xuICAgICAgICAgICAgICAgICAgICBncmFwaC5jb25uZWN0KG90aGVyUG9pbnQsIHBvaW50KTtcbiAgICAgICAgICAgICAgICAgICAgZ3JhcGguY29ubmVjdChwb2ludCwgb3RoZXJQb2ludCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBncmFwaDtcbn07XG5cbmV4cG9ydCBjb25zdCByZWR1Y2VSb3V0ZU1hcmdpbiA9IChzb3VyY2VSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgdGFyZ2V0UmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0T2Zmc2V0ID0gREVGQVVMVF9ST1VURV9NQVJHSU47XG4gICAgbGV0IHNvdXJjZU9mZnNldDogbnVtYmVyW10gPSBuZXcgQXJyYXkoNCkuZmlsbChkZWZhdWx0T2Zmc2V0KTtcbiAgICBsZXQgdGFyZ2V0T2Zmc2V0OiBudW1iZXJbXSA9IG5ldyBBcnJheSg0KS5maWxsKGRlZmF1bHRPZmZzZXQpO1xuICAgIGNvbnN0IHNvdXJjZU91dGVyUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUoc291cmNlUmVjdGFuZ2xlLCBkZWZhdWx0T2Zmc2V0ICogMik7XG4gICAgY29uc3QgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZSh0YXJnZXRSZWN0YW5nbGUsIGRlZmF1bHRPZmZzZXQgKiAyKTtcbiAgICBjb25zdCBpc0hpdCA9IFJlY3RhbmdsZUNsaWVudC5pc0hpdChzb3VyY2VPdXRlclJlY3RhbmdsZSwgdGFyZ2V0T3V0ZXJSZWN0YW5nbGUpO1xuICAgIGlmIChpc0hpdCkge1xuICAgICAgICBjb25zdCBsZWZ0VG9SaWdodCA9IHNvdXJjZVJlY3RhbmdsZS54IC0gKHRhcmdldFJlY3RhbmdsZS54ICsgdGFyZ2V0UmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgICAgY29uc3QgcmlnaHRUb0xlZnQgPSB0YXJnZXRSZWN0YW5nbGUueCAtIChzb3VyY2VSZWN0YW5nbGUueCArIHNvdXJjZVJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGlmIChsZWZ0VG9SaWdodCA+IDAgJiYgbGVmdFRvUmlnaHQgPCBkZWZhdWx0T2Zmc2V0ICogMikge1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gbGVmdFRvUmlnaHQgLyAyO1xuICAgICAgICAgICAgc291cmNlT2Zmc2V0WzNdID0gb2Zmc2V0O1xuICAgICAgICAgICAgdGFyZ2V0T2Zmc2V0WzFdID0gb2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJpZ2h0VG9MZWZ0ID4gMCAmJiByaWdodFRvTGVmdCA8IGRlZmF1bHRPZmZzZXQgKiAyKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSByaWdodFRvTGVmdCAvIDI7XG4gICAgICAgICAgICB0YXJnZXRPZmZzZXRbM10gPSBvZmZzZXQ7XG4gICAgICAgICAgICBzb3VyY2VPZmZzZXRbMV0gPSBvZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0b3BUb0JvdHRvbSA9IHNvdXJjZVJlY3RhbmdsZS55IC0gKHRhcmdldFJlY3RhbmdsZS55ICsgdGFyZ2V0UmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgIGNvbnN0IGJvdHRvbVRvVG9wID0gdGFyZ2V0UmVjdGFuZ2xlLnkgLSAoc291cmNlUmVjdGFuZ2xlLnkgKyBzb3VyY2VSZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAgICAgaWYgKHRvcFRvQm90dG9tID4gMCAmJiB0b3BUb0JvdHRvbSA8IGRlZmF1bHRPZmZzZXQgKiAyKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSB0b3BUb0JvdHRvbSAvIDI7XG4gICAgICAgICAgICBzb3VyY2VPZmZzZXRbMF0gPSBvZmZzZXQ7XG4gICAgICAgICAgICB0YXJnZXRPZmZzZXRbMl0gPSBvZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJvdHRvbVRvVG9wID4gMCAmJiBib3R0b21Ub1RvcCA8IGRlZmF1bHRPZmZzZXQgKiAyKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBib3R0b21Ub1RvcCAvIDI7XG4gICAgICAgICAgICBzb3VyY2VPZmZzZXRbMl0gPSBvZmZzZXQ7XG4gICAgICAgICAgICB0YXJnZXRPZmZzZXRbMF0gPSBvZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgc291cmNlT2Zmc2V0LCB0YXJnZXRPZmZzZXQgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXh0UG9pbnQgPSAocG9pbnQ6IFBvaW50LCBvdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBkaXJlY3Rpb246IERpcmVjdGlvbik6IFBvaW50ID0+IHtcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgICBjYXNlIERpcmVjdGlvbi50b3A6IHtcbiAgICAgICAgICAgIHJldHVybiBbcG9pbnRbMF0sIG91dGVyUmVjdGFuZ2xlLnldO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgRGlyZWN0aW9uLmJvdHRvbToge1xuICAgICAgICAgICAgcmV0dXJuIFtwb2ludFswXSwgb3V0ZXJSZWN0YW5nbGUueSArIG91dGVyUmVjdGFuZ2xlLmhlaWdodF07XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBEaXJlY3Rpb24ucmlnaHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBbb3V0ZXJSZWN0YW5nbGUueCArIG91dGVyUmVjdGFuZ2xlLndpZHRoLCBwb2ludFsxXV07XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcmV0dXJuIFtvdXRlclJlY3RhbmdsZS54LCBwb2ludFsxXV07XG4gICAgICAgIH1cbiAgICB9XG59O1xuIl19
@@ -1,4 +1,4 @@
1
- import { createG, RectangleClient, drawRectangle, drawCircle, PlaitBoard, createForeignObject, updateForeignObject, getSelectedElements, PlaitElement, Transforms, PlaitPointerType, isMainPointer, transformPoint, toPoint, preventTouchMove, distanceBetweenPointAndPoint, PRESS_AND_MOVE_BUFFER, throttleRAF, handleTouchTarget, MERGING, Direction, Point, hotkeys, PlaitContextService, downScale, PlaitPluginElementComponent, isSelectionMoving, ACTIVE_STROKE_WIDTH } from '@plait/core';
1
+ import { createG, RectangleClient, drawRectangle, drawCircle, PlaitBoard, createForeignObject, updateForeignObject, getSelectedElements, Transforms, PlaitPointerType, isMainPointer, transformPoint, toPoint, preventTouchMove, distanceBetweenPointAndPoint, PRESS_AND_MOVE_BUFFER, throttleRAF, handleTouchTarget, MERGING, Direction, Point, hotkeys, PlaitElement, PlaitContextService, downScale, PlaitPluginElementComponent, isSelectionMoving, ACTIVE_STROKE_WIDTH } from '@plait/core';
2
2
  import { isKeyHotkey } from 'is-hotkey';
3
3
  import * as i0 from '@angular/core';
4
4
  import { Directive, Input } from '@angular/core';
@@ -42,11 +42,11 @@ class Generator {
42
42
  this.board = board;
43
43
  this.options = options;
44
44
  }
45
- draw(element, parentG, data) {
45
+ processDrawing(element, parentG, data) {
46
46
  if (this.canDraw && this.canDraw(element, data)) {
47
- const g = this.baseDraw(element, data);
47
+ const g = this.draw(element, data);
48
48
  if (g) {
49
- if (this.g) {
49
+ if (this.g && parentG.contains(this.g)) {
50
50
  this.g.replaceWith(g);
51
51
  }
52
52
  else {
@@ -94,7 +94,7 @@ class ActiveGenerator extends Generator {
94
94
  return false;
95
95
  }
96
96
  }
97
- baseDraw(element, data) {
97
+ draw(element, data) {
98
98
  const activeG = createG();
99
99
  const rectangle = this.options.getRectangle(element);
100
100
  const delta = this.options.getStrokeWidth();
@@ -131,7 +131,7 @@ class ImageGenerator extends Generator {
131
131
  canDraw(element, data) {
132
132
  return !!this.options.getImageItem(element);
133
133
  }
134
- baseDraw(element, viewContainerRef) {
134
+ draw(element, viewContainerRef) {
135
135
  const g = createG();
136
136
  const foreignRectangle = this.options.getRectangle(element);
137
137
  this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);
@@ -178,15 +178,13 @@ const setProperty = (board, options, callback) => {
178
178
  selectedElements.forEach(element => {
179
179
  const path = PlaitBoard.findPath(board, element);
180
180
  if (callback) {
181
- const component = PlaitElement.getComponent(element);
182
- callback(component, path);
181
+ callback(element, path);
183
182
  }
184
183
  else {
185
184
  Transforms.setNode(board, options, path);
186
185
  }
187
186
  });
188
187
  };
189
-
190
188
  const setStrokeStyle = (board, strokeStyle) => {
191
189
  setProperty(board, { strokeStyle });
192
190
  };
@@ -1226,7 +1224,7 @@ class ImageBaseComponent {
1226
1224
  drawFocus() {
1227
1225
  if (this.initialized) {
1228
1226
  const activeG = PlaitBoard.getElementActiveHost(this.board);
1229
- this.activeGenerator.draw({}, activeG, { selected: this._isFocus });
1227
+ this.activeGenerator.processDrawing({}, activeG, { selected: this._isFocus });
1230
1228
  }
1231
1229
  }
1232
1230
  ngOnDestroy() {
@@ -1266,5 +1264,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1266
1264
  * Generated bundle index. Do not edit.
1267
1265
  */
1268
1266
 
1269
- export { AStar, ActiveGenerator, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeCursorClass, ResizeHandle, TRANSPARENT, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, buildImage, calculatePolylineLength, createGraph, generateElbowLineRoute, getCreationMode, getDirection, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getEdgeCenter, getElementOfFocusedImage, getExtendPoint, getFactorByPoints, getGraphPoints, getNextPoint, getOppositeDirection, getPointByVector, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleByPoints, getRectangleResizeHandleRefs, getTextEditors, getTextManages, hasAfterDraw, isDelete, isDndMode, isDrawingMode, isEnterHotkey, isExpandHotkey, isPointOnLineSegment, isResizing, isResizingByCondition, isSpaceHotkey, isTabHotkey, isVirtualKey, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing, rotateVectorAnti90, selectImage, setCreationMode, withResize };
1267
+ export { AStar, ActiveGenerator, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeCursorClass, ResizeHandle, TRANSPARENT, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, buildImage, calculatePolylineLength, createGraph, generateElbowLineRoute, getCreationMode, getDirection, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getEdgeCenter, getElementOfFocusedImage, getExtendPoint, getFactorByPoints, getGraphPoints, getNextPoint, getOppositeDirection, getPointByVector, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleByPoints, getRectangleResizeHandleRefs, getTextEditors, getTextManages, hasAfterDraw, isDelete, isDndMode, isDrawingMode, isEnterHotkey, isExpandHotkey, isPointOnLineSegment, isResizing, isResizingByCondition, isSpaceHotkey, isTabHotkey, isVirtualKey, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing, rotateVectorAnti90, routeAdjust, selectImage, setCreationMode, setProperty, withResize };
1270
1268
  //# sourceMappingURL=plait-common.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/generators/image.generator.ts","../../../packages/common/src/transforms/common.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/rectangle.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/core/plugin-element.ts","../../../packages/common/src/core/image-base.component.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 8;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\n","export enum MediaKeys {\n image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeCursorClass {\n ew = 'ew-resize',\n ns = 'ns-resize',\n nesw = 'nesw-resize',\n nwse = 'nwse-resize'\n}\n\nexport enum ResizeHandle {\n ne = 'ne',\n n = 'n',\n nw = 'nw',\n e = 'e',\n se = 'se',\n s = 's',\n sw = 'sw',\n w = 'w'\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions\n> {\n g?: SVGGElement;\n\n options?: V;\n\n constructor(protected board: PlaitBoard, options?: V) {\n this.options = options;\n }\n\n draw(element: T, parentG: SVGGElement, data?: K) {\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.baseDraw(element, data);\n if (g) {\n if (this.g) {\n this.g.replaceWith(g);\n } else {\n parentG.appendChild(g);\n }\n this.g = g;\n } else {\n this.destroy();\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n } else {\n this.destroy();\n }\n }\n\n abstract canDraw(element: T, data?: K): boolean;\n\n abstract baseDraw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n this.g = undefined;\n }\n }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, PlaitElement, RectangleClient, createG, drawCircle, drawRectangle } from '@plait/core';\nimport { Generator } from './generator';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../constants/default';\nimport { Options } from 'roughjs/bin/core';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T>\n> {\n hasResizeHandle = false;\n\n constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n baseDraw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n const rectangle = this.options.getRectangle(element);\n\n const delta = this.options.getStrokeWidth();\n const activeRectangle = RectangleClient.inflate(rectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: delta\n });\n\n activeG.append(strokeG);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // resize handle\n const options: Options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };\n const leftTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const leftBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n activeG.append(...[leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);\n } else {\n this.hasResizeHandle = false;\n }\n return activeG;\n }\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitOptionsBoard,\n RectangleClient,\n createForeignObject,\n createG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator } from './generator';\nimport { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\nimport { CommonImageItem, WithCommonPluginOptions } from '../utils';\nimport { WithCommonPluginKey } from '../constants';\nexport interface ShapeData {\n viewContainerRef: ViewContainerRef;\n}\n\nexport interface ImageGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<T, ViewContainerRef, ImageGeneratorOptions<T>> {\n foreignObject!: SVGForeignObjectElement;\n\n componentRef!: ComponentRef<ImageBaseComponent>;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ViewContainerRef): boolean {\n return !!this.options.getImageItem(element);\n }\n\n baseDraw(element: T, viewContainerRef: ViewContainerRef): SVGGElement {\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n g.append(this.foreignObject);\n const componentType = (this.board as PlaitOptionsBoard).getPluginOptions<WithCommonPluginOptions>(WithCommonPluginKey)\n .imageComponentType;\n if (!componentType) {\n throw new Error('Not implement ImageBaseComponent error.');\n }\n this.componentRef = viewContainerRef.createComponent(componentType);\n this.componentRef.instance.board = this.board;\n\n this.componentRef.instance.imageItem = this.options.getImageItem(element);\n this.componentRef.instance.element = element;\n this.componentRef.instance.getRectangle = () => {\n return this.options.getRectangle(element);\n };\n this.componentRef.instance.cdr.markForCheck();\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n if (previous !== current && this.componentRef) {\n this.componentRef.instance.imageItem = this.options.getImageItem(current);\n this.componentRef!.instance.getRectangle = () => {\n return this.options.getRectangle(current);\n };\n }\n const currentForeignObject = this.options.getRectangle(current);\n updateForeignObject(\n this.g!,\n currentForeignObject.width,\n currentForeignObject.height,\n currentForeignObject.x,\n currentForeignObject.y\n );\n // solve image lose on move node\n if (this.foreignObject.children.length === 0) {\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n }\n this.componentRef?.instance.cdr.markForCheck();\n }\n\n destroy(): void {\n super.destroy();\n this.componentRef?.destroy();\n }\n}\n","import { Path, PlaitBoard, PlaitElement, PlaitPluginElementComponent, Transforms, getSelectedElements } from '@plait/core';\n\nexport const setProperty = (board: PlaitBoard, options: any, callback?: (component: PlaitPluginElementComponent, path: Path) => void) => {\n const selectedElements = getSelectedElements(board);\n selectedElements.forEach(element => {\n const path = PlaitBoard.findPath(board, element);\n if (callback) {\n const component = PlaitElement.getComponent(element);\n callback(component, path);\n } else {\n Transforms.setNode(board, options, path);\n }\n });\n};\n","import { PlaitBoard } from '@plait/core';\nimport { setProperty } from './common';\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string) => {\n setProperty(board, { strokeStyle });\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string) => {\n setProperty(board, { fill });\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string) => {\n setProperty(board, { strokeColor });\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number) => {\n setProperty(board, { strokeWidth });\n};\n\nexport const PropertyTransforms = {\n setFillColor,\n setStrokeStyle,\n setProperty,\n setStrokeWidth,\n setStrokeColor\n};\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n let start = points[0];\n let end = points[1];\n if (shift) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n const edge = Math.max(height, width);\n end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n }\n\n const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n return [leftTopPoint, rightBottomPoint];\n};\n","import { Path, PlaitBoard, PlaitElement, Point, RectangleClient } from '@plait/core';\nimport { ResizeCursorClass, ResizeHandle } from '../constants/resize';\n\nexport interface ResizeRef<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n path: Path;\n handle: K;\n}\n\nconst getResizeHandleByIndex = (index: number) => {\n switch (index) {\n case 0:\n return ResizeHandle.nw;\n case 1:\n return ResizeHandle.ne;\n case 2:\n return ResizeHandle.se;\n case 3:\n return ResizeHandle.sw;\n case 4:\n return ResizeHandle.n;\n case 5:\n return ResizeHandle.e;\n case 6:\n return ResizeHandle.s;\n case 7:\n return ResizeHandle.w;\n default:\n return null;\n }\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n case 2:\n return ResizeCursorClass.nwse;\n case 1:\n case 3:\n return ResizeCursorClass.nesw;\n case 4:\n case 6:\n return ResizeCursorClass.ns;\n case 5:\n case 7:\n return ResizeCursorClass.ew;\n default:\n return null;\n }\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n const corners = RectangleClient.getCornerPoints(rectangle);\n const refs = corners.map((corner, index: number) => {\n return {\n rectangle: {\n x: corner[0] - diameter / 2,\n y: corner[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n const rectangles = getResizeSideRectangles(corners, diameter / 2);\n refs.push(\n ...rectangles.map((rectangle, index) => {\n return {\n rectangle,\n handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index + 4) as ResizeCursorClass\n };\n })\n );\n return refs;\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n const result = [];\n for (let i = 0; i < cornerPoints.length; i++) {\n let rectangle = RectangleClient.toRectangleClient([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n const arr = new Array(2).fill(0);\n arr[(i + 1) % 2] = offset / 2;\n rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n result.push(rectangle);\n }\n return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElement, K>(board: PlaitBoard, match: (resizeRef: ResizeRef<T, K>) => boolean) => {\n return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElement, K>(board: PlaitBoard, resizeRef: ResizeRef<T, K>, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, resizeRef);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.delete(board);\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n Path,\n PlaitBoard,\n PlaitElement,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n handleTouchTarget,\n throttleRAF,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { ResizeHandle, ResizeCursorClass } from '../constants/resize';\nimport { ResizeRef, addResizing, isResizing, removeResizing } from '../utils/resize';\n\nexport interface WithResizeOptions<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n key: string;\n canResize: () => boolean;\n detect: (point: Point) => ResizeDetectResult<T, K> | null;\n onResize: (resizeRef: ResizeRef<T, K>, resizeState: ResizeState) => void;\n endResize?: (resizeRef: ResizeRef<T, K>) => void;\n}\n\nexport interface ResizeDetectResult<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n handle: K;\n cursorClass?: ResizeCursorClass;\n}\n\nexport interface ResizeState {\n offsetX: number;\n offsetY: number;\n endTransformPoint: Point;\n}\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n PlaitBoard.isReadonly(board) ||\n PlaitBoard.hasBeenTextEditing(board) ||\n !PlaitBoard.isPointer(board, PlaitPointerType.hand) ||\n !isMainPointer(event)\n );\n};\n\nexport const withResize = <T extends PlaitElement = PlaitElement, K = ResizeHandle>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K>\n) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeDetectResult: ResizeDetectResult<T, K> | null = null;\n let resizeRef: ResizeRef<T, K> | null = null;\n let startPoint: Point | null = null;\n let hoveDetectResult: ResizeDetectResult<T, K> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerDown(event);\n return;\n }\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (resizeDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n resizeRef = {\n path: PlaitBoard.findPath(board, resizeDetectResult.element),\n element: resizeDetectResult.element,\n handle: resizeDetectResult.handle\n };\n preventTouchMove(board, event, true);\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerMove(event);\n return;\n }\n if (startPoint && resizeDetectResult && !isResizing(board)) {\n // prevent text from being selected\n event.preventDefault();\n\n const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, resizeRef!, options.key);\n }\n }\n\n if (isResizing(board) && startPoint) {\n // prevent text from being selected\n event.preventDefault();\n const endTransformPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n throttleRAF(() => {\n const endPoint = [event.x, event.y];\n if (startPoint && resizeRef) {\n handleTouchTarget(board);\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n options.onResize(resizeRef, { offsetX, offsetY, endTransformPoint });\n MERGING.set(board, true);\n }\n });\n return;\n } else {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (hoveDetectResult && resizeDetectResult.cursorClass !== hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = resizeDetectResult;\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);\n }\n } else {\n if (hoveDetectResult) {\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = null;\n }\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeDetectResult) {\n options.endResize && options.endResize(resizeRef!);\n removeResizing(board, options.key);\n startPoint = null;\n resizeDetectResult = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, event, false);\n }\n };\n\n return board;\n};\n","import { Direction, Point, PointOfRectangle, Vector, distanceBetweenPointAndPoint } from '@plait/core';\n\nconst handleDirectionFactors = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n if (point[0] === 0) {\n return Direction.left;\n }\n if (point[0] === 1) {\n return Direction.right;\n }\n if (point[1] === 0) {\n return Direction.top;\n }\n if (point[1] === 1) {\n return Direction.bottom;\n }\n return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n const x = vector[0];\n const y = vector[1];\n if (x === 0 && y === 0) {\n return null;\n }\n if (x === 0) {\n return y > 0 ? Direction.bottom : Direction.top;\n }\n if (y === 0) {\n return x > 0 ? Direction.right : Direction.left;\n }\n const angle = Math.atan2(y, x);\n if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n return Direction.right;\n } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n return Direction.bottom;\n } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n return Direction.top;\n } else {\n return Direction.left;\n }\n}\n\nexport function getPointByVector(point: Point, vector: Vector, offset: number): Point {\n const distance = Math.hypot(vector[0], vector[1]);\n return [point[0] + (vector[0] / distance) * offset, point[1] + (vector[1] / distance) * offset];\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n const x = vector[0];\n const y = vector[1];\n const rotatedX = y;\n const rotatedY = -x;\n return [rotatedX, rotatedY];\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n if (source[0] === target[0]) {\n if (source[1] >= target[1]) {\n return Direction.top;\n } else {\n return Direction.bottom;\n }\n }\n if (source[1] === target[1]) {\n if (source[0] >= target[0]) {\n return Direction.left;\n } else {\n return Direction.right;\n }\n }\n throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n return handleDirectionFactors[direction];\n}\n\nexport function getFactorByPoints(source: Point, target: Point) {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n if (Point.isEquals(source, target)) {\n return {\n x: 1,\n y: 1\n };\n }\n return {\n x: (target[0] - source[0]) / distance,\n y: (target[1] - source[1]) / distance\n };\n}\n","import { Direction, Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getDirectionFactor } from './direction';\n\nexport function getOppositeDirection(direction: Direction) {\n switch (direction) {\n case Direction.left:\n return Direction.right;\n case Direction.right:\n return Direction.left;\n case Direction.top:\n return Direction.bottom;\n case Direction.bottom:\n return Direction.top;\n }\n}\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDir = getDirectionFactor(sourcePosition);\n const targetDir = getDirectionFactor(targetPosition);\n const sourceGapped: Point = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];\n const targetGapped: Point = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nexport const getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nexport function getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n const totalLength = calculatePolylineLength(points);\n const targetDistance = totalLength * ratio;\n\n let accumulatedDistance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n if (accumulatedDistance + segmentLength >= targetDistance) {\n const remainingDistance = targetDistance - accumulatedDistance;\n const ratioInSegment = remainingDistance / segmentLength;\n\n const targetX = x1 + (x2 - x1) * ratioInSegment;\n const targetY = y1 + (y2 - y1) * ratioInSegment;\n return [targetX, targetY];\n }\n\n accumulatedDistance += segmentLength;\n }\n\n return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n let length = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n }\n return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n const totalLength = calculatePolylineLength(points);\n\n let distance = 0;\n\n for (let i = 0; i < points.length - 1; i++) {\n const isOverlap = isPointOnLineSegment(point, points[i], points[i + 1]);\n\n if (isOverlap) {\n distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n return distance / totalLength;\n } else {\n distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n }\n }\n throw new Error('Cannot get ratio by point');\n}\n\nexport function isPointOnLineSegment(point: Point, startPoint: Point, endPoint: Point) {\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n\n const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n\n return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n const newArray: Point[] = [];\n points.forEach(point => {\n const index = newArray.findIndex(otherPoint => {\n return Point.isEquals(point, otherPoint);\n });\n if (index === -1) newArray.push(point);\n });\n return newArray;\n};\n\nexport const getExtendPoint = (source: Point, target: Point, extendDistance: number): Point => {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n const isEqual = Point.isEquals(source, target);\n const sin = isEqual ? 1 : (target[1] - source[1]) / distance;\n const cos = isEqual ? 1 : (target[0] - source[0]) / distance;\n return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];\n};\n","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { Point } from '@plait/core';\n\nexport const getRectangleByPoints = (points: Point[]) => {\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity;\n points.forEach(point => {\n minX = Math.min(point[0], minX);\n maxX = Math.max(point[0], maxX);\n minY = Math.min(point[1], minY);\n maxY = Math.max(point[1], maxY);\n });\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n 'dnd' = 'dnd',\n 'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitElement } from '@plait/core';\nimport { CommonPluginElement } from '../core/plugin-element';\n\nexport const getTextManages = (element: PlaitElement) => {\n const component = PlaitElement.getComponent(element) as CommonPluginElement;\n return component.getTextManages();\n};\n\nexport const getTextEditors = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.componentRef.instance.editor;\n });\n};\n","import { ComponentType, PlaitBoard, PlaitContextService, PlaitElement } from '@plait/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\n}\n\nexport interface WithCommonPluginOptions {\n imageComponentType?: ComponentType<ImageBaseComponent>;\n}\n\nexport const selectImage = (\n board: PlaitBoard,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void,\n acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n inputFile.setAttribute('accept', acceptImageTypesString);\n inputFile.onchange = (event: Event) => {\n buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n };\n inputFile.click();\n};\n\nexport const buildImage = async (\n board: PlaitBoard,\n imageFile: File,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void\n) => {\n let width = 0,\n height = 0;\n await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n width = value.width;\n height = value.height;\n });\n\n let imageItem = null;\n const url = URL.createObjectURL(imageFile);\n const context = PlaitBoard.getComponent(board).viewContainerRef.injector.get(PlaitContextService);\n context.setUploadingFile({ url, file: imageFile });\n\n imageItem = {\n url,\n width,\n height\n };\n handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.src = URL.createObjectURL(file);\n\n image.onload = function() {\n const width = defaultImageWidth;\n const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n resolve(\n image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n );\n };\n });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n list: { node: PointNode; priority: number }[];\n\n constructor() {\n this.list = [];\n }\n\n enqueue(item: { node: PointNode; priority: number }) {\n this.list.push(item);\n this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n }\n\n dequeue() {\n return this.list.shift();\n }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n cameFrom: Map<PointNode, PointNode>;\n\n constructor(private graph: PointGraph) {\n this.cameFrom = new Map<PointNode, PointNode>();\n }\n\n heuristic(a: Point, b: Point) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n }\n\n search(start: Point, end: Point, previousStart: Point) {\n const frontier = new PriorityQueue();\n const startNode = this.graph.get(start);\n this.cameFrom = new Map<PointNode, PointNode>();\n const costSoFar = new Map<PointNode, number>();\n costSoFar.set(startNode!, 0);\n frontier.enqueue({ node: startNode!, priority: 0 });\n while (frontier.list.length > 0) {\n var current = frontier.dequeue();\n\n if (!current) {\n throw new Error(`can't find current`);\n }\n const currentPoint = current!.node.data;\n if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n break;\n }\n current.node.adjacentNodes.forEach(next => {\n let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n const previousNode = this.cameFrom.get(current!.node);\n // 拐点权重\n const previousPoint = previousNode ? previousNode.data : previousStart;\n const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n if (!x && !y) {\n newCost = newCost + 1;\n }\n if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n costSoFar.set(next, newCost);\n const priority = newCost + this.heuristic(next.data, end);\n frontier.enqueue({ node: next, priority });\n this.cameFrom.set(next, current!.node);\n }\n });\n }\n }\n\n getRoute(start: Point, end: Point) {\n const result = [];\n let temp = end;\n while (temp[0] !== start[0] || temp[1] !== start[1]) {\n const node = this.graph.get(temp);\n const preNode = this.cameFrom.get(node!);\n result.unshift(preNode!.data);\n temp = preNode!.data;\n }\n return result;\n }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n public distance = Number.MAX_SAFE_INTEGER;\n public adjacentNodes: PointNode[] = [];\n constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n add(p: Point) {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (!(xs in this.index)) {\n this.index[xs] = {};\n }\n if (!(ys in this.index[xs])) {\n this.index[xs][ys] = new PointNode(p);\n }\n }\n connect(a: Point, b: Point) {\n const nodeA = this.get(a);\n const nodeB = this.get(b);\n\n if (!nodeA || !nodeB) {\n throw new Error(`A point was not found`);\n }\n\n nodeA.adjacentNodes.push(nodeB);\n }\n\n has(p: Point): boolean {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n return xs in this.index && ys in this.index[xs];\n }\n\n get(p: Point): PointNode | null {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (xs in this.index && ys in this.index[xs]) {\n return this.index[xs][ys];\n }\n\n return null;\n }\n}\n","import { Direction, Point, RectangleClient, downScale } from '@plait/core';\nimport { removeDuplicatePoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nexport interface ElbowLineRouteOptions {\n sourcePoint: Point;\n nextSourcePoint: Point;\n sourceRectangle: RectangleClient;\n sourceOuterRectangle: RectangleClient;\n targetPoint: Point;\n nextTargetPoint: Point;\n targetOuterRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n xAxis?: number;\n yAxis?: number;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n parallelPaths: [Point, Point][];\n pointOfHit: Point;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint } = options;\n const points = getGraphPoints(options);\n const graph = createGraph(points);\n const aStar = new AStar(graph);\n aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n const xAxis = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n const yAxis = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n route = routeAdjust(route, { xAxis, yAxis, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle });\n return route;\n};\n\nconst routeAdjust = (path: Point[], options: RouteAdjustOptions) => {\n // 基于 middleX/middleY 中线纠正 path\n // 1. 找垂直/水平的线段\n // 2. 找到和middleX/middleY相交的点\n // 3. 基于垂直/水平的线段分别和相交点构建矩形\n // 4. 判断矩形相交\n // 5. 处理 path\n const { sourceRectangle, targetRectangle, xAxis, yAxis } = options;\n if (xAxis !== undefined) {\n const optionsX = getAdjustOptions(path, xAxis, true);\n const resultX =\n optionsX.pointOfHit &&\n adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle });\n if (resultX) {\n path = resultX;\n }\n }\n if (yAxis !== undefined) {\n const optionsY = getAdjustOptions(path, yAxis, false);\n const resultY =\n optionsY.pointOfHit &&\n adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle });\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions) => {\n const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n let result = null;\n parallelPaths.forEach(parallelPath => {\n // 构建矩形\n const tempRect = RectangleClient.toRectangleClient([pointOfHit, parallelPath[0], parallelPath[1]]);\n if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n const getCornerCount = (path: Point[]) => {\n let cornerCount = 0;\n for (let index = 1; index < path.length - 1; index++) {\n const pre = path[index - 1];\n const current = path[index];\n const next = path[index + 1];\n if (\n pre &&\n current &&\n next &&\n !(\n (downScale(current[0]) === downScale(pre[0]) && downScale(current[0]) === downScale(next[0])) ||\n (downScale(current[1]) === downScale(pre[1]) && downScale(current[1]) === downScale(next[1]))\n )\n ) {\n cornerCount++;\n }\n }\n return cornerCount;\n };\n const tempCorners = RectangleClient.getCornerPoints(tempRect);\n const indexRangeInPath: number[] = [];\n const indexRangeInCorner: number[] = [];\n route.forEach((point, index) => {\n const cornerResult = tempCorners.findIndex(\n corner => Math.floor(corner[0]) === Math.floor(point[0]) && Math.floor(corner[1]) === Math.floor(point[1])\n );\n if (cornerResult !== -1) {\n indexRangeInPath.push(index);\n indexRangeInCorner.push(cornerResult);\n }\n });\n const newPath = [...route];\n const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n const cornerCount = getCornerCount([...route]);\n const newCornerCount = getCornerCount([...newPath]);\n if (newCornerCount <= cornerCount) {\n result = newPath;\n }\n }\n return null;\n });\n return result;\n};\n\nconst getAdjustOptions = (path: Point[], middle: number, isHorizontal: boolean) => {\n const parallelPaths: [Point, Point][] = [];\n let start: null | Point = null;\n let pointOfHit: null | Point = null;\n const axis = isHorizontal ? 0 : 1;\n\n for (let index = 0; index < path.length; index++) {\n const previous = path[index - 1];\n const current = path[index];\n if (start === null && previous && previous[axis] === current[axis]) {\n start = previous;\n }\n if (start !== null) {\n if (previous[axis] !== current[axis]) {\n parallelPaths.push([start, previous]);\n start = null;\n }\n }\n if (current[axis] === middle) {\n pointOfHit = current;\n }\n }\n if (start) {\n parallelPaths.push([start, path[path.length - 1]]);\n }\n return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n const x: number[] = [];\n const y: number[] = [];\n let result: Point[] = [];\n\n [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n });\n const rectanglesX = [\n sourceOuterRectangle.x,\n sourceOuterRectangle.x + sourceOuterRectangle.width,\n targetOuterRectangle.x,\n targetOuterRectangle.x + targetOuterRectangle.width\n ].sort((a, b) => a - b);\n x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n const rectanglesY = [\n sourceOuterRectangle.y,\n sourceOuterRectangle.y + sourceOuterRectangle.height,\n targetOuterRectangle.y,\n targetOuterRectangle.y + targetOuterRectangle.height\n ].sort((a, b) => a - b);\n y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n const point: Point = [x[i], y[j]];\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n if (!isInSource && !isInTarget) {\n result.push(point);\n }\n }\n }\n result = removeDuplicatePoints(result).filter(point => {\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n return !isInSource && !isInTarget;\n });\n return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n const graph = new PointGraph();\n const Xs: number[] = [];\n const Ys: number[] = [];\n points.forEach(p => {\n const x = p[0],\n y = p[1];\n if (Xs.indexOf(x) < 0) Xs.push(x);\n if (Ys.indexOf(y) < 0) Ys.push(y);\n graph.add(p);\n });\n Xs.sort((a, b) => a - b);\n Ys.sort((a, b) => a - b);\n const inHotIndex = (p: Point): boolean => graph.has(p);\n for (let i = 0; i < Xs.length; i++) {\n for (let j = 0; j < Ys.length; j++) {\n const point: Point = [Xs[i], Ys[j]];\n if (!inHotIndex(point)) continue;\n if (i > 0) {\n const otherPoint: Point = [Xs[i - 1], Ys[j]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n if (j > 0) {\n const otherPoint: Point = [Xs[i], Ys[j - 1]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n }\n }\n return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const defaultOffset = DEFAULT_ROUTE_MARGIN;\n let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n let targetOffset: number[] = new Array(4).fill(defaultOffset);\n const sourceOuterRectangle = RectangleClient.inflate(sourceRectangle, defaultOffset * 2);\n const targetOuterRectangle = RectangleClient.inflate(targetRectangle, defaultOffset * 2);\n const isHit = RectangleClient.isHit(sourceOuterRectangle, targetOuterRectangle);\n if (isHit) {\n const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n const offset = leftToRight / 2;\n sourceOffset[3] = offset;\n targetOffset[1] = offset;\n }\n\n if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n const offset = rightToLeft / 2;\n targetOffset[3] = offset;\n sourceOffset[1] = offset;\n }\n\n const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n const offset = topToBottom / 2;\n sourceOffset[0] = offset;\n targetOffset[2] = offset;\n }\n if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n const offset = bottomToTop / 2;\n sourceOffset[2] = offset;\n targetOffset[0] = offset;\n }\n }\n return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n switch (direction) {\n case Direction.top: {\n return [point[0], outerRectangle.y];\n }\n case Direction.bottom: {\n return [point[0], outerRectangle.y + outerRectangle.height];\n }\n case Direction.right: {\n return [outerRectangle.x + outerRectangle.width, point[1]];\n }\n default: {\n return [outerRectangle.x, point[1]];\n }\n }\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementComponent } from '@plait/core';\nimport { TextManage } from '@plait/text';\n\nexport abstract class CommonPluginElement<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard\n> extends PlaitPluginElementComponent<T, K> {\n private textManages: TextManage[] = [];\n\n initializeTextManages(textManages: TextManage[]) {\n this.textManages = textManages;\n }\n\n getTextManages() {\n return this.textManages;\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ACTIVE_STROKE_WIDTH, PlaitBoard, PlaitElement, RectangleClient, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { ActiveGenerator } from '../generators';\nimport { CommonImageItem } from '../utils';\n\n@Directive({\n host: {\n class: 'plait-image-container'\n }\n})\nexport abstract class ImageBaseComponent implements OnInit, OnDestroy {\n _imageItem!: CommonImageItem;\n\n _isFocus!: boolean;\n\n initialized = false;\n\n activeGenerator!: ActiveGenerator;\n\n @Input()\n element!: PlaitElement;\n\n @Input()\n set imageItem(value: CommonImageItem) {\n this.afterImageItemChange(this._imageItem, value);\n this._imageItem = value;\n this.drawFocus();\n }\n\n get imageItem() {\n return this._imageItem;\n }\n\n @Input()\n board!: PlaitBoard;\n\n @Input()\n set isFocus(value: boolean) {\n this._isFocus = value;\n this.drawFocus();\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n abstract afterImageItemChange(previous: CommonImageItem, current: CommonImageItem): void;\n\n @Input() getRectangle!: () => RectangleClient;\n\n @Input() hasResizeHandle!: () => boolean;\n\n constructor(protected elementRef: ElementRef<HTMLElement>, public cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.activeGenerator = new ActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.getRectangle();\n },\n hasResizeHandle: () => {\n const selectedElements = getSelectedElements(this.board);\n return (selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length;\n }\n });\n this.initialized = true;\n }\n\n drawFocus() {\n if (this.initialized) {\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.draw({} as PlaitElement, activeG, { selected: this._isFocus });\n }\n }\n\n ngOnDestroy(): void {\n if (this.activeGenerator) {\n this.activeGenerator.destroy();\n }\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './core/plugin-element';\nexport * from './core/image-base.component';\nexport * from './algorithms'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plait-common.mjs","sources":["../../../packages/common/src/constants/default.ts","../../../packages/common/src/constants/media.ts","../../../packages/common/src/constants/resize.ts","../../../packages/common/src/generators/generator.ts","../../../packages/common/src/generators/active.generator.ts","../../../packages/common/src/generators/image.generator.ts","../../../packages/common/src/transforms/property.ts","../../../packages/common/src/shapes/common.ts","../../../packages/common/src/utils/resize.ts","../../../packages/common/src/plugins/with-resize.ts","../../../packages/common/src/utils/direction.ts","../../../packages/common/src/utils/line-path.ts","../../../packages/common/src/utils/hot-key.ts","../../../packages/common/src/utils/rectangle.ts","../../../packages/common/src/utils/creation-mode.ts","../../../packages/common/src/utils/text.ts","../../../packages/common/src/utils/image.ts","../../../packages/common/src/algorithms/data-structures/priority-queue.ts","../../../packages/common/src/algorithms/a-star.ts","../../../packages/common/src/algorithms/data-structures/graph.ts","../../../packages/common/src/utils/elbow-line-route.ts","../../../packages/common/src/core/plugin-element.ts","../../../packages/common/src/core/image-base.component.ts","../../../packages/common/src/public-api.ts","../../../packages/common/src/plait-common.ts"],"sourcesContent":["export const BASE = 4;\nexport const PRIMARY_COLOR = '#6698FF';\nexport const RESIZE_HANDLE_DIAMETER = 8;\nexport const WithTextPluginKey = 'plait-text-plugin-key';\nexport const DEFAULT_ROUTE_MARGIN = 30;\nexport const TRANSPARENT = 'transparent';\n","export enum MediaKeys {\n image = 'image'\n}\n\nexport const PICTURE_ACCEPTED_UPLOAD_SIZE = 20;\n\nexport const acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp'];\n\nexport const WithCommonPluginKey = 'plait-common-plugin-key';\n","export enum ResizeCursorClass {\n ew = 'ew-resize',\n ns = 'ns-resize',\n nesw = 'nesw-resize',\n nwse = 'nwse-resize'\n}\n\nexport enum ResizeHandle {\n ne = 'ne',\n n = 'n',\n nw = 'nw',\n e = 'e',\n se = 'se',\n s = 's',\n sw = 'sw',\n w = 'w'\n}\n","import { PlaitBoard, PlaitElement } from '@plait/core';\n\nexport interface GeneratorExtraData {}\n\nexport interface GeneratorOptions {}\n\nexport abstract class Generator<\n T extends PlaitElement = PlaitElement,\n K extends GeneratorExtraData = GeneratorExtraData,\n V extends GeneratorOptions = GeneratorOptions\n> {\n g?: SVGGElement;\n\n protected options?: V;\n\n constructor(protected board: PlaitBoard, options?: V) {\n this.options = options;\n }\n\n processDrawing(element: T, parentG: SVGGElement, data?: K) {\n if (this.canDraw && this.canDraw(element, data)) {\n const g = this.draw(element, data);\n if (g) {\n if (this.g && parentG.contains(this.g)) {\n this.g.replaceWith(g);\n } else {\n parentG.appendChild(g);\n }\n this.g = g;\n } else {\n this.destroy();\n }\n if (hasAfterDraw(this)) {\n this.afterDraw(element);\n }\n } else {\n this.destroy();\n }\n }\n\n /**\n * abstract function\n */\n protected abstract canDraw(element: T, data?: K): boolean;\n\n /**\n * abstract function\n */\n protected abstract draw(element: T, data?: K): SVGGElement | undefined;\n\n destroy() {\n if (this.g) {\n this.g.remove();\n this.g = undefined;\n }\n }\n}\n\nexport interface AfterDraw<T extends PlaitElement = PlaitElement> {\n afterDraw(element: T): void;\n}\n\nexport function hasAfterDraw(value: any): value is AfterDraw {\n if (value.afterDraw) {\n return true;\n }\n return false;\n}\n","import { PlaitBoard, PlaitElement, RectangleClient, createG, drawCircle, drawRectangle } from '@plait/core';\nimport { Generator } from './generator';\nimport { PRIMARY_COLOR, RESIZE_HANDLE_DIAMETER } from '../constants/default';\nimport { Options } from 'roughjs/bin/core';\n\nexport interface ActiveGeneratorExtraData {\n selected: boolean;\n}\n\nexport interface ActiveGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getStrokeWidth: () => number;\n getStrokeOpacity: () => number;\n hasResizeHandle: () => boolean;\n}\n\nexport class ActiveGenerator<T extends PlaitElement = PlaitElement> extends Generator<\n T,\n ActiveGeneratorExtraData,\n ActiveGeneratorOptions<T>\n> {\n hasResizeHandle = false;\n\n constructor(public board: PlaitBoard, public options: ActiveGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ActiveGeneratorExtraData): boolean {\n if (data.selected) {\n return true;\n } else {\n return false;\n }\n }\n\n draw(element: T, data: ActiveGeneratorExtraData): SVGGElement {\n const activeG = createG();\n const rectangle = this.options.getRectangle(element);\n\n const delta = this.options.getStrokeWidth();\n const activeRectangle = RectangleClient.inflate(rectangle, delta);\n\n const strokeG = drawRectangle(this.board, activeRectangle, {\n stroke: PRIMARY_COLOR,\n strokeWidth: delta\n });\n\n activeG.append(strokeG);\n strokeG.style.opacity = `${this.options.getStrokeOpacity()}`;\n if (this.options.hasResizeHandle()) {\n this.hasResizeHandle = true;\n // resize handle\n const options: Options = { stroke: '#999999', strokeWidth: 1, fill: '#FFF', fillStyle: 'solid' };\n const leftTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightTopHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const rightBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x + activeRectangle.width, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n const leftBottomHandleG = drawCircle(\n PlaitBoard.getRoughSVG(this.board),\n [activeRectangle.x, activeRectangle.y + activeRectangle.height],\n RESIZE_HANDLE_DIAMETER,\n options\n );\n activeG.append(...[leftTopHandleG, rightTopHandleG, rightBottomHandleG, leftBottomHandleG]);\n } else {\n this.hasResizeHandle = false;\n }\n return activeG;\n }\n}\n","import {\n PlaitBoard,\n PlaitElement,\n PlaitOptionsBoard,\n RectangleClient,\n createForeignObject,\n createG,\n updateForeignObject\n} from '@plait/core';\nimport { Generator } from './generator';\nimport { ComponentRef, ViewContainerRef } from '@angular/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\nimport { CommonImageItem, WithCommonPluginOptions } from '../utils';\nimport { WithCommonPluginKey } from '../constants';\nexport interface ShapeData {\n viewContainerRef: ViewContainerRef;\n}\n\nexport interface ImageGeneratorOptions<T> {\n getRectangle: (element: T) => RectangleClient;\n getImageItem: (element: T) => CommonImageItem;\n}\n\nexport class ImageGenerator<T extends PlaitElement = PlaitElement> extends Generator<T, ViewContainerRef, ImageGeneratorOptions<T>> {\n foreignObject!: SVGForeignObjectElement;\n\n componentRef!: ComponentRef<ImageBaseComponent>;\n\n constructor(public board: PlaitBoard, public options: ImageGeneratorOptions<T>) {\n super(board, options);\n }\n\n canDraw(element: T, data: ViewContainerRef): boolean {\n return !!this.options.getImageItem(element);\n }\n\n draw(element: T, viewContainerRef: ViewContainerRef): SVGGElement {\n const g = createG();\n const foreignRectangle = this.options.getRectangle(element);\n this.foreignObject = createForeignObject(foreignRectangle.x, foreignRectangle.y, foreignRectangle.width, foreignRectangle.height);\n g.append(this.foreignObject);\n const componentType = (this.board as PlaitOptionsBoard).getPluginOptions<WithCommonPluginOptions>(WithCommonPluginKey)\n .imageComponentType;\n if (!componentType) {\n throw new Error('Not implement ImageBaseComponent error.');\n }\n this.componentRef = viewContainerRef.createComponent(componentType);\n this.componentRef.instance.board = this.board;\n\n this.componentRef.instance.imageItem = this.options.getImageItem(element);\n this.componentRef.instance.element = element;\n this.componentRef.instance.getRectangle = () => {\n return this.options.getRectangle(element);\n };\n this.componentRef.instance.cdr.markForCheck();\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n return g;\n }\n\n updateImage(nodeG: SVGGElement, previous: T, current: T) {\n if (previous !== current && this.componentRef) {\n this.componentRef.instance.imageItem = this.options.getImageItem(current);\n this.componentRef!.instance.getRectangle = () => {\n return this.options.getRectangle(current);\n };\n }\n const currentForeignObject = this.options.getRectangle(current);\n updateForeignObject(\n this.g!,\n currentForeignObject.width,\n currentForeignObject.height,\n currentForeignObject.x,\n currentForeignObject.y\n );\n // solve image lose on move node\n if (this.foreignObject.children.length === 0) {\n this.foreignObject.append(this.componentRef!.instance.nativeElement);\n }\n this.componentRef?.instance.cdr.markForCheck();\n }\n\n destroy(): void {\n super.destroy();\n this.componentRef?.destroy();\n }\n}\n","import { Path, PlaitBoard, PlaitElement, Transforms, getSelectedElements } from '@plait/core';\n\nexport const setProperty = <T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n options: Partial<T>,\n callback?: (element: T, path: Path) => void\n) => {\n const selectedElements = getSelectedElements(board) as T[];\n selectedElements.forEach(element => {\n const path = PlaitBoard.findPath(board, element);\n if (callback) {\n callback(element, path);\n } else {\n Transforms.setNode(board, options, path);\n }\n });\n};\n\nconst setStrokeStyle = (board: PlaitBoard, strokeStyle: string) => {\n setProperty(board, { strokeStyle });\n};\n\nconst setFillColor = (board: PlaitBoard, fill: string) => {\n setProperty(board, { fill });\n};\n\nconst setStrokeColor = (board: PlaitBoard, strokeColor: string) => {\n setProperty(board, { strokeColor });\n};\n\nconst setStrokeWidth = (board: PlaitBoard, strokeWidth: number) => {\n setProperty(board, { strokeWidth });\n};\n\nexport const PropertyTransforms = {\n setFillColor,\n setStrokeStyle,\n setProperty,\n setStrokeWidth,\n setStrokeColor\n};\n","import { Point } from '@plait/core';\n\nexport const normalizeShapePoints = (points: [Point, Point], shift: boolean = false): [Point, Point] => {\n let start = points[0];\n let end = points[1];\n if (shift) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n const edge = Math.max(height, width);\n end = [start[0] + (end[0] > start[0] ? edge : -edge), start[1] + (end[1] > start[1] ? edge : -edge)];\n }\n\n const leftTopPoint: Point = [Math.min(start[0], end[0]), Math.min(start[1], end[1])];\n let rightBottomPoint: Point = [Math.max(start[0], end[0]), Math.max(start[1], end[1])];\n\n return [leftTopPoint, rightBottomPoint];\n};\n","import { Path, PlaitBoard, PlaitElement, Point, RectangleClient } from '@plait/core';\nimport { ResizeCursorClass, ResizeHandle } from '../constants/resize';\n\nexport interface ResizeRef<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n path: Path;\n handle: K;\n}\n\nconst getResizeHandleByIndex = (index: number) => {\n switch (index) {\n case 0:\n return ResizeHandle.nw;\n case 1:\n return ResizeHandle.ne;\n case 2:\n return ResizeHandle.se;\n case 3:\n return ResizeHandle.sw;\n case 4:\n return ResizeHandle.n;\n case 5:\n return ResizeHandle.e;\n case 6:\n return ResizeHandle.s;\n case 7:\n return ResizeHandle.w;\n default:\n return null;\n }\n};\n\nconst getResizeCursorClassByIndex = (index: number) => {\n switch (index) {\n case 0:\n case 2:\n return ResizeCursorClass.nwse;\n case 1:\n case 3:\n return ResizeCursorClass.nesw;\n case 4:\n case 6:\n return ResizeCursorClass.ns;\n case 5:\n case 7:\n return ResizeCursorClass.ew;\n default:\n return null;\n }\n};\n\nexport const getRectangleResizeHandleRefs = (rectangle: RectangleClient, diameter: number) => {\n const corners = RectangleClient.getCornerPoints(rectangle);\n const refs = corners.map((corner, index: number) => {\n return {\n rectangle: {\n x: corner[0] - diameter / 2,\n y: corner[1] - diameter / 2,\n width: diameter,\n height: diameter\n },\n handle: getResizeHandleByIndex(index) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index) as ResizeCursorClass\n };\n });\n const rectangles = getResizeSideRectangles(corners, diameter / 2);\n refs.push(\n ...rectangles.map((rectangle, index) => {\n return {\n rectangle,\n handle: getResizeHandleByIndex(index + 4) as ResizeHandle,\n cursorClass: getResizeCursorClassByIndex(index + 4) as ResizeCursorClass\n };\n })\n );\n return refs;\n};\n\nconst getResizeSideRectangles = (cornerPoints: Point[], offset: number): RectangleClient[] => {\n const result = [];\n for (let i = 0; i < cornerPoints.length; i++) {\n let rectangle = RectangleClient.toRectangleClient([cornerPoints[i], cornerPoints[(i + 1) % 4]]);\n const arr = new Array(2).fill(0);\n arr[(i + 1) % 2] = offset / 2;\n rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);\n result.push(rectangle);\n }\n return result;\n};\n\nexport const IS_RESIZING = new WeakMap<PlaitBoard, ResizeRef<any, any>>();\n\nexport const isResizing = (board: PlaitBoard) => {\n return !!IS_RESIZING.get(board);\n};\n\nexport const isResizingByCondition = <T extends PlaitElement, K>(board: PlaitBoard, match: (resizeRef: ResizeRef<T, K>) => boolean) => {\n return isResizing(board) && match(IS_RESIZING.get(board)!);\n};\n\nexport const addResizing = <T extends PlaitElement, K>(board: PlaitBoard, resizeRef: ResizeRef<T, K>, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);\n IS_RESIZING.set(board, resizeRef);\n};\n\nexport const removeResizing = (board: PlaitBoard, key: string) => {\n PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);\n IS_RESIZING.delete(board);\n};\n","import {\n MERGING,\n PRESS_AND_MOVE_BUFFER,\n Path,\n PlaitBoard,\n PlaitElement,\n PlaitPointerType,\n Point,\n distanceBetweenPointAndPoint,\n isMainPointer,\n preventTouchMove,\n handleTouchTarget,\n throttleRAF,\n toPoint,\n transformPoint\n} from '@plait/core';\nimport { ResizeHandle, ResizeCursorClass } from '../constants/resize';\nimport { ResizeRef, addResizing, isResizing, removeResizing } from '../utils/resize';\n\nexport interface WithResizeOptions<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n key: string;\n canResize: () => boolean;\n detect: (point: Point) => ResizeDetectResult<T, K> | null;\n onResize: (resizeRef: ResizeRef<T, K>, resizeState: ResizeState) => void;\n endResize?: (resizeRef: ResizeRef<T, K>) => void;\n}\n\nexport interface ResizeDetectResult<T extends PlaitElement = PlaitElement, K = ResizeHandle> {\n element: T;\n handle: K;\n cursorClass?: ResizeCursorClass;\n}\n\nexport interface ResizeState {\n offsetX: number;\n offsetY: number;\n endTransformPoint: Point;\n}\n\nconst generalCanResize = (board: PlaitBoard, event: PointerEvent) => {\n return (\n PlaitBoard.isReadonly(board) ||\n PlaitBoard.hasBeenTextEditing(board) ||\n !PlaitBoard.isPointer(board, PlaitPointerType.hand) ||\n !isMainPointer(event)\n );\n};\n\nexport const withResize = <T extends PlaitElement = PlaitElement, K = ResizeHandle>(\n board: PlaitBoard,\n options: WithResizeOptions<T, K>\n) => {\n const { pointerDown, pointerMove, globalPointerUp } = board;\n let resizeDetectResult: ResizeDetectResult<T, K> | null = null;\n let resizeRef: ResizeRef<T, K> | null = null;\n let startPoint: Point | null = null;\n let hoveDetectResult: ResizeDetectResult<T, K> | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerDown(event);\n return;\n }\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (resizeDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${resizeDetectResult.cursorClass}`);\n }\n startPoint = [event.x, event.y];\n resizeRef = {\n path: PlaitBoard.findPath(board, resizeDetectResult.element),\n element: resizeDetectResult.element,\n handle: resizeDetectResult.handle\n };\n preventTouchMove(board, event, true);\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!options.canResize() || !generalCanResize(board, event)) {\n pointerMove(event);\n return;\n }\n if (startPoint && resizeDetectResult && !isResizing(board)) {\n // prevent text from being selected\n event.preventDefault();\n\n const endPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const distance = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n if (distance > PRESS_AND_MOVE_BUFFER) {\n addResizing(board, resizeRef!, options.key);\n }\n }\n\n if (isResizing(board) && startPoint) {\n // prevent text from being selected\n event.preventDefault();\n const endTransformPoint = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n throttleRAF(() => {\n const endPoint = [event.x, event.y];\n if (startPoint && resizeRef) {\n handleTouchTarget(board);\n const offsetX = endPoint[0] - startPoint[0];\n const offsetY = endPoint[1] - startPoint[1];\n options.onResize(resizeRef, { offsetX, offsetY, endTransformPoint });\n MERGING.set(board, true);\n }\n });\n return;\n } else {\n const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));\n const resizeDetectResult = options.detect(point);\n if (resizeDetectResult) {\n if (hoveDetectResult && resizeDetectResult.cursorClass !== hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = resizeDetectResult;\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.add(`${hoveDetectResult.cursorClass}`);\n }\n } else {\n if (hoveDetectResult) {\n if (hoveDetectResult.cursorClass) {\n PlaitBoard.getBoardContainer(board).classList.remove(`${hoveDetectResult.cursorClass}`);\n }\n hoveDetectResult = null;\n }\n }\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n globalPointerUp(event);\n if (isResizing(board) || resizeDetectResult) {\n options.endResize && options.endResize(resizeRef!);\n removeResizing(board, options.key);\n startPoint = null;\n resizeDetectResult = null;\n resizeRef = null;\n MERGING.set(board, false);\n preventTouchMove(board, event, false);\n }\n };\n\n return board;\n};\n","import { Direction, Point, PointOfRectangle, Vector, distanceBetweenPointAndPoint } from '@plait/core';\n\nconst handleDirectionFactors = {\n [Direction.left]: { x: -1, y: 0 },\n [Direction.right]: { x: 1, y: 0 },\n [Direction.top]: { x: 0, y: -1 },\n [Direction.bottom]: { x: 0, y: 1 }\n};\n\nexport function getDirectionByPointOfRectangle(point: PointOfRectangle): Direction | undefined {\n if (point[0] === 0) {\n return Direction.left;\n }\n if (point[0] === 1) {\n return Direction.right;\n }\n if (point[1] === 0) {\n return Direction.top;\n }\n if (point[1] === 1) {\n return Direction.bottom;\n }\n return undefined;\n}\n\n/**\n * this function accepts vector parameter, the vector parameter vector is based on the screen coordinate system\n * vector[0] and vector[1] are the x and y components of the vector respectively.\n * if the vector has only one direction, the function returns a string in that direction, such as 'right', 'top', 'bottom' or 'left'.\n * if the vector has two directions, the function will return the string in which direction it is closer.\n */\nexport function getDirectionByVector(vector: Vector): Direction | null {\n const x = vector[0];\n const y = vector[1];\n if (x === 0 && y === 0) {\n return null;\n }\n if (x === 0) {\n return y > 0 ? Direction.bottom : Direction.top;\n }\n if (y === 0) {\n return x > 0 ? Direction.right : Direction.left;\n }\n const angle = Math.atan2(y, x);\n if (angle > -Math.PI / 4 && angle <= Math.PI / 4) {\n return Direction.right;\n } else if (angle > Math.PI / 4 && angle <= (3 * Math.PI) / 4) {\n return Direction.bottom;\n } else if (angle > (-3 * Math.PI) / 4 && angle <= -Math.PI / 4) {\n return Direction.top;\n } else {\n return Direction.left;\n }\n}\n\nexport function getPointByVector(point: Point, vector: Vector, offset: number): Point {\n const distance = Math.hypot(vector[0], vector[1]);\n return [point[0] + (vector[0] / distance) * offset, point[1] + (vector[1] / distance) * offset];\n}\n\nexport function rotateVectorAnti90(vector: Vector): Vector {\n const x = vector[0];\n const y = vector[1];\n const rotatedX = y;\n const rotatedY = -x;\n return [rotatedX, rotatedY];\n}\n\nexport function getDirectionBetweenPointAndPoint(source: Point, target: Point) {\n if (source[0] === target[0]) {\n if (source[1] >= target[1]) {\n return Direction.top;\n } else {\n return Direction.bottom;\n }\n }\n if (source[1] === target[1]) {\n if (source[0] >= target[0]) {\n return Direction.left;\n } else {\n return Direction.right;\n }\n }\n throw new Error('can not match direction');\n}\n\nexport function getDirectionFactor(direction: Direction) {\n return handleDirectionFactors[direction];\n}\n\nexport function getFactorByPoints(source: Point, target: Point) {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n if (Point.isEquals(source, target)) {\n return {\n x: 1,\n y: 1\n };\n }\n return {\n x: (target[0] - source[0]) / distance,\n y: (target[1] - source[1]) / distance\n };\n}\n","import { Direction, Point, distanceBetweenPointAndPoint } from '@plait/core';\nimport { getDirectionFactor } from './direction';\n\nexport function getOppositeDirection(direction: Direction) {\n switch (direction) {\n case Direction.left:\n return Direction.right;\n case Direction.right:\n return Direction.left;\n case Direction.top:\n return Direction.bottom;\n case Direction.bottom:\n return Direction.top;\n }\n}\n\nexport const getPoints = (source: Point, sourcePosition: Direction, target: Point, targetPosition: Direction, offset: number) => {\n const sourceDir = getDirectionFactor(sourcePosition);\n const targetDir = getDirectionFactor(targetPosition);\n const sourceGapped: Point = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];\n const targetGapped: Point = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];\n const dir = getDirection(sourceGapped, sourcePosition, targetGapped);\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n\n let points: Point[] = [];\n let centerX, centerY;\n const [defaultCenterX, defaultCenterY] = getEdgeCenter({\n sourceX: source[0],\n sourceY: source[1],\n targetX: target[0],\n targetY: target[1]\n });\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = defaultCenterX;\n centerY = defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit: Point[] = [\n [centerX, sourceGapped[1]],\n [centerX, targetGapped[1]]\n ];\n // |\n // ---\n // |\n const horizontalSplit: Point[] = [\n [sourceGapped[0], centerY],\n [targetGapped[0], centerY]\n ];\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n } else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n } else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget: Point[] = [[sourceGapped[0], targetGapped[1]]];\n const targetSource: Point[] = [[targetGapped[0], sourceGapped[1]]];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n } else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n\n // these are conditions for handling mixed handle positions like right -> bottom for example\n let flipSourceTarget;\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessor === 'x' ? 'y' : 'x'];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n flipSourceTarget =\n (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n }\n return [source, sourceGapped, ...points, targetGapped, target];\n};\n\nexport const getDirection = (source: Point, sourcePosition = Direction.bottom, target: Point) => {\n if (sourcePosition === Direction.left || sourcePosition === Direction.right) {\n return source[0] < target[0] ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source[1] < target[1] ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\n\nexport function getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY\n}: {\n sourceX: number;\n sourceY: number;\n targetX: number;\n targetY: number;\n}): [number, number, number, number] {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n\n return [centerX, centerY, xOffset, yOffset];\n}\n\nexport function getPointOnPolyline(points: Point[], ratio: number) {\n const totalLength = calculatePolylineLength(points);\n const targetDistance = totalLength * ratio;\n\n let accumulatedDistance = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);\n\n if (accumulatedDistance + segmentLength >= targetDistance) {\n const remainingDistance = targetDistance - accumulatedDistance;\n const ratioInSegment = remainingDistance / segmentLength;\n\n const targetX = x1 + (x2 - x1) * ratioInSegment;\n const targetY = y1 + (y2 - y1) * ratioInSegment;\n return [targetX, targetY];\n }\n\n accumulatedDistance += segmentLength;\n }\n\n return points[points.length - 1];\n}\n\nexport function calculatePolylineLength(points: Point[]) {\n let length = 0;\n for (let i = 0; i < points.length - 1; i++) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[i + 1];\n length += distanceBetweenPointAndPoint(x1, y1, x2, y2);\n }\n return length;\n}\n\nexport function getRatioByPoint(points: Point[], point: Point) {\n const totalLength = calculatePolylineLength(points);\n\n let distance = 0;\n\n for (let i = 0; i < points.length - 1; i++) {\n const isOverlap = isPointOnLineSegment(point, points[i], points[i + 1]);\n\n if (isOverlap) {\n distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);\n return distance / totalLength;\n } else {\n distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);\n }\n }\n throw new Error('Cannot get ratio by point');\n}\n\nexport function isPointOnLineSegment(point: Point, startPoint: Point, endPoint: Point) {\n const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);\n const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);\n\n const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);\n\n return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;\n}\n\nexport const removeDuplicatePoints = (points: Point[]) => {\n const newArray: Point[] = [];\n points.forEach(point => {\n const index = newArray.findIndex(otherPoint => {\n return Point.isEquals(point, otherPoint);\n });\n if (index === -1) newArray.push(point);\n });\n return newArray;\n};\n\nexport const getExtendPoint = (source: Point, target: Point, extendDistance: number): Point => {\n const distance = distanceBetweenPointAndPoint(...source, ...target);\n const isEqual = Point.isEquals(source, target);\n const sin = isEqual ? 1 : (target[1] - source[1]) / distance;\n const cos = isEqual ? 1 : (target[0] - source[0]) / distance;\n return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];\n};\n","import { hotkeys } from '@plait/core';\nimport { isKeyHotkey } from 'is-hotkey';\n\nexport function isVirtualKey(e: KeyboardEvent) {\n const isMod = e.ctrlKey || e.metaKey;\n const isAlt = isKeyHotkey('alt', e);\n const isShift = isKeyHotkey('shift', e);\n const isCapsLock = e.key.includes('CapsLock');\n const isTab = e.key.includes('Tab');\n const isEsc = e.key.includes('Escape');\n const isF = e.key.startsWith('F');\n const isArrow = e.key.includes('Arrow') ? true : false;\n return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;\n}\n\nexport const isExpandHotkey = (event: KeyboardEvent) => {\n return isKeyHotkey('mod+/', event);\n};\n\nexport const isTabHotkey = (event: KeyboardEvent) => {\n return event.key === 'Tab';\n};\n\nexport const isEnterHotkey = (event: KeyboardEvent) => {\n return event.key === 'Enter';\n};\n\nexport const isSpaceHotkey = (event: KeyboardEvent) => {\n return event.code === 'Space';\n};\n\nexport const isDelete = (event: KeyboardEvent) => {\n return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);\n};\n","import { Point } from '@plait/core';\n\nexport const getRectangleByPoints = (points: Point[]) => {\n let minX = Infinity,\n maxX = -Infinity,\n minY = Infinity,\n maxY = -Infinity;\n points.forEach(point => {\n minX = Math.min(point[0], minX);\n maxX = Math.max(point[0], maxX);\n minY = Math.min(point[1], minY);\n maxY = Math.max(point[1], maxY);\n });\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n};\n","import { PlaitBoard } from '@plait/core';\n\nexport enum BoardCreationMode {\n 'dnd' = 'dnd',\n 'drawing' = 'drawing'\n}\n\nconst BOARD_TO_CREATION_MODE: WeakMap<PlaitBoard, BoardCreationMode> = new WeakMap();\n\nexport const getCreationMode = (board: PlaitBoard) => {\n return BOARD_TO_CREATION_MODE.get(board);\n};\n\nexport const setCreationMode = (board: PlaitBoard, mode: BoardCreationMode) => {\n BOARD_TO_CREATION_MODE.set(board, mode);\n};\n\nexport const isDndMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.dnd;\n};\n\nexport const isDrawingMode = (board: PlaitBoard) => {\n return getCreationMode(board) === BoardCreationMode.drawing;\n};\n","import { PlaitElement } from '@plait/core';\nimport { CommonPluginElement } from '../core/plugin-element';\n\nexport const getTextManages = (element: PlaitElement) => {\n const component = PlaitElement.getComponent(element) as CommonPluginElement;\n return component.getTextManages();\n};\n\nexport const getTextEditors = (element: PlaitElement) => {\n return getTextManages(element).map(manage => {\n return manage.componentRef.instance.editor;\n });\n};\n","import { ComponentType, PlaitBoard, PlaitContextService, PlaitElement } from '@plait/core';\nimport { ImageBaseComponent } from '../core/image-base.component';\n\nexport interface CommonImageItem {\n url: string;\n width: number;\n height: number;\n}\n\nexport interface WithCommonPluginOptions {\n imageComponentType?: ComponentType<ImageBaseComponent>;\n}\n\nexport const selectImage = (\n board: PlaitBoard,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void,\n acceptImageTypes: string[] = ['png', 'jpeg', 'gif', 'bmp']\n) => {\n const inputFile = document.createElement('input');\n inputFile.setAttribute('type', 'file');\n const acceptImageTypesString = '.' + acceptImageTypes.join(',.');\n inputFile.setAttribute('accept', acceptImageTypesString);\n inputFile.onchange = (event: Event) => {\n buildImage(board, (event.target as any).files[0], defaultImageWidth, handle);\n };\n inputFile.click();\n};\n\nexport const buildImage = async (\n board: PlaitBoard,\n imageFile: File,\n defaultImageWidth: number,\n handle: (commonImage: CommonImageItem) => void\n) => {\n let width = 0,\n height = 0;\n await getImageSize(imageFile, defaultImageWidth).then((value: { width: number; height: number }) => {\n width = value.width;\n height = value.height;\n });\n\n let imageItem = null;\n const url = URL.createObjectURL(imageFile);\n const context = PlaitBoard.getComponent(board).viewContainerRef.injector.get(PlaitContextService);\n context.setUploadingFile({ url, file: imageFile });\n\n imageItem = {\n url,\n width,\n height\n };\n handle(imageItem);\n};\n\nfunction getImageSize(file: File, defaultImageWidth: number): Promise<{ width: number; height: number }> {\n return new Promise((resolve, reject) => {\n const image = new Image();\n image.src = URL.createObjectURL(file);\n\n image.onload = function() {\n const width = defaultImageWidth;\n const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;\n resolve(\n image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight }\n );\n };\n });\n}\n\nconst BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap<PlaitBoard, PlaitElement>();\n\nexport const getElementOfFocusedImage = (board: PlaitBoard) => {\n return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);\n};\n\nexport const addElementOfFocusedImage = (board: PlaitBoard, element: PlaitElement) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);\n};\n\nexport const removeElementOfFocusedImage = (board: PlaitBoard) => {\n BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);\n};","import { PointNode } from './graph';\n\nexport class PriorityQueue {\n list: { node: PointNode; priority: number }[];\n\n constructor() {\n this.list = [];\n }\n\n enqueue(item: { node: PointNode; priority: number }) {\n this.list.push(item);\n this.list = this.list.sort((item1, item2) => item1.priority - item2.priority);\n }\n\n dequeue() {\n return this.list.shift();\n }\n}\n","import { Point } from '@plait/core';\nimport { PointGraph, PointNode } from './data-structures/graph';\nimport { PriorityQueue } from './data-structures/priority-queue';\n\nexport class AStar {\n cameFrom: Map<PointNode, PointNode>;\n\n constructor(private graph: PointGraph) {\n this.cameFrom = new Map<PointNode, PointNode>();\n }\n\n heuristic(a: Point, b: Point) {\n return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]);\n }\n\n search(start: Point, end: Point, previousStart: Point) {\n const frontier = new PriorityQueue();\n const startNode = this.graph.get(start);\n this.cameFrom = new Map<PointNode, PointNode>();\n const costSoFar = new Map<PointNode, number>();\n costSoFar.set(startNode!, 0);\n frontier.enqueue({ node: startNode!, priority: 0 });\n while (frontier.list.length > 0) {\n var current = frontier.dequeue();\n\n if (!current) {\n throw new Error(`can't find current`);\n }\n const currentPoint = current!.node.data;\n if (currentPoint[0] === end[0] && currentPoint[1] === end[1]) {\n break;\n }\n current.node.adjacentNodes.forEach(next => {\n let newCost = costSoFar.get(current!.node)! + this.heuristic(next.data, current!.node.data);\n const previousNode = this.cameFrom.get(current!.node);\n // 拐点权重\n const previousPoint = previousNode ? previousNode.data : previousStart;\n const x = previousPoint[0] === current?.node.data[0] && previousPoint[0] === next.data[0];\n const y = previousPoint[1] === current?.node.data[1] && previousPoint[1] === next.data[1];\n if (!x && !y) {\n newCost = newCost + 1;\n }\n if (!costSoFar.has(next) || (costSoFar.get(next) && newCost < costSoFar.get(next)!)) {\n costSoFar.set(next, newCost);\n const priority = newCost + this.heuristic(next.data, end);\n frontier.enqueue({ node: next, priority });\n this.cameFrom.set(next, current!.node);\n }\n });\n }\n }\n\n getRoute(start: Point, end: Point) {\n const result = [];\n let temp = end;\n while (temp[0] !== start[0] || temp[1] !== start[1]) {\n const node = this.graph.get(temp);\n const preNode = this.cameFrom.get(node!);\n result.unshift(preNode!.data);\n temp = preNode!.data;\n }\n return result;\n }\n}\n","import { Point, distanceBetweenPointAndPoint } from '@plait/core';\n\nexport class PointNode {\n public distance = Number.MAX_SAFE_INTEGER;\n public adjacentNodes: PointNode[] = [];\n constructor(public data: Point) {}\n}\n\nexport class PointGraph {\n private index: { [x: string]: { [y: string]: PointNode } } = {};\n\n add(p: Point) {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (!(xs in this.index)) {\n this.index[xs] = {};\n }\n if (!(ys in this.index[xs])) {\n this.index[xs][ys] = new PointNode(p);\n }\n }\n connect(a: Point, b: Point) {\n const nodeA = this.get(a);\n const nodeB = this.get(b);\n\n if (!nodeA || !nodeB) {\n throw new Error(`A point was not found`);\n }\n\n nodeA.adjacentNodes.push(nodeB);\n }\n\n has(p: Point): boolean {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n return xs in this.index && ys in this.index[xs];\n }\n\n get(p: Point): PointNode | null {\n const x = p[0];\n const y = p[1];\n const xs = x.toString(),\n ys = y.toString();\n\n if (xs in this.index && ys in this.index[xs]) {\n return this.index[xs][ys];\n }\n\n return null;\n }\n}\n","import { Direction, Point, RectangleClient, downScale } from '@plait/core';\nimport { removeDuplicatePoints } from '../utils';\nimport { DEFAULT_ROUTE_MARGIN } from '../constants';\nimport { AStar, PointGraph } from '../algorithms';\n\nexport interface ElbowLineRouteOptions {\n sourcePoint: Point;\n nextSourcePoint: Point;\n sourceRectangle: RectangleClient;\n sourceOuterRectangle: RectangleClient;\n targetPoint: Point;\n nextTargetPoint: Point;\n targetOuterRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface RouteAdjustOptions {\n xAxis?: number;\n yAxis?: number;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport interface AdjustOptions {\n parallelPaths: [Point, Point][];\n pointOfHit: Point;\n sourceRectangle: RectangleClient;\n targetRectangle: RectangleClient;\n}\n\nexport const generateElbowLineRoute = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint } = options;\n const points = getGraphPoints(options);\n const graph = createGraph(points);\n const aStar = new AStar(graph);\n aStar.search(nextSourcePoint, nextTargetPoint, options.sourcePoint);\n let route = aStar.getRoute(nextSourcePoint, nextTargetPoint);\n route = [options.sourcePoint, ...route, nextTargetPoint, options.targetPoint];\n const isHitX = RectangleClient.isHitX(options.sourceOuterRectangle, options.targetOuterRectangle);\n const isHitY = RectangleClient.isHitY(options.sourceOuterRectangle, options.targetOuterRectangle);\n const xAxis = isHitX ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, false);\n const yAxis = isHitY ? undefined : RectangleClient.getGapCenter(options.sourceOuterRectangle, options.targetOuterRectangle, true);\n route = routeAdjust(route, { xAxis, yAxis, sourceRectangle: options.sourceRectangle, targetRectangle: options.targetRectangle });\n return route;\n};\n\nexport const routeAdjust = (path: Point[], options: RouteAdjustOptions) => {\n // 基于 middleX/middleY 中线纠正 path\n // 1. 找垂直/水平的线段\n // 2. 找到和middleX/middleY相交的点\n // 3. 基于垂直/水平的线段分别和相交点构建矩形\n // 4. 判断矩形相交\n // 5. 处理 path\n const { sourceRectangle, targetRectangle, xAxis, yAxis } = options;\n if (xAxis !== undefined) {\n const optionsX = getAdjustOptions(path, xAxis, true);\n const resultX =\n optionsX.pointOfHit &&\n adjust(path, { parallelPaths: optionsX.parallelPaths, pointOfHit: optionsX.pointOfHit, sourceRectangle, targetRectangle });\n if (resultX) {\n path = resultX;\n }\n }\n if (yAxis !== undefined) {\n const optionsY = getAdjustOptions(path, yAxis, false);\n const resultY =\n optionsY.pointOfHit &&\n adjust(path, { parallelPaths: optionsY.parallelPaths, pointOfHit: optionsY.pointOfHit, sourceRectangle, targetRectangle });\n if (resultY) {\n path = resultY;\n }\n }\n return path;\n};\n\nconst adjust = (route: Point[], options: AdjustOptions) => {\n const { parallelPaths, pointOfHit, sourceRectangle, targetRectangle } = options;\n let result = null;\n parallelPaths.forEach(parallelPath => {\n // 构建矩形\n const tempRect = RectangleClient.toRectangleClient([pointOfHit, parallelPath[0], parallelPath[1]]);\n if (!RectangleClient.isHit(tempRect, sourceRectangle) && !RectangleClient.isHit(tempRect, targetRectangle)) {\n const getCornerCount = (path: Point[]) => {\n let cornerCount = 0;\n for (let index = 1; index < path.length - 1; index++) {\n const pre = path[index - 1];\n const current = path[index];\n const next = path[index + 1];\n if (\n pre &&\n current &&\n next &&\n !(\n (downScale(current[0]) === downScale(pre[0]) && downScale(current[0]) === downScale(next[0])) ||\n (downScale(current[1]) === downScale(pre[1]) && downScale(current[1]) === downScale(next[1]))\n )\n ) {\n cornerCount++;\n }\n }\n return cornerCount;\n };\n const tempCorners = RectangleClient.getCornerPoints(tempRect);\n const indexRangeInPath: number[] = [];\n const indexRangeInCorner: number[] = [];\n route.forEach((point, index) => {\n const cornerResult = tempCorners.findIndex(\n corner => Math.floor(corner[0]) === Math.floor(point[0]) && Math.floor(corner[1]) === Math.floor(point[1])\n );\n if (cornerResult !== -1) {\n indexRangeInPath.push(index);\n indexRangeInCorner.push(cornerResult);\n }\n });\n const newPath = [...route];\n const missCorner = tempCorners.find((c, index) => !indexRangeInCorner.includes(index)) as Point;\n const removeLength = Math.abs(indexRangeInPath[0] - indexRangeInPath[indexRangeInPath.length - 1]) + 1;\n newPath.splice(indexRangeInPath[0] + 1, removeLength - 2, missCorner);\n const cornerCount = getCornerCount([...route]);\n const newCornerCount = getCornerCount([...newPath]);\n if (newCornerCount <= cornerCount) {\n result = newPath;\n }\n }\n return null;\n });\n return result;\n};\n\nconst getAdjustOptions = (path: Point[], middle: number, isHorizontal: boolean) => {\n const parallelPaths: [Point, Point][] = [];\n let start: null | Point = null;\n let pointOfHit: null | Point = null;\n const axis = isHorizontal ? 0 : 1;\n\n for (let index = 0; index < path.length; index++) {\n const previous = path[index - 1];\n const current = path[index];\n if (start === null && previous && previous[axis] === current[axis]) {\n start = previous;\n }\n if (start !== null) {\n if (previous[axis] !== current[axis]) {\n parallelPaths.push([start, previous]);\n start = null;\n }\n }\n if (current[axis] === middle) {\n pointOfHit = current;\n }\n }\n if (start) {\n parallelPaths.push([start, path[path.length - 1]]);\n }\n return { pointOfHit, parallelPaths };\n};\n\nexport const getGraphPoints = (options: ElbowLineRouteOptions) => {\n const { nextSourcePoint, nextTargetPoint, sourceOuterRectangle, targetOuterRectangle } = options;\n const x: number[] = [];\n const y: number[] = [];\n let result: Point[] = [];\n\n [sourceOuterRectangle, targetOuterRectangle].forEach(rectangle => {\n x.push(rectangle.x, rectangle.x + rectangle.width / 2, rectangle.x + rectangle.width);\n y.push(rectangle.y, rectangle.y + rectangle.height / 2, rectangle.y + rectangle.height);\n });\n const rectanglesX = [\n sourceOuterRectangle.x,\n sourceOuterRectangle.x + sourceOuterRectangle.width,\n targetOuterRectangle.x,\n targetOuterRectangle.x + targetOuterRectangle.width\n ].sort((a, b) => a - b);\n x.push((rectanglesX[1] + rectanglesX[2]) / 2, nextSourcePoint[0], nextTargetPoint[0]);\n const rectanglesY = [\n sourceOuterRectangle.y,\n sourceOuterRectangle.y + sourceOuterRectangle.height,\n targetOuterRectangle.y,\n targetOuterRectangle.y + targetOuterRectangle.height\n ].sort((a, b) => a - b);\n y.push((rectanglesY[1] + rectanglesY[2]) / 2, nextSourcePoint[1], nextTargetPoint[1]);\n for (let i = 0; i < x.length; i++) {\n for (let j = 0; j < y.length; j++) {\n const point: Point = [x[i], y[j]];\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n if (!isInSource && !isInTarget) {\n result.push(point);\n }\n }\n }\n result = removeDuplicatePoints(result).filter(point => {\n const isInSource = RectangleClient.isPointInRectangle(sourceOuterRectangle, point);\n const isInTarget = RectangleClient.isPointInRectangle(targetOuterRectangle, point);\n return !isInSource && !isInTarget;\n });\n return result;\n};\n\nexport const createGraph = (points: Point[]) => {\n const graph = new PointGraph();\n const Xs: number[] = [];\n const Ys: number[] = [];\n points.forEach(p => {\n const x = p[0],\n y = p[1];\n if (Xs.indexOf(x) < 0) Xs.push(x);\n if (Ys.indexOf(y) < 0) Ys.push(y);\n graph.add(p);\n });\n Xs.sort((a, b) => a - b);\n Ys.sort((a, b) => a - b);\n const inHotIndex = (p: Point): boolean => graph.has(p);\n for (let i = 0; i < Xs.length; i++) {\n for (let j = 0; j < Ys.length; j++) {\n const point: Point = [Xs[i], Ys[j]];\n if (!inHotIndex(point)) continue;\n if (i > 0) {\n const otherPoint: Point = [Xs[i - 1], Ys[j]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n if (j > 0) {\n const otherPoint: Point = [Xs[i], Ys[j - 1]];\n if (inHotIndex(otherPoint)) {\n graph.connect(otherPoint, point);\n graph.connect(point, otherPoint);\n }\n }\n }\n }\n return graph;\n};\n\nexport const reduceRouteMargin = (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {\n const defaultOffset = DEFAULT_ROUTE_MARGIN;\n let sourceOffset: number[] = new Array(4).fill(defaultOffset);\n let targetOffset: number[] = new Array(4).fill(defaultOffset);\n const sourceOuterRectangle = RectangleClient.inflate(sourceRectangle, defaultOffset * 2);\n const targetOuterRectangle = RectangleClient.inflate(targetRectangle, defaultOffset * 2);\n const isHit = RectangleClient.isHit(sourceOuterRectangle, targetOuterRectangle);\n if (isHit) {\n const leftToRight = sourceRectangle.x - (targetRectangle.x + targetRectangle.width);\n const rightToLeft = targetRectangle.x - (sourceRectangle.x + sourceRectangle.width);\n if (leftToRight > 0 && leftToRight < defaultOffset * 2) {\n const offset = leftToRight / 2;\n sourceOffset[3] = offset;\n targetOffset[1] = offset;\n }\n\n if (rightToLeft > 0 && rightToLeft < defaultOffset * 2) {\n const offset = rightToLeft / 2;\n targetOffset[3] = offset;\n sourceOffset[1] = offset;\n }\n\n const topToBottom = sourceRectangle.y - (targetRectangle.y + targetRectangle.height);\n const bottomToTop = targetRectangle.y - (sourceRectangle.y + sourceRectangle.height);\n if (topToBottom > 0 && topToBottom < defaultOffset * 2) {\n const offset = topToBottom / 2;\n sourceOffset[0] = offset;\n targetOffset[2] = offset;\n }\n if (bottomToTop > 0 && bottomToTop < defaultOffset * 2) {\n const offset = bottomToTop / 2;\n sourceOffset[2] = offset;\n targetOffset[0] = offset;\n }\n }\n return { sourceOffset, targetOffset };\n};\n\nexport const getNextPoint = (point: Point, outerRectangle: RectangleClient, direction: Direction): Point => {\n switch (direction) {\n case Direction.top: {\n return [point[0], outerRectangle.y];\n }\n case Direction.bottom: {\n return [point[0], outerRectangle.y + outerRectangle.height];\n }\n case Direction.right: {\n return [outerRectangle.x + outerRectangle.width, point[1]];\n }\n default: {\n return [outerRectangle.x, point[1]];\n }\n }\n};\n","import { PlaitBoard, PlaitElement, PlaitPluginElementComponent } from '@plait/core';\nimport { TextManage } from '@plait/text';\n\nexport abstract class CommonPluginElement<\n T extends PlaitElement = PlaitElement,\n K extends PlaitBoard = PlaitBoard\n> extends PlaitPluginElementComponent<T, K> {\n private textManages: TextManage[] = [];\n\n initializeTextManages(textManages: TextManage[]) {\n this.textManages = textManages;\n }\n\n getTextManages() {\n return this.textManages;\n }\n}\n","import { ChangeDetectorRef, Directive, ElementRef, Input, OnDestroy, OnInit } from '@angular/core';\nimport { ACTIVE_STROKE_WIDTH, PlaitBoard, PlaitElement, RectangleClient, getSelectedElements, isSelectionMoving } from '@plait/core';\nimport { ActiveGenerator } from '../generators';\nimport { CommonImageItem } from '../utils';\n\n@Directive({\n host: {\n class: 'plait-image-container'\n }\n})\nexport abstract class ImageBaseComponent implements OnInit, OnDestroy {\n _imageItem!: CommonImageItem;\n\n _isFocus!: boolean;\n\n initialized = false;\n\n activeGenerator!: ActiveGenerator;\n\n @Input()\n element!: PlaitElement;\n\n @Input()\n set imageItem(value: CommonImageItem) {\n this.afterImageItemChange(this._imageItem, value);\n this._imageItem = value;\n this.drawFocus();\n }\n\n get imageItem() {\n return this._imageItem;\n }\n\n @Input()\n board!: PlaitBoard;\n\n @Input()\n set isFocus(value: boolean) {\n this._isFocus = value;\n this.drawFocus();\n }\n\n get isFocus() {\n return this._isFocus;\n }\n\n get nativeElement() {\n return this.elementRef.nativeElement;\n }\n\n abstract afterImageItemChange(previous: CommonImageItem, current: CommonImageItem): void;\n\n @Input() getRectangle!: () => RectangleClient;\n\n @Input() hasResizeHandle!: () => boolean;\n\n constructor(protected elementRef: ElementRef<HTMLElement>, public cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.activeGenerator = new ActiveGenerator(this.board, {\n getStrokeWidth: () => {\n const selectedElements = getSelectedElements(this.board);\n if (!(selectedElements.length === 1 && !isSelectionMoving(this.board))) {\n return ACTIVE_STROKE_WIDTH;\n } else {\n return ACTIVE_STROKE_WIDTH;\n }\n },\n getStrokeOpacity: () => {\n const selectedElements = getSelectedElements(this.board);\n if ((selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length) {\n return 1;\n } else {\n return 0.5;\n }\n },\n getRectangle: () => {\n return this.getRectangle();\n },\n hasResizeHandle: () => {\n const selectedElements = getSelectedElements(this.board);\n return (selectedElements.length === 1 && !isSelectionMoving(this.board)) || !selectedElements.length;\n }\n });\n this.initialized = true;\n }\n\n drawFocus() {\n if (this.initialized) {\n const activeG = PlaitBoard.getElementActiveHost(this.board);\n this.activeGenerator.processDrawing({} as PlaitElement, activeG, { selected: this._isFocus });\n }\n }\n\n ngOnDestroy(): void {\n if (this.activeGenerator) {\n this.activeGenerator.destroy();\n }\n }\n}\n","/*\n * Public API Surface of utils\n */\n\nexport * from './constants';\nexport * from './generators';\nexport * from './transforms';\nexport * from './shapes';\nexport * from './plugins';\nexport * from './utils';\nexport * from './core/plugin-element';\nexport * from './core/image-base.component';\nexport * from './algorithms'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -15,5 +15,5 @@ export declare class ActiveGenerator<T extends PlaitElement = PlaitElement> exte
15
15
  hasResizeHandle: boolean;
16
16
  constructor(board: PlaitBoard, options: ActiveGeneratorOptions<T>);
17
17
  canDraw(element: T, data: ActiveGeneratorExtraData): boolean;
18
- baseDraw(element: T, data: ActiveGeneratorExtraData): SVGGElement;
18
+ draw(element: T, data: ActiveGeneratorExtraData): SVGGElement;
19
19
  }
@@ -6,11 +6,17 @@ export interface GeneratorOptions {
6
6
  export declare abstract class Generator<T extends PlaitElement = PlaitElement, K extends GeneratorExtraData = GeneratorExtraData, V extends GeneratorOptions = GeneratorOptions> {
7
7
  protected board: PlaitBoard;
8
8
  g?: SVGGElement;
9
- options?: V;
9
+ protected options?: V;
10
10
  constructor(board: PlaitBoard, options?: V);
11
- draw(element: T, parentG: SVGGElement, data?: K): void;
12
- abstract canDraw(element: T, data?: K): boolean;
13
- abstract baseDraw(element: T, data?: K): SVGGElement | undefined;
11
+ processDrawing(element: T, parentG: SVGGElement, data?: K): void;
12
+ /**
13
+ * abstract function
14
+ */
15
+ protected abstract canDraw(element: T, data?: K): boolean;
16
+ /**
17
+ * abstract function
18
+ */
19
+ protected abstract draw(element: T, data?: K): SVGGElement | undefined;
14
20
  destroy(): void;
15
21
  }
16
22
  export interface AfterDraw<T extends PlaitElement = PlaitElement> {
@@ -17,7 +17,7 @@ export declare class ImageGenerator<T extends PlaitElement = PlaitElement> exten
17
17
  componentRef: ComponentRef<ImageBaseComponent>;
18
18
  constructor(board: PlaitBoard, options: ImageGeneratorOptions<T>);
19
19
  canDraw(element: T, data: ViewContainerRef): boolean;
20
- baseDraw(element: T, viewContainerRef: ViewContainerRef): SVGGElement;
20
+ draw(element: T, viewContainerRef: ViewContainerRef): SVGGElement;
21
21
  updateImage(nodeG: SVGGElement, previous: T, current: T): void;
22
22
  destroy(): void;
23
23
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plait/common",
3
- "version": "0.32.0",
3
+ "version": "0.33.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^15.2.0",
6
6
  "@angular/core": "^15.2.0",
@@ -1,8 +1,9 @@
1
- import { PlaitBoard } from '@plait/core';
1
+ import { Path, PlaitBoard, PlaitElement } from '@plait/core';
2
+ export declare const setProperty: <T extends PlaitElement = PlaitElement>(board: PlaitBoard, options: Partial<T>, callback?: ((element: T, path: Path) => void) | undefined) => void;
2
3
  export declare const PropertyTransforms: {
3
4
  setFillColor: (board: PlaitBoard, fill: string) => void;
4
5
  setStrokeStyle: (board: PlaitBoard, strokeStyle: string) => void;
5
- setProperty: (board: PlaitBoard, options: any, callback?: ((component: import("@plait/core").PlaitPluginElementComponent<import("@plait/core").PlaitElement, PlaitBoard>, path: import("@plait/core").Path) => void) | undefined) => void;
6
+ setProperty: <T extends PlaitElement = PlaitElement>(board: PlaitBoard, options: Partial<T>, callback?: ((element: T, path: Path) => void) | undefined) => void;
6
7
  setStrokeWidth: (board: PlaitBoard, strokeWidth: number) => void;
7
8
  setStrokeColor: (board: PlaitBoard, strokeColor: string) => void;
8
9
  };
@@ -23,6 +23,7 @@ export interface AdjustOptions {
23
23
  targetRectangle: RectangleClient;
24
24
  }
25
25
  export declare const generateElbowLineRoute: (options: ElbowLineRouteOptions) => Point[];
26
+ export declare const routeAdjust: (path: Point[], options: RouteAdjustOptions) => Point[];
26
27
  export declare const getGraphPoints: (options: ElbowLineRouteOptions) => Point[];
27
28
  export declare const createGraph: (points: Point[]) => PointGraph;
28
29
  export declare const reduceRouteMargin: (sourceRectangle: RectangleClient, targetRectangle: RectangleClient) => {
@@ -1,15 +0,0 @@
1
- import { PlaitBoard, PlaitElement, Transforms, getSelectedElements } from '@plait/core';
2
- export const setProperty = (board, options, callback) => {
3
- const selectedElements = getSelectedElements(board);
4
- selectedElements.forEach(element => {
5
- const path = PlaitBoard.findPath(board, element);
6
- if (callback) {
7
- const component = PlaitElement.getComponent(element);
8
- callback(component, path);
9
- }
10
- else {
11
- Transforms.setNode(board, options, path);
12
- }
13
- });
14
- };
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy90cmFuc2Zvcm1zL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVEsVUFBVSxFQUFFLFlBQVksRUFBK0IsVUFBVSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNILE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBWSxFQUFFLFFBQXVFLEVBQUUsRUFBRTtJQUNwSSxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMvQixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLFFBQVEsRUFBRTtZQUNWLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckQsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0gsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQzVDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXRoLCBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBsYWl0UGx1Z2luRWxlbWVudENvbXBvbmVudCwgVHJhbnNmb3JtcywgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuZXhwb3J0IGNvbnN0IHNldFByb3BlcnR5ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBvcHRpb25zOiBhbnksIGNhbGxiYWNrPzogKGNvbXBvbmVudDogUGxhaXRQbHVnaW5FbGVtZW50Q29tcG9uZW50LCBwYXRoOiBQYXRoKSA9PiB2b2lkKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoZWxlbWVudCk7XG4gICAgICAgICAgICBjYWxsYmFjayhjb21wb25lbnQsIHBhdGgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCBvcHRpb25zLCBwYXRoKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiJdfQ==
@@ -1,2 +0,0 @@
1
- import { Path, PlaitBoard, PlaitPluginElementComponent } from '@plait/core';
2
- export declare const setProperty: (board: PlaitBoard, options: any, callback?: ((component: PlaitPluginElementComponent, path: Path) => void) | undefined) => void;