@plait/core 0.54.0 → 0.55.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/board/board.component.d.ts +6 -3
- package/constants/index.d.ts +2 -0
- package/core/element/context.d.ts +6 -2
- package/core/element/plugin-element.d.ts +13 -4
- package/core/list-render.d.ts +16 -0
- package/esm2022/board/board.component.mjs +24 -21
- package/esm2022/constants/index.mjs +3 -1
- package/esm2022/core/element/context.mjs +1 -1
- package/esm2022/core/element/plugin-element.mjs +79 -12
- package/esm2022/core/list-render.mjs +209 -0
- package/esm2022/interfaces/board.mjs +3 -3
- package/esm2022/interfaces/element.mjs +28 -2
- package/esm2022/interfaces/node.mjs +18 -1
- package/esm2022/interfaces/path.mjs +56 -57
- package/esm2022/plugins/create-board.mjs +10 -10
- package/esm2022/plugins/with-hotkey.mjs +32 -3
- package/esm2022/plugins/with-moving.mjs +12 -12
- package/esm2022/plugins/with-related-fragment.mjs +5 -5
- package/esm2022/public-api.mjs +1 -3
- package/esm2022/transforms/group.mjs +23 -6
- package/esm2022/transforms/index.mjs +6 -3
- package/esm2022/transforms/z-index.mjs +20 -0
- package/esm2022/utils/angle.mjs +17 -3
- package/esm2022/utils/clipboard/clipboard.mjs +5 -5
- package/esm2022/utils/clipboard/common.mjs +5 -5
- package/esm2022/utils/clipboard/types.mjs +1 -1
- package/esm2022/utils/common.mjs +27 -1
- package/esm2022/utils/fragment.mjs +20 -1
- package/esm2022/utils/group.mjs +27 -1
- package/esm2022/utils/helper.mjs +37 -1
- package/esm2022/utils/index.mjs +4 -1
- package/esm2022/utils/math.mjs +37 -1
- package/esm2022/utils/position.mjs +3 -3
- package/esm2022/utils/snap/snap-moving.mjs +199 -0
- package/esm2022/utils/snap/snap.mjs +208 -0
- package/esm2022/utils/to-image.mjs +2 -2
- package/esm2022/utils/weak-maps.mjs +3 -1
- package/esm2022/utils/z-index.mjs +166 -0
- package/fesm2022/plait-core.mjs +1655 -1080
- package/fesm2022/plait-core.mjs.map +1 -1
- package/interfaces/board.d.ts +5 -5
- package/interfaces/element.d.ts +5 -0
- package/interfaces/node.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +0 -2
- package/styles/styles.scss +9 -0
- package/transforms/group.d.ts +4 -0
- package/transforms/index.d.ts +3 -2
- package/transforms/z-index.d.ts +13 -0
- package/utils/angle.d.ts +2 -0
- package/utils/clipboard/common.d.ts +1 -1
- package/utils/clipboard/types.d.ts +1 -1
- package/utils/common.d.ts +8 -0
- package/utils/fragment.d.ts +3 -1
- package/utils/group.d.ts +3 -1
- package/utils/helper.d.ts +4 -1
- package/utils/index.d.ts +3 -0
- package/utils/math.d.ts +1 -0
- package/utils/position.d.ts +1 -1
- package/utils/snap/snap-moving.d.ts +5 -0
- package/utils/snap/snap.d.ts +31 -0
- package/utils/weak-maps.d.ts +2 -0
- package/utils/z-index.d.ts +5 -0
- package/core/children/children.component.d.ts +0 -17
- package/core/children/effect.d.ts +0 -2
- package/core/element/element.component.d.ts +0 -30
- package/esm2022/core/children/children.component.mjs +0 -60
- package/esm2022/core/children/effect.mjs +0 -2
- package/esm2022/core/element/element.component.mjs +0 -105
- package/esm2022/utils/moving-snap.mjs +0 -372
- package/utils/moving-snap.d.ts +0 -41
package/interfaces/board.d.ts
CHANGED
|
@@ -39,15 +39,13 @@ export interface PlaitBoard {
|
|
|
39
39
|
keyDown: (event: KeyboardEvent) => void;
|
|
40
40
|
globalKeyDown: (event: KeyboardEvent) => void;
|
|
41
41
|
keyUp: (event: KeyboardEvent) => void;
|
|
42
|
-
|
|
43
|
-
insertFragment: (
|
|
42
|
+
buildFragment: (clipboardContext: WritableClipboardContext | null, rectangle: RectangleClient | null, type: 'copy' | 'cut') => WritableClipboardContext | null;
|
|
43
|
+
insertFragment: (clipboardData: ClipboardData | null, targetPoint: Point) => void;
|
|
44
44
|
deleteFragment: (data: PlaitElement[]) => void;
|
|
45
45
|
getDeletedFragment: (data: PlaitElement[]) => PlaitElement[];
|
|
46
46
|
getRelatedFragment: (data: PlaitElement[], originData?: PlaitElement[]) => PlaitElement[];
|
|
47
47
|
dblClick: (event: MouseEvent) => void;
|
|
48
|
-
drawElement: (context: PlaitPluginElementContext) =>
|
|
49
|
-
redrawElement: (context: PlaitPluginElementContext, previousContext?: PlaitPluginElementContext) => SVGGElement[] | void;
|
|
50
|
-
destroyElement: (context: PlaitPluginElementContext) => void;
|
|
48
|
+
drawElement: (context: PlaitPluginElementContext) => ComponentType<PlaitPluginElementComponent>;
|
|
51
49
|
isRectangleHit: (element: PlaitElement, range: Selection) => boolean;
|
|
52
50
|
isHit: (element: PlaitElement, point: Point) => boolean;
|
|
53
51
|
isInsidePoint: (element: PlaitElement, point: Point) => boolean;
|
|
@@ -61,6 +59,8 @@ export interface PlaitBoard {
|
|
|
61
59
|
isAlign: (element: PlaitElement) => boolean;
|
|
62
60
|
isImageBindingAllowed: (element: PlaitElement) => boolean;
|
|
63
61
|
canAddToGroup: (element: PlaitElement) => boolean;
|
|
62
|
+
canSetZIndex: (element: PlaitElement) => boolean;
|
|
63
|
+
isExpanded: (element: PlaitElement) => boolean;
|
|
64
64
|
pointerDown: (pointer: PointerEvent) => void;
|
|
65
65
|
pointerMove: (pointer: PointerEvent) => void;
|
|
66
66
|
pointerUp: (pointer: PointerEvent) => void;
|
package/interfaces/element.d.ts
CHANGED
|
@@ -12,6 +12,11 @@ export interface PlaitElement {
|
|
|
12
12
|
export declare const PlaitElement: {
|
|
13
13
|
isRootElement(value: PlaitElement): boolean;
|
|
14
14
|
getComponent(value: PlaitElement): PlaitPluginElementComponent<PlaitElement, PlaitBoard>;
|
|
15
|
+
getElementG(value: PlaitElement): SVGGElement;
|
|
16
|
+
hasMounted(element: PlaitElement): boolean;
|
|
17
|
+
getContainerG<T extends boolean>(value: PlaitElement, options: {
|
|
18
|
+
suppressThrow: T;
|
|
19
|
+
}): T extends true ? SVGGElement | null : SVGGElement;
|
|
15
20
|
};
|
|
16
21
|
export interface ComponentType<T> {
|
|
17
22
|
new (...args: any[]): T;
|
package/interfaces/node.d.ts
CHANGED
|
@@ -17,4 +17,5 @@ export declare const PlaitNode: {
|
|
|
17
17
|
parents(root: PlaitBoard, path: Path, options?: NodeParentsOptions): Generator<PlaitNode, void, undefined>;
|
|
18
18
|
get<T extends PlaitElement = PlaitElement>(root: PlaitBoard, path: Path): T;
|
|
19
19
|
last(board: PlaitBoard, path: Path): PlaitElement;
|
|
20
|
+
first(board: PlaitBoard, path: Path): PlaitElement;
|
|
20
21
|
};
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
export * from './board/board.component';
|
|
2
2
|
export * from './constants';
|
|
3
3
|
export * from './core/element/plugin-element';
|
|
4
|
-
export * from './core/element/element.component';
|
|
5
|
-
export * from './core/children/children.component';
|
|
6
4
|
export * from './core/element/context-change';
|
|
7
5
|
export * from './core/island/island-base.component';
|
|
8
6
|
export * from './interfaces';
|
package/styles/styles.scss
CHANGED
package/transforms/group.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { PlaitBoard, PlaitElement } from '../interfaces';
|
|
2
2
|
export declare const addGroup: (board: PlaitBoard, elements?: PlaitElement[]) => void;
|
|
3
3
|
export declare const removeGroup: (board: PlaitBoard, elements?: PlaitElement[]) => void;
|
|
4
|
+
export interface GroupTransforms {
|
|
5
|
+
addGroup: (board: PlaitBoard, elements?: PlaitElement[]) => void;
|
|
6
|
+
removeGroup: (board: PlaitBoard, elements?: PlaitElement[]) => void;
|
|
7
|
+
}
|
|
4
8
|
export declare const GroupTransforms: {
|
|
5
9
|
addGroup: (board: PlaitBoard, elements?: PlaitElement[]) => void;
|
|
6
10
|
removeGroup: (board: PlaitBoard, elements?: PlaitElement[]) => void;
|
package/transforms/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { GeneralTransforms } from './general';
|
|
2
|
+
import { GroupTransforms } from './group';
|
|
2
3
|
import { NodeTransforms } from './node';
|
|
3
4
|
import { SelectionTransforms } from './selection';
|
|
4
5
|
import { ViewportTransforms } from './viewport';
|
|
6
|
+
import { ZIndexTransforms } from './z-index';
|
|
5
7
|
export { BoardTransforms } from './board';
|
|
6
8
|
export { CoreTransforms } from './element';
|
|
7
|
-
export
|
|
8
|
-
export declare const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms;
|
|
9
|
+
export declare const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms & GroupTransforms & ZIndexTransforms;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { PlaitBoard } from '../interfaces';
|
|
2
|
+
export interface ZIndexTransforms {
|
|
3
|
+
moveUp: (board: PlaitBoard) => void;
|
|
4
|
+
moveDown: (board: PlaitBoard) => void;
|
|
5
|
+
moveToTop: (board: PlaitBoard) => void;
|
|
6
|
+
moveToBottom: (board: PlaitBoard) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const ZIndexTransforms: {
|
|
9
|
+
moveUp: (board: PlaitBoard) => void;
|
|
10
|
+
moveDown: (board: PlaitBoard) => void;
|
|
11
|
+
moveToTop: (board: PlaitBoard) => void;
|
|
12
|
+
moveToBottom: (board: PlaitBoard) => void;
|
|
13
|
+
};
|
package/utils/angle.d.ts
CHANGED
|
@@ -16,3 +16,5 @@ export declare const isAxisChangedByAngle: (angle: number) => boolean;
|
|
|
16
16
|
export declare function degreesToRadians(d: number): number;
|
|
17
17
|
export declare function radiansToDegrees(r: number): number;
|
|
18
18
|
export declare function rotateElements(board: PlaitBoard, elements: PlaitElement[], angle: number): void;
|
|
19
|
+
export declare const normalizeAngle: (angle: number) => number;
|
|
20
|
+
export declare const getAngleBetweenPoints: (startPoint: Point, endPoint: Point, centerPoint: Point) => number;
|
|
@@ -5,5 +5,5 @@ export declare const stripHtml: (html: string) => string;
|
|
|
5
5
|
export declare const getProbablySupportsClipboardWrite: () => boolean;
|
|
6
6
|
export declare const getProbablySupportsClipboardWriteText: () => boolean;
|
|
7
7
|
export declare const getProbablySupportsClipboardRead: () => boolean;
|
|
8
|
-
export declare const createClipboardContext: (type: WritableClipboardType,
|
|
8
|
+
export declare const createClipboardContext: (type: WritableClipboardType, elements: WritableClipboardData, text: string) => WritableClipboardContext;
|
|
9
9
|
export declare const addClipboardContext: (clipboardContext: WritableClipboardContext, addition: WritableClipboardContext) => WritableClipboardContext;
|
|
@@ -7,7 +7,7 @@ export type WritableClipboardData = PlaitElement[] | any[];
|
|
|
7
7
|
export interface WritableClipboardContext {
|
|
8
8
|
text: string;
|
|
9
9
|
type: WritableClipboardType;
|
|
10
|
-
|
|
10
|
+
elements: WritableClipboardData;
|
|
11
11
|
}
|
|
12
12
|
export interface ClipboardData {
|
|
13
13
|
files?: File[];
|
package/utils/common.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
|
+
import { Path, PlaitElement } from '../interfaces';
|
|
1
2
|
import { PlaitBoard } from '../interfaces/board';
|
|
3
|
+
export interface MoveNodeOption {
|
|
4
|
+
element: PlaitElement;
|
|
5
|
+
newPath: Path;
|
|
6
|
+
}
|
|
2
7
|
export declare const throttleRAF: (board: PlaitBoard, key: string, fn: () => void) => void;
|
|
3
8
|
export declare const debounce: (func: () => void, wait: number, options?: {
|
|
4
9
|
leading: boolean;
|
|
5
10
|
}) => () => void;
|
|
11
|
+
export declare const getElementsIndices: (board: PlaitBoard, elements: PlaitElement[]) => number[];
|
|
12
|
+
export declare const getHighestIndexOfElement: (board: PlaitBoard, elements: PlaitElement[]) => number;
|
|
13
|
+
export declare const moveElementsToNewPath: (board: PlaitBoard, moveOptions: MoveNodeOption[]) => void;
|
package/utils/fragment.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
import { PlaitBoard } from
|
|
1
|
+
import { PlaitBoard, PlaitElement } from '../interfaces';
|
|
2
2
|
export declare const deleteFragment: (board: PlaitBoard) => void;
|
|
3
|
+
export declare const setFragment: (board: PlaitBoard, type: 'copy' | 'cut', clipboardData: DataTransfer | null) => void;
|
|
4
|
+
export declare const duplicateElements: (board: PlaitBoard, elements?: PlaitElement[]) => void;
|
package/utils/group.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PlaitBoard, PlaitElement, PlaitGroup, RectangleClient } from '../interfaces';
|
|
1
|
+
import { Path, PlaitBoard, PlaitElement, PlaitGroup, RectangleClient } from '../interfaces';
|
|
2
2
|
export declare const getElementsInGroup: (board: PlaitBoard, group: PlaitGroup, recursion?: boolean, includeGroup?: boolean) => PlaitElement[];
|
|
3
3
|
export declare const getAllElementsInGroup: (board: PlaitBoard, group: PlaitGroup, recursion?: boolean, includeGroup?: boolean) => PlaitElement[];
|
|
4
4
|
export declare const getRectangleByGroup: (board: PlaitBoard, group: PlaitGroup, recursion?: boolean) => RectangleClient;
|
|
@@ -20,3 +20,5 @@ export declare const nonGroupInHighestSelectedElements: (elements: PlaitElement[
|
|
|
20
20
|
export declare const hasSelectedElementsInSameGroup: (elements: PlaitElement[]) => boolean;
|
|
21
21
|
export declare const canAddGroup: (board: PlaitBoard, elements?: PlaitElement[]) => boolean;
|
|
22
22
|
export declare const canRemoveGroup: (board: PlaitBoard, elements?: PlaitElement[]) => boolean;
|
|
23
|
+
export declare const getEditingGroup: (board: PlaitBoard, element: PlaitElement) => PlaitGroup | null;
|
|
24
|
+
export declare const moveElementsToNewPathAfterAddGroup: (board: PlaitBoard, selectedElements: PlaitElement[], newPath: Path) => void;
|
package/utils/helper.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PlaitElement } from
|
|
1
|
+
import { PlaitElement } from '../interfaces';
|
|
2
2
|
export declare function isNullOrUndefined(value: any): boolean;
|
|
3
3
|
/**
|
|
4
4
|
* get {x,y} point
|
|
@@ -12,3 +12,6 @@ export declare function normalizePoint(point: number[]): {
|
|
|
12
12
|
export declare const RgbaToHEX: (Rgb: string, opacity: number) => string;
|
|
13
13
|
export declare function isContextmenu(event: MouseEvent): boolean;
|
|
14
14
|
export declare function uniqueById(elements: PlaitElement[]): any[];
|
|
15
|
+
export declare const findLastIndex: <T>(array: readonly T[], cb: (element: T, index: number, array: readonly T[]) => boolean, fromIndex?: number) => number;
|
|
16
|
+
export declare const findIndex: <T>(array: readonly T[], cb: (element: T, index: number, array: readonly T[]) => boolean, fromIndex?: number) => number;
|
|
17
|
+
export declare const isIndicesContinuous: (indexes: number[]) => boolean;
|
package/utils/index.d.ts
CHANGED
package/utils/math.d.ts
CHANGED
|
@@ -35,3 +35,4 @@ export declare function toFixed(v: number): number;
|
|
|
35
35
|
* @public
|
|
36
36
|
*/
|
|
37
37
|
export declare function approximately(a: number, b: number, precision?: number): boolean;
|
|
38
|
+
export declare function getCrossingPointsBetweenEllipseAndSegment(startPoint: Point, endPoint: Point, cx: number, cy: number, rx: number, ry: number, segment_only?: boolean): number[][];
|
package/utils/position.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import { PlaitBoard, PlaitElement } from '../interfaces';
|
|
2
|
-
export declare const sortElements: (board: PlaitBoard, elements: PlaitElement[]) => PlaitElement[];
|
|
2
|
+
export declare const sortElements: (board: PlaitBoard, elements: PlaitElement[], ascendingOrder?: boolean) => PlaitElement[];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PlaitBoard } from '../../interfaces/board';
|
|
2
|
+
import { PlaitElement } from '../../interfaces/element';
|
|
3
|
+
import { RectangleClient } from '../../interfaces';
|
|
4
|
+
import { SnapRef } from './snap';
|
|
5
|
+
export declare function getSnapMovingRef(board: PlaitBoard, activeRectangle: RectangleClient, activeElements: PlaitElement[]): SnapRef;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { PlaitBoard, PlaitElement, Point, RectangleClient } from '../../interfaces';
|
|
2
|
+
export interface SnapDelta {
|
|
3
|
+
deltaX: number;
|
|
4
|
+
deltaY: number;
|
|
5
|
+
}
|
|
6
|
+
export interface SnapRef extends SnapDelta {
|
|
7
|
+
snapG: SVGGElement;
|
|
8
|
+
}
|
|
9
|
+
export interface GapSnapRef {
|
|
10
|
+
before: {
|
|
11
|
+
distance: number;
|
|
12
|
+
index: number;
|
|
13
|
+
}[];
|
|
14
|
+
after: {
|
|
15
|
+
distance: number;
|
|
16
|
+
index: number;
|
|
17
|
+
}[];
|
|
18
|
+
}
|
|
19
|
+
type TripleSnapAxis = [number, number, number];
|
|
20
|
+
export declare const SNAP_TOLERANCE = 2;
|
|
21
|
+
export declare function getSnapRectangles(board: PlaitBoard, activeElements: PlaitElement[]): RectangleClient[];
|
|
22
|
+
export declare function getBarPoint(point: Point, isHorizontal: boolean): number[][];
|
|
23
|
+
export declare function getMinPointDelta(pointRectangles: RectangleClient[], axis: number, isHorizontal: boolean): number;
|
|
24
|
+
export declare const getNearestDelta: (axis: number, rectangle: RectangleClient, isHorizontal: boolean) => number;
|
|
25
|
+
export declare const getTripleAxis: (rectangle: RectangleClient, isHorizontal: boolean) => TripleSnapAxis;
|
|
26
|
+
export declare function getNearestPointRectangle(snapRectangles: RectangleClient[], activeRectangle: RectangleClient): RectangleClient;
|
|
27
|
+
export declare const isSnapPoint: (axis: number, rectangle: RectangleClient, isHorizontal: boolean) => boolean;
|
|
28
|
+
export declare function drawPointSnapLines(board: PlaitBoard, activeRectangle: RectangleClient, snapRectangles: RectangleClient[], drawHorizontal?: boolean, drawVertical?: boolean, snapMiddle?: boolean): SVGGElement;
|
|
29
|
+
export declare function drawDashedLines(board: PlaitBoard, lines: [Point, Point][]): SVGGElement;
|
|
30
|
+
export declare function drawSolidLines(board: PlaitBoard, lines: Point[][]): SVGGElement;
|
|
31
|
+
export {};
|
package/utils/weak-maps.d.ts
CHANGED
|
@@ -9,6 +9,8 @@ export declare const IS_BOARD_CACHE: WeakMap<Object, boolean>;
|
|
|
9
9
|
export declare const FLUSHING: WeakMap<PlaitBoard, boolean>;
|
|
10
10
|
export declare const NODE_TO_INDEX: WeakMap<PlaitElement, number>;
|
|
11
11
|
export declare const NODE_TO_PARENT: WeakMap<PlaitElement, Ancestor>;
|
|
12
|
+
export declare const NODE_TO_G: WeakMap<PlaitElement, SVGGElement>;
|
|
13
|
+
export declare const NODE_TO_CONTAINER_G: WeakMap<PlaitElement, SVGGElement>;
|
|
12
14
|
export declare const IS_TEXT_EDITABLE: WeakMap<PlaitBoard, boolean>;
|
|
13
15
|
export declare const BOARD_TO_ON_CHANGE: WeakMap<PlaitBoard, () => void>;
|
|
14
16
|
export declare const BOARD_TO_AFTER_CHANGE: WeakMap<PlaitBoard, () => void>;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PlaitBoard } from '../interfaces';
|
|
2
|
+
import { MoveNodeOption } from './common';
|
|
3
|
+
export declare const getOneMoveOptions: (board: PlaitBoard, direction: 'down' | 'up') => MoveNodeOption[];
|
|
4
|
+
export declare const getAllMoveOptions: (board: PlaitBoard, direction: 'down' | 'up') => MoveNodeOption[];
|
|
5
|
+
export declare const canSetZIndex: (board: PlaitBoard) => boolean;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
2
|
-
import { PlaitBoard } from '../../interfaces/board';
|
|
3
|
-
import { PlaitElement } from '../../interfaces/element';
|
|
4
|
-
import { PlaitEffect } from './effect';
|
|
5
|
-
import { Ancestor } from '../../interfaces/node';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export declare class PlaitChildrenElementComponent implements OnInit {
|
|
8
|
-
board: PlaitBoard;
|
|
9
|
-
parent: Ancestor;
|
|
10
|
-
effect?: PlaitEffect;
|
|
11
|
-
parentG: SVGGElement;
|
|
12
|
-
constructor();
|
|
13
|
-
ngOnInit(): void;
|
|
14
|
-
trackBy: (index: number, element: PlaitElement) => string;
|
|
15
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PlaitChildrenElementComponent, never>;
|
|
16
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PlaitChildrenElementComponent, "plait-children", never, { "board": { "alias": "board"; "required": false; }; "parent": { "alias": "parent"; "required": false; }; "effect": { "alias": "effect"; "required": false; }; "parentG": { "alias": "parentG"; "required": false; }; }, {}, never, never, true, never>;
|
|
17
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { OnChanges, OnDestroy, OnInit, Renderer2, SimpleChanges, ViewContainerRef } from '@angular/core';
|
|
2
|
-
import { PlaitBoard } from '../../interfaces/board';
|
|
3
|
-
import { PlaitElement } from '../../interfaces/element';
|
|
4
|
-
import { PlaitPluginElementContext } from './context';
|
|
5
|
-
import { PlaitPluginElementComponent } from './plugin-element';
|
|
6
|
-
import { PlaitEffect } from '../children/effect';
|
|
7
|
-
import { Ancestor } from '../../interfaces/node';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
export declare class PlaitElementComponent implements OnInit, OnChanges, OnDestroy {
|
|
10
|
-
renderer2: Renderer2;
|
|
11
|
-
viewContainerRef: ViewContainerRef;
|
|
12
|
-
initialized: boolean;
|
|
13
|
-
instance?: PlaitPluginElementComponent<PlaitElement>;
|
|
14
|
-
index: number;
|
|
15
|
-
element: PlaitElement;
|
|
16
|
-
parent: Ancestor;
|
|
17
|
-
board: PlaitBoard;
|
|
18
|
-
effect?: PlaitEffect;
|
|
19
|
-
parentG: SVGGElement;
|
|
20
|
-
constructor(renderer2: Renderer2, viewContainerRef: ViewContainerRef);
|
|
21
|
-
ngOnInit(): void;
|
|
22
|
-
initialize(): void;
|
|
23
|
-
drawElement(): void;
|
|
24
|
-
insertG(g: SVGGElement): void;
|
|
25
|
-
ngOnChanges(simpleChanges: SimpleChanges): void;
|
|
26
|
-
getContext(): PlaitPluginElementContext;
|
|
27
|
-
ngOnDestroy(): void;
|
|
28
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<PlaitElementComponent, never>;
|
|
29
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PlaitElementComponent, "plait-element", never, { "index": { "alias": "index"; "required": false; }; "element": { "alias": "element"; "required": false; }; "parent": { "alias": "parent"; "required": false; }; "board": { "alias": "board"; "required": false; }; "effect": { "alias": "effect"; "required": false; }; "parentG": { "alias": "parentG"; "required": false; }; }, {}, never, never, true, never>;
|
|
30
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { PlaitBoard } from '../../interfaces/board';
|
|
3
|
-
import { PlaitElementComponent } from '../element/element.component';
|
|
4
|
-
import { NgFor } from '@angular/common';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export class PlaitChildrenElementComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
this.trackBy = (index, element) => {
|
|
9
|
-
return element.id;
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
ngOnInit() {
|
|
13
|
-
if (!this.parent) {
|
|
14
|
-
this.parent = this.board;
|
|
15
|
-
}
|
|
16
|
-
if (!this.parentG) {
|
|
17
|
-
this.parentG = PlaitBoard.getElementHost(this.board);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PlaitChildrenElementComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
21
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: PlaitChildrenElementComponent, isStandalone: true, selector: "plait-children", inputs: { board: "board", parent: "parent", effect: "effect", parentG: "parentG" }, ngImport: i0, template: `
|
|
22
|
-
<plait-element
|
|
23
|
-
*ngFor="let item of parent.children; let index = index; trackBy: trackBy"
|
|
24
|
-
[index]="index"
|
|
25
|
-
[element]="item"
|
|
26
|
-
[parent]="parent"
|
|
27
|
-
[board]="board"
|
|
28
|
-
[effect]="effect"
|
|
29
|
-
[parentG]="parentG"
|
|
30
|
-
></plait-element>
|
|
31
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: PlaitElementComponent, selector: "plait-element", inputs: ["index", "element", "parent", "board", "effect", "parentG"] }] }); }
|
|
32
|
-
}
|
|
33
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PlaitChildrenElementComponent, decorators: [{
|
|
34
|
-
type: Component,
|
|
35
|
-
args: [{
|
|
36
|
-
selector: 'plait-children',
|
|
37
|
-
template: `
|
|
38
|
-
<plait-element
|
|
39
|
-
*ngFor="let item of parent.children; let index = index; trackBy: trackBy"
|
|
40
|
-
[index]="index"
|
|
41
|
-
[element]="item"
|
|
42
|
-
[parent]="parent"
|
|
43
|
-
[board]="board"
|
|
44
|
-
[effect]="effect"
|
|
45
|
-
[parentG]="parentG"
|
|
46
|
-
></plait-element>
|
|
47
|
-
`,
|
|
48
|
-
standalone: true,
|
|
49
|
-
imports: [NgFor, PlaitElementComponent]
|
|
50
|
-
}]
|
|
51
|
-
}], ctorParameters: () => [], propDecorators: { board: [{
|
|
52
|
-
type: Input
|
|
53
|
-
}], parent: [{
|
|
54
|
-
type: Input
|
|
55
|
-
}], effect: [{
|
|
56
|
-
type: Input
|
|
57
|
-
}], parentG: [{
|
|
58
|
-
type: Input
|
|
59
|
-
}] } });
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvY29yZS9jaGlsZHJlbi9jaGlsZHJlbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSXBELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFrQnhDLE1BQU0sT0FBTyw2QkFBNkI7SUFTdEM7UUFXQSxZQUFPLEdBQUcsQ0FBQyxLQUFhLEVBQUUsT0FBcUIsRUFBRSxFQUFFO1lBQy9DLE9BQU8sT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUM7SUFiYSxDQUFDO0lBRWhCLFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNMLENBQUM7OEdBbEJRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLDhKQWQ1Qjs7Ozs7Ozs7OztLQVVULDREQUVTLEtBQUssbUhBQUUscUJBQXFCOzsyRkFFN0IsNkJBQTZCO2tCQWhCekMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7S0FVVDtvQkFDRCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDO2lCQUMxQzt3REFFWSxLQUFLO3NCQUFiLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdEVmZmVjdCB9IGZyb20gJy4vZWZmZWN0JztcbmltcG9ydCB7IEFuY2VzdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4uL2VsZW1lbnQvZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdGb3IgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3BsYWl0LWNoaWxkcmVuJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8cGxhaXQtZWxlbWVudFxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgcGFyZW50LmNoaWxkcmVuOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVwiXG4gICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgW2VsZW1lbnRdPVwiaXRlbVwiXG4gICAgICAgICAgICBbcGFyZW50XT1cInBhcmVudFwiXG4gICAgICAgICAgICBbYm9hcmRdPVwiYm9hcmRcIlxuICAgICAgICAgICAgW2VmZmVjdF09XCJlZmZlY3RcIlxuICAgICAgICAgICAgW3BhcmVudEddPVwicGFyZW50R1wiXG4gICAgICAgID48L3BsYWl0LWVsZW1lbnQ+XG4gICAgYCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0ZvciwgUGxhaXRFbGVtZW50Q29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBQbGFpdENoaWxkcmVuRWxlbWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgQElucHV0KCkgYm9hcmQhOiBQbGFpdEJvYXJkO1xuXG4gICAgQElucHV0KCkgcGFyZW50ITogQW5jZXN0b3I7XG5cbiAgICBASW5wdXQoKSBlZmZlY3Q/OiBQbGFpdEVmZmVjdDtcblxuICAgIEBJbnB1dCgpIHBhcmVudEchOiBTVkdHRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKCkge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudCA9IHRoaXMuYm9hcmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnBhcmVudEcpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50RyA9IFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEhvc3QodGhpcy5ib2FyZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5pZDtcbiAgICB9O1xufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvY29yZS9jaGlsZHJlbi9lZmZlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUGxhaXRFZmZlY3Qge31cbiJdfQ==
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
-
import { PlaitBoard } from '../../interfaces/board';
|
|
3
|
-
import { PlaitElement } from '../../interfaces/element';
|
|
4
|
-
import { PlaitNode } from '../../interfaces/node';
|
|
5
|
-
import { NODE_TO_INDEX, NODE_TO_PARENT } from '../../utils/weak-maps';
|
|
6
|
-
import { addSelectedElement, isSelectedElement, removeSelectedElement } from '../../utils';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
export class PlaitElementComponent {
|
|
9
|
-
constructor(renderer2, viewContainerRef) {
|
|
10
|
-
this.renderer2 = renderer2;
|
|
11
|
-
this.viewContainerRef = viewContainerRef;
|
|
12
|
-
this.initialized = false;
|
|
13
|
-
}
|
|
14
|
-
ngOnInit() {
|
|
15
|
-
this.initialize();
|
|
16
|
-
this.drawElement();
|
|
17
|
-
}
|
|
18
|
-
initialize() {
|
|
19
|
-
NODE_TO_INDEX.set(this.element, this.index);
|
|
20
|
-
NODE_TO_PARENT.set(this.element, this.parent);
|
|
21
|
-
this.initialized = true;
|
|
22
|
-
}
|
|
23
|
-
drawElement() {
|
|
24
|
-
const context = this.getContext();
|
|
25
|
-
const result = this.board.drawElement(context);
|
|
26
|
-
if (Array.isArray(result)) {
|
|
27
|
-
}
|
|
28
|
-
else {
|
|
29
|
-
const componentRef = this.viewContainerRef.createComponent(result);
|
|
30
|
-
const instance = componentRef.instance;
|
|
31
|
-
instance.context = context;
|
|
32
|
-
this.insertG(instance.rootG ? instance.rootG : instance.g);
|
|
33
|
-
this.instance = instance;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
insertG(g) {
|
|
37
|
-
if (PlaitBoard.isBoard(this.parent)) {
|
|
38
|
-
this.parentG.append(g);
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
let siblingG = PlaitElement.getComponent(this.parent).g;
|
|
42
|
-
if (this.index > 0) {
|
|
43
|
-
const brotherElement = this.parent.children[this.index - 1];
|
|
44
|
-
const lastElement = PlaitNode.last(this.board, PlaitBoard.findPath(this.board, brotherElement));
|
|
45
|
-
let component = PlaitElement.getComponent(lastElement) || PlaitElement.getComponent(brotherElement);
|
|
46
|
-
siblingG = component.g;
|
|
47
|
-
}
|
|
48
|
-
this.parentG.insertBefore(g, siblingG);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
ngOnChanges(simpleChanges) {
|
|
52
|
-
if (this.initialized) {
|
|
53
|
-
NODE_TO_INDEX.set(this.element, this.index);
|
|
54
|
-
NODE_TO_PARENT.set(this.element, this.parent);
|
|
55
|
-
const elementChanged = simpleChanges['element'];
|
|
56
|
-
const context = this.getContext();
|
|
57
|
-
if (elementChanged && isSelectedElement(this.board, elementChanged.previousValue)) {
|
|
58
|
-
context.selected = true;
|
|
59
|
-
removeSelectedElement(this.board, elementChanged.previousValue);
|
|
60
|
-
addSelectedElement(this.board, this.element);
|
|
61
|
-
}
|
|
62
|
-
if (this.instance) {
|
|
63
|
-
this.instance.context = context;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
getContext() {
|
|
68
|
-
const isSelected = isSelectedElement(this.board, this.element);
|
|
69
|
-
const context = {
|
|
70
|
-
element: this.element,
|
|
71
|
-
parent: this.parent,
|
|
72
|
-
board: this.board,
|
|
73
|
-
selected: isSelected,
|
|
74
|
-
effect: this.effect
|
|
75
|
-
};
|
|
76
|
-
return context;
|
|
77
|
-
}
|
|
78
|
-
ngOnDestroy() {
|
|
79
|
-
this.board.destroyElement(this.getContext());
|
|
80
|
-
}
|
|
81
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PlaitElementComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
82
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: PlaitElementComponent, isStandalone: true, selector: "plait-element", inputs: { index: "index", element: "element", parent: "parent", board: "board", effect: "effect", parentG: "parentG" }, usesOnChanges: true, ngImport: i0, template: '', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
83
|
-
}
|
|
84
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PlaitElementComponent, decorators: [{
|
|
85
|
-
type: Component,
|
|
86
|
-
args: [{
|
|
87
|
-
selector: 'plait-element',
|
|
88
|
-
template: '',
|
|
89
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
90
|
-
standalone: true
|
|
91
|
-
}]
|
|
92
|
-
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ViewContainerRef }], propDecorators: { index: [{
|
|
93
|
-
type: Input
|
|
94
|
-
}], element: [{
|
|
95
|
-
type: Input
|
|
96
|
-
}], parent: [{
|
|
97
|
-
type: Input
|
|
98
|
-
}], board: [{
|
|
99
|
-
type: Input
|
|
100
|
-
}], effect: [{
|
|
101
|
-
type: Input
|
|
102
|
-
}], parentG: [{
|
|
103
|
-
type: Input
|
|
104
|
-
}] } });
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9jb3JlL2VsZW1lbnQvZWxlbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQU9SLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJeEQsT0FBTyxFQUFZLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQVEzRixNQUFNLE9BQU8scUJBQXFCO0lBaUI5QixZQUFtQixTQUFvQixFQUFTLGdCQUFrQztRQUEvRCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQWhCbEYsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUFnQmlFLENBQUM7SUFFdEYsUUFBUTtRQUNKLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFVBQVU7UUFDTixhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDUCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFDNUIsQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUM7WUFDdkMsUUFBUSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDN0IsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsQ0FBYztRQUNsQixJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNqQixNQUFNLGNBQWMsR0FBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQTJCLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDaEYsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNoRyxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3BHLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDM0MsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsYUFBNEI7UUFDcEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1QyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNoRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEMsSUFBSSxjQUFjLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDaEYsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNoRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ04sTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0QsTUFBTSxPQUFPLEdBQThCO1lBQ3ZDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN0QixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDOzhHQXpGUSxxQkFBcUI7a0dBQXJCLHFCQUFxQixzTkFKcEIsRUFBRTs7MkZBSUgscUJBQXFCO2tCQU5qQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsRUFBRTtvQkFDWixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ25COzZHQU1ZLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IFBsYWl0UGx1Z2luRWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4vcGx1Z2luLWVsZW1lbnQnO1xuaW1wb3J0IHsgUGxhaXRFZmZlY3QgfSBmcm9tICcuLi9jaGlsZHJlbi9lZmZlY3QnO1xuaW1wb3J0IHsgQW5jZXN0b3IsIFBsYWl0Tm9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBOT0RFX1RPX0lOREVYLCBOT0RFX1RPX1BBUkVOVCB9IGZyb20gJy4uLy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBhZGRTZWxlY3RlZEVsZW1lbnQsIGlzU2VsZWN0ZWRFbGVtZW50LCByZW1vdmVTZWxlY3RlZEVsZW1lbnQgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGxhaXQtZWxlbWVudCcsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgUGxhaXRFbGVtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIGluc3RhbmNlPzogUGxhaXRQbHVnaW5FbGVtZW50Q29tcG9uZW50PFBsYWl0RWxlbWVudD47XG5cbiAgICBASW5wdXQoKSBpbmRleCE6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGVsZW1lbnQhOiBQbGFpdEVsZW1lbnQ7XG5cbiAgICBASW5wdXQoKSBwYXJlbnQhOiBBbmNlc3RvcjtcblxuICAgIEBJbnB1dCgpIGJvYXJkITogUGxhaXRCb2FyZDtcblxuICAgIEBJbnB1dCgpIGVmZmVjdD86IFBsYWl0RWZmZWN0O1xuXG4gICAgQElucHV0KCkgcGFyZW50RyE6IFNWR0dFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlbmRlcmVyMjogUmVuZGVyZXIyLCBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5kcmF3RWxlbWVudCgpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZWxlbWVudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmVsZW1lbnQsIHRoaXMucGFyZW50KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZHJhd0VsZW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ib2FyZC5kcmF3RWxlbWVudChjb250ZXh0KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChyZXN1bHQpO1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0RyhpbnN0YW5jZS5yb290RyA/IGluc3RhbmNlLnJvb3RHIDogaW5zdGFuY2UuZyk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRHKGc6IFNWR0dFbGVtZW50KSB7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQodGhpcy5wYXJlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEcuYXBwZW5kKGcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHNpYmxpbmdHID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudCh0aGlzLnBhcmVudCkuZztcbiAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyb3RoZXJFbGVtZW50ID0gKHRoaXMucGFyZW50LmNoaWxkcmVuIGFzIFBsYWl0RWxlbWVudFtdKVt0aGlzLmluZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSBQbGFpdE5vZGUubGFzdCh0aGlzLmJvYXJkLCBQbGFpdEJvYXJkLmZpbmRQYXRoKHRoaXMuYm9hcmQsIGJyb3RoZXJFbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQobGFzdEVsZW1lbnQpIHx8IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoYnJvdGhlckVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHNpYmxpbmdHID0gY29tcG9uZW50Lmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmVudEcuaW5zZXJ0QmVmb3JlKGcsIHNpYmxpbmdHKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKHNpbXBsZUNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZWxlbWVudCwgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICBOT0RFX1RPX1BBUkVOVC5zZXQodGhpcy5lbGVtZW50LCB0aGlzLnBhcmVudCk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50Q2hhbmdlZCA9IHNpbXBsZUNoYW5nZXNbJ2VsZW1lbnQnXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Q2hhbmdlZCAmJiBpc1NlbGVjdGVkRWxlbWVudCh0aGlzLmJvYXJkLCBlbGVtZW50Q2hhbmdlZC5wcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkRWxlbWVudCh0aGlzLmJvYXJkLCBlbGVtZW50Q2hhbmdlZC5wcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBhZGRTZWxlY3RlZEVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbnRleHQoKTogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCB7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBpc1NlbGVjdGVkRWxlbWVudCh0aGlzLmJvYXJkLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjb250ZXh0OiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0ID0ge1xuICAgICAgICAgICAgZWxlbWVudDogdGhpcy5lbGVtZW50LFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCxcbiAgICAgICAgICAgIGJvYXJkOiB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAgICBlZmZlY3Q6IHRoaXMuZWZmZWN0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJvYXJkLmRlc3Ryb3lFbGVtZW50KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICB9XG59XG4iXX0=
|