@plait/mind 0.21.0 → 0.23.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/esm2020/plugins/with-abstract-resize.mjs +3 -1
- package/esm2020/plugins/with-mind.mjs +3 -3
- package/esm2020/plugins/with-node-hover-detect.mjs +16 -0
- package/esm2020/plugins/with-node-image.mjs +23 -9
- package/esm2020/plugins/with-node-resize.mjs +26 -20
- package/esm2020/transforms/abstract-node.mjs +4 -2
- package/esm2020/utils/node/index.mjs +2 -1
- package/esm2020/utils/node-hover/extend.mjs +54 -0
- package/fesm2015/plait-mind.mjs +125 -91
- package/fesm2015/plait-mind.mjs.map +1 -1
- package/fesm2020/plait-mind.mjs +125 -91
- package/fesm2020/plait-mind.mjs.map +1 -1
- package/package.json +1 -1
- package/plugins/with-node-hover-detect.d.ts +2 -0
- package/styles/styles.scss +5 -2
- package/utils/node/index.d.ts +1 -0
- package/utils/node-hover/extend.d.ts +9 -0
- package/esm2020/plugins/with-node-hover.mjs +0 -58
- package/plugins/with-node-hover.d.ts +0 -5
package/package.json
CHANGED
package/styles/styles.scss
CHANGED
|
@@ -44,7 +44,7 @@ $primary: #4e8afa;
|
|
|
44
44
|
opacity: 0.6;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
&.focused:not(.selection-moving):not(.element-moving):not(.abstract-resizing-horizontal):not(.abstract-resizing-vertical):not(.pointer-mind):not(.mind-node-dragging) {
|
|
47
|
+
&.focused:not(.selection-moving):not(.element-moving):not(.abstract-resizing-horizontal):not(.abstract-resizing-vertical):not(.pointer-mind):not(.mind-node-dragging):not(.mind-node-resizing) {
|
|
48
48
|
.extend {
|
|
49
49
|
cursor: pointer;
|
|
50
50
|
&:hover {
|
|
@@ -87,6 +87,9 @@ $primary: #4e8afa;
|
|
|
87
87
|
display: none;
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
|
+
.mind-node-image {
|
|
91
|
+
cursor: zoom-in;
|
|
92
|
+
}
|
|
90
93
|
}
|
|
91
94
|
|
|
92
95
|
&.viewport-moving {
|
|
@@ -132,7 +135,7 @@ $primary: #4e8afa;
|
|
|
132
135
|
|
|
133
136
|
.mind-node-image {
|
|
134
137
|
margin: 6px;
|
|
135
|
-
display: block
|
|
138
|
+
display: block;
|
|
136
139
|
}
|
|
137
140
|
|
|
138
141
|
@include mixins.node-color();
|
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;
|
|
@@ -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;
|