@plait/draw 0.55.1 → 0.56.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/constants/geometry.d.ts +52 -0
- package/engines/basic-shapes/ellipse.d.ts +8 -3
- package/engines/flowchart/database.d.ts +2 -0
- package/engines/flowchart/document.d.ts +2 -0
- package/engines/flowchart/hard-disk.d.ts +2 -0
- package/engines/flowchart/internal-storage.d.ts +2 -0
- package/engines/flowchart/multi-document.d.ts +4 -0
- package/engines/flowchart/note-curly-left.d.ts +2 -0
- package/engines/flowchart/note-curly-right.d.ts +2 -0
- package/engines/flowchart/note-square.d.ts +2 -0
- package/esm2022/constants/geometry.mjs +30 -2
- package/esm2022/engines/basic-shapes/ellipse.mjs +49 -36
- package/esm2022/engines/basic-shapes/round-rectangle.mjs +2 -3
- package/esm2022/engines/flowchart/database.mjs +84 -0
- package/esm2022/engines/flowchart/delay.mjs +2 -3
- package/esm2022/engines/flowchart/document.mjs +81 -0
- package/esm2022/engines/flowchart/hard-disk.mjs +84 -0
- package/esm2022/engines/flowchart/internal-storage.mjs +47 -0
- package/esm2022/engines/flowchart/multi-document.mjs +143 -0
- package/esm2022/engines/flowchart/note-curly-left.mjs +50 -0
- package/esm2022/engines/flowchart/note-curly-right.mjs +50 -0
- package/esm2022/engines/flowchart/note-square.mjs +46 -0
- package/esm2022/engines/flowchart/or.mjs +2 -2
- package/esm2022/engines/flowchart/stored-data.mjs +2 -3
- package/esm2022/engines/flowchart/summing-junction.mjs +2 -2
- package/esm2022/engines/flowchart/terminal.mjs +2 -3
- package/esm2022/engines/index.mjs +18 -2
- package/esm2022/generators/line-active.generator.mjs +15 -13
- package/esm2022/generators/line-auto-complete.generator.mjs +2 -1
- package/esm2022/geometry.component.mjs +12 -20
- package/esm2022/image.component.mjs +8 -8
- package/esm2022/interfaces/geometry.mjs +9 -1
- package/esm2022/line.component.mjs +6 -6
- package/esm2022/plugins/with-draw-fragment.mjs +4 -4
- package/esm2022/plugins/with-draw-hotkey.mjs +5 -5
- package/esm2022/plugins/with-draw-rotate.mjs +6 -7
- package/esm2022/plugins/with-draw.mjs +3 -3
- package/esm2022/plugins/with-geometry-create.mjs +35 -22
- package/esm2022/plugins/with-geometry-resize.mjs +4 -5
- package/esm2022/plugins/with-line-auto-complete-reaction.mjs +6 -4
- package/esm2022/plugins/with-line-text-move.mjs +5 -5
- package/esm2022/plugins/with-line-text.mjs +11 -7
- package/esm2022/utils/geometry.mjs +7 -3
- package/esm2022/utils/selected.mjs +4 -4
- package/fesm2022/plait-draw.mjs +699 -131
- package/fesm2022/plait-draw.mjs.map +1 -1
- package/generators/line-auto-complete.generator.d.ts +1 -0
- package/geometry.component.d.ts +1 -4
- package/image.component.d.ts +1 -3
- package/interfaces/geometry.d.ts +9 -1
- package/line.component.d.ts +1 -3
- package/package.json +1 -1
- package/utils/geometry.d.ts +16 -0
- package/utils/selected.d.ts +2 -2
- package/engines/basic-shapes/circle.d.ts +0 -8
- package/esm2022/engines/basic-shapes/circle.mjs +0 -51
|
@@ -3,6 +3,7 @@ import { PlaitGeometry, PlaitShapeElement } from '../interfaces';
|
|
|
3
3
|
import { ActiveGeneratorExtraData, Generator } from '@plait/common';
|
|
4
4
|
export declare class LineAutoCompleteGenerator extends Generator<PlaitShapeElement, ActiveGeneratorExtraData> {
|
|
5
5
|
board: PlaitBoard;
|
|
6
|
+
static key: string;
|
|
6
7
|
autoCompleteG: SVGGElement;
|
|
7
8
|
hoverElement: SVGGElement | null;
|
|
8
9
|
constructor(board: PlaitBoard);
|
package/geometry.component.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';
|
|
3
3
|
import { Subject } from 'rxjs';
|
|
4
4
|
import { PlaitGeometry } from './interfaces/geometry';
|
|
@@ -8,17 +8,14 @@ import { ActiveGenerator, CommonPluginElement } from '@plait/common';
|
|
|
8
8
|
import { LineAutoCompleteGenerator } from './generators/line-auto-complete.generator';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
export declare class GeometryComponent extends CommonPluginElement<PlaitGeometry, PlaitBoard> implements OnInit, OnDestroy, OnContextChanged<PlaitGeometry, PlaitBoard> {
|
|
11
|
-
protected cdr: ChangeDetectorRef;
|
|
12
11
|
destroy$: Subject<void>;
|
|
13
12
|
activeGenerator: ActiveGenerator<PlaitGeometry>;
|
|
14
13
|
lineAutoCompleteGenerator: LineAutoCompleteGenerator;
|
|
15
14
|
shapeGenerator: GeometryShapeGenerator;
|
|
16
15
|
get textManage(): TextManage;
|
|
17
|
-
constructor(cdr: ChangeDetectorRef);
|
|
18
16
|
initializeGenerator(): void;
|
|
19
17
|
ngOnInit(): void;
|
|
20
18
|
onContextChanged(value: PlaitPluginElementContext<PlaitGeometry, PlaitBoard>, previous: PlaitPluginElementContext<PlaitGeometry, PlaitBoard>): void;
|
|
21
|
-
editText(): void;
|
|
22
19
|
drawText(): void;
|
|
23
20
|
updateText(): void;
|
|
24
21
|
initializeTextManage(): void;
|
package/image.component.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';
|
|
3
3
|
import { Subject } from 'rxjs';
|
|
4
4
|
import { CommonPluginElement, ImageGenerator } from '@plait/common';
|
|
@@ -6,12 +6,10 @@ import { PlaitImage } from './interfaces/image';
|
|
|
6
6
|
import { LineAutoCompleteGenerator } from './generators/line-auto-complete.generator';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
export declare class ImageComponent extends CommonPluginElement<PlaitImage, PlaitBoard> implements OnInit, OnDestroy, OnContextChanged<PlaitImage, PlaitBoard> {
|
|
9
|
-
protected cdr: ChangeDetectorRef;
|
|
10
9
|
destroy$: Subject<void>;
|
|
11
10
|
get activeGenerator(): import("@plait/common").ActiveGenerator<import("@plait/core").PlaitElement>;
|
|
12
11
|
imageGenerator: ImageGenerator<PlaitImage>;
|
|
13
12
|
lineAutoCompleteGenerator: LineAutoCompleteGenerator;
|
|
14
|
-
constructor(cdr: ChangeDetectorRef);
|
|
15
13
|
initializeGenerator(): void;
|
|
16
14
|
ngOnInit(): void;
|
|
17
15
|
onContextChanged(value: PlaitPluginElementContext<PlaitImage, PlaitBoard>, previous: PlaitPluginElementContext<PlaitImage, PlaitBoard>): void;
|
package/interfaces/geometry.d.ts
CHANGED
|
@@ -40,7 +40,15 @@ export declare enum FlowchartSymbols {
|
|
|
40
40
|
or = "or",
|
|
41
41
|
summingJunction = "summingJunction",
|
|
42
42
|
predefinedProcess = "predefinedProcess",
|
|
43
|
-
offPage = "offPage"
|
|
43
|
+
offPage = "offPage",
|
|
44
|
+
document = "document",
|
|
45
|
+
multiDocument = "multiDocument",
|
|
46
|
+
database = "database",
|
|
47
|
+
hardDisk = "hardDisk",
|
|
48
|
+
internalStorage = "internalStorage",
|
|
49
|
+
noteCurlyRight = "noteCurlyRight",
|
|
50
|
+
noteCurlyLeft = "noteCurlyLeft",
|
|
51
|
+
noteSquare = "noteSquare"
|
|
44
52
|
}
|
|
45
53
|
export type GeometryShapes = BasicShapes | FlowchartSymbols;
|
|
46
54
|
export interface PlaitGeometry extends PlaitElement {
|
package/line.component.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
2
|
import { PlaitBoard, PlaitPluginElementContext, OnContextChanged } from '@plait/core';
|
|
3
3
|
import { Subject } from 'rxjs';
|
|
4
4
|
import { LineText, PlaitGeometry, PlaitLine } from './interfaces';
|
|
@@ -12,12 +12,10 @@ interface BoundedElements {
|
|
|
12
12
|
target?: PlaitGeometry;
|
|
13
13
|
}
|
|
14
14
|
export declare class LineComponent extends CommonPluginElement<PlaitLine, PlaitBoard> implements OnInit, OnDestroy, OnContextChanged<PlaitLine, PlaitBoard> {
|
|
15
|
-
protected cdr: ChangeDetectorRef;
|
|
16
15
|
destroy$: Subject<void>;
|
|
17
16
|
shapeGenerator: LineShapeGenerator;
|
|
18
17
|
activeGenerator: LineActiveGenerator;
|
|
19
18
|
boundedElements: BoundedElements;
|
|
20
|
-
constructor(cdr: ChangeDetectorRef);
|
|
21
19
|
initializeGenerator(): void;
|
|
22
20
|
ngOnInit(): void;
|
|
23
21
|
getBoundedElements(): BoundedElements;
|
package/package.json
CHANGED
package/utils/geometry.d.ts
CHANGED
|
@@ -42,6 +42,21 @@ export declare const getDefaultFlowchartProperty: (symbol: FlowchartSymbols) =>
|
|
|
42
42
|
} | {
|
|
43
43
|
width: number;
|
|
44
44
|
height: number;
|
|
45
|
+
} | {
|
|
46
|
+
width: number;
|
|
47
|
+
height: number;
|
|
48
|
+
} | {
|
|
49
|
+
width: number;
|
|
50
|
+
height: number;
|
|
51
|
+
} | {
|
|
52
|
+
width: number;
|
|
53
|
+
height: number;
|
|
54
|
+
} | {
|
|
55
|
+
width: number;
|
|
56
|
+
height: number;
|
|
57
|
+
} | {
|
|
58
|
+
width: number;
|
|
59
|
+
height: number;
|
|
45
60
|
};
|
|
46
61
|
export declare const createDefaultFlowchart: (point: Point) => (PlaitGeometry | import("../interfaces").PlaitLine)[];
|
|
47
62
|
export declare const getAutoCompletePoints: (element: PlaitShapeElement) => [Point, Point, Point, Point];
|
|
@@ -61,3 +76,4 @@ export declare const getDefaultTextPoints: (board: PlaitBoard, centerPoint: Poin
|
|
|
61
76
|
export declare const insertElement: (board: PlaitBoard, element: PlaitGeometry) => void;
|
|
62
77
|
export declare const createTextElement: (board: PlaitBoard, points: [Point, Point], text?: string | Element, textHeight?: number) => PlaitGeometry;
|
|
63
78
|
export declare const createDefaultGeometry: (board: PlaitBoard, points: [Point, Point], shape: GeometryShapes) => PlaitGeometry;
|
|
79
|
+
export declare const editText: (element: PlaitGeometry) => void;
|
package/utils/selected.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { PlaitBoard } from '@plait/core';
|
|
1
|
+
import { PlaitBoard, PlaitElement } from '@plait/core';
|
|
2
2
|
import { PlaitDrawElement, PlaitGeometry, PlaitLine } from '../interfaces';
|
|
3
3
|
import { PlaitImage } from '../interfaces/image';
|
|
4
|
-
export declare const getSelectedDrawElements: (board: PlaitBoard) => PlaitDrawElement[];
|
|
4
|
+
export declare const getSelectedDrawElements: (board: PlaitBoard, elements?: PlaitElement[]) => PlaitDrawElement[];
|
|
5
5
|
export declare const getSelectedGeometryElements: (board: PlaitBoard) => PlaitGeometry[];
|
|
6
6
|
export declare const getSelectedLineElements: (board: PlaitBoard) => PlaitLine[];
|
|
7
7
|
export declare const getSelectedImageElements: (board: PlaitBoard) => PlaitImage[];
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, RectangleClient } from '@plait/core';
|
|
2
|
-
import { PlaitGeometry, ShapeEngine } from '../../interfaces';
|
|
3
|
-
import { Options } from 'roughjs/bin/core';
|
|
4
|
-
export interface CreateCircleOptions {
|
|
5
|
-
draw?: (board: PlaitBoard, rectangle: RectangleClient, options: Options) => SVGGElement;
|
|
6
|
-
getTextRectangle?: (element: PlaitGeometry) => RectangleClient;
|
|
7
|
-
}
|
|
8
|
-
export declare function createEllipseEngine(createOptions?: CreateCircleOptions): ShapeEngine;
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, RectangleClient, getEllipseTangentSlope, getVectorFromPointAndSlope, isPointInEllipse } from '@plait/core';
|
|
2
|
-
import { getTextRectangle } from '../../utils';
|
|
3
|
-
import { getNearestPointBetweenPointAndEllipse } from './ellipse';
|
|
4
|
-
export function createEllipseEngine(createOptions) {
|
|
5
|
-
const engine = {
|
|
6
|
-
draw(board, rectangle, options) {
|
|
7
|
-
const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
|
|
8
|
-
const rs = PlaitBoard.getRoughSVG(board);
|
|
9
|
-
return rs.ellipse(centerPoint[0], centerPoint[1], rectangle.width, rectangle.height, { ...options, fillStyle: 'solid' });
|
|
10
|
-
},
|
|
11
|
-
isInsidePoint(rectangle, point) {
|
|
12
|
-
const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
|
|
13
|
-
return isPointInEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);
|
|
14
|
-
},
|
|
15
|
-
getCornerPoints(rectangle) {
|
|
16
|
-
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
17
|
-
},
|
|
18
|
-
getNearestPoint(rectangle, point) {
|
|
19
|
-
const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
|
|
20
|
-
return getNearestPointBetweenPointAndEllipse(point, centerPoint, rectangle.width / 2, rectangle.height / 2);
|
|
21
|
-
},
|
|
22
|
-
getTangentVectorByConnectionPoint(rectangle, pointOfRectangle) {
|
|
23
|
-
const connectionPoint = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
|
|
24
|
-
const centerPoint = [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2];
|
|
25
|
-
const point = [connectionPoint[0] - centerPoint[0], -(connectionPoint[1] - centerPoint[1])];
|
|
26
|
-
const a = rectangle.width / 2;
|
|
27
|
-
const b = rectangle.height / 2;
|
|
28
|
-
const slope = getEllipseTangentSlope(point[0], point[1], a, b);
|
|
29
|
-
const vector = getVectorFromPointAndSlope(point[0], point[1], slope);
|
|
30
|
-
return vector;
|
|
31
|
-
},
|
|
32
|
-
getConnectorPoints(rectangle) {
|
|
33
|
-
return RectangleClient.getEdgeCenterPoints(rectangle);
|
|
34
|
-
},
|
|
35
|
-
getTextRectangle(element) {
|
|
36
|
-
const rectangle = getTextRectangle(element);
|
|
37
|
-
const width = rectangle.width;
|
|
38
|
-
rectangle.width = (rectangle.width * 3) / 4;
|
|
39
|
-
rectangle.x += width / 8;
|
|
40
|
-
return rectangle;
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
if (createOptions?.draw) {
|
|
44
|
-
engine.draw = createOptions.draw;
|
|
45
|
-
}
|
|
46
|
-
if (createOptions?.getTextRectangle) {
|
|
47
|
-
engine.getTextRectangle = createOptions.getTextRectangle;
|
|
48
|
-
}
|
|
49
|
-
return engine;
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvZW5naW5lcy9iYXNpYy1zaGFwZXMvY2lyY2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsZUFBZSxFQUNmLHNCQUFzQixFQUN0QiwwQkFBMEIsRUFDMUIsZ0JBQWdCLEVBQ25CLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFPbEUsTUFBTSxVQUFVLG1CQUFtQixDQUFDLGFBQW1DO0lBQ25FLE1BQU0sTUFBTSxHQUFnQjtRQUN4QixJQUFJLENBQUMsS0FBaUIsRUFBRSxTQUEwQixFQUFFLE9BQWdCO1lBQ2hFLE1BQU0sV0FBVyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDNUYsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3SCxDQUFDO1FBQ0QsYUFBYSxDQUFDLFNBQTBCLEVBQUUsS0FBWTtZQUNsRCxNQUFNLFdBQVcsR0FBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUs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Q0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgZ2V0RWxsaXBzZVRhbmdlbnRTbG9wZSxcbiAgICBnZXRWZWN0b3JGcm9tUG9pbnRBbmRTbG9wZSxcbiAgICBpc1BvaW50SW5FbGxpcHNlXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0R2VvbWV0cnksIFNoYXBlRW5naW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBnZXRUZXh0UmVjdGFuZ2xlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kRWxsaXBzZSB9IGZyb20gJy4vZWxsaXBzZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlQ2lyY2xlT3B0aW9ucyB7XG4gICAgZHJhdz86IChib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpID0+IFNWR0dFbGVtZW50O1xuICAgIGdldFRleHRSZWN0YW5nbGU/OiAoZWxlbWVudDogUGxhaXRHZW9tZXRyeSkgPT4gUmVjdGFuZ2xlQ2xpZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxsaXBzZUVuZ2luZShjcmVhdGVPcHRpb25zPzogQ3JlYXRlQ2lyY2xlT3B0aW9ucyk6IFNoYXBlRW5naW5lIHtcbiAgICBjb25zdCBlbmdpbmU6IFNoYXBlRW5naW5lID0ge1xuICAgICAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBbcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgICAgIGNvbnN0IHJzID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgICAgICByZXR1cm4gcnMuZWxsaXBzZShjZW50ZXJQb2ludFswXSwgY2VudGVyUG9pbnRbMV0sIHJlY3RhbmdsZS53aWR0aCwgcmVjdGFuZ2xlLmhlaWdodCwgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzSW5zaWRlUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQ6IFBvaW50ID0gW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl07XG4gICAgICAgICAgICByZXR1cm4gaXNQb2ludEluRWxsaXBzZShwb2ludCwgY2VudGVyUG9pbnQsIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS5oZWlnaHQgLyAyKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclBvaW50OiBQb2ludCA9IFtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAvIDIsIHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJdO1xuICAgICAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZEVsbGlwc2UocG9pbnQsIGNlbnRlclBvaW50LCByZWN0YW5nbGUud2lkdGggLyAyLCByZWN0YW5nbGUuaGVpZ2h0IC8gMik7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFRhbmdlbnRWZWN0b3JCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnRPZlJlY3RhbmdsZTogUG9pbnRPZlJlY3RhbmdsZSkge1xuICAgICAgICAgICAgY29uc3QgY29ubmVjdGlvblBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGUsIHBvaW50T2ZSZWN0YW5nbGUpO1xuICAgICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQ6IFBvaW50ID0gW3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC8gMiwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMl07XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IFtjb25uZWN0aW9uUG9pbnRbMF0gLSBjZW50ZXJQb2ludFswXSwgLShjb25uZWN0aW9uUG9pbnRbMV0gLSBjZW50ZXJQb2ludFsxXSldO1xuICAgICAgICAgICAgY29uc3QgYSA9IHJlY3RhbmdsZS53aWR0aCAvIDI7XG4gICAgICAgICAgICBjb25zdCBiID0gcmVjdGFuZ2xlLmhlaWdodCAvIDI7XG4gICAgICAgICAgICBjb25zdCBzbG9wZSA9IGdldEVsbGlwc2VUYW5nZW50U2xvcGUocG9pbnRbMF0sIHBvaW50WzFdLCBhLCBiKSBhcyBhbnk7XG4gICAgICAgICAgICBjb25zdCB2ZWN0b3IgPSBnZXRWZWN0b3JGcm9tUG9pbnRBbmRTbG9wZShwb2ludFswXSwgcG9pbnRbMV0sIHNsb3BlKTtcbiAgICAgICAgICAgIHJldHVybiB2ZWN0b3I7XG4gICAgICAgIH0sXG4gICAgICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFRleHRSZWN0YW5nbGUoZWxlbWVudDogUGxhaXRHZW9tZXRyeSkge1xuICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmVjdGFuZ2xlLndpZHRoO1xuICAgICAgICAgICAgcmVjdGFuZ2xlLndpZHRoID0gKHJlY3RhbmdsZS53aWR0aCAqIDMpIC8gNDtcbiAgICAgICAgICAgIHJlY3RhbmdsZS54ICs9IHdpZHRoIC8gODtcbiAgICAgICAgICAgIHJldHVybiByZWN0YW5nbGU7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGNyZWF0ZU9wdGlvbnM/LmRyYXcpIHtcbiAgICAgICAgZW5naW5lLmRyYXcgPSBjcmVhdGVPcHRpb25zLmRyYXc7XG4gICAgfVxuICAgIGlmIChjcmVhdGVPcHRpb25zPy5nZXRUZXh0UmVjdGFuZ2xlKSB7XG4gICAgICAgIGVuZ2luZS5nZXRUZXh0UmVjdGFuZ2xlID0gY3JlYXRlT3B0aW9ucy5nZXRUZXh0UmVjdGFuZ2xlO1xuICAgIH1cblxuICAgIHJldHVybiBlbmdpbmU7XG59XG4iXX0=
|