@plait/common 0.52.0 → 0.54.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.
- package/core/group.component.d.ts +18 -0
- package/esm2022/core/group.component.mjs +48 -0
- package/esm2022/core/image-base.component.mjs +2 -2
- package/esm2022/generators/generator.mjs +13 -4
- package/esm2022/generators/group.generator.mjs +21 -0
- package/esm2022/generators/image.generator.mjs +6 -2
- package/esm2022/plugins/index.mjs +2 -1
- package/esm2022/plugins/with-group.mjs +190 -0
- package/esm2022/transforms/align.mjs +21 -13
- package/esm2022/utils/elbow-line-route.mjs +21 -10
- package/esm2022/utils/index.mjs +1 -2
- package/esm2022/utils/resize.mjs +20 -2
- package/esm2022/utils/vector.mjs +11 -1
- package/fesm2022/plait-common.mjs +333 -31
- package/fesm2022/plait-common.mjs.map +1 -1
- package/generators/group.generator.d.ts +6 -0
- package/package.json +1 -1
- package/plugins/index.d.ts +1 -0
- package/plugins/with-group.d.ts +2 -0
- package/utils/elbow-line-route.d.ts +3 -3
- package/utils/index.d.ts +0 -1
- package/utils/resize.d.ts +2 -0
- package/utils/vector.d.ts +1 -0
- package/esm2022/utils/rotate.mjs +0 -7
- package/utils/rotate.d.ts +0 -2
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { OnInit, OnDestroy, ViewContainerRef, ChangeDetectorRef } from '@angular/core';
|
|
2
|
+
import { OnContextChanged, PlaitBoard, PlaitGroup, PlaitPluginElementContext } from '@plait/core';
|
|
3
|
+
import { GroupGenerator } from '../generators/group.generator';
|
|
4
|
+
import { ActiveGenerator } from '../generators';
|
|
5
|
+
import { CommonPluginElement } from './plugin-element';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export declare class GroupComponent extends CommonPluginElement<PlaitGroup, PlaitBoard> implements OnInit, OnDestroy, OnContextChanged<PlaitGroup, PlaitBoard> {
|
|
8
|
+
private viewContainerRef;
|
|
9
|
+
protected cdr: ChangeDetectorRef;
|
|
10
|
+
constructor(viewContainerRef: ViewContainerRef, cdr: ChangeDetectorRef);
|
|
11
|
+
activeGenerator: ActiveGenerator<PlaitGroup>;
|
|
12
|
+
groupGenerator: GroupGenerator;
|
|
13
|
+
initializeGenerator(): void;
|
|
14
|
+
ngOnInit(): void;
|
|
15
|
+
onContextChanged(value: PlaitPluginElementContext<PlaitGroup, PlaitBoard>, previous: PlaitPluginElementContext<PlaitGroup, PlaitBoard>): void;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GroupComponent, never>;
|
|
17
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GroupComponent, "plait-group", never, {}, {}, never, never, true, never>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
|
+
import { getElementsInGroup, getRectangleByGroup, isSelectedElementOrGroup, isSelectionMoving } from '@plait/core';
|
|
3
|
+
import { GroupGenerator } from '../generators/group.generator';
|
|
4
|
+
import { ActiveGenerator } from '../generators';
|
|
5
|
+
import { CommonPluginElement } from './plugin-element';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
export class GroupComponent extends CommonPluginElement {
|
|
8
|
+
constructor(viewContainerRef, cdr) {
|
|
9
|
+
super(cdr);
|
|
10
|
+
this.viewContainerRef = viewContainerRef;
|
|
11
|
+
this.cdr = cdr;
|
|
12
|
+
}
|
|
13
|
+
initializeGenerator() {
|
|
14
|
+
this.activeGenerator = new ActiveGenerator(this.board, {
|
|
15
|
+
getRectangle: (element) => {
|
|
16
|
+
return getRectangleByGroup(this.board, element);
|
|
17
|
+
},
|
|
18
|
+
getStrokeWidth: () => 0,
|
|
19
|
+
getStrokeOpacity: () => 0,
|
|
20
|
+
hasResizeHandle: () => {
|
|
21
|
+
return !isSelectionMoving(this.board);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
this.groupGenerator = new GroupGenerator(this.board);
|
|
25
|
+
}
|
|
26
|
+
ngOnInit() {
|
|
27
|
+
super.ngOnInit();
|
|
28
|
+
this.initializeGenerator();
|
|
29
|
+
}
|
|
30
|
+
onContextChanged(value, previous) {
|
|
31
|
+
const elementsInGroup = getElementsInGroup(this.board, value.element, false, true);
|
|
32
|
+
const isPartialSelectGroup = elementsInGroup.some(item => isSelectedElementOrGroup(this.board, item)) &&
|
|
33
|
+
!elementsInGroup.every(item => isSelectedElementOrGroup(this.board, item));
|
|
34
|
+
this.groupGenerator.processDrawing(value.element, this.g, isPartialSelectGroup);
|
|
35
|
+
}
|
|
36
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: GroupComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
37
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: GroupComponent, isStandalone: true, selector: "plait-group", usesInheritance: true, ngImport: i0, template: ``, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
38
|
+
}
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: GroupComponent, decorators: [{
|
|
40
|
+
type: Component,
|
|
41
|
+
args: [{
|
|
42
|
+
selector: 'plait-group',
|
|
43
|
+
template: ``,
|
|
44
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
45
|
+
standalone: true
|
|
46
|
+
}]
|
|
47
|
+
}], ctorParameters: () => [{ type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }] });
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb3JlL2dyb3VwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTBELHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzSCxPQUFPLEVBS0gsa0JBQWtCLEVBQ2xCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsaUJBQWlCLEVBQ3BCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQVF2RCxNQUFNLE9BQU8sY0FBZSxTQUFRLG1CQUEyQztJQUUzRSxZQUFvQixnQkFBa0MsRUFBWSxHQUFzQjtRQUNwRixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFESyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVksUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFFeEYsQ0FBQztJQU1ELG1CQUFtQjtRQUNmLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxlQUFlLENBQWEsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUMvRCxZQUFZLEVBQUUsQ0FBQyxPQUFtQixFQUFFLEVBQUU7Z0JBQ2xDLE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDdkIsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUN6QixlQUFlLEVBQUUsR0FBRyxFQUFFO2dCQUNsQixPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQ1osS0FBd0QsRUFDeEQsUUFBMkQ7UUFFM0QsTUFBTSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRixNQUFNLG9CQUFvQixHQUN0QixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4RSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDcEYsQ0FBQzs4R0F0Q1EsY0FBYztrR0FBZCxjQUFjLDhGQUpiLEVBQUU7OzJGQUlILGNBQWM7a0JBTjFCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFFBQVEsRUFBRSxFQUFFO29CQUNaLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NvbnRhaW5lclJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgT25Db250ZXh0Q2hhbmdlZCxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0R3JvdXAsXG4gICAgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCxcbiAgICBnZXRFbGVtZW50c0luR3JvdXAsXG4gICAgZ2V0UmVjdGFuZ2xlQnlHcm91cCxcbiAgICBpc1NlbGVjdGVkRWxlbWVudE9yR3JvdXAsXG4gICAgaXNTZWxlY3Rpb25Nb3Zpbmdcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgR3JvdXBHZW5lcmF0b3IgfSBmcm9tICcuLi9nZW5lcmF0b3JzL2dyb3VwLmdlbmVyYXRvcic7XG5pbXBvcnQgeyBBY3RpdmVHZW5lcmF0b3IgfSBmcm9tICcuLi9nZW5lcmF0b3JzJztcbmltcG9ydCB7IENvbW1vblBsdWdpbkVsZW1lbnQgfSBmcm9tICcuL3BsdWdpbi1lbGVtZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwbGFpdC1ncm91cCcsXG4gICAgdGVtcGxhdGU6IGBgLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBDb21tb25QbHVnaW5FbGVtZW50PFBsYWl0R3JvdXAsIFBsYWl0Qm9hcmQ+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25Db250ZXh0Q2hhbmdlZDxQbGFpdEdyb3VwLCBQbGFpdEJvYXJkPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLCBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgICAgICBzdXBlcihjZHIpO1xuICAgIH1cblxuICAgIGFjdGl2ZUdlbmVyYXRvciE6IEFjdGl2ZUdlbmVyYXRvcjxQbGFpdEdyb3VwPjtcblxuICAgIGdyb3VwR2VuZXJhdG9yITogR3JvdXBHZW5lcmF0b3I7XG5cbiAgICBpbml0aWFsaXplR2VuZXJhdG9yKCkge1xuICAgICAgICB0aGlzLmFjdGl2ZUdlbmVyYXRvciA9IG5ldyBBY3RpdmVHZW5lcmF0b3I8UGxhaXRHcm91cD4odGhpcy5ib2FyZCwge1xuICAgICAgICAgICAgZ2V0UmVjdGFuZ2xlOiAoZWxlbWVudDogUGxhaXRHcm91cCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRSZWN0YW5nbGVCeUdyb3VwKHRoaXMuYm9hcmQsIGVsZW1lbnQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFN0cm9rZVdpZHRoOiAoKSA9PiAwLFxuICAgICAgICAgICAgZ2V0U3Ryb2tlT3BhY2l0eTogKCkgPT4gMCxcbiAgICAgICAgICAgIGhhc1Jlc2l6ZUhhbmRsZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAhaXNTZWxlY3Rpb25Nb3ZpbmcodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyb3VwR2VuZXJhdG9yID0gbmV3IEdyb3VwR2VuZXJhdG9yKHRoaXMuYm9hcmQpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVHZW5lcmF0b3IoKTtcbiAgICB9XG5cbiAgICBvbkNvbnRleHRDaGFuZ2VkKFxuICAgICAgICB2YWx1ZTogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dDxQbGFpdEdyb3VwLCBQbGFpdEJvYXJkPixcbiAgICAgICAgcHJldmlvdXM6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQ8UGxhaXRHcm91cCwgUGxhaXRCb2FyZD5cbiAgICApIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHNJbkdyb3VwID0gZ2V0RWxlbWVudHNJbkdyb3VwKHRoaXMuYm9hcmQsIHZhbHVlLmVsZW1lbnQsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgY29uc3QgaXNQYXJ0aWFsU2VsZWN0R3JvdXAgPVxuICAgICAgICAgICAgZWxlbWVudHNJbkdyb3VwLnNvbWUoaXRlbSA9PiBpc1NlbGVjdGVkRWxlbWVudE9yR3JvdXAodGhpcy5ib2FyZCwgaXRlbSkpICYmXG4gICAgICAgICAgICAhZWxlbWVudHNJbkdyb3VwLmV2ZXJ5KGl0ZW0gPT4gaXNTZWxlY3RlZEVsZW1lbnRPckdyb3VwKHRoaXMuYm9hcmQsIGl0ZW0pKTtcbiAgICAgICAgdGhpcy5ncm91cEdlbmVyYXRvci5wcm9jZXNzRHJhd2luZyh2YWx1ZS5lbGVtZW50LCB0aGlzLmcsIGlzUGFydGlhbFNlbGVjdEdyb3VwKTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -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.processDrawing(
|
|
62
|
+
this.activeGenerator.processDrawing(this.element, activeG, { selected: this._isFocus });
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
ngOnDestroy() {
|
|
@@ -90,4 +90,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
90
90
|
}], hasResizeHandle: [{
|
|
91
91
|
type: Input
|
|
92
92
|
}] } });
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvcmUvaW1hZ2UtYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQWMsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFpQyxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNySSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQVFoRCxNQUFNLE9BQWdCLGtCQUFrQjtJQVlwQyxJQUNJLFNBQVMsQ0FBQyxLQUFzQjtRQUNoQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksU0FBUztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBS0QsSUFDSSxPQUFPLENBQUMsS0FBYztRQUN0QixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUN6QyxDQUFDO0lBUUQsWUFBc0IsVUFBbUMsRUFBUyxHQUFzQjtRQUFsRSxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUFTLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBekN4RixnQkFBVyxHQUFHLEtBQUssQ0FBQztJQXlDdUUsQ0FBQztJQUU1RixRQUFRO1FBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ25ELGNBQWMsRUFBRSxHQUFHLEVBQUU7Z0JBQ2pCLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDckUsT0FBTyxtQkFBbUIsQ0FBQztnQkFDL0IsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE9BQU8sbUJBQW1CLENBQUM7Z0JBQy9CLENBQUM7WUFDTCxDQUFDO1lBQ0QsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO2dCQUNuQixNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNoRyxPQUFPLENBQUMsQ0FBQztnQkFDYixDQUFDO3FCQUFNLENBQUM7b0JBQ0osT0FBTyxHQUFHLENBQUM7Z0JBQ2YsQ0FBQztZQUNMLENBQUM7WUFDRCxZQUFZLEVBQUUsR0FBRyxFQUFFO2dCQUNmLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQy9CLENBQUM7WUFDRCxlQUFlLEVBQUUsR0FBRyxFQUFFO2dCQUNsQixNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUN6RyxDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUF1QixFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1RyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLENBQUM7SUFDTCxDQUFDOzhHQXhGaUIsa0JBQWtCO2tHQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBTHZDLFNBQVM7bUJBQUM7b0JBQ1AsSUFBSSxFQUFFO3dCQUNGLEtBQUssRUFBRSx1QkFBdUI7cUJBQ2pDO2lCQUNKOytHQVdHLE9BQU87c0JBRE4sS0FBSztnQkFJRixTQUFTO3NCQURaLEtBQUs7Z0JBWU4sS0FBSztzQkFESixLQUFLO2dCQUlGLE9BQU87c0JBRFYsS0FBSztnQkFnQkcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBQ1RJVkVfU1RST0tFX1dJRFRILCBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFJlY3RhbmdsZUNsaWVudCwgZ2V0U2VsZWN0ZWRFbGVtZW50cywgaXNTZWxlY3Rpb25Nb3ZpbmcgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmVHZW5lcmF0b3IgfSBmcm9tICcuLi9nZW5lcmF0b3JzJztcbmltcG9ydCB7IENvbW1vbkltYWdlSXRlbSB9IGZyb20gJy4uL3V0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ3BsYWl0LWltYWdlLWNvbnRhaW5lcidcbiAgICB9XG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEltYWdlQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBfaW1hZ2VJdGVtITogQ29tbW9uSW1hZ2VJdGVtO1xuXG4gICAgX2lzRm9jdXMhOiBib29sZWFuO1xuXG4gICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIGFjdGl2ZUdlbmVyYXRvciE6IEFjdGl2ZUdlbmVyYXRvcjtcblxuICAgIEBJbnB1dCgpXG4gICAgZWxlbWVudCE6IFBsYWl0RWxlbWVudDtcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IGltYWdlSXRlbSh2YWx1ZTogQ29tbW9uSW1hZ2VJdGVtKSB7XG4gICAgICAgIHRoaXMuYWZ0ZXJJbWFnZUl0ZW1DaGFuZ2UodGhpcy5faW1hZ2VJdGVtLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2ltYWdlSXRlbSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmRyYXdGb2N1cygpO1xuICAgIH1cblxuICAgIGdldCBpbWFnZUl0ZW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbWFnZUl0ZW07XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBib2FyZCE6IFBsYWl0Qm9hcmQ7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBpc0ZvY3VzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2lzRm9jdXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5kcmF3Rm9jdXMoKTtcbiAgICB9XG5cbiAgICBnZXQgaXNGb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRm9jdXM7XG4gICAgfVxuXG4gICAgZ2V0IG5hdGl2ZUVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBhYnN0cmFjdCBhZnRlckltYWdlSXRlbUNoYW5nZShwcmV2aW91czogQ29tbW9uSW1hZ2VJdGVtLCBjdXJyZW50OiBDb21tb25JbWFnZUl0ZW0pOiB2b2lkO1xuXG4gICAgQElucHV0KCkgZ2V0UmVjdGFuZ2xlITogKCkgPT4gUmVjdGFuZ2xlQ2xpZW50O1xuXG4gICAgQElucHV0KCkgaGFzUmVzaXplSGFuZGxlITogKCkgPT4gYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiwgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVHZW5lcmF0b3IgPSBuZXcgQWN0aXZlR2VuZXJhdG9yKHRoaXMuYm9hcmQsIHtcbiAgICAgICAgICAgIGdldFN0cm9rZVdpZHRoOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHModGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgaWYgKCEoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDEgJiYgIWlzU2VsZWN0aW9uTW92aW5nKHRoaXMuYm9hcmQpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQUNUSVZFX1NUUk9LRV9XSURUSDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQUNUSVZFX1NUUk9LRV9XSURUSDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0U3Ryb2tlT3BhY2l0eTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgICAgIGlmICgoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDEgJiYgIWlzU2VsZWN0aW9uTW92aW5nKHRoaXMuYm9hcmQpKSB8fCAhc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuNTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0UmVjdGFuZ2xlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVjdGFuZ2xlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFzUmVzaXplSGFuZGxlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHModGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiAhaXNTZWxlY3Rpb25Nb3ZpbmcodGhpcy5ib2FyZCkpIHx8ICFzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGRyYXdGb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUcgPSBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcodGhpcy5lbGVtZW50IGFzIFBsYWl0RWxlbWVudCwgYWN0aXZlRywgeyBzZWxlY3RlZDogdGhpcy5faXNGb2N1cyB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVHZW5lcmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlR2VuZXJhdG9yLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RectangleClient, setAngleForG } from '@plait/core';
|
|
1
|
+
import { PlaitGroupElement, RectangleClient, getElementsInGroup, getSelectionAngle, setAngleForG } from '@plait/core';
|
|
2
2
|
export class Generator {
|
|
3
3
|
constructor(board, options) {
|
|
4
4
|
this.board = board;
|
|
@@ -21,8 +21,17 @@ export class Generator {
|
|
|
21
21
|
}
|
|
22
22
|
this.g = g;
|
|
23
23
|
const rect = this.board.getRectangle(element);
|
|
24
|
-
if (rect
|
|
25
|
-
|
|
24
|
+
if (rect) {
|
|
25
|
+
let angle;
|
|
26
|
+
if (PlaitGroupElement.isGroup(element)) {
|
|
27
|
+
angle = getSelectionAngle(getElementsInGroup(this.board, element, true));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
angle = element.angle;
|
|
31
|
+
}
|
|
32
|
+
if (angle) {
|
|
33
|
+
setAngleForG(g, RectangleClient.getCenterPoint(rect), angle);
|
|
34
|
+
}
|
|
26
35
|
}
|
|
27
36
|
}
|
|
28
37
|
else {
|
|
@@ -49,4 +58,4 @@ export function hasAfterDraw(value) {
|
|
|
49
58
|
}
|
|
50
59
|
return false;
|
|
51
60
|
}
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9nZW5lcmF0b3JzL2dlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0gsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLFlBQVksRUFDZixNQUFNLGFBQWEsQ0FBQztBQVFyQixNQUFNLE9BQWdCLFNBQVM7SUFTM0IsWUFBc0IsS0FBaUIsRUFBRSxPQUFXO1FBQTlCLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDM0IsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFVLEVBQUUsT0FBb0IsRUFBRSxJQUFRO1FBQ3JELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ0osSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO3dCQUN4QixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2QixDQUFDO3lCQUFNLENBQUM7d0JBQ0osT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsQ0FBQztnQkFDTCxDQUFDO2dCQUNELElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNYLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLElBQUksRUFBRSxDQUFDO29CQUNQLElBQUksS0FBSyxDQUFDO29CQUNWLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7d0JBQ3JDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM3RSxDQUFDO3lCQUFNLENBQUM7d0JBQ0osS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7b0JBQzFCLENBQUM7b0JBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQzt3QkFDUixZQUFZLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7b0JBQ2pFLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsQ0FBQztZQUNELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDTCxDQUFDO0lBWUQsT0FBTztRQUNILElBQUksSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQztDQUNKO0FBTUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFVO0lBQ25DLElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQbGFpdEdyb3VwRWxlbWVudCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgZ2V0RWxlbWVudHNJbkdyb3VwLFxuICAgIGdldFNlbGVjdGlvbkFuZ2xlLFxuICAgIHNldEFuZ2xlRm9yR1xufSBmcm9tICdAcGxhaXQvY29yZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdG9yRXh0cmFEYXRhIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdG9yT3B0aW9ucyB7XG4gICAgcHJlcGVuZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW5lcmF0b3I8XG4gICAgVCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudCxcbiAgICBLIGV4dGVuZHMgR2VuZXJhdG9yRXh0cmFEYXRhID0gR2VuZXJhdG9yRXh0cmFEYXRhLFxuICAgIFYgZXh0ZW5kcyBHZW5lcmF0b3JPcHRpb25zID0gR2VuZXJhdG9yT3B0aW9uc1xuPiB7XG4gICAgZz86IFNWR0dFbGVtZW50O1xuXG4gICAgcHJvdGVjdGVkIG9wdGlvbnM/OiBWO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGJvYXJkOiBQbGFpdEJvYXJkLCBvcHRpb25zPzogVikge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIH1cblxuICAgIHByb2Nlc3NEcmF3aW5nKGVsZW1lbnQ6IFQsIHBhcmVudEc6IFNWR0dFbGVtZW50LCBkYXRhPzogSykge1xuICAgICAgICBpZiAodGhpcy5jYW5EcmF3ICYmIHRoaXMuY2FuRHJhdyhlbGVtZW50LCBkYXRhKSkge1xuICAgICAgICAgICAgY29uc3QgZyA9IHRoaXMuZHJhdyhlbGVtZW50LCBkYXRhKTtcbiAgICAgICAgICAgIGlmIChnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZyAmJiBwYXJlbnRHLmNvbnRhaW5zKHRoaXMuZykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nLnJlcGxhY2VXaXRoKGcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnM/LnByZXBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEcucHJlcGVuZChnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEcuYXBwZW5kQ2hpbGQoZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5nID0gZztcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5ib2FyZC5nZXRSZWN0YW5nbGUoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFuZ2xlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoUGxhaXRHcm91cEVsZW1lbnQuaXNHcm91cChlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSBnZXRTZWxlY3Rpb25BbmdsZShnZXRFbGVtZW50c0luR3JvdXAodGhpcy5ib2FyZCwgZWxlbWVudCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSBlbGVtZW50LmFuZ2xlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbmdsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QW5nbGVGb3JHKGcsIFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChyZWN0KSwgYW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoYXNBZnRlckRyYXcodGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyRHJhdyhlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWJzdHJhY3QgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYWJzdHJhY3QgY2FuRHJhdyhlbGVtZW50OiBULCBkYXRhPzogSyk6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBhYnN0cmFjdCBmdW5jdGlvblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBkcmF3KGVsZW1lbnQ6IFQsIGRhdGE/OiBLKTogU1ZHR0VsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5nKSB7XG4gICAgICAgICAgICB0aGlzLmcucmVtb3ZlKCk7XG4gICAgICAgICAgICB0aGlzLmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWZ0ZXJEcmF3PFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+IHtcbiAgICBhZnRlckRyYXcoZWxlbWVudDogVCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNBZnRlckRyYXcodmFsdWU6IGFueSk6IHZhbHVlIGlzIEFmdGVyRHJhdyB7XG4gICAgaWYgKHZhbHVlLmFmdGVyRHJhdykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIl19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ACTIVE_STROKE_WIDTH, drawRectangle, getRectangleByGroup } from '@plait/core';
|
|
2
|
+
import { Generator } from './generator';
|
|
3
|
+
export class GroupGenerator extends Generator {
|
|
4
|
+
canDraw(element) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
draw(element, partialSelected) {
|
|
8
|
+
const options = {
|
|
9
|
+
stroke: '',
|
|
10
|
+
strokeWidth: ACTIVE_STROKE_WIDTH,
|
|
11
|
+
strokeLineDash: [5]
|
|
12
|
+
};
|
|
13
|
+
let rectangle = { x: 0, y: 0, width: 0, height: 0 };
|
|
14
|
+
if (partialSelected) {
|
|
15
|
+
options.stroke = '#999';
|
|
16
|
+
rectangle = getRectangleByGroup(this.board, element, true);
|
|
17
|
+
}
|
|
18
|
+
return drawRectangle(this.board, rectangle, options);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9nZW5lcmF0b3JzL2dyb3VwLmdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQStCLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVuSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXhDLE1BQU0sT0FBTyxjQUFlLFNBQVEsU0FBcUI7SUFDckQsT0FBTyxDQUFDLE9BQW1CO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBbUIsRUFBRSxlQUF3QjtRQUM5QyxNQUFNLE9BQU8sR0FBWTtZQUNyQixNQUFNLEVBQUUsRUFBRTtZQUNWLFdBQVcsRUFBRSxtQkFBbUI7WUFDaEMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3RCLENBQUM7UUFDRixJQUFJLFNBQVMsR0FBb0IsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDckUsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUN4QixTQUFTLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3pELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFDVElWRV9TVFJPS0VfV0lEVEgsIFBsYWl0R3JvdXAsIFJlY3RhbmdsZUNsaWVudCwgZHJhd1JlY3RhbmdsZSwgZ2V0UmVjdGFuZ2xlQnlHcm91cCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IEdlbmVyYXRvciB9IGZyb20gJy4vZ2VuZXJhdG9yJztcblxuZXhwb3J0IGNsYXNzIEdyb3VwR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yPFBsYWl0R3JvdXA+IHtcbiAgICBjYW5EcmF3KGVsZW1lbnQ6IFBsYWl0R3JvdXApOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZHJhdyhlbGVtZW50OiBQbGFpdEdyb3VwLCBwYXJ0aWFsU2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uczogT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHN0cm9rZTogJycsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogQUNUSVZFX1NUUk9LRV9XSURUSCxcbiAgICAgICAgICAgIHN0cm9rZUxpbmVEYXNoOiBbNV1cbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50ID0geyB4OiAwLCB5OiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XG4gICAgICAgIGlmIChwYXJ0aWFsU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc3Ryb2tlID0gJyM5OTknO1xuICAgICAgICAgICAgcmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlHcm91cCh0aGlzLmJvYXJkLCBlbGVtZW50LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZHJhd1JlY3RhbmdsZSh0aGlzLmJvYXJkLCByZWN0YW5nbGUsIG9wdGlvbnMpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createForeignObject, createG, updateForeignObject } from '@plait/core';
|
|
1
|
+
import { RectangleClient, createForeignObject, createG, setAngleForG, updateForeignObject } from '@plait/core';
|
|
2
2
|
import { Generator } from './generator';
|
|
3
3
|
import { WithCommonPluginKey } from '../constants';
|
|
4
4
|
export class ImageGenerator extends Generator {
|
|
@@ -34,12 +34,16 @@ export class ImageGenerator extends Generator {
|
|
|
34
34
|
updateImage(nodeG, previous, current) {
|
|
35
35
|
if (previous !== current && this.componentRef) {
|
|
36
36
|
this.componentRef.instance.imageItem = this.options.getImageItem(current);
|
|
37
|
+
this.componentRef.instance.element = current;
|
|
37
38
|
this.componentRef.instance.getRectangle = () => {
|
|
38
39
|
return this.options.getRectangle(current);
|
|
39
40
|
};
|
|
40
41
|
}
|
|
41
42
|
const currentForeignObject = this.options.getRectangle(current);
|
|
42
43
|
updateForeignObject(this.g, currentForeignObject.width, currentForeignObject.height, currentForeignObject.x, currentForeignObject.y);
|
|
44
|
+
if (currentForeignObject && current.angle) {
|
|
45
|
+
setAngleForG(this.g, RectangleClient.getCenterPoint(currentForeignObject), current.angle);
|
|
46
|
+
}
|
|
43
47
|
// solve image lose on move node
|
|
44
48
|
if (this.foreignObject.children.length === 0) {
|
|
45
49
|
this.foreignObject.append(this.componentRef.instance.nativeElement);
|
|
@@ -51,4 +55,4 @@ export class ImageGenerator extends Generator {
|
|
|
51
55
|
this.componentRef?.destroy();
|
|
52
56
|
}
|
|
53
57
|
}
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuZ2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9nZW5lcmF0b3JzL2ltYWdlLmdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixPQUFPLEVBQ1AsWUFBWSxFQUNaLG1CQUFtQixFQUN0QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsU0FBUyxFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUkxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFVbkQsTUFBTSxPQUFPLGNBQXNELFNBQVEsU0FJMUU7SUFLRyxZQUFtQixLQUFpQixFQUFTLE9BQWlDO1FBQzFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFEUCxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVMsWUFBTyxHQUFQLE9BQU8sQ0FBMEI7SUFFOUUsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFVLEVBQUUsSUFBc0I7UUFDdEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFVLEVBQUUsZ0JBQWtDO1FBQy9DLE1BQU0sQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FB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WUFBWSxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUGxhaXRPcHRpb25zQm9hcmQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGNyZWF0ZUZvcmVpZ25PYmplY3QsXG4gICAgY3JlYXRlRyxcbiAgICBzZXRBbmdsZUZvckcsXG4gICAgdXBkYXRlRm9yZWlnbk9iamVjdFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBHZW5lcmF0b3IsIEdlbmVyYXRvck9wdGlvbnMgfSBmcm9tICcuL2dlbmVyYXRvcic7XG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEltYWdlQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUvaW1hZ2UtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uSW1hZ2VJdGVtLCBXaXRoQ29tbW9uUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFdpdGhDb21tb25QbHVnaW5LZXkgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuZXhwb3J0IGludGVyZmFjZSBTaGFwZURhdGEge1xuICAgIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VHZW5lcmF0b3JPcHRpb25zPFQ+IHtcbiAgICBnZXRSZWN0YW5nbGU6IChlbGVtZW50OiBUKSA9PiBSZWN0YW5nbGVDbGllbnQ7XG4gICAgZ2V0SW1hZ2VJdGVtOiAoZWxlbWVudDogVCkgPT4gQ29tbW9uSW1hZ2VJdGVtO1xufVxuXG5leHBvcnQgY2xhc3MgSW1hZ2VHZW5lcmF0b3I8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudD4gZXh0ZW5kcyBHZW5lcmF0b3I8XG4gICAgVCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEltYWdlR2VuZXJhdG9yT3B0aW9uczxUPiAmIEdlbmVyYXRvck9wdGlvbnNcbj4ge1xuICAgIGZvcmVpZ25PYmplY3QhOiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDtcblxuICAgIGNvbXBvbmVudFJlZiE6IENvbXBvbmVudFJlZjxJbWFnZUJhc2VDb21wb25lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIGJvYXJkOiBQbGFpdEJvYXJkLCBwdWJsaWMgb3B0aW9uczogSW1hZ2VHZW5lcmF0b3JPcHRpb25zPFQ+KSB7XG4gICAgICAgIHN1cGVyKGJvYXJkLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBjYW5EcmF3KGVsZW1lbnQ6IFQsIGRhdGE6IFZpZXdDb250YWluZXJSZWYpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5vcHRpb25zLmdldEltYWdlSXRlbShlbGVtZW50KTtcbiAgICB9XG5cbiAgICBkcmF3KGVsZW1lbnQ6IFQsIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpOiBTVkdHRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IGcgPSBjcmVhdGVHKCk7XG4gICAgICAgIGNvbnN0IGZvcmVpZ25SZWN0YW5nbGUgPSB0aGlzLm9wdGlvbnMuZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICB0aGlzLmZvcmVpZ25PYmplY3QgPSBjcmVhdGVGb3JlaWduT2JqZWN0KGZvcmVpZ25SZWN0YW5nbGUueCwgZm9yZWlnblJlY3RhbmdsZS55LCBmb3JlaWduUmVjdGFuZ2xlLndpZHRoLCBmb3JlaWduUmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgIGcuYXBwZW5kKHRoaXMuZm9yZWlnbk9iamVjdCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFR5cGUgPSAodGhpcy5ib2FyZCBhcyBQbGFpdE9wdGlvbnNCb2FyZCkuZ2V0UGx1Z2luT3B0aW9uczxXaXRoQ29tbW9uUGx1Z2luT3B0aW9ucz4oV2l0aENvbW1vblBsdWdpbktleSlcbiAgICAgICAgICAgIC5pbWFnZUNvbXBvbmVudFR5cGU7XG4gICAgICAgIGlmICghY29tcG9uZW50VHlwZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50IEltYWdlQmFzZUNvbXBvbmVudCBlcnJvci4nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IHZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudFR5cGUpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5ib2FyZCA9IHRoaXMuYm9hcmQ7XG5cbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuaW1hZ2VJdGVtID0gdGhpcy5vcHRpb25zLmdldEltYWdlSXRlbShlbGVtZW50KTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmdldFJlY3RhbmdsZSA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZ2V0UmVjdGFuZ2xlKGVsZW1lbnQpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZm9yZWlnbk9iamVjdC5hcHBlbmQodGhpcy5jb21wb25lbnRSZWYhLmluc3RhbmNlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gZztcbiAgICB9XG5cbiAgICB1cGRhdGVJbWFnZShub2RlRzogU1ZHR0VsZW1lbnQsIHByZXZpb3VzOiBULCBjdXJyZW50OiBUKSB7XG4gICAgICAgIGlmIChwcmV2aW91cyAhPT0gY3VycmVudCAmJiB0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuaW1hZ2VJdGVtID0gdGhpcy5vcHRpb25zLmdldEltYWdlSXRlbShjdXJyZW50KTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVsZW1lbnQgPSBjdXJyZW50O1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYhLmluc3RhbmNlLmdldFJlY3RhbmdsZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmdldFJlY3RhbmdsZShjdXJyZW50KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudEZvcmVpZ25PYmplY3QgPSB0aGlzLm9wdGlvbnMuZ2V0UmVjdGFuZ2xlKGN1cnJlbnQpO1xuICAgICAgICB1cGRhdGVGb3JlaWduT2JqZWN0KFxuICAgICAgICAgICAgdGhpcy5nISxcbiAgICAgICAgICAgIGN1cnJlbnRGb3JlaWduT2JqZWN0LndpZHRoLFxuICAgICAgICAgICAgY3VycmVudEZvcmVpZ25PYmplY3QuaGVpZ2h0LFxuICAgICAgICAgICAgY3VycmVudEZvcmVpZ25PYmplY3QueCxcbiAgICAgICAgICAgIGN1cnJlbnRGb3JlaWduT2JqZWN0LnlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGN1cnJlbnRGb3JlaWduT2JqZWN0ICYmIGN1cnJlbnQuYW5nbGUpIHtcbiAgICAgICAgICAgIHNldEFuZ2xlRm9yRyh0aGlzLmchLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoY3VycmVudEZvcmVpZ25PYmplY3QpLCBjdXJyZW50LmFuZ2xlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBzb2x2ZSBpbWFnZSBsb3NlIG9uIG1vdmUgbm9kZVxuICAgICAgICBpZiAodGhpcy5mb3JlaWduT2JqZWN0LmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5mb3JlaWduT2JqZWN0LmFwcGVuZCh0aGlzLmNvbXBvbmVudFJlZiEuaW5zdGFuY2UubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmPy5kZXN0cm95KCk7XG4gICAgfVxufVxuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
export * from './with-resize';
|
|
2
2
|
export * from './text-options';
|
|
3
|
-
|
|
3
|
+
export * from './with-group';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3BsdWdpbnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vd2l0aC1yZXNpemUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXh0LW9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi93aXRoLWdyb3VwJzsiXX0=
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { PlaitBoard, PlaitGroupElement, toViewBoxPoint, toHostPoint, getHitElementsBySelection, createGroupRectangleG, getHighestSelectedGroups, getSelectedIsolatedElements, getSelectedGroups, Selection, Transforms, idCreator, getGroupByElement, getSelectedIsolatedElementsCanAddToGroup, getElementsInGroup, getRectangleByGroup, GroupTransforms, getSelectedElements } from '@plait/core';
|
|
2
|
+
import { GroupComponent } from '../core/group.component';
|
|
3
|
+
import { isKeyHotkey } from 'is-hotkey';
|
|
4
|
+
export function withGroup(board) {
|
|
5
|
+
let groupRectangleG;
|
|
6
|
+
let removeGroups;
|
|
7
|
+
const { drawElement, pointerMove, globalPointerUp, insertFragment, getDeletedFragment, deleteFragment, getRelatedFragment, getRectangle, keyDown } = board;
|
|
8
|
+
board.drawElement = (context) => {
|
|
9
|
+
if (PlaitGroupElement.isGroup(context.element)) {
|
|
10
|
+
return GroupComponent;
|
|
11
|
+
}
|
|
12
|
+
return drawElement(context);
|
|
13
|
+
};
|
|
14
|
+
board.pointerMove = (event) => {
|
|
15
|
+
groupRectangleG?.remove();
|
|
16
|
+
const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));
|
|
17
|
+
let selection = { anchor: point, focus: point };
|
|
18
|
+
if (board.selection && !Selection.isCollapsed(board.selection)) {
|
|
19
|
+
selection = board.selection;
|
|
20
|
+
}
|
|
21
|
+
const hitElements = getHitElementsBySelection(board, selection);
|
|
22
|
+
if (hitElements.length) {
|
|
23
|
+
groupRectangleG = createGroupRectangleG(board, hitElements);
|
|
24
|
+
groupRectangleG && PlaitBoard.getElementActiveHost(board).append(groupRectangleG);
|
|
25
|
+
}
|
|
26
|
+
pointerMove(event);
|
|
27
|
+
};
|
|
28
|
+
board.globalPointerUp = (event) => {
|
|
29
|
+
groupRectangleG?.remove();
|
|
30
|
+
groupRectangleG = null;
|
|
31
|
+
globalPointerUp(event);
|
|
32
|
+
};
|
|
33
|
+
board.getRelatedFragment = (elements, originData) => {
|
|
34
|
+
const groups = getSelectedGroups(board, originData);
|
|
35
|
+
return getRelatedFragment([...elements, ...groups], originData);
|
|
36
|
+
};
|
|
37
|
+
board.insertFragment = (data, clipboardData, targetPoint) => {
|
|
38
|
+
const elements = [];
|
|
39
|
+
if (clipboardData?.elements?.length) {
|
|
40
|
+
const groups = getHighestSelectedGroups(board, clipboardData?.elements);
|
|
41
|
+
const selectedIsolatedElements = getSelectedIsolatedElements(board, clipboardData?.elements);
|
|
42
|
+
selectedIsolatedElements.forEach(item => {
|
|
43
|
+
elements.push(!item.groupId ? item : updateGroupId(item, undefined));
|
|
44
|
+
});
|
|
45
|
+
if (groups.length) {
|
|
46
|
+
groups.forEach(item => {
|
|
47
|
+
const newGroup = { ...updateGroupId(item, undefined), id: idCreator() };
|
|
48
|
+
elements.push(newGroup);
|
|
49
|
+
elements.push(...updateElementsGroupId(item, clipboardData.elements, newGroup.id));
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
clipboardData.elements = elements;
|
|
53
|
+
}
|
|
54
|
+
insertFragment(data, clipboardData, targetPoint);
|
|
55
|
+
const groupElements = elements?.filter(value => PlaitGroupElement.isGroup(value));
|
|
56
|
+
groupElements.forEach(element => {
|
|
57
|
+
Transforms.insertNode(board, element, [board.children.length]);
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
board.getDeletedFragment = (data) => {
|
|
61
|
+
removeGroups = getRemoveGroups(board);
|
|
62
|
+
if (removeGroups && removeGroups.length) {
|
|
63
|
+
data.push(...removeGroups);
|
|
64
|
+
}
|
|
65
|
+
return getDeletedFragment(data);
|
|
66
|
+
};
|
|
67
|
+
board.deleteFragment = (elements) => {
|
|
68
|
+
if (removeGroups?.length) {
|
|
69
|
+
updateSiblingElementGroupId(board, removeGroups);
|
|
70
|
+
}
|
|
71
|
+
deleteFragment(elements);
|
|
72
|
+
removeGroups = null;
|
|
73
|
+
};
|
|
74
|
+
board.getRectangle = (element) => {
|
|
75
|
+
if (PlaitGroupElement.isGroup(element)) {
|
|
76
|
+
return getRectangleByGroup(board, element, true);
|
|
77
|
+
}
|
|
78
|
+
return getRectangle(element);
|
|
79
|
+
};
|
|
80
|
+
board.keyDown = (event) => {
|
|
81
|
+
if (!PlaitBoard.isReadonly(board)) {
|
|
82
|
+
if (isKeyHotkey('mod+g', event)) {
|
|
83
|
+
event.preventDefault();
|
|
84
|
+
GroupTransforms.addGroup(board);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (isKeyHotkey('mod+shift+g', event)) {
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
GroupTransforms.removeGroup(board);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
keyDown(event);
|
|
94
|
+
};
|
|
95
|
+
return board;
|
|
96
|
+
}
|
|
97
|
+
const updateGroupId = (element, groupId) => {
|
|
98
|
+
return {
|
|
99
|
+
...element,
|
|
100
|
+
groupId: groupId
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
const updateElementsGroupId = (group, clipboardDataElements, newGroupId) => {
|
|
104
|
+
const elements = [];
|
|
105
|
+
const elementsInGroup = clipboardDataElements.filter(item => item.groupId === group.id);
|
|
106
|
+
if (elementsInGroup.length) {
|
|
107
|
+
elementsInGroup.forEach(item => {
|
|
108
|
+
if (PlaitGroupElement.isGroup(item)) {
|
|
109
|
+
const newGroup = { ...updateGroupId(item, newGroupId), id: idCreator() };
|
|
110
|
+
elements.push(newGroup);
|
|
111
|
+
elements.push(...updateElementsGroupId(item, clipboardDataElements, newGroup.id));
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
elements.push(updateGroupId(item, newGroupId));
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return elements;
|
|
119
|
+
};
|
|
120
|
+
const getRemoveGroups = (board) => {
|
|
121
|
+
const selectedElements = getSelectedElements(board);
|
|
122
|
+
const selectedGroups = board.getRelatedFragment([], selectedElements);
|
|
123
|
+
const removeGroups = [...selectedGroups];
|
|
124
|
+
const highestSelectedGroups = getHighestSelectedGroups(board);
|
|
125
|
+
const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);
|
|
126
|
+
const removeNodes = [...highestSelectedGroups, ...selectedIsolatedElements];
|
|
127
|
+
removeNodes.forEach(item => {
|
|
128
|
+
const hitElementGroups = getGroupByElement(board, item, true);
|
|
129
|
+
if (hitElementGroups.length) {
|
|
130
|
+
const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);
|
|
131
|
+
const siblingElements = elementsInGroup.filter(element => ![...removeNodes, ...removeGroups].map(item => item.id).includes(element.id));
|
|
132
|
+
if (siblingElements.length === 1 || siblingElements.length === 0) {
|
|
133
|
+
if (!removeGroups.includes(hitElementGroups[0])) {
|
|
134
|
+
removeGroups.push(hitElementGroups[0]);
|
|
135
|
+
}
|
|
136
|
+
if (siblingElements.length === 1) {
|
|
137
|
+
if (hitElementGroups.length > 1) {
|
|
138
|
+
const aboveGroup = findAboveGroupWithAnotherElement(board, hitElementGroups.slice(1, hitElementGroups.length), [
|
|
139
|
+
...removeNodes,
|
|
140
|
+
...removeGroups
|
|
141
|
+
]);
|
|
142
|
+
let index = hitElementGroups.length;
|
|
143
|
+
if (aboveGroup) {
|
|
144
|
+
index = hitElementGroups.findIndex(item => item.id === aboveGroup.id);
|
|
145
|
+
}
|
|
146
|
+
[...hitElementGroups.slice(1, index)].forEach(item => {
|
|
147
|
+
if (!removeGroups.includes(item)) {
|
|
148
|
+
removeGroups.push(item);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
return removeGroups;
|
|
157
|
+
};
|
|
158
|
+
const findAboveGroupWithAnotherElement = (board, groups, excludeNodes) => {
|
|
159
|
+
let group = null;
|
|
160
|
+
for (let i = 0; i < groups.length; i++) {
|
|
161
|
+
const elementsInGroup = getElementsInGroup(board, groups[i], false, true);
|
|
162
|
+
const siblingElements = elementsInGroup.filter(element => !excludeNodes.map(item => item.id).includes(element.id));
|
|
163
|
+
if (siblingElements.length > 0) {
|
|
164
|
+
group = groups[i];
|
|
165
|
+
break;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return group;
|
|
169
|
+
};
|
|
170
|
+
const updateSiblingElementGroupId = (board, removeGroups) => {
|
|
171
|
+
const selectedIsolatedElements = getSelectedIsolatedElementsCanAddToGroup(board);
|
|
172
|
+
const highestSelectedGroups = getHighestSelectedGroups(board);
|
|
173
|
+
const isolatedElementsInGroup = selectedIsolatedElements.filter(item => item.groupId);
|
|
174
|
+
[...highestSelectedGroups, ...isolatedElementsInGroup].forEach(item => {
|
|
175
|
+
const hitElementGroups = getGroupByElement(board, item, true);
|
|
176
|
+
if (hitElementGroups.length) {
|
|
177
|
+
const elementsInGroup = getElementsInGroup(board, hitElementGroups[0], false, true);
|
|
178
|
+
const siblingElements = elementsInGroup.filter(element => element.id !== item.id);
|
|
179
|
+
if (siblingElements.length === 1) {
|
|
180
|
+
const removeGroupIds = removeGroups.map(item => item.id);
|
|
181
|
+
if (hitElementGroups.some(group => removeGroupIds.includes(group.id))) {
|
|
182
|
+
const group = hitElementGroups.find(group => !removeGroupIds.includes(group.id));
|
|
183
|
+
const path = PlaitBoard.findPath(board, siblingElements[0]);
|
|
184
|
+
Transforms.setNode(board, { groupId: group?.id || undefined }, path);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
};
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1ncm91cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvcGx1Z2lucy93aXRoLWdyb3VwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBRVYsaUJBQWlCLEVBQ2pCLGNBQWMsRUFDZCxXQUFXLEVBQ1gseUJBQXlCLEVBQ3pCLHFCQUFxQixFQUVyQix3QkFBd0IsRUFDeEIsMkJBQTJCLEVBRzNCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsVUFBVSxFQUNWLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsd0NBQXdDLEVBQ3hDLGtCQUFrQixFQUNsQixtQkFBbUIsRUFDbkIsZUFBZSxFQUNmLG1CQUFtQixFQUN0QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWlCO0lBQ3ZDLElBQUksZUFBbUMsQ0FBQztJQUN4QyxJQUFJLFlBQWlDLENBQUM7SUFFdEMsTUFBTSxFQUNGLFdBQVcsRUFDWCxXQUFXLEVBQ1gsZUFBZSxFQUNmLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osT0FBTyxFQUNWLEdBQUcsS0FBSyxDQUFDO0lBRVYsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLE9BQWtDLEVBQUUsRUFBRTtRQUN2RCxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxPQUFPLGNBQWMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDaEMsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLFdBQVcsR0FBRyxDQUFDLEtBQW1C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S0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEYsSUFBSSxlQUFlLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMvQixNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDcEUsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNqRixNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDekUsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCxcbiAgICBQbGFpdEdyb3VwRWxlbWVudCxcbiAgICB0b1ZpZXdCb3hQb2ludCxcbiAgICB0b0hvc3RQb2ludCxcbiAgICBnZXRIaXRFbGVtZW50c0J5U2VsZWN0aW9uLFxuICAgIGNyZWF0ZUdyb3VwUmVjdGFuZ2xlRyxcbiAgICBDbGlwYm9hcmREYXRhLFxuICAgIGdldEhpZ2hlc3RTZWxlY3RlZEdyb3VwcyxcbiAgICBnZXRTZWxlY3RlZElzb2xhdGVkRWxlbWVudHMsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0R3JvdXAsXG4gICAgZ2V0U2VsZWN0ZWRHcm91cHMsXG4gICAgU2VsZWN0aW9uLFxuICAgIFBvaW50LFxuICAgIFRyYW5zZm9ybXMsXG4gICAgaWRDcmVhdG9yLFxuICAgIGdldEdyb3VwQnlFbGVtZW50LFxuICAgIGdldFNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50c0NhbkFkZFRvR3JvdXAsXG4gICAgZ2V0RWxlbWVudHNJbkdyb3VwLFxuICAgIGdldFJlY3RhbmdsZUJ5R3JvdXAsXG4gICAgR3JvdXBUcmFuc2Zvcm1zLFxuICAgIGdldFNlbGVjdGVkRWxlbWVudHNcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgR3JvdXBDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlL2dyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc0tleUhvdGtleSB9IGZyb20gJ2lzLWhvdGtleSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoR3JvdXAoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBsZXQgZ3JvdXBSZWN0YW5nbGVHOiBTVkdHRWxlbWVudCB8IG51bGw7XG4gICAgbGV0IHJlbW92ZUdyb3VwczogUGxhaXRHcm91cFtdIHwgbnVsbDtcblxuICAgIGNvbnN0IHtcbiAgICAgICAgZHJhd0VsZW1lbnQsXG4gICAgICAgIHBvaW50ZXJNb3ZlLFxuICAgICAgICBnbG9iYWxQb2ludGVyVXAsXG4gICAgICAgIGluc2VydEZyYWdtZW50LFxuICAgICAgICBnZXREZWxldGVkRnJhZ21lbnQsXG4gICAgICAgIGRlbGV0ZUZyYWdtZW50LFxuICAgICAgICBnZXRSZWxhdGVkRnJhZ21lbnQsXG4gICAgICAgIGdldFJlY3RhbmdsZSxcbiAgICAgICAga2V5RG93blxuICAgIH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmRyYXdFbGVtZW50ID0gKGNvbnRleHQ6IFBsYWl0UGx1Z2luRWxlbWVudENvbnRleHQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoY29udGV4dC5lbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIEdyb3VwQ29tcG9uZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkcmF3RWxlbWVudChjb250ZXh0KTtcbiAgICB9O1xuXG4gICAgYm9hcmQucG9pbnRlck1vdmUgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICBncm91cFJlY3RhbmdsZUc/LnJlbW92ZSgpO1xuICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICBsZXQgc2VsZWN0aW9uOiBTZWxlY3Rpb24gPSB7IGFuY2hvcjogcG9pbnQsIGZvY3VzOiBwb2ludCB9O1xuICAgICAgICBpZiAoYm9hcmQuc2VsZWN0aW9uICYmICFTZWxlY3Rpb24uaXNDb2xsYXBzZWQoYm9hcmQuc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgc2VsZWN0aW9uID0gYm9hcmQuc2VsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhpdEVsZW1lbnRzID0gZ2V0SGl0RWxlbWVudHNCeVNlbGVjdGlvbihib2FyZCwgc2VsZWN0aW9uKTtcbiAgICAgICAgaWYgKGhpdEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgZ3JvdXBSZWN0YW5nbGVHID0gY3JlYXRlR3JvdXBSZWN0YW5nbGVHKGJvYXJkLCBoaXRFbGVtZW50cyk7XG4gICAgICAgICAgICBncm91cFJlY3RhbmdsZUcgJiYgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKGdyb3VwUmVjdGFuZ2xlRyk7XG4gICAgICAgIH1cblxuICAgICAgICBwb2ludGVyTW92ZShldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmdsb2JhbFBvaW50ZXJVcCA9IChldmVudDogUG9pbnRlckV2ZW50KSA9PiB7XG4gICAgICAgIGdyb3VwUmVjdGFuZ2xlRz8ucmVtb3ZlKCk7XG4gICAgICAgIGdyb3VwUmVjdGFuZ2xlRyA9IG51bGw7XG4gICAgICAgIGdsb2JhbFBvaW50ZXJVcChldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmdldFJlbGF0ZWRGcmFnbWVudCA9IChlbGVtZW50czogUGxhaXRFbGVtZW50W10sIG9yaWdpbkRhdGE/OiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgICAgICBjb25zdCBncm91cHMgPSBnZXRTZWxlY3RlZEdyb3Vwcyhib2FyZCwgb3JpZ2luRGF0YSk7XG4gICAgICAgIHJldHVybiBnZXRSZWxhdGVkRnJhZ21lbnQoWy4uLmVsZW1lbnRzLCAuLi5ncm91cHNdLCBvcmlnaW5EYXRhKTtcbiAgICB9O1xuXG4gICAgYm9hcmQuaW5zZXJ0RnJhZ21lbnQgPSAoZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCwgY2xpcGJvYXJkRGF0YTogQ2xpcGJvYXJkRGF0YSB8IG51bGwsIHRhcmdldFBvaW50OiBQb2ludCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICAgICAgaWYgKGNsaXBib2FyZERhdGE/LmVsZW1lbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3Vwcyhib2FyZCwgY2xpcGJvYXJkRGF0YT8uZWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzKGJvYXJkLCBjbGlwYm9hcmREYXRhPy5lbGVtZW50cyk7XG4gICAgICAgICAgICBzZWxlY3RlZElzb2xhdGVkRWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKCFpdGVtLmdyb3VwSWQgPyBpdGVtIDogdXBkYXRlR3JvdXBJZChpdGVtLCB1bmRlZmluZWQpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBncm91cHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3R3JvdXAgPSB7IC4uLnVwZGF0ZUdyb3VwSWQoaXRlbSwgdW5kZWZpbmVkKSwgaWQ6IGlkQ3JlYXRvcigpIH07XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gobmV3R3JvdXApO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKC4uLnVwZGF0ZUVsZW1lbnRzR3JvdXBJZChpdGVtLCBjbGlwYm9hcmREYXRhLmVsZW1lbnRzISwgbmV3R3JvdXAuaWQpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsaXBib2FyZERhdGEuZWxlbWVudHMgPSBlbGVtZW50cztcbiAgICAgICAgfVxuICAgICAgICBpbnNlcnRGcmFnbWVudChkYXRhLCBjbGlwYm9hcmREYXRhLCB0YXJnZXRQb2ludCk7XG4gICAgICAgIGNvbnN0IGdyb3VwRWxlbWVudHMgPSBlbGVtZW50cz8uZmlsdGVyKHZhbHVlID0+IFBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAodmFsdWUpKSBhcyBQbGFpdEVsZW1lbnRbXTtcbiAgICAgICAgZ3JvdXBFbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBlbGVtZW50LCBbYm9hcmQuY2hpbGRyZW4ubGVuZ3RoXSk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBib2FyZC5nZXREZWxldGVkRnJhZ21lbnQgPSAoZGF0YTogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICAgICAgcmVtb3ZlR3JvdXBzID0gZ2V0UmVtb3ZlR3JvdXBzKGJvYXJkKTtcbiAgICAgICAgaWYgKHJlbW92ZUdyb3VwcyAmJiByZW1vdmVHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2goLi4ucmVtb3ZlR3JvdXBzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0RGVsZXRlZEZyYWdtZW50KGRhdGEpO1xuICAgIH07XG5cbiAgICBib2FyZC5kZWxldGVGcmFnbWVudCA9IChlbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICAgICAgaWYgKHJlbW92ZUdyb3Vwcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB1cGRhdGVTaWJsaW5nRWxlbWVudEdyb3VwSWQoYm9hcmQsIHJlbW92ZUdyb3Vwcyk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlRnJhZ21lbnQoZWxlbWVudHMpO1xuICAgICAgICByZW1vdmVHcm91cHMgPSBudWxsO1xuICAgIH07XG5cbiAgICBib2FyZC5nZXRSZWN0YW5nbGUgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdEdyb3VwRWxlbWVudC5pc0dyb3VwKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UmVjdGFuZ2xlQnlHcm91cChib2FyZCwgZWxlbWVudCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdldFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQua2V5RG93biA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkpIHtcbiAgICAgICAgICAgIGlmIChpc0tleUhvdGtleSgnbW9kK2cnLCBldmVudCkpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIEdyb3VwVHJhbnNmb3Jtcy5hZGRHcm91cChib2FyZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzS2V5SG90a2V5KCdtb2Qrc2hpZnQrZycsIGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgR3JvdXBUcmFuc2Zvcm1zLnJlbW92ZUdyb3VwKGJvYXJkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAga2V5RG93bihldmVudCk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn1cblxuY29uc3QgdXBkYXRlR3JvdXBJZCA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQsIGdyb3VwSWQ/OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICAuLi5lbGVtZW50LFxuICAgICAgICBncm91cElkOiBncm91cElkXG4gICAgfTtcbn07XG5cbmNvbnN0IHVwZGF0ZUVsZW1lbnRzR3JvdXBJZCA9IChncm91cDogUGxhaXRHcm91cCwgY2xpcGJvYXJkRGF0YUVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgbmV3R3JvdXBJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG4gICAgY29uc3QgZWxlbWVudHNJbkdyb3VwID0gY2xpcGJvYXJkRGF0YUVsZW1lbnRzLmZpbHRlcihpdGVtID0+IGl0ZW0uZ3JvdXBJZCA9PT0gZ3JvdXAuaWQpO1xuICAgIGlmIChlbGVtZW50c0luR3JvdXAubGVuZ3RoKSB7XG4gICAgICAgIGVsZW1lbnRzSW5Hcm91cC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKFBsYWl0R3JvdXBFbGVtZW50LmlzR3JvdXAoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdHcm91cCA9IHsgLi4udXBkYXRlR3JvdXBJZChpdGVtLCBuZXdHcm91cElkKSwgaWQ6IGlkQ3JlYXRvcigpIH07XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaChuZXdHcm91cCk7XG4gICAgICAgICAgICAgICAgZWxlbWVudHMucHVzaCguLi51cGRhdGVFbGVtZW50c0dyb3VwSWQoaXRlbSwgY2xpcGJvYXJkRGF0YUVsZW1lbnRzLCBuZXdHcm91cC5pZCkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5wdXNoKHVwZGF0ZUdyb3VwSWQoaXRlbSwgbmV3R3JvdXBJZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnRzO1xufTtcblxuY29uc3QgZ2V0UmVtb3ZlR3JvdXBzID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNvbnN0IHNlbGVjdGVkR3JvdXBzID0gYm9hcmQuZ2V0UmVsYXRlZEZyYWdtZW50KFtdLCBzZWxlY3RlZEVsZW1lbnRzKSBhcyBQbGFpdEdyb3VwW107XG4gICAgY29uc3QgcmVtb3ZlR3JvdXBzID0gWy4uLnNlbGVjdGVkR3JvdXBzXTtcbiAgICBjb25zdCBoaWdoZXN0U2VsZWN0ZWRHcm91cHMgPSBnZXRIaWdoZXN0U2VsZWN0ZWRHcm91cHMoYm9hcmQpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50c0NhbkFkZFRvR3JvdXAoYm9hcmQpO1xuICAgIGNvbnN0IHJlbW92ZU5vZGVzID0gWy4uLmhpZ2hlc3RTZWxlY3RlZEdyb3VwcywgLi4uc2VsZWN0ZWRJc29sYXRlZEVsZW1lbnRzXTtcbiAgICByZW1vdmVOb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBoaXRFbGVtZW50R3JvdXBzID0gZ2V0R3JvdXBCeUVsZW1lbnQoYm9hcmQsIGl0ZW0sIHRydWUpIGFzIFBsYWl0R3JvdXBbXTtcbiAgICAgICAgaWYgKGhpdEVsZW1lbnRHcm91cHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50c0luR3JvdXAgPSBnZXRFbGVtZW50c0luR3JvdXAoYm9hcmQsIGhpdEVsZW1lbnRHcm91cHNbMF0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IHNpYmxpbmdFbGVtZW50cyA9IGVsZW1lbnRzSW5Hcm91cC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgZWxlbWVudCA9PiAhWy4uLnJlbW92ZU5vZGVzLCAuLi5yZW1vdmVHcm91cHNdLm1hcChpdGVtID0+IGl0ZW0uaWQpLmluY2x1ZGVzKGVsZW1lbnQuaWQpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKHNpYmxpbmdFbGVtZW50cy5sZW5ndGggPT09IDEgfHwgc2libGluZ0VsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGlmICghcmVtb3ZlR3JvdXBzLmluY2x1ZGVzKGhpdEVsZW1lbnRHcm91cHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUdyb3Vwcy5wdXNoKGhpdEVsZW1lbnRHcm91cHNbMF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2libGluZ0VsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGl0RWxlbWVudEdyb3Vwcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhYm92ZUdyb3VwID0gZmluZEFib3ZlR3JvdXBXaXRoQW5vdGhlckVsZW1lbnQoYm9hcmQsIGhpdEVsZW1lbnRHcm91cHMuc2xpY2UoMSwgaGl0RWxlbWVudEdyb3Vwcy5sZW5ndGgpLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVtb3ZlTm9kZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVtb3ZlR3JvdXBzXG4gICAgICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IGhpdEVsZW1lbnRHcm91cHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFib3ZlR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IGhpdEVsZW1lbnRHcm91cHMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pZCA9PT0gYWJvdmVHcm91cC5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBbLi4uaGl0RWxlbWVudEdyb3Vwcy5zbGljZSgxLCBpbmRleCldLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1vdmVHcm91cHMuaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlR3JvdXBzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVtb3ZlR3JvdXBzO1xufTtcblxuY29uc3QgZmluZEFib3ZlR3JvdXBXaXRoQW5vdGhlckVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGdyb3VwczogUGxhaXRHcm91cFtdLCBleGNsdWRlTm9kZXM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgbGV0IGdyb3VwOiBQbGFpdEdyb3VwIHwgbnVsbCA9IG51bGw7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHNJbkdyb3VwID0gZ2V0RWxlbWVudHNJbkdyb3VwKGJvYXJkLCBncm91cHNbaV0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgY29uc3Qgc2libGluZ0VsZW1lbnRzID0gZWxlbWVudHNJbkdyb3VwLmZpbHRlcihlbGVtZW50ID0+ICFleGNsdWRlTm9kZXMubWFwKGl0ZW0gPT4gaXRlbS5pZCkuaW5jbHVkZXMoZWxlbWVudC5pZCkpO1xuICAgICAgICBpZiAoc2libGluZ0VsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGdyb3VwO1xufTtcblxuY29uc3QgdXBkYXRlU2libGluZ0VsZW1lbnRHcm91cElkID0gKGJvYXJkOiBQbGFpdEJvYXJkLCByZW1vdmVHcm91cHM6IFBsYWl0R3JvdXBbXSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkSXNvbGF0ZWRFbGVtZW50c0NhbkFkZFRvR3JvdXAoYm9hcmQpO1xuICAgIGNvbnN0IGhpZ2hlc3RTZWxlY3RlZEdyb3VwcyA9IGdldEhpZ2hlc3RTZWxlY3RlZEdyb3Vwcyhib2FyZCk7XG4gICAgY29uc3QgaXNvbGF0ZWRFbGVtZW50c0luR3JvdXAgPSBzZWxlY3RlZElzb2xhdGVkRWxlbWVudHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5ncm91cElkKTtcbiAgICBbLi4uaGlnaGVzdFNlbGVjdGVkR3JvdXBzLCAuLi5pc29sYXRlZEVsZW1lbnRzSW5Hcm91cF0uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgY29uc3QgaGl0RWxlbWVudEdyb3VwcyA9IGdldEdyb3VwQnlFbGVtZW50KGJvYXJkLCBpdGVtLCB0cnVlKSBhcyBQbGFpdEdyb3VwW107XG4gICAgICAgIGlmIChoaXRFbGVtZW50R3JvdXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHNJbkdyb3VwID0gZ2V0RWxlbWVudHNJbkdyb3VwKGJvYXJkLCBoaXRFbGVtZW50R3JvdXBzWzBdLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBzaWJsaW5nRWxlbWVudHMgPSBlbGVtZW50c0luR3JvdXAuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudC5pZCAhPT0gaXRlbS5pZCk7XG4gICAgICAgICAgICBpZiAoc2libGluZ0VsZW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUdyb3VwSWRzID0gcmVtb3ZlR3JvdXBzLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xuICAgICAgICAgICAgICAgIGlmIChoaXRFbGVtZW50R3JvdXBzLnNvbWUoZ3JvdXAgPT4gcmVtb3ZlR3JvdXBJZHMuaW5jbHVkZXMoZ3JvdXAuaWQpKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cCA9IGhpdEVsZW1lbnRHcm91cHMuZmluZChncm91cCA9PiAhcmVtb3ZlR3JvdXBJZHMuaW5jbHVkZXMoZ3JvdXAuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHNpYmxpbmdFbGVtZW50c1swXSk7XG4gICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBncm91cElkOiBncm91cD8uaWQgfHwgdW5kZWZpbmVkIH0sIHBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiJdfQ==
|