@plait/core 0.53.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 +5 -2
- package/constants/index.d.ts +2 -0
- package/constants/selection.d.ts +1 -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 +28 -23
- package/esm2022/constants/index.mjs +3 -1
- package/esm2022/constants/selection.mjs +2 -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 +6 -2
- package/esm2022/interfaces/element.mjs +28 -2
- package/esm2022/interfaces/node.mjs +18 -1
- package/esm2022/interfaces/path.mjs +56 -57
- package/esm2022/interfaces/rectangle-client.mjs +4 -1
- package/esm2022/interfaces/selection.mjs +2 -2
- package/esm2022/plugins/create-board.mjs +15 -13
- package/esm2022/plugins/with-hotkey.mjs +33 -4
- package/esm2022/plugins/with-moving.mjs +15 -14
- package/esm2022/plugins/with-related-fragment.mjs +5 -5
- package/esm2022/plugins/with-selection.mjs +7 -5
- package/esm2022/public-api.mjs +1 -3
- package/esm2022/transforms/element.mjs +2 -2
- 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 +56 -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 +29 -2
- package/esm2022/utils/debug.mjs +16 -1
- package/esm2022/utils/element.mjs +3 -3
- package/esm2022/utils/fragment.mjs +24 -0
- package/esm2022/utils/group.mjs +37 -5
- package/esm2022/utils/helper.mjs +37 -1
- package/esm2022/utils/index.mjs +5 -1
- package/esm2022/utils/math.mjs +37 -1
- package/esm2022/utils/position.mjs +3 -3
- package/esm2022/utils/selection.mjs +2 -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 +4 -1
- package/esm2022/utils/z-index.mjs +166 -0
- package/fesm2022/plait-core.mjs +2110 -1458
- package/fesm2022/plait-core.mjs.map +1 -1
- package/interfaces/board.d.ts +9 -7
- package/interfaces/element.d.ts +5 -0
- package/interfaces/node.d.ts +1 -0
- package/interfaces/rectangle-client.d.ts +1 -0
- package/interfaces/selection.d.ts +1 -1
- 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 +8 -1
- 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/debug.d.ts +1 -0
- package/utils/fragment.d.ts +4 -0
- package/utils/group.d.ts +4 -2
- package/utils/helper.d.ts +4 -1
- package/utils/index.d.ts +4 -0
- package/utils/math.d.ts +1 -0
- package/utils/position.d.ts +1 -1
- package/utils/selection.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 +3 -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/reaction-manager.mjs +0 -371
- package/utils/reaction-manager.d.ts +0 -41
package/interfaces/board.d.ts
CHANGED
|
@@ -29,6 +29,7 @@ export interface PlaitBoard {
|
|
|
29
29
|
apply: (operation: PlaitOperation) => void;
|
|
30
30
|
onChange: () => void;
|
|
31
31
|
afterChange: () => void;
|
|
32
|
+
drawActiveRectangle: () => SVGGElement | null;
|
|
32
33
|
mousedown: (event: MouseEvent) => void;
|
|
33
34
|
mousemove: (event: MouseEvent) => void;
|
|
34
35
|
mouseleave: (event: MouseEvent) => void;
|
|
@@ -38,15 +39,13 @@ export interface PlaitBoard {
|
|
|
38
39
|
keyDown: (event: KeyboardEvent) => void;
|
|
39
40
|
globalKeyDown: (event: KeyboardEvent) => void;
|
|
40
41
|
keyUp: (event: KeyboardEvent) => void;
|
|
41
|
-
|
|
42
|
-
insertFragment: (
|
|
43
|
-
deleteFragment: (data:
|
|
42
|
+
buildFragment: (clipboardContext: WritableClipboardContext | null, rectangle: RectangleClient | null, type: 'copy' | 'cut') => WritableClipboardContext | null;
|
|
43
|
+
insertFragment: (clipboardData: ClipboardData | null, targetPoint: Point) => void;
|
|
44
|
+
deleteFragment: (data: PlaitElement[]) => void;
|
|
44
45
|
getDeletedFragment: (data: PlaitElement[]) => PlaitElement[];
|
|
45
|
-
getRelatedFragment: (data: PlaitElement[]) => PlaitElement[];
|
|
46
|
+
getRelatedFragment: (data: PlaitElement[], originData?: PlaitElement[]) => PlaitElement[];
|
|
46
47
|
dblClick: (event: MouseEvent) => void;
|
|
47
|
-
drawElement: (context: PlaitPluginElementContext) =>
|
|
48
|
-
redrawElement: (context: PlaitPluginElementContext, previousContext?: PlaitPluginElementContext) => SVGGElement[] | void;
|
|
49
|
-
destroyElement: (context: PlaitPluginElementContext) => void;
|
|
48
|
+
drawElement: (context: PlaitPluginElementContext) => ComponentType<PlaitPluginElementComponent>;
|
|
50
49
|
isRectangleHit: (element: PlaitElement, range: Selection) => boolean;
|
|
51
50
|
isHit: (element: PlaitElement, point: Point) => boolean;
|
|
52
51
|
isInsidePoint: (element: PlaitElement, point: Point) => boolean;
|
|
@@ -60,6 +59,8 @@ export interface PlaitBoard {
|
|
|
60
59
|
isAlign: (element: PlaitElement) => boolean;
|
|
61
60
|
isImageBindingAllowed: (element: PlaitElement) => boolean;
|
|
62
61
|
canAddToGroup: (element: PlaitElement) => boolean;
|
|
62
|
+
canSetZIndex: (element: PlaitElement) => boolean;
|
|
63
|
+
isExpanded: (element: PlaitElement) => boolean;
|
|
63
64
|
pointerDown: (pointer: PointerEvent) => void;
|
|
64
65
|
pointerMove: (pointer: PointerEvent) => void;
|
|
65
66
|
pointerUp: (pointer: PointerEvent) => void;
|
|
@@ -88,6 +89,7 @@ export interface PlaitBoardMove {
|
|
|
88
89
|
}
|
|
89
90
|
export declare const PlaitBoard: {
|
|
90
91
|
isBoard(value: any): value is PlaitBoard;
|
|
92
|
+
isAlive(board: PlaitBoard): boolean;
|
|
91
93
|
findPath(board: PlaitBoard, node: PlaitNode): Path;
|
|
92
94
|
getHost(board: PlaitBoard): SVGSVGElement;
|
|
93
95
|
getElementHost(board: PlaitBoard): SVGSVGElement;
|
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
|
};
|
|
@@ -34,6 +34,7 @@ export declare const RectangleClient: {
|
|
|
34
34
|
isEqual: (rectangle: RectangleClient, otherRectangle: RectangleClient) => boolean;
|
|
35
35
|
getCornerPoints: (rectangle: RectangleClient) => [Point, Point, Point, Point];
|
|
36
36
|
getCenterPoint: (rectangle: RectangleClient) => Point;
|
|
37
|
+
getCenterPointByPoints: (points: Point[]) => Point;
|
|
37
38
|
getEdgeCenterPoints: (rectangle: RectangleClient) => [Point, Point, Point, Point];
|
|
38
39
|
getConnectionPoint: (rectangle: RectangleClient, point: PointOfRectangle) => Point;
|
|
39
40
|
expand(rectangle: RectangleClient, left: number, top?: number, right?: number, bottom?: number): {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Point } from './point';
|
|
2
2
|
export declare const SELECTION_BORDER_COLOR = "#6698FF";
|
|
3
|
-
export declare const SELECTION_FILL_COLOR = "#
|
|
3
|
+
export declare const SELECTION_FILL_COLOR = "#6698FF25";
|
|
4
4
|
export interface Selection {
|
|
5
5
|
anchor: Point;
|
|
6
6
|
focus: Point;
|
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
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PlaitElement, Point, RectangleClient } from '../interfaces';
|
|
1
|
+
import { PlaitBoard, PlaitElement, Point, RectangleClient } from '../interfaces';
|
|
2
2
|
export declare const rotatePoints: <T>(points: T, centerPoint: Point, angle: number) => T;
|
|
3
3
|
export declare const getSelectionAngle: (elements: PlaitElement[]) => any;
|
|
4
4
|
export declare const hasSameAngle: (elements: PlaitElement[]) => boolean;
|
|
@@ -11,3 +11,10 @@ export declare const rotatedDataPoints: (points: Point[], rotateCenterPoint: Poi
|
|
|
11
11
|
export declare const hasValidAngle: (node: PlaitElement) => any;
|
|
12
12
|
export declare const rotatePointsByElement: <T>(points: T, element: PlaitElement) => T | null;
|
|
13
13
|
export declare const rotateAntiPointsByElement: <T>(points: T, element: PlaitElement) => T | null;
|
|
14
|
+
export declare const getRectangleByAngle: (rectangle: RectangleClient, angle: number) => RectangleClient | null;
|
|
15
|
+
export declare const isAxisChangedByAngle: (angle: number) => boolean;
|
|
16
|
+
export declare function degreesToRadians(d: number): number;
|
|
17
|
+
export declare function radiansToDegrees(r: number): number;
|
|
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/debug.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare class DebugGenerator {
|
|
|
6
6
|
isDebug(): boolean;
|
|
7
7
|
clear(): void;
|
|
8
8
|
drawPolygon(board: PlaitBoard, points: Point[], options?: Options): SVGGElement | undefined;
|
|
9
|
+
drawLine(board: PlaitBoard, points: Point[], options?: Options): SVGGElement | undefined;
|
|
9
10
|
drawRectangle(board: PlaitBoard, data: Point[] | RectangleClient, options?: Options): SVGGElement | undefined;
|
|
10
11
|
drawCircles(board: PlaitBoard, points: Point[], diameter?: number, isCumulativeDiameter?: boolean, options?: Options): SVGGElement[] | undefined;
|
|
11
12
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { PlaitBoard, PlaitElement } from '../interfaces';
|
|
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,7 +1,7 @@
|
|
|
1
|
-
import { PlaitBoard, PlaitElement, PlaitGroup } 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
|
-
export declare const getRectangleByGroup: (board: PlaitBoard, group: PlaitGroup, recursion?: boolean) =>
|
|
4
|
+
export declare const getRectangleByGroup: (board: PlaitBoard, group: PlaitGroup, recursion?: boolean) => RectangleClient;
|
|
5
5
|
export declare const getGroupByElement: (board: PlaitBoard, element: PlaitElement, recursion?: boolean, source?: PlaitElement[]) => PlaitGroup | PlaitGroup[] | null;
|
|
6
6
|
export declare const getHighestGroup: (board: PlaitBoard, element: PlaitElement) => PlaitGroup | null;
|
|
7
7
|
export declare const getElementsInGroupByElement: (board: PlaitBoard, element: PlaitElement) => PlaitElement[];
|
|
@@ -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[];
|
package/utils/selection.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ export declare function getTemporaryRef(board: PlaitBoard): {
|
|
|
10
10
|
timeoutId: any;
|
|
11
11
|
} | undefined;
|
|
12
12
|
export declare function deleteTemporaryElements(board: PlaitBoard): void;
|
|
13
|
-
export declare function
|
|
13
|
+
export declare function drawEntireActiveRectangleG(board: PlaitBoard): SVGGElement | null;
|
|
14
14
|
export declare function setSelectedElementsWithGroup(board: PlaitBoard, elements: PlaitElement[], isShift: boolean): void;
|
|
15
15
|
export declare function cacheSelectedElementsWithGroupOnShift(board: PlaitBoard, elements: PlaitElement[], isSelectGroupElement: boolean, elementsInHighestGroup: PlaitElement[]): void;
|
|
16
16
|
export declare function cacheSelectedElementsWithGroup(board: PlaitBoard, elements: PlaitElement[], isSelectGroupElement: boolean, hitElementGroups: PlaitGroup[]): void;
|
|
@@ -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,12 +9,15 @@ 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>;
|
|
15
17
|
export declare const BOARD_TO_COMPONENT: WeakMap<PlaitBoard, BoardComponentInterface>;
|
|
16
18
|
export declare const BOARD_TO_ROUGH_SVG: WeakMap<PlaitBoard, RoughSVG>;
|
|
17
19
|
export declare const BOARD_TO_HOST: WeakMap<PlaitBoard, SVGSVGElement>;
|
|
20
|
+
export declare const IS_BOARD_ALIVE: WeakMap<PlaitBoard, boolean>;
|
|
18
21
|
export declare const BOARD_TO_ELEMENT_HOST: WeakMap<PlaitBoard, {
|
|
19
22
|
host: SVGGElement;
|
|
20
23
|
upperHost: SVGGElement;
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9jb3JlL2VsZW1lbnQvZWxlbWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQU9SLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFJeEQsT0FBTyxFQUFZLFNBQVMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDOztBQVEzRixNQUFNLE9BQU8scUJBQXFCO0lBaUI5QixZQUFtQixTQUFvQixFQUFTLGdCQUFrQztRQUEvRCxjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQVMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQWhCbEYsZ0JBQVcsR0FBRyxLQUFLLENBQUM7SUFnQmlFLENBQUM7SUFFdEYsUUFBUTtRQUNKLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFVBQVU7UUFDTixhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFD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QUM7Z0JBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUNwQyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ04sTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0QsTUFBTSxPQUFPLEdBQThCO1lBQ3ZDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxVQUFVO1lBQ3BCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN0QixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDOzhHQXpGUSxxQkFBcUI7a0dBQXJCLHFCQUFxQixzTkFKcEIsRUFBRTs7MkZBSUgscUJBQXFCO2tCQU5qQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsRUFBRTtvQkFDWixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsVUFBVSxFQUFFLElBQUk7aUJBQ25COzZHQU1ZLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFRyxNQUFNO3NCQUFkLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IFBsYWl0UGx1Z2luRWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4vcGx1Z2luLWVsZW1lbnQnO1xuaW1wb3J0IHsgUGxhaXRFZmZlY3QgfSBmcm9tICcuLi9jaGlsZHJlbi9lZmZlY3QnO1xuaW1wb3J0IHsgQW5jZXN0b3IsIFBsYWl0Tm9kZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBOT0RFX1RPX0lOREVYLCBOT0RFX1RPX1BBUkVOVCB9IGZyb20gJy4uLy4uL3V0aWxzL3dlYWstbWFwcyc7XG5pbXBvcnQgeyBhZGRTZWxlY3RlZEVsZW1lbnQsIGlzU2VsZWN0ZWRFbGVtZW50LCByZW1vdmVTZWxlY3RlZEVsZW1lbnQgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncGxhaXQtZWxlbWVudCcsXG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgUGxhaXRFbGVtZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICAgIGluc3RhbmNlPzogUGxhaXRQbHVnaW5FbGVtZW50Q29tcG9uZW50PFBsYWl0RWxlbWVudD47XG5cbiAgICBASW5wdXQoKSBpbmRleCE6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGVsZW1lbnQhOiBQbGFpdEVsZW1lbnQ7XG5cbiAgICBASW5wdXQoKSBwYXJlbnQhOiBBbmNlc3RvcjtcblxuICAgIEBJbnB1dCgpIGJvYXJkITogUGxhaXRCb2FyZDtcblxuICAgIEBJbnB1dCgpIGVmZmVjdD86IFBsYWl0RWZmZWN0O1xuXG4gICAgQElucHV0KCkgcGFyZW50RyE6IFNWR0dFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IocHVibGljIHJlbmRlcmVyMjogUmVuZGVyZXIyLCBwdWJsaWMgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZikge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy5kcmF3RWxlbWVudCgpO1xuICAgIH1cblxuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZWxlbWVudCwgdGhpcy5pbmRleCk7XG4gICAgICAgIE5PREVfVE9fUEFSRU5ULnNldCh0aGlzLmVsZW1lbnQsIHRoaXMucGFyZW50KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgZHJhd0VsZW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5ib2FyZC5kcmF3RWxlbWVudChjb250ZXh0KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkge1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChyZXN1bHQpO1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2U7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0RyhpbnN0YW5jZS5yb290RyA/IGluc3RhbmNlLnJvb3RHIDogaW5zdGFuY2UuZyk7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRHKGc6IFNWR0dFbGVtZW50KSB7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQodGhpcy5wYXJlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudEcuYXBwZW5kKGcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IHNpYmxpbmdHID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudCh0aGlzLnBhcmVudCkuZztcbiAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJyb3RoZXJFbGVtZW50ID0gKHRoaXMucGFyZW50LmNoaWxkcmVuIGFzIFBsYWl0RWxlbWVudFtdKVt0aGlzLmluZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSBQbGFpdE5vZGUubGFzdCh0aGlzLmJvYXJkLCBQbGFpdEJvYXJkLmZpbmRQYXRoKHRoaXMuYm9hcmQsIGJyb3RoZXJFbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgbGV0IGNvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQobGFzdEVsZW1lbnQpIHx8IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoYnJvdGhlckVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHNpYmxpbmdHID0gY29tcG9uZW50Lmc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBhcmVudEcuaW5zZXJ0QmVmb3JlKGcsIHNpYmxpbmdHKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKHNpbXBsZUNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIE5PREVfVE9fSU5ERVguc2V0KHRoaXMuZWxlbWVudCwgdGhpcy5pbmRleCk7XG4gICAgICAgICAgICBOT0RFX1RPX1BBUkVOVC5zZXQodGhpcy5lbGVtZW50LCB0aGlzLnBhcmVudCk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50Q2hhbmdlZCA9IHNpbXBsZUNoYW5nZXNbJ2VsZW1lbnQnXTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50Q2hhbmdlZCAmJiBpc1NlbGVjdGVkRWxlbWVudCh0aGlzLmJvYXJkLCBlbGVtZW50Q2hhbmdlZC5wcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkRWxlbWVudCh0aGlzLmJvYXJkLCBlbGVtZW50Q2hhbmdlZC5wcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBhZGRTZWxlY3RlZEVsZW1lbnQodGhpcy5ib2FyZCwgdGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbnRleHQoKTogUGxhaXRQbHVnaW5FbGVtZW50Q29udGV4dCB7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBpc1NlbGVjdGVkRWxlbWVudCh0aGlzLmJvYXJkLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICBjb25zdCBjb250ZXh0OiBQbGFpdFBsdWdpbkVsZW1lbnRDb250ZXh0ID0ge1xuICAgICAgICAgICAgZWxlbWVudDogdGhpcy5lbGVtZW50LFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudCxcbiAgICAgICAgICAgIGJvYXJkOiB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGlzU2VsZWN0ZWQsXG4gICAgICAgICAgICBlZmZlY3Q6IHRoaXMuZWZmZWN0XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJvYXJkLmRlc3Ryb3lFbGVtZW50KHRoaXMuZ2V0Q29udGV4dCgpKTtcbiAgICB9XG59XG4iXX0=
|