@plait/mind 0.20.0 → 0.22.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/base/image-base.component.d.ts +5 -3
- package/drawer/node-image.drawer.d.ts +3 -5
- package/esm2020/base/image-base.component.mjs +9 -5
- package/esm2020/drawer/node-image.drawer.mjs +34 -39
- package/esm2020/interfaces/element.mjs +1 -1
- package/esm2020/node.component.mjs +8 -9
- package/esm2020/plugins/with-abstract-resize.mjs +1 -2
- package/esm2020/plugins/with-mind-hotkey.mjs +3 -2
- package/esm2020/plugins/with-mind.mjs +5 -4
- package/esm2020/plugins/with-node-dnd.mjs +3 -3
- package/esm2020/plugins/with-node-hover-detect.mjs +16 -0
- package/esm2020/plugins/with-node-image.mjs +60 -0
- package/esm2020/plugins/with-node-resize.mjs +122 -0
- package/esm2020/transforms/index.mjs +3 -2
- package/esm2020/transforms/node.mjs +13 -2
- package/esm2020/utils/node/common.mjs +11 -2
- package/esm2020/utils/node/image.mjs +23 -0
- package/esm2020/utils/node/index.mjs +2 -1
- package/esm2020/utils/node-hover/extend.mjs +54 -0
- package/esm2020/utils/position/image.mjs +9 -4
- package/esm2020/utils/position/topic.mjs +3 -3
- package/esm2020/utils/space/node-space.mjs +23 -22
- package/fesm2015/plait-mind.mjs +328 -148
- package/fesm2015/plait-mind.mjs.map +1 -1
- package/fesm2020/plait-mind.mjs +329 -148
- package/fesm2020/plait-mind.mjs.map +1 -1
- package/interfaces/element.d.ts +1 -0
- package/node.component.d.ts +0 -1
- package/package.json +1 -1
- package/plugins/with-mind-hotkey.d.ts +1 -1
- package/plugins/with-node-hover-detect.d.ts +2 -0
- package/plugins/with-node-image.d.ts +2 -0
- package/plugins/with-node-resize.d.ts +10 -0
- package/styles/styles.scss +9 -2
- package/transforms/index.d.ts +1 -0
- package/transforms/node.d.ts +1 -0
- package/utils/node/common.d.ts +2 -0
- package/utils/node/image.d.ts +6 -0
- package/utils/node/index.d.ts +1 -0
- package/utils/node-hover/extend.d.ts +9 -0
- package/utils/space/node-space.d.ts +3 -3
- package/esm2020/plugins/with-mind-image.mjs +0 -49
- package/esm2020/plugins/with-node-hover.mjs +0 -58
- package/plugins/with-mind-image.d.ts +0 -2
- package/plugins/with-node-hover.d.ts +0 -5
package/interfaces/element.d.ts
CHANGED
package/node.component.d.ts
CHANGED
|
@@ -35,7 +35,6 @@ export declare class MindNodeComponent extends PlaitPluginElementComponent<MindE
|
|
|
35
35
|
editTopic(): void;
|
|
36
36
|
onContextChanged(value: PlaitPluginElementContext<MindElement, PlaitMindBoard>, previous: PlaitPluginElementContext<MindElement, PlaitMindBoard>): void;
|
|
37
37
|
drawEmojis(): void;
|
|
38
|
-
drawImage(): void;
|
|
39
38
|
drawShape(): void;
|
|
40
39
|
destroyShape(): void;
|
|
41
40
|
drawLink(): void;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PlaitBoard } from '@plait/core';
|
|
2
2
|
import { MindElement } from '../interfaces';
|
|
3
3
|
import { PlaitMindBoard } from './with-mind.board';
|
|
4
|
-
export declare const withMindHotkey: (
|
|
4
|
+
export declare const withMindHotkey: (baseBoard: PlaitBoard) => PlaitBoard & PlaitMindBoard;
|
|
5
5
|
export declare const getNextSelectedElement: (board: PlaitBoard, firstLevelElements: MindElement[]) => MindElement<import("../interfaces").BaseData> | undefined;
|
|
6
6
|
export declare const isExpandHotkey: (event: KeyboardEvent) => boolean;
|
|
7
7
|
export declare const isTabHotkey: (event: KeyboardEvent) => boolean;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PlaitBoard, Point, RectangleClient } from '@plait/core';
|
|
2
|
+
import { MindElement } from '../interfaces/element';
|
|
3
|
+
import { PlaitMindBoard } from './with-mind.board';
|
|
4
|
+
export declare const withNodeResize: (board: PlaitBoard) => PlaitBoard;
|
|
5
|
+
export declare const IS_MIND_NODE_RESIZING: WeakMap<PlaitBoard, boolean>;
|
|
6
|
+
export declare const isMindNodeResizing: (board: PlaitBoard) => boolean;
|
|
7
|
+
export declare const addResizing: (board: PlaitBoard, element: MindElement) => void;
|
|
8
|
+
export declare const removeResizing: (board: PlaitBoard, element: MindElement) => void;
|
|
9
|
+
export declare const getTargetElement: (board: PlaitMindBoard, point: Point) => MindElement<import("@plait/mind").BaseData> | null;
|
|
10
|
+
export declare const getResizeActiveRectangle: (board: PlaitBoard, element: MindElement) => RectangleClient;
|
package/styles/styles.scss
CHANGED
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
$primary: #4e8afa;
|
|
4
4
|
|
|
5
5
|
.plait-board-container {
|
|
6
|
-
g[plait-mindmap='true'],
|
|
6
|
+
g[plait-mindmap='true'],
|
|
7
|
+
g[plait-mind-temporary='true'] {
|
|
7
8
|
// The font family under SAFARI affects the measurement of the text size,
|
|
8
9
|
// so specify the default font family to avoid unexpected text breaks in different scene
|
|
9
10
|
font-family: PingFangSC-Regular, 'PingFang SC';
|
|
10
|
-
.root,
|
|
11
|
+
.root,
|
|
12
|
+
&.root {
|
|
11
13
|
.text {
|
|
12
14
|
font-family: PingFangSC-Medium, 'PingFang SC';
|
|
13
15
|
font-weight: 400;
|
|
@@ -128,5 +130,10 @@ $primary: #4e8afa;
|
|
|
128
130
|
}
|
|
129
131
|
}
|
|
130
132
|
|
|
133
|
+
.mind-node-image {
|
|
134
|
+
margin: 6px;
|
|
135
|
+
display: block
|
|
136
|
+
}
|
|
137
|
+
|
|
131
138
|
@include mixins.node-color();
|
|
132
139
|
}
|
package/transforms/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export declare const MindTransforms: {
|
|
|
2
2
|
setLayout: (board: import("@plait/core").PlaitBoard, layout: import("@plait/layouts").MindLayoutType, path: import("@plait/core").Path) => void;
|
|
3
3
|
setTopic: (board: import("@plait/mind").PlaitMindBoard, element: import("@plait/mind").MindElement<import("@plait/mind").BaseData>, topic: import("slate").BaseElement, width: number, height: number) => void;
|
|
4
4
|
setTopicSize: (board: import("@plait/mind").PlaitMindBoard, element: import("@plait/mind").MindElement<import("@plait/mind").BaseData>, width: number, height: number) => void;
|
|
5
|
+
setNodeManualWidth: (board: import("@plait/mind").PlaitMindBoard, element: import("@plait/mind").MindElement<import("@plait/mind").BaseData>, width: number, height: number) => void;
|
|
5
6
|
addEmoji: (board: import("@plait/core").PlaitBoard, element: import("@plait/mind").MindElement<import("@plait/mind").BaseData>, emojiItem: import("@plait/mind").EmojiItem) => void;
|
|
6
7
|
removeEmoji: (board: import("@plait/core").PlaitBoard, element: import("@plait/mind").MindElement<import("@plait/mind").EmojiData>, emojiItem: import("@plait/mind").EmojiItem) => void;
|
|
7
8
|
replaceEmoji: (board: import("@plait/core").PlaitBoard, element: import("@plait/mind").MindElement<import("@plait/mind").EmojiData>, oldEmoji: import("@plait/mind").EmojiItem, newEmoji: import("@plait/mind").EmojiItem) => void;
|
package/transforms/node.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { AbstractRef } from '../utils/abstract/common';
|
|
|
5
5
|
import { RightNodeCountRef } from '../utils/node/right-node-count';
|
|
6
6
|
import { PlaitMindBoard } from '../plugins/with-mind.board';
|
|
7
7
|
export declare const setTopic: (board: PlaitMindBoard, element: MindElement, topic: Element, width: number, height: number) => void;
|
|
8
|
+
export declare const setNodeManualWidth: (board: PlaitMindBoard, element: MindElement, width: number, height: number) => void;
|
|
8
9
|
export declare const setTopicSize: (board: PlaitMindBoard, element: MindElement, width: number, height: number) => void;
|
|
9
10
|
export declare const removeElements: (board: PlaitBoard, elements: MindElement[]) => void;
|
|
10
11
|
export declare const insertNodes: (board: PlaitBoard, elements: MindElement[], path: Path) => void;
|
package/utils/node/common.d.ts
CHANGED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PlaitBoard } from '@plait/core';
|
|
2
|
+
import { MindElement } from '../../interfaces';
|
|
3
|
+
export declare const getSelectedImageElement: (board: PlaitBoard) => MindElement<import("../../interfaces").BaseData> | undefined;
|
|
4
|
+
export declare const addSelectedImageElement: (board: PlaitBoard, element: MindElement) => void;
|
|
5
|
+
export declare const removeSelectedImageElement: (board: PlaitBoard) => void;
|
|
6
|
+
export declare const setImageFocus: (board: PlaitBoard, element: MindElement, isFocus: boolean) => void;
|
package/utils/node/index.d.ts
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PlaitBoard } from '@plait/core';
|
|
2
|
+
import { MindElement } from '../../interfaces/element';
|
|
3
|
+
export interface NodeHoveredExtendRef {
|
|
4
|
+
element: MindElement;
|
|
5
|
+
}
|
|
6
|
+
export declare const mouseMoveHandle: (board: PlaitBoard, event: MouseEvent, nodeHoveredExtendRef: NodeHoveredExtendRef | null) => NodeHoveredExtendRef | null;
|
|
7
|
+
export declare const mouseLeaveHandle: (board: PlaitBoard, event: MouseEvent, nodeHoveredExtendRef: NodeHoveredExtendRef | null) => void;
|
|
8
|
+
export declare const addHovered: (element: MindElement) => void;
|
|
9
|
+
export declare const removeHovered: (element: MindElement) => void;
|
|
@@ -9,10 +9,10 @@ export declare const NodeSpace: {
|
|
|
9
9
|
getNodeResizableMinWidth(board: PlaitMindBoard, element: MindElement): number;
|
|
10
10
|
getNodeTopicMinWidth(board: PlaitMindBoard, element: MindElement, isRoot?: boolean): number;
|
|
11
11
|
getTextLeftSpace(board: PlaitMindBoard, element: MindElement): number;
|
|
12
|
-
getTextTopSpace(element: MindElement): number;
|
|
13
|
-
getImageTopSpace(element: MindElement): number;
|
|
12
|
+
getTextTopSpace(board: PlaitMindBoard, element: MindElement): number;
|
|
13
|
+
getImageTopSpace(board: PlaitMindBoard, element: MindElement): number;
|
|
14
14
|
getEmojiLeftSpace(board: PlaitMindBoard, element: MindElement<EmojiData>): number;
|
|
15
|
-
getEmojiTopSpace(element: MindElement): number;
|
|
15
|
+
getEmojiTopSpace(board: PlaitMindBoard, element: MindElement): number;
|
|
16
16
|
};
|
|
17
17
|
export declare const getFontSizeBySlateElement: (text: string | Element) => number;
|
|
18
18
|
export declare const getNodeDefaultFontSize: (isRoot?: boolean) => 14 | 18;
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, getHitElements, isMainPointer, toPoint, transformPoint, PlaitPluginKey, PlaitElement, hotkeys, clearSelectedElement, PlaitPointerType } from '@plait/core';
|
|
2
|
-
import { MindElement } from '../interfaces';
|
|
3
|
-
import { MindTransforms, isHitImage } from '../public-api';
|
|
4
|
-
export const withMindImage = (board) => {
|
|
5
|
-
let selectedImageElement = null;
|
|
6
|
-
const { keydown, mousedown } = board;
|
|
7
|
-
board.mousedown = (event) => {
|
|
8
|
-
if (PlaitBoard.isReadonly(board) || !isMainPointer(event) || !PlaitBoard.isPointer(board, PlaitPointerType.selection)) {
|
|
9
|
-
mousedown(event);
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
13
|
-
const range = { anchor: point, focus: point };
|
|
14
|
-
const hitElements = getHitElements(board, { ranges: [range] });
|
|
15
|
-
const hasImage = hitElements.length && MindElement.hasImage(hitElements[0]);
|
|
16
|
-
const hitImage = hasImage && isHitImage(board, hitElements[0], range);
|
|
17
|
-
if (hitImage) {
|
|
18
|
-
const currentOptions = board.getPluginOptions(PlaitPluginKey.withSelection);
|
|
19
|
-
board.setPluginOptions(PlaitPluginKey.withSelection, {
|
|
20
|
-
isDisabledSelect: true
|
|
21
|
-
});
|
|
22
|
-
setTimeout(() => {
|
|
23
|
-
board.setPluginOptions(PlaitPluginKey.withSelection, { ...currentOptions });
|
|
24
|
-
}, 0);
|
|
25
|
-
selectedImageElement = hitElements[0];
|
|
26
|
-
const component = PlaitElement.getComponent(selectedImageElement);
|
|
27
|
-
component.imageDrawer.drawActive(selectedImageElement);
|
|
28
|
-
clearSelectedElement(board);
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
if (selectedImageElement) {
|
|
32
|
-
const component = PlaitElement.getComponent(selectedImageElement);
|
|
33
|
-
component && component.imageDrawer.destroyActive();
|
|
34
|
-
}
|
|
35
|
-
selectedImageElement = null;
|
|
36
|
-
}
|
|
37
|
-
mousedown(event);
|
|
38
|
-
};
|
|
39
|
-
board.keydown = (event) => {
|
|
40
|
-
if (!PlaitBoard.isReadonly(board) && selectedImageElement && (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))) {
|
|
41
|
-
MindTransforms.removeImage(board, selectedImageElement);
|
|
42
|
-
selectedImageElement = null;
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
keydown(event);
|
|
46
|
-
};
|
|
47
|
-
return board;
|
|
48
|
-
};
|
|
49
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1taW5kLWltYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvcGx1Z2lucy93aXRoLW1pbmQtaW1hZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFDVixjQUFjLEVBQ2QsYUFBYSxFQUNiLE9BQU8sRUFDUCxjQUFjLEVBR2QsY0FBYyxFQUNkLFlBQVksRUFDWixPQUFPLEVBQ1Asb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNuQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBcUIsY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUc5RSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDL0MsSUFBSSxvQkFBb0IsR0FBa0MsSUFBSSxDQUFDO0lBRS9ELE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXJDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7UUFDcEMsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDbkgsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pCLE9BQU87U0FDVjtRQUNELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRixNQUFNLEtBQUssR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzlDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0QsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQWdCLENBQUMsQ0FBQztRQUMzRixNQUFNLFFBQVEsR0FBRyxRQUFRLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUEyQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhHLElBQUksUUFBUSxFQUFFO1lBQ1YsTUFBTSxjQUFjLEdBQUksS0FBMkIsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbEcsS0FBMkIsQ0FBQyxnQkFBZ0IsQ0FBb0IsY0FBYyxDQUFDLGFBQWEsRUFBRTtnQkFDM0YsZ0JBQWdCLEVBQUUsSUFBSTthQUN6QixDQUFDLENBQUM7WUFDSCxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNYLEtBQTJCLENBQUMsZ0JBQWdCLENBQW9CLGNBQWMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDMUgsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRU4sb0JBQW9CLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBMkIsQ0FBQztZQUNoRSxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFzQixDQUFDO1lBQ3ZGLFNBQVMsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDdkQsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7YUFBTTtZQUNILElBQUksb0JBQW9CLEVBQUU7Z0JBQ3RCLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQXNCLENBQUM7Z0JBQ3ZGLFNBQVMsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3REO1lBQ0Qsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1NBQy9CO1FBRUQsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksb0JBQW9CLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQzlILGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUM7WUFDeEQsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQzVCLE9BQU87U0FDVjtRQUVELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDLENBQUM7SUFFRixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgZ2V0SGl0RWxlbWVudHMsXG4gICAgaXNNYWluUG9pbnRlcixcbiAgICB0b1BvaW50LFxuICAgIHRyYW5zZm9ybVBvaW50LFxuICAgIFBsYWl0T3B0aW9uc0JvYXJkLFxuICAgIFdpdGhQbHVnaW5PcHRpb25zLFxuICAgIFBsYWl0UGx1Z2luS2V5LFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBob3RrZXlzLFxuICAgIGNsZWFyU2VsZWN0ZWRFbGVtZW50LFxuICAgIFBsYWl0UG9pbnRlclR5cGVcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50LCBNaW5kVHJhbnNmb3JtcywgaXNIaXRJbWFnZSB9IGZyb20gJy4uL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgSW1hZ2VEYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50LWRhdGEnO1xuXG5leHBvcnQgY29uc3Qgd2l0aE1pbmRJbWFnZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGxldCBzZWxlY3RlZEltYWdlRWxlbWVudDogTWluZEVsZW1lbnQ8SW1hZ2VEYXRhPiB8IG51bGwgPSBudWxsO1xuXG4gICAgY29uc3QgeyBrZXlkb3duLCBtb3VzZWRvd24gfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQubW91c2Vkb3duID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpIHx8ICFpc01haW5Qb2ludGVyKGV2ZW50KSB8fCAhUGxhaXRCb2FyZC5pc1BvaW50ZXIoYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgbW91c2Vkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb2ludCA9IHRyYW5zZm9ybVBvaW50KGJvYXJkLCB0b1BvaW50KGV2ZW50LngsIGV2ZW50LnksIFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCkpKTtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB7IGFuY2hvcjogcG9pbnQsIGZvY3VzOiBwb2ludCB9O1xuICAgICAgICBjb25zdCBoaXRFbGVtZW50cyA9IGdldEhpdEVsZW1lbnRzKGJvYXJkLCB7IHJhbmdlczogW3JhbmdlXSB9KTtcbiAgICAgICAgY29uc3QgaGFzSW1hZ2UgPSBoaXRFbGVtZW50cy5sZW5ndGggJiYgTWluZEVsZW1lbnQuaGFzSW1hZ2UoaGl0RWxlbWVudHNbMF0gYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBoaXRJbWFnZSA9IGhhc0ltYWdlICYmIGlzSGl0SW1hZ2UoYm9hcmQsIGhpdEVsZW1lbnRzWzBdIGFzIE1pbmRFbGVtZW50PEltYWdlRGF0YT4sIHJhbmdlKTtcblxuICAgICAgICBpZiAoaGl0SW1hZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gKGJvYXJkIGFzIFBsYWl0T3B0aW9uc0JvYXJkKS5nZXRQbHVnaW5PcHRpb25zKFBsYWl0UGx1Z2luS2V5LndpdGhTZWxlY3Rpb24pO1xuICAgICAgICAgICAgKGJvYXJkIGFzIFBsYWl0T3B0aW9uc0JvYXJkKS5zZXRQbHVnaW5PcHRpb25zPFdpdGhQbHVnaW5PcHRpb25zPihQbGFpdFBsdWdpbktleS53aXRoU2VsZWN0aW9uLCB7XG4gICAgICAgICAgICAgICAgaXNEaXNhYmxlZFNlbGVjdDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAoYm9hcmQgYXMgUGxhaXRPcHRpb25zQm9hcmQpLnNldFBsdWdpbk9wdGlvbnM8V2l0aFBsdWdpbk9wdGlvbnM+KFBsYWl0UGx1Z2luS2V5LndpdGhTZWxlY3Rpb24sIHsgLi4uY3VycmVudE9wdGlvbnMgfSk7XG4gICAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgICAgc2VsZWN0ZWRJbWFnZUVsZW1lbnQgPSBoaXRFbGVtZW50c1swXSBhcyBNaW5kRWxlbWVudDxJbWFnZURhdGE+O1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChzZWxlY3RlZEltYWdlRWxlbWVudCkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgICAgICBjb21wb25lbnQuaW1hZ2VEcmF3ZXIuZHJhd0FjdGl2ZShzZWxlY3RlZEltYWdlRWxlbWVudCk7XG4gICAgICAgICAgICBjbGVhclNlbGVjdGVkRWxlbWVudChib2FyZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJbWFnZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KHNlbGVjdGVkSW1hZ2VFbGVtZW50KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQgJiYgY29tcG9uZW50LmltYWdlRHJhd2VyLmRlc3Ryb3lBY3RpdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGVjdGVkSW1hZ2VFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1vdXNlZG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmtleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpICYmIHNlbGVjdGVkSW1hZ2VFbGVtZW50ICYmIChob3RrZXlzLmlzRGVsZXRlQmFja3dhcmQoZXZlbnQpIHx8IGhvdGtleXMuaXNEZWxldGVGb3J3YXJkKGV2ZW50KSkpIHtcbiAgICAgICAgICAgIE1pbmRUcmFuc2Zvcm1zLnJlbW92ZUltYWdlKGJvYXJkLCBzZWxlY3RlZEltYWdlRWxlbWVudCk7XG4gICAgICAgICAgICBzZWxlY3RlZEltYWdlRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBrZXlkb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcbiJdfQ==
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, PlaitElement, depthFirstRecursion, getIsRecursionFunc, throttleRAF, toPoint, transformPoint } from '@plait/core';
|
|
2
|
-
import { MindElement } from '../interfaces/element';
|
|
3
|
-
import { isHitMindElement } from '../utils/position/node';
|
|
4
|
-
export const withNodeHover = (board) => {
|
|
5
|
-
const { mousemove, mouseleave } = board;
|
|
6
|
-
let hoveredMindElement = null;
|
|
7
|
-
board.mousemove = (event) => {
|
|
8
|
-
throttleRAF(() => {
|
|
9
|
-
let target = null;
|
|
10
|
-
const point = transformPoint(board, toPoint(event.x, event.y, PlaitBoard.getHost(board)));
|
|
11
|
-
depthFirstRecursion(board, element => {
|
|
12
|
-
if (target) {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
if (!MindElement.isMindElement(board, element)) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
const isHitElement = isHitMindElement(board, point, element);
|
|
19
|
-
if (isHitElement) {
|
|
20
|
-
target = element;
|
|
21
|
-
}
|
|
22
|
-
}, getIsRecursionFunc(board), true);
|
|
23
|
-
if (hoveredMindElement && target && hoveredMindElement === target) {
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
if (hoveredMindElement) {
|
|
27
|
-
removeHovered(hoveredMindElement);
|
|
28
|
-
}
|
|
29
|
-
if (target) {
|
|
30
|
-
addHovered(target);
|
|
31
|
-
hoveredMindElement = target;
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
hoveredMindElement = null;
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
mousemove(event);
|
|
38
|
-
};
|
|
39
|
-
board.mouseleave = (event) => {
|
|
40
|
-
if (hoveredMindElement) {
|
|
41
|
-
removeHovered(hoveredMindElement);
|
|
42
|
-
hoveredMindElement = null;
|
|
43
|
-
}
|
|
44
|
-
mouseleave(event);
|
|
45
|
-
};
|
|
46
|
-
return board;
|
|
47
|
-
};
|
|
48
|
-
export const addHovered = (element) => {
|
|
49
|
-
const component = PlaitElement.getComponent(element);
|
|
50
|
-
component.g.classList.add('hovered');
|
|
51
|
-
};
|
|
52
|
-
export const removeHovered = (element) => {
|
|
53
|
-
const component = PlaitElement.getComponent(element);
|
|
54
|
-
if (component && component.g) {
|
|
55
|
-
component.g.classList.remove('hovered');
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1ub2RlLWhvdmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvcGx1Z2lucy93aXRoLW5vZGUtaG92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRTFELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUMvQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUN4QyxJQUFJLGtCQUFrQixHQUF1QixJQUFJLENBQUM7SUFFbEQsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtRQUNwQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxNQUFNLEdBQXVCLElBQUksQ0FBQztZQUN0QyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUYsbUJBQW1CLENBQ2QsS0FBZ0MsRUFDakMsT0FBTyxDQUFDLEVBQUU7Z0JBQ04sSUFBSSxNQUFNLEVBQUU7b0JBQ1IsT0FBTztpQkFDVjtnQkFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEVBQUU7b0JBQzVDLE9BQU87aUJBQ1Y7Z0JBQ0QsTUFBTSxZQUFZLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxZQUFZLEVBQUU7b0JBQ2QsTUFBTSxHQUFHLE9BQU8sQ0FBQztpQkFDcEI7WUFDTCxDQUFDLEVBQ0Qsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQ3pCLElBQUksQ0FDUCxDQUFDO1lBRUYsSUFBSSxrQkFBa0IsSUFBSSxNQUFNLElBQUksa0JBQWtCLEtBQUssTUFBTSxFQUFFO2dCQUMvRCxPQUFPO2FBQ1Y7WUFFRCxJQUFJLGtCQUFrQixFQUFFO2dCQUNwQixhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUNyQztZQUVELElBQUksTUFBTSxFQUFFO2dCQUNSLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkIsa0JBQWtCLEdBQUcsTUFBTSxDQUFDO2FBQy9CO2lCQUFNO2dCQUNILGtCQUFrQixHQUFHLElBQUksQ0FBQzthQUM3QjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUMsQ0FBQztJQUVGLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7UUFDckMsSUFBSSxrQkFBa0IsRUFBRTtZQUNwQixhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNsQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7U0FDN0I7UUFDRCxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQyxDQUFDO0lBRUYsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FBb0IsRUFBRSxFQUFFO0lBQy9DLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQW9CLEVBQUUsRUFBRTtJQUNsRCxNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEVBQUU7UUFDMUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzNDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBkZXB0aEZpcnN0UmVjdXJzaW9uLCBnZXRJc1JlY3Vyc2lvbkZ1bmMsIHRocm90dGxlUkFGLCB0b1BvaW50LCB0cmFuc2Zvcm1Qb2ludCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IGlzSGl0TWluZEVsZW1lbnQgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9ub2RlJztcblxuZXhwb3J0IGNvbnN0IHdpdGhOb2RlSG92ZXIgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB7IG1vdXNlbW92ZSwgbW91c2VsZWF2ZSB9ID0gYm9hcmQ7XG4gICAgbGV0IGhvdmVyZWRNaW5kRWxlbWVudDogTWluZEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAgIGJvYXJkLm1vdXNlbW92ZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICB0aHJvdHRsZVJBRigoKSA9PiB7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0OiBNaW5kRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgY29uc3QgcG9pbnQgPSB0cmFuc2Zvcm1Qb2ludChib2FyZCwgdG9Qb2ludChldmVudC54LCBldmVudC55LCBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpKSk7XG4gICAgICAgICAgICBkZXB0aEZpcnN0UmVjdXJzaW9uKFxuICAgICAgICAgICAgICAgIChib2FyZCBhcyB1bmtub3duKSBhcyBNaW5kRWxlbWVudCxcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghTWluZEVsZW1lbnQuaXNNaW5kRWxlbWVudChib2FyZCwgZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0hpdEVsZW1lbnQgPSBpc0hpdE1pbmRFbGVtZW50KGJvYXJkLCBwb2ludCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0hpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCksXG4gICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGhvdmVyZWRNaW5kRWxlbWVudCAmJiB0YXJnZXQgJiYgaG92ZXJlZE1pbmRFbGVtZW50ID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChob3ZlcmVkTWluZEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVIb3ZlcmVkKGhvdmVyZWRNaW5kRWxlbWVudCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICBhZGRIb3ZlcmVkKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgaG92ZXJlZE1pbmRFbGVtZW50ID0gdGFyZ2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBob3ZlcmVkTWluZEVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBtb3VzZW1vdmUoZXZlbnQpO1xuICAgIH07XG5cbiAgICBib2FyZC5tb3VzZWxlYXZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChob3ZlcmVkTWluZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJlbW92ZUhvdmVyZWQoaG92ZXJlZE1pbmRFbGVtZW50KTtcbiAgICAgICAgICAgIGhvdmVyZWRNaW5kRWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbW91c2VsZWF2ZShldmVudCk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRIb3ZlcmVkID0gKGVsZW1lbnQ6IE1pbmRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChlbGVtZW50KTtcbiAgICBjb21wb25lbnQuZy5jbGFzc0xpc3QuYWRkKCdob3ZlcmVkJyk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlSG92ZXJlZCA9IChlbGVtZW50OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoZWxlbWVudCk7XG4gICAgaWYgKGNvbXBvbmVudCAmJiBjb21wb25lbnQuZykge1xuICAgICAgICBjb21wb25lbnQuZy5jbGFzc0xpc3QucmVtb3ZlKCdob3ZlcmVkJyk7XG4gICAgfVxufTtcbiJdfQ==
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard } from '@plait/core';
|
|
2
|
-
import { MindElement } from '../interfaces/element';
|
|
3
|
-
export declare const withNodeHover: (board: PlaitBoard) => PlaitBoard;
|
|
4
|
-
export declare const addHovered: (element: MindElement) => void;
|
|
5
|
-
export declare const removeHovered: (element: MindElement) => void;
|