@plait/mind 0.27.0-next.0 → 0.27.0-next.2
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/emoji-base.component.d.ts +1 -1
- package/base/image-base.component.d.ts +4 -3
- package/constants/node-topic-style.d.ts +3 -0
- package/{esm2020 → esm2022}/base/emoji-base.component.mjs +4 -4
- package/esm2022/base/image-base.component.mjs +75 -0
- package/{esm2020 → esm2022}/constants/node-topic-style.mjs +4 -1
- package/esm2022/interfaces/element-data.mjs +2 -0
- package/{esm2020 → esm2022}/mind.component.mjs +6 -6
- package/{esm2020 → esm2022}/mind.module.mjs +5 -5
- package/esm2022/node.component.mjs +251 -0
- package/esm2022/plugins/with-mind-hotkey.mjs +109 -0
- package/esm2022/plugins/with-node-image-resize.mjs +48 -0
- package/esm2022/utils/index.mjs +15 -0
- package/esm2022/utils/position/image.mjs +36 -0
- package/{fesm2020 → fesm2022}/plait-mind.mjs +45 -56
- package/fesm2022/plait-mind.mjs.map +1 -0
- package/interfaces/element-data.d.ts +2 -2
- package/package.json +7 -13
- package/plugins/with-mind-hotkey.d.ts +0 -4
- package/utils/abstract/common.d.ts +2 -2
- package/utils/index.d.ts +0 -1
- package/utils/position/image.d.ts +1 -1
- package/esm2020/base/image-base.component.mjs +0 -67
- package/esm2020/interfaces/element-data.mjs +0 -2
- package/esm2020/node.component.mjs +0 -248
- package/esm2020/plugins/with-mind-hotkey.mjs +0 -122
- package/esm2020/plugins/with-node-image-resize.mjs +0 -48
- package/esm2020/utils/index.mjs +0 -16
- package/esm2020/utils/is-virtual-key.mjs +0 -13
- package/esm2020/utils/position/image.mjs +0 -36
- package/fesm2015/plait-mind.mjs +0 -4402
- package/fesm2015/plait-mind.mjs.map +0 -1
- package/fesm2020/plait-mind.mjs.map +0 -1
- package/utils/is-virtual-key.d.ts +0 -1
- /package/{esm2020 → esm2022}/base/base.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/base/index.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/abstract-node.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/default.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/image.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/index.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/node-style.mjs +0 -0
- /package/{esm2020 → esm2022}/constants/theme.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/node-active.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/node-collapse.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/node-emojis.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/node-image.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/drawer/node-insert.drawer.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/element.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/index.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/layout.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/node.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/options.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/pointer.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/theme-color.mjs +0 -0
- /package/{esm2020 → esm2022}/interfaces/types.mjs +0 -0
- /package/{esm2020 → esm2022}/plait-mind.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-abstract-resize.board.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-abstract-resize.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-mind-create.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-mind-extend.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-mind.board.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-mind.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-node-dnd.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-node-hover-detect.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-node-image.mjs +0 -0
- /package/{esm2020 → esm2022}/plugins/with-node-resize.mjs +0 -0
- /package/{esm2020 → esm2022}/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-available-sublayouts-by-element.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-branch-layouts.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-correct-layout-by-element.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/get-layout-by-element.mjs +0 -0
- /package/{esm2020 → esm2022}/queries/index.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/abstract-node.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/emoji.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/image.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/index.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/layout.mjs +0 -0
- /package/{esm2020 → esm2022}/transforms/node.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/abstract/common.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/abstract/resize.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/clipboard.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/dnd/common.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/dnd/detector.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/abstract-outline.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-dnd.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-link/abstract-link.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-link/draw-link.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-link/indented-link.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-link/logic-link.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/draw/node-shape.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/layout.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/mind.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/adjust-node.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/common.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/create-node.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/dynamic-width.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/image.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node/right-node-count.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node-hover/extend.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node-style/branch.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node-style/common.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node-style/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/node-style/shape.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/path.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/point-placement.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/position/emoji.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/position/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/position/node.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/position/topic.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/space/emoji.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/space/index.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/space/layout-options.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/space/node-space.mjs +0 -0
- /package/{esm2020 → esm2022}/utils/weak-maps.mjs +0 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Path, PlaitBoard, PlaitHistoryBoard, PlaitNode, Transforms, addSelectedElement, getSelectedElements, removeSelectedElement } from '@plait/core';
|
|
2
|
+
import { MindElement, PlaitMind } from '../interfaces';
|
|
3
|
+
import { AbstractNode } from '@plait/layouts';
|
|
4
|
+
import { getFirstLevelElement, insertMindElement } from '../utils/mind';
|
|
5
|
+
import { findNewChildNodePath, findNewSiblingNodePath } from '../utils/path';
|
|
6
|
+
import { deleteElementsHandleRightNodeCount, insertElementHandleRightNodeCount, isInRightBranchOfStandardLayout } from '../utils/node/right-node-count';
|
|
7
|
+
import { MindTransforms } from '../transforms';
|
|
8
|
+
import { deleteElementHandleAbstract, insertElementHandleAbstract } from '../utils/abstract/common';
|
|
9
|
+
import { editTopic, getSelectedMindElements } from '../utils/node/common';
|
|
10
|
+
import { isSpaceHotkey, isExpandHotkey, isTabHotkey, isEnterHotkey, isVirtualKey } from '@plait/common';
|
|
11
|
+
export const withMindHotkey = (baseBoard) => {
|
|
12
|
+
const board = baseBoard;
|
|
13
|
+
const { keydown, deleteFragment } = board;
|
|
14
|
+
board.keydown = (event) => {
|
|
15
|
+
const selectedElements = getSelectedElements(board);
|
|
16
|
+
const isSingleSelection = selectedElements.length === 1;
|
|
17
|
+
const isSingleMindElement = selectedElements.length === 1 && MindElement.isMindElement(board, selectedElements[0]);
|
|
18
|
+
const targetElement = selectedElements[0];
|
|
19
|
+
if (isExpandHotkey(event) && isSingleMindElement && !PlaitMind.isMind(targetElement)) {
|
|
20
|
+
if (targetElement.children && targetElement.children.length > 0) {
|
|
21
|
+
Transforms.setNode(board, { isCollapsed: targetElement.isCollapsed ? false : true }, PlaitBoard.findPath(board, targetElement));
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (!PlaitBoard.isReadonly(board)) {
|
|
26
|
+
if (isTabHotkey(event) && isSingleMindElement) {
|
|
27
|
+
event.preventDefault();
|
|
28
|
+
removeSelectedElement(board, targetElement);
|
|
29
|
+
const targetElementPath = PlaitBoard.findPath(board, targetElement);
|
|
30
|
+
if (targetElement.isCollapsed) {
|
|
31
|
+
const newElement = { isCollapsed: false };
|
|
32
|
+
PlaitHistoryBoard.withoutSaving(board, () => {
|
|
33
|
+
Transforms.setNode(board, newElement, targetElementPath);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
insertMindElement(board, targetElement, findNewChildNodePath(board, targetElement));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
if (isEnterHotkey(event) &&
|
|
40
|
+
isSingleMindElement &&
|
|
41
|
+
!PlaitMind.isMind(targetElement) &&
|
|
42
|
+
!AbstractNode.isAbstract(targetElement)) {
|
|
43
|
+
const targetElementPath = PlaitBoard.findPath(board, targetElement);
|
|
44
|
+
if (isInRightBranchOfStandardLayout(targetElement)) {
|
|
45
|
+
const refs = insertElementHandleRightNodeCount(board, targetElementPath.slice(0, 1), 1);
|
|
46
|
+
MindTransforms.setRightNodeCountByRefs(board, refs);
|
|
47
|
+
}
|
|
48
|
+
const abstractRefs = insertElementHandleAbstract(board, Path.next(targetElementPath));
|
|
49
|
+
MindTransforms.setAbstractsByRefs(board, abstractRefs);
|
|
50
|
+
insertMindElement(board, targetElement, findNewSiblingNodePath(board, targetElement));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (!isVirtualKey(event) && !isSpaceHotkey(event) && isSingleSelection && MindElement.isMindElement(board, targetElement)) {
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
editTopic(targetElement);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
keydown(event);
|
|
60
|
+
};
|
|
61
|
+
board.deleteFragment = (data) => {
|
|
62
|
+
const targetMindElements = getSelectedMindElements(board);
|
|
63
|
+
if (targetMindElements.length) {
|
|
64
|
+
const firstLevelElements = getFirstLevelElement(targetMindElements).reverse();
|
|
65
|
+
const abstractRefs = deleteElementHandleAbstract(board, firstLevelElements);
|
|
66
|
+
MindTransforms.setAbstractsByRefs(board, abstractRefs);
|
|
67
|
+
const refs = deleteElementsHandleRightNodeCount(board, targetMindElements);
|
|
68
|
+
MindTransforms.setRightNodeCountByRefs(board, refs);
|
|
69
|
+
MindTransforms.removeElements(board, targetMindElements);
|
|
70
|
+
const nextSelected = getNextSelectedElement(board, firstLevelElements);
|
|
71
|
+
if (nextSelected) {
|
|
72
|
+
addSelectedElement(board, nextSelected);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
deleteFragment(data);
|
|
76
|
+
};
|
|
77
|
+
return board;
|
|
78
|
+
};
|
|
79
|
+
export const getNextSelectedElement = (board, firstLevelElements) => {
|
|
80
|
+
let activeElement;
|
|
81
|
+
const firstLevelElement = firstLevelElements[0];
|
|
82
|
+
const firstLevelElementPath = PlaitBoard.findPath(board, firstLevelElement);
|
|
83
|
+
let nextSelectedPath = firstLevelElementPath;
|
|
84
|
+
if (Path.hasPrevious(firstLevelElementPath)) {
|
|
85
|
+
nextSelectedPath = Path.previous(firstLevelElementPath);
|
|
86
|
+
}
|
|
87
|
+
if (AbstractNode.isAbstract(firstLevelElement)) {
|
|
88
|
+
const parent = MindElement.getParent(firstLevelElement);
|
|
89
|
+
if (!firstLevelElements.includes(parent.children[firstLevelElement.start])) {
|
|
90
|
+
activeElement = parent.children[firstLevelElement.start];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
if (!activeElement) {
|
|
95
|
+
activeElement = PlaitNode.get(board, nextSelectedPath);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (error) { }
|
|
99
|
+
const firstElement = firstLevelElements[0];
|
|
100
|
+
const firstElementParent = MindElement.findParent(firstElement);
|
|
101
|
+
const hasSameParent = firstLevelElements.every(element => {
|
|
102
|
+
return MindElement.findParent(element) === firstElementParent;
|
|
103
|
+
});
|
|
104
|
+
if (firstElementParent && hasSameParent && !activeElement) {
|
|
105
|
+
activeElement = firstElementParent;
|
|
106
|
+
}
|
|
107
|
+
return activeElement;
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1taW5kLWhvdGtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3BsdWdpbnMvd2l0aC1taW5kLWhvdGtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsSUFBSSxFQUNKLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFVBQVUsRUFDVixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUN4QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQ0gsa0NBQWtDLEVBQ2xDLGlDQUFpQyxFQUNqQywrQkFBK0IsRUFDbEMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUxRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxTQUFxQixFQUFFLEVBQUU7SUFDcEQsTUFBTSxLQUFLLEdBQUcsU0FBd0MsQ0FBQztJQUN2RCxNQUFNLEVBQUUsT0FBTyxFQUFFLGNBQWMs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QUU7SUFFbEIsTUFBTSxZQUFZLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNyRCxPQUFPLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssa0JBQWtCLENBQUM7SUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDSCxJQUFJLGtCQUFrQixJQUFJLGFBQWEsSUFBSSxDQUFDLGFBQWEsRUFBRTtRQUN2RCxhQUFhLEdBQUcsa0JBQWtCLENBQUM7S0FDdEM7SUFDRCxPQUFPLGFBQWEsQ0FBQztBQUN6QixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBhdGgsXG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEhpc3RvcnlCb2FyZCxcbiAgICBQbGFpdE5vZGUsXG4gICAgVHJhbnNmb3JtcyxcbiAgICBhZGRTZWxlY3RlZEVsZW1lbnQsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyxcbiAgICByZW1vdmVTZWxlY3RlZEVsZW1lbnRcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQsIFBsYWl0TWluZCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3ROb2RlIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgZ2V0Rmlyc3RMZXZlbEVsZW1lbnQsIGluc2VydE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vdXRpbHMvbWluZCc7XG5pbXBvcnQgeyBmaW5kTmV3Q2hpbGROb2RlUGF0aCwgZmluZE5ld1NpYmxpbmdOb2RlUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGgnO1xuaW1wb3J0IHtcbiAgICBkZWxldGVFbGVtZW50c0hhbmRsZVJpZ2h0Tm9kZUNvdW50LFxuICAgIGluc2VydEVsZW1lbnRIYW5kbGVSaWdodE5vZGVDb3VudCxcbiAgICBpc0luUmlnaHRCcmFuY2hPZlN0YW5kYXJkTGF5b3V0XG59IGZyb20gJy4uL3V0aWxzL25vZGUvcmlnaHQtbm9kZS1jb3VudCc7XG5pbXBvcnQgeyBNaW5kVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuaW1wb3J0IHsgZGVsZXRlRWxlbWVudEhhbmRsZUFic3RyYWN0LCBpbnNlcnRFbGVtZW50SGFuZGxlQWJzdHJhY3QgfSBmcm9tICcuLi91dGlscy9hYnN0cmFjdC9jb21tb24nO1xuaW1wb3J0IHsgZWRpdFRvcGljLCBnZXRTZWxlY3RlZE1pbmRFbGVtZW50cyB9IGZyb20gJy4uL3V0aWxzL25vZGUvY29tbW9uJztcbmltcG9ydCB7IFBsYWl0TWluZEJvYXJkIH0gZnJvbSAnLi93aXRoLW1pbmQuYm9hcmQnO1xuaW1wb3J0IHsgaXNTcGFjZUhvdGtleSwgaXNFeHBhbmRIb3RrZXksIGlzVGFiSG90a2V5LCBpc0VudGVySG90a2V5LCBpc1ZpcnR1YWxLZXkgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcblxuZXhwb3J0IGNvbnN0IHdpdGhNaW5kSG90a2V5ID0gKGJhc2VCb2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IGJvYXJkID0gYmFzZUJvYXJkIGFzIFBsYWl0Qm9hcmQgJiBQbGFpdE1pbmRCb2FyZDtcbiAgICBjb25zdCB7IGtleWRvd24sIGRlbGV0ZUZyYWdtZW50IH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmtleWRvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBjb25zdCBpc1NpbmdsZVNlbGVjdGlvbiA9IHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxO1xuICAgICAgICBjb25zdCBpc1NpbmdsZU1pbmRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDEgJiYgTWluZEVsZW1lbnQuaXNNaW5kRWxlbWVudChib2FyZCwgc2VsZWN0ZWRFbGVtZW50c1swXSk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBzZWxlY3RlZEVsZW1lbnRzWzBdIGFzIE1pbmRFbGVtZW50O1xuXG4gICAgICAgIGlmIChpc0V4cGFuZEhvdGtleShldmVudCkgJiYgaXNTaW5nbGVNaW5kRWxlbWVudCAmJiAhUGxhaXRNaW5kLmlzTWluZCh0YXJnZXRFbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQuY2hpbGRyZW4gJiYgdGFyZ2V0RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKFxuICAgICAgICAgICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgICAgICAgICAgeyBpc0NvbGxhcHNlZDogdGFyZ2V0RWxlbWVudC5pc0NvbGxhcHNlZCA/IGZhbHNlIDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCB0YXJnZXRFbGVtZW50KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBpZiAoaXNUYWJIb3RrZXkoZXZlbnQpICYmIGlzU2luZ2xlTWluZEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHJlbW92ZVNlbGVjdGVkRWxlbWVudChib2FyZCwgdGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudFBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCB0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0RWxlbWVudC5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdFbGVtZW50OiBQYXJ0aWFsPE1pbmRFbGVtZW50PiA9IHsgaXNDb2xsYXBzZWQ6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgICAgIFBsYWl0SGlzdG9yeUJvYXJkLndpdGhvdXRTYXZpbmcoYm9hcmQsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgdGFyZ2V0RWxlbWVudFBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5zZXJ0TWluZEVsZW1lbnQoYm9hcmQsIHRhcmdldEVsZW1lbnQsIGZpbmROZXdDaGlsZE5vZGVQYXRoKGJvYXJkLCB0YXJnZXRFbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaXNFbnRlckhvdGtleShldmVudCkgJiZcbiAgICAgICAgICAgICAgICBpc1NpbmdsZU1pbmRFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgIVBsYWl0TWluZC5pc01pbmQodGFyZ2V0RWxlbWVudCkgJiZcbiAgICAgICAgICAgICAgICAhQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QodGFyZ2V0RWxlbWVudClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRQYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgdGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzSW5SaWdodEJyYW5jaE9mU3RhbmRhcmRMYXlvdXQodGFyZ2V0RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmcyA9IGluc2VydEVsZW1lbnRIYW5kbGVSaWdodE5vZGVDb3VudChib2FyZCwgdGFyZ2V0RWxlbWVudFBhdGguc2xpY2UoMCwgMSksIDEpO1xuICAgICAgICAgICAgICAgICAgICBNaW5kVHJhbnNmb3Jtcy5zZXRSaWdodE5vZGVDb3VudEJ5UmVmcyhib2FyZCwgcmVmcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFic3RyYWN0UmVmcyA9IGluc2VydEVsZW1lbnRIYW5kbGVBYnN0cmFjdChib2FyZCwgUGF0aC5uZXh0KHRhcmdldEVsZW1lbnRQYXRoKSk7XG4gICAgICAgICAgICAgICAgTWluZFRyYW5zZm9ybXMuc2V0QWJzdHJhY3RzQnlSZWZzKGJvYXJkLCBhYnN0cmFjdFJlZnMpO1xuICAgICAgICAgICAgICAgIGluc2VydE1pbmRFbGVtZW50KGJvYXJkLCB0YXJnZXRFbGVtZW50LCBmaW5kTmV3U2libGluZ05vZGVQYXRoKGJvYXJkLCB0YXJnZXRFbGVtZW50KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzVmlydHVhbEtleShldmVudCkgJiYgIWlzU3BhY2VIb3RrZXkoZXZlbnQpICYmIGlzU2luZ2xlU2VsZWN0aW9uICYmIE1pbmRFbGVtZW50LmlzTWluZEVsZW1lbnQoYm9hcmQsIHRhcmdldEVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBlZGl0VG9waWModGFyZ2V0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAga2V5ZG93bihldmVudCk7XG4gICAgfTtcblxuICAgIGJvYXJkLmRlbGV0ZUZyYWdtZW50ID0gKGRhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0TWluZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRNaW5kRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAodGFyZ2V0TWluZEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RMZXZlbEVsZW1lbnRzID0gZ2V0Rmlyc3RMZXZlbEVsZW1lbnQodGFyZ2V0TWluZEVsZW1lbnRzKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICBjb25zdCBhYnN0cmFjdFJlZnMgPSBkZWxldGVFbGVtZW50SGFuZGxlQWJzdHJhY3QoYm9hcmQsIGZpcnN0TGV2ZWxFbGVtZW50cyk7XG4gICAgICAgICAgICBNaW5kVHJhbnNmb3Jtcy5zZXRBYnN0cmFjdHNCeVJlZnMoYm9hcmQsIGFic3RyYWN0UmVmcyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlZnMgPSBkZWxldGVFbGVtZW50c0hhbmRsZVJpZ2h0Tm9kZUNvdW50KGJvYXJkLCB0YXJnZXRNaW5kRWxlbWVudHMpO1xuICAgICAgICAgICAgTWluZFRyYW5zZm9ybXMuc2V0UmlnaHROb2RlQ291bnRCeVJlZnMoYm9hcmQsIHJlZnMpO1xuXG4gICAgICAgICAgICBNaW5kVHJhbnNmb3Jtcy5yZW1vdmVFbGVtZW50cyhib2FyZCwgdGFyZ2V0TWluZEVsZW1lbnRzKTtcblxuICAgICAgICAgICAgY29uc3QgbmV4dFNlbGVjdGVkID0gZ2V0TmV4dFNlbGVjdGVkRWxlbWVudChib2FyZCwgZmlyc3RMZXZlbEVsZW1lbnRzKTtcbiAgICAgICAgICAgIGlmIChuZXh0U2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBhZGRTZWxlY3RlZEVsZW1lbnQoYm9hcmQsIG5leHRTZWxlY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlRnJhZ21lbnQoZGF0YSk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXh0U2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBmaXJzdExldmVsRWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICBsZXQgYWN0aXZlRWxlbWVudDogTWluZEVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZmlyc3RMZXZlbEVsZW1lbnQgPSBmaXJzdExldmVsRWxlbWVudHNbMF07XG4gICAgY29uc3QgZmlyc3RMZXZlbEVsZW1lbnRQYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgZmlyc3RMZXZlbEVsZW1lbnQpO1xuXG4gICAgbGV0IG5leHRTZWxlY3RlZFBhdGggPSBmaXJzdExldmVsRWxlbWVudFBhdGg7XG4gICAgaWYgKFBhdGguaGFzUHJldmlvdXMoZmlyc3RMZXZlbEVsZW1lbnRQYXRoKSkge1xuICAgICAgICBuZXh0U2VsZWN0ZWRQYXRoID0gUGF0aC5wcmV2aW91cyhmaXJzdExldmVsRWxlbWVudFBhdGgpO1xuICAgIH1cblxuICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChmaXJzdExldmVsRWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gTWluZEVsZW1lbnQuZ2V0UGFyZW50KGZpcnN0TGV2ZWxFbGVtZW50KTtcbiAgICAgICAgaWYgKCFmaXJzdExldmVsRWxlbWVudHMuaW5jbHVkZXMocGFyZW50LmNoaWxkcmVuW2ZpcnN0TGV2ZWxFbGVtZW50LnN0YXJ0XSkpIHtcbiAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBwYXJlbnQuY2hpbGRyZW5bZmlyc3RMZXZlbEVsZW1lbnQuc3RhcnRdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBhY3RpdmVFbGVtZW50ID0gUGxhaXROb2RlLmdldDxNaW5kRWxlbWVudD4oYm9hcmQsIG5leHRTZWxlY3RlZFBhdGgpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XG5cbiAgICBjb25zdCBmaXJzdEVsZW1lbnQgPSBmaXJzdExldmVsRWxlbWVudHNbMF07XG4gICAgY29uc3QgZmlyc3RFbGVtZW50UGFyZW50ID0gTWluZEVsZW1lbnQuZmluZFBhcmVudChmaXJzdEVsZW1lbnQpO1xuICAgIGNvbnN0IGhhc1NhbWVQYXJlbnQgPSBmaXJzdExldmVsRWxlbWVudHMuZXZlcnkoZWxlbWVudCA9PiB7XG4gICAgICAgIHJldHVybiBNaW5kRWxlbWVudC5maW5kUGFyZW50KGVsZW1lbnQpID09PSBmaXJzdEVsZW1lbnRQYXJlbnQ7XG4gICAgfSk7XG4gICAgaWYgKGZpcnN0RWxlbWVudFBhcmVudCAmJiBoYXNTYW1lUGFyZW50ICYmICFhY3RpdmVFbGVtZW50KSB7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQgPSBmaXJzdEVsZW1lbnRQYXJlbnQ7XG4gICAgfVxuICAgIHJldHVybiBhY3RpdmVFbGVtZW50O1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { PlaitNode } from '@plait/core';
|
|
2
|
+
import { addSelectedImageElement, getSelectedImageElement } from '../utils/node/image';
|
|
3
|
+
import { getHitImageResizeHandleDirection } from '../utils';
|
|
4
|
+
import { ResizeHandle, withResize } from '@plait/common';
|
|
5
|
+
import { MindTransforms } from '../transforms';
|
|
6
|
+
export const withNodeImageResize = (board) => {
|
|
7
|
+
const options = {
|
|
8
|
+
key: 'mind-node-image',
|
|
9
|
+
canResize: () => {
|
|
10
|
+
return true;
|
|
11
|
+
},
|
|
12
|
+
detect: (point) => {
|
|
13
|
+
const selectedMindElement = getSelectedImageElement(board);
|
|
14
|
+
if (selectedMindElement) {
|
|
15
|
+
const result = getHitImageResizeHandleDirection(board, selectedMindElement, point);
|
|
16
|
+
if (result) {
|
|
17
|
+
return {
|
|
18
|
+
element: selectedMindElement,
|
|
19
|
+
handle: result.handle,
|
|
20
|
+
cursorClass: result.cursorClass
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return null;
|
|
25
|
+
},
|
|
26
|
+
onResize: (resizeRef, resizeState) => {
|
|
27
|
+
let offsetX = resizeState.offsetX;
|
|
28
|
+
let offsetY = resizeState.offsetY;
|
|
29
|
+
if (resizeRef.handle === ResizeHandle.nw || resizeRef.handle === ResizeHandle.sw) {
|
|
30
|
+
offsetX = -offsetX;
|
|
31
|
+
}
|
|
32
|
+
const originWidth = resizeRef.element.data.image.width;
|
|
33
|
+
const originHeight = resizeRef.element.data.image.height;
|
|
34
|
+
let width = originWidth + offsetX;
|
|
35
|
+
if (width <= 100) {
|
|
36
|
+
width = 100;
|
|
37
|
+
}
|
|
38
|
+
const ratio = originWidth / width;
|
|
39
|
+
const height = originHeight / ratio;
|
|
40
|
+
const imageItem = { ...resizeRef.element.data.image, width, height };
|
|
41
|
+
MindTransforms.setImage(board, PlaitNode.get(board, resizeRef.path), imageItem);
|
|
42
|
+
addSelectedImageElement(board, PlaitNode.get(board, resizeRef.path));
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
withResize(board, options);
|
|
46
|
+
return board;
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1ub2RlLWltYWdlLXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3BsdWdpbnMvd2l0aC1ub2RlLWltYWdlLXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBYyxNQUFNLGFBQWEsQ0FBQztBQUd2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBNkMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDckQsTUFBTSxPQUFPLEdBQThDO1FBQ3ZELEdBQUcsRUFBRSxpQkFBaUI7UUFDdEIsU0FBUyxFQUFFLEdBQUcsRUFBRTtZQUNaLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLEVBQUUsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUNyQixNQUFNLG1CQUFtQixHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELElBQUksbUJBQW1CLEVBQUU7Z0JBQ3JCLE1BQU0sTUFBTSxHQUFHLGdDQUFnQyxDQUFDLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbkYsSUFBSSxNQUFNLEVBQUU7b0JBQ1IsT0FBTzt3QkFDSCxPQUFPLEVBQUUsbUJBQW1CO3dCQUM1QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQXNCO3dCQUNyQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7cUJBQ2xDLENBQUM7aUJBQ0w7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxRQUFRLEVBQUUsQ0FBQyxTQUE0QyxFQUFFLFdBQXdCLEVBQUUsRUFBRTtZQUNqRixJQUFJLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1lBQ2xDLElBQUksT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDbEMsSUFBSSxTQUFTLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxFQUFFLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsRUFBRSxFQUFFO2dCQUM5RSxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUM7YUFDdEI7WUFDRCxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3ZELE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDekQsSUFBSSxLQUFLLEdBQUcsV0FBVyxHQUFHLE9BQU8sQ0FBQztZQUNsQyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7Z0JBQ2QsS0FBSyxHQUFHLEdBQUcsQ0FBQzthQUNmO1lBQ0QsTUFBTSxLQUFLLEdBQUcsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUNsQyxNQUFNLE1BQU0sR0FBRyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3BDLE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3JFLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNoRix1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekUsQ0FBQztLQUNKLENBQUM7SUFFRixVQUFVLENBQXlCLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVuRCxPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUGxhaXROb2RlLCBUcmFuc2Zvcm1zIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEltYWdlRGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudC1kYXRhJztcbmltcG9ydCB7IGFkZFNlbGVjdGVkSW1hZ2VFbGVtZW50LCBnZXRTZWxlY3RlZEltYWdlRWxlbWVudCB9IGZyb20gJy4uL3V0aWxzL25vZGUvaW1hZ2UnO1xuaW1wb3J0IHsgZ2V0SGl0SW1hZ2VSZXNpemVIYW5kbGVEaXJlY3Rpb24gfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBSZXNpemVIYW5kbGUsIFJlc2l6ZVJlZiwgUmVzaXplU3RhdGUsIFdpdGhSZXNpemVPcHRpb25zLCB3aXRoUmVzaXplIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBNaW5kVHJhbnNmb3JtcyB9IGZyb20gJy4uL3RyYW5zZm9ybXMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aE5vZGVJbWFnZVJlc2l6ZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IFdpdGhSZXNpemVPcHRpb25zPE1pbmRFbGVtZW50PEltYWdlRGF0YT4+ID0ge1xuICAgICAgICBrZXk6ICdtaW5kLW5vZGUtaW1hZ2UnLFxuICAgICAgICBjYW5SZXNpemU6ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBkZXRlY3Q6IChwb2ludDogUG9pbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTWluZEVsZW1lbnQgPSBnZXRTZWxlY3RlZEltYWdlRWxlbWVudChib2FyZCk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRNaW5kRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldEhpdEltYWdlUmVzaXplSGFuZGxlRGlyZWN0aW9uKGJvYXJkLCBzZWxlY3RlZE1pbmRFbGVtZW50LCBwb2ludCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogc2VsZWN0ZWRNaW5kRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZTogcmVzdWx0LmhhbmRsZSBhcyBSZXNpemVIYW5kbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JDbGFzczogcmVzdWx0LmN1cnNvckNsYXNzXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIG9uUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8TWluZEVsZW1lbnQ8SW1hZ2VEYXRhPj4sIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IG9mZnNldFggPSByZXNpemVTdGF0ZS5vZmZzZXRYO1xuICAgICAgICAgICAgbGV0IG9mZnNldFkgPSByZXNpemVTdGF0ZS5vZmZzZXRZO1xuICAgICAgICAgICAgaWYgKHJlc2l6ZVJlZi5oYW5kbGUgPT09IFJlc2l6ZUhhbmRsZS5udyB8fCByZXNpemVSZWYuaGFuZGxlID09PSBSZXNpemVIYW5kbGUuc3cpIHtcbiAgICAgICAgICAgICAgICBvZmZzZXRYID0gLW9mZnNldFg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5XaWR0aCA9IHJlc2l6ZVJlZi5lbGVtZW50LmRhdGEuaW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5IZWlnaHQgPSByZXNpemVSZWYuZWxlbWVudC5kYXRhLmltYWdlLmhlaWdodDtcbiAgICAgICAgICAgIGxldCB3aWR0aCA9IG9yaWdpbldpZHRoICsgb2Zmc2V0WDtcbiAgICAgICAgICAgIGlmICh3aWR0aCA8PSAxMDApIHtcbiAgICAgICAgICAgICAgICB3aWR0aCA9IDEwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJhdGlvID0gb3JpZ2luV2lkdGggLyB3aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IG9yaWdpbkhlaWdodCAvIHJhdGlvO1xuICAgICAgICAgICAgY29uc3QgaW1hZ2VJdGVtID0geyAuLi5yZXNpemVSZWYuZWxlbWVudC5kYXRhLmltYWdlLCB3aWR0aCwgaGVpZ2h0IH07XG4gICAgICAgICAgICBNaW5kVHJhbnNmb3Jtcy5zZXRJbWFnZShib2FyZCwgUGxhaXROb2RlLmdldChib2FyZCwgcmVzaXplUmVmLnBhdGgpLCBpbWFnZUl0ZW0pO1xuICAgICAgICAgICAgYWRkU2VsZWN0ZWRJbWFnZUVsZW1lbnQoYm9hcmQsIFBsYWl0Tm9kZS5nZXQoYm9hcmQsIHJlc2l6ZVJlZi5wYXRoKSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgd2l0aFJlc2l6ZTxNaW5kRWxlbWVudDxJbWFnZURhdGE+Pihib2FyZCwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gYm9hcmQ7XG59O1xuIl19
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from './position';
|
|
2
|
+
export * from './weak-maps';
|
|
3
|
+
export * from './mind';
|
|
4
|
+
export * from './layout';
|
|
5
|
+
export * from './node';
|
|
6
|
+
export * from './node-style';
|
|
7
|
+
export * from './dnd/common';
|
|
8
|
+
export * from './dnd/detector';
|
|
9
|
+
export * from './draw/node-dnd';
|
|
10
|
+
export * from './abstract/common';
|
|
11
|
+
export * from './abstract/resize';
|
|
12
|
+
export * from './node/right-node-count';
|
|
13
|
+
export * from './space/node-space';
|
|
14
|
+
export * from './space';
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcG9zaXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi93ZWFrLW1hcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9taW5kJztcbmV4cG9ydCAqIGZyb20gJy4vbGF5b3V0JztcbmV4cG9ydCAqIGZyb20gJy4vbm9kZSc7XG5leHBvcnQgKiBmcm9tICcuL25vZGUtc3R5bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kbmQvY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vZG5kL2RldGVjdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vZHJhdy9ub2RlLWRuZCc7XG5leHBvcnQgKiBmcm9tICcuL2Fic3RyYWN0L2NvbW1vbic7XG5leHBvcnQgKiBmcm9tICcuL2Fic3RyYWN0L3Jlc2l6ZSc7XG5leHBvcnQgKiBmcm9tICcuL25vZGUvcmlnaHQtbm9kZS1jb3VudCc7XG5leHBvcnQgKiBmcm9tICcuL3NwYWNlL25vZGUtc3BhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zcGFjZSc7XG4iXX0=
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { RectangleClient } from '@plait/core';
|
|
2
|
+
import { MindElement } from '../../interfaces/element';
|
|
3
|
+
import { getRectangleByNode } from './node';
|
|
4
|
+
import { NodeSpace } from '../space/node-space';
|
|
5
|
+
import { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs } from '@plait/common';
|
|
6
|
+
export function getImageForeignRectangle(board, element) {
|
|
7
|
+
let { x, y } = getRectangleByNode(MindElement.getNode(element));
|
|
8
|
+
const elementWidth = element.manualWidth || element.width;
|
|
9
|
+
x =
|
|
10
|
+
elementWidth > element.data.image.width
|
|
11
|
+
? x + NodeSpace.getTextLeftSpace(board, element) + (elementWidth - element.data.image.width) / 2
|
|
12
|
+
: x + NodeSpace.getTextLeftSpace(board, element);
|
|
13
|
+
y = NodeSpace.getImageTopSpace(board, element) + y;
|
|
14
|
+
const { width, height } = element.data.image;
|
|
15
|
+
const rectangle = {
|
|
16
|
+
x,
|
|
17
|
+
y,
|
|
18
|
+
width,
|
|
19
|
+
height
|
|
20
|
+
};
|
|
21
|
+
return rectangle;
|
|
22
|
+
}
|
|
23
|
+
export const isHitImage = (board, element, range) => {
|
|
24
|
+
const imageRectangle = getImageForeignRectangle(board, element);
|
|
25
|
+
const imageOutlineRectangle = RectangleClient.getOutlineRectangle(imageRectangle, -RESIZE_HANDLE_DIAMETER / 2);
|
|
26
|
+
return RectangleClient.isHit(RectangleClient.toRectangleClient([range.anchor, range.focus]), imageOutlineRectangle);
|
|
27
|
+
};
|
|
28
|
+
export const getHitImageResizeHandleDirection = (board, element, point) => {
|
|
29
|
+
const imageRectangle = getImageForeignRectangle(board, element);
|
|
30
|
+
const resizeHandleRefs = getRectangleResizeHandleRefs(imageRectangle, RESIZE_HANDLE_DIAMETER);
|
|
31
|
+
const result = resizeHandleRefs.find(resizeHandleRef => {
|
|
32
|
+
return RectangleClient.isHit(RectangleClient.toRectangleClient([point, point]), resizeHandleRef.rectangle);
|
|
33
|
+
});
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9taW5kL3NyYy91dGlscy9wb3NpdGlvbi9pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckYsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEtBQXFCLEVBQUUsT0FBK0I7SUFDM0YsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO0lBRTFELENBQUM7UUFDRyxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztZQUNuQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUNoRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFNLENBQUM7SUFDOUMsTUFBTSxTQUFTLEdBQUc7UUFDZCxDQUFDO1FBQ0QsQ0FBQztRQUNELEtBQUs7UUFDTCxNQUFNO0tBQ1QsQ0FBQztJQUNGLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQStCLEVBQUUsS0FBWSxFQUFFLEVBQUU7SUFDM0YsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLENBQUMsS0FBdUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNsRixNQUFNLHFCQUFxQixHQUFHLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMvRyxPQUFPLGVBQWUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3hILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLENBQUMsS0FBaUIsRUFBRSxPQUErQixFQUFFLEtBQVksRUFBRSxFQUFFO0lBQ2pILE1BQU0sY0FBYyxHQUFHLHdCQUF3QixDQUFDLEtBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEYsTUFBTSxnQkFBZ0IsR0FBRyw0QkFBNEIsQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUM5RixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDbkQsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvRyxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBSYW5nZSwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgSW1hZ2VEYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9lbGVtZW50LWRhdGEnO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi9ub2RlJztcbmltcG9ydCB7IE5vZGVTcGFjZSB9IGZyb20gJy4uL3NwYWNlL25vZGUtc3BhY2UnO1xuaW1wb3J0IHsgUGxhaXRNaW5kQm9hcmQgfSBmcm9tICcuLi8uLi9wbHVnaW5zL3dpdGgtbWluZC5ib2FyZCc7XG5pbXBvcnQgeyBSRVNJWkVfSEFORExFX0RJQU1FVEVSLCBnZXRSZWN0YW5nbGVSZXNpemVIYW5kbGVSZWZzIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZUZvcmVpZ25SZWN0YW5nbGUoYm9hcmQ6IFBsYWl0TWluZEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudDxJbWFnZURhdGE+KTogUmVjdGFuZ2xlQ2xpZW50IHtcbiAgICBsZXQgeyB4LCB5IH0gPSBnZXRSZWN0YW5nbGVCeU5vZGUoTWluZEVsZW1lbnQuZ2V0Tm9kZShlbGVtZW50KSk7XG4gICAgY29uc3QgZWxlbWVudFdpZHRoID0gZWxlbWVudC5tYW51YWxXaWR0aCB8fCBlbGVtZW50LndpZHRoO1xuXG4gICAgeCA9XG4gICAgICAgIGVsZW1lbnRXaWR0aCA+IGVsZW1lbnQuZGF0YS5pbWFnZS53aWR0aFxuICAgICAgICAgICAgPyB4ICsgTm9kZVNwYWNlLmdldFRleHRMZWZ0U3BhY2UoYm9hcmQsIGVsZW1lbnQpICsgKGVsZW1lbnRXaWR0aCAtIGVsZW1lbnQuZGF0YS5pbWFnZS53aWR0aCkgLyAyXG4gICAgICAgICAgICA6IHggKyBOb2RlU3BhY2UuZ2V0VGV4dExlZnRTcGFjZShib2FyZCwgZWxlbWVudCk7XG4gICAgeSA9IE5vZGVTcGFjZS5nZXRJbWFnZVRvcFNwYWNlKGJvYXJkLCBlbGVtZW50KSArIHk7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBlbGVtZW50LmRhdGEuaW1hZ2UhO1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgIH07XG4gICAgcmV0dXJuIHJlY3RhbmdsZTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzSGl0SW1hZ2UgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IE1pbmRFbGVtZW50PEltYWdlRGF0YT4sIHJhbmdlOiBSYW5nZSkgPT4ge1xuICAgIGNvbnN0IGltYWdlUmVjdGFuZ2xlID0gZ2V0SW1hZ2VGb3JlaWduUmVjdGFuZ2xlKGJvYXJkIGFzIFBsYWl0TWluZEJvYXJkLCBlbGVtZW50KTtcbiAgICBjb25zdCBpbWFnZU91dGxpbmVSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0T3V0bGluZVJlY3RhbmdsZShpbWFnZVJlY3RhbmdsZSwgLVJFU0laRV9IQU5ETEVfRElBTUVURVIgLyAyKTtcbiAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KFJlY3RhbmdsZUNsaWVudC50b1JlY3RhbmdsZUNsaWVudChbcmFuZ2UuYW5jaG9yLCByYW5nZS5mb2N1c10pLCBpbWFnZU91dGxpbmVSZWN0YW5nbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdEltYWdlUmVzaXplSGFuZGxlRGlyZWN0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBNaW5kRWxlbWVudDxJbWFnZURhdGE+LCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBpbWFnZVJlY3RhbmdsZSA9IGdldEltYWdlRm9yZWlnblJlY3RhbmdsZShib2FyZCBhcyBQbGFpdE1pbmRCb2FyZCwgZWxlbWVudCk7XG4gICAgY29uc3QgcmVzaXplSGFuZGxlUmVmcyA9IGdldFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZnMoaW1hZ2VSZWN0YW5nbGUsIFJFU0laRV9IQU5ETEVfRElBTUVURVIpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHJlc2l6ZUhhbmRsZVJlZnMuZmluZChyZXNpemVIYW5kbGVSZWYgPT4ge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KFJlY3RhbmdsZUNsaWVudC50b1JlY3RhbmdsZUNsaWVudChbcG9pbnQsIHBvaW50XSksIHJlc2l6ZUhhbmRsZVJlZi5yZWN0YW5nbGUpO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuIl19
|
|
@@ -5,9 +5,8 @@ import { DefaultThemeColor, ColorfulThemeColor, SoftThemeColor, RetroThemeColor,
|
|
|
5
5
|
import { MindLayoutType, isIndentedLayout, AbstractNode, isStandardLayout, isHorizontalLogicLayout, isVerticalLogicLayout, getNonAbstractChildren, isLeftLayout, isRightLayout, isTopLayout, isBottomLayout, isHorizontalLayout, getCorrectStartEnd, ConnectingPosition, getAbstractLayout, GlobalLayout } from '@plait/layouts';
|
|
6
6
|
import { PlaitMarkEditor, MarkTypes, DEFAULT_FONT_SIZE, TEXT_DEFAULT_HEIGHT, buildText, getTextSize, TextManage, ExitOrigin, TextModule, getTextFromClipboard } from '@plait/text';
|
|
7
7
|
import { fromEvent, Subject } from 'rxjs';
|
|
8
|
-
import { RESIZE_HANDLE_DIAMETER,
|
|
8
|
+
import { RESIZE_HANDLE_DIAMETER, getRectangleResizeHandleRefs, isExpandHotkey, isTabHotkey, isEnterHotkey, isVirtualKey, isSpaceHotkey, MediaKeys, ResizeHandle, withResize, ActiveGenerator } from '@plait/common';
|
|
9
9
|
import { Node as Node$1, Path as Path$1 } from 'slate';
|
|
10
|
-
import { isKeyHotkey } from 'is-hotkey';
|
|
11
10
|
import { pointsOnBezierCurves } from 'points-on-curve';
|
|
12
11
|
import { take, filter } from 'rxjs/operators';
|
|
13
12
|
import * as i1 from '@angular/common';
|
|
@@ -218,6 +217,9 @@ const ROOT_TOPIC_HEIGHT = 25;
|
|
|
218
217
|
const TOPIC_DEFAULT_MAX_WORD_COUNT = 34;
|
|
219
218
|
const DEFAULT_FONT_FAMILY = 'PingFangSC-Regular, "PingFang SC"';
|
|
220
219
|
const BRANCH_FONT_FAMILY = 'PingFangSC-Medium, "PingFang SC"';
|
|
220
|
+
const NodeTopicThreshold = {
|
|
221
|
+
defaultTextMaxWidth: 34 * 14,
|
|
222
|
+
};
|
|
221
223
|
|
|
222
224
|
const NodeDefaultSpace = {
|
|
223
225
|
horizontal: {
|
|
@@ -419,9 +421,9 @@ const isHitImage = (board, element, range) => {
|
|
|
419
421
|
};
|
|
420
422
|
const getHitImageResizeHandleDirection = (board, element, point) => {
|
|
421
423
|
const imageRectangle = getImageForeignRectangle(board, element);
|
|
422
|
-
const
|
|
423
|
-
const result =
|
|
424
|
-
return RectangleClient.isHit(RectangleClient.toRectangleClient([point, point]),
|
|
424
|
+
const resizeHandleRefs = getRectangleResizeHandleRefs(imageRectangle, RESIZE_HANDLE_DIAMETER);
|
|
425
|
+
const result = resizeHandleRefs.find(resizeHandleRef => {
|
|
426
|
+
return RectangleClient.isHit(RectangleClient.toRectangleClient([point, point]), resizeHandleRef.rectangle);
|
|
425
427
|
});
|
|
426
428
|
return result;
|
|
427
429
|
};
|
|
@@ -1335,18 +1337,6 @@ const getShapeByElement = (board, element) => {
|
|
|
1335
1337
|
return shape || MindElementShape.roundRectangle;
|
|
1336
1338
|
};
|
|
1337
1339
|
|
|
1338
|
-
function isVirtualKey(e) {
|
|
1339
|
-
const isMod = e.ctrlKey || e.metaKey;
|
|
1340
|
-
const isAlt = isKeyHotkey('alt', e);
|
|
1341
|
-
const isShift = isKeyHotkey('shift', e);
|
|
1342
|
-
const isCapsLock = e.key.includes('CapsLock');
|
|
1343
|
-
const isTab = e.key.includes('Tab');
|
|
1344
|
-
const isEsc = e.key.includes('Escape');
|
|
1345
|
-
const isF = e.key.startsWith('F');
|
|
1346
|
-
const isArrow = e.key.includes('Arrow') ? true : false;
|
|
1347
|
-
return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;
|
|
1348
|
-
}
|
|
1349
|
-
|
|
1350
1340
|
const IS_DRAGGING = new WeakMap();
|
|
1351
1341
|
const addActiveOnDragOrigin = (activeElement) => {
|
|
1352
1342
|
const activeComponent = PlaitElement.getComponent(activeElement);
|
|
@@ -3091,7 +3081,10 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
3091
3081
|
MindTransforms.setTopicSize(this.board, this.element, width, height);
|
|
3092
3082
|
}
|
|
3093
3083
|
},
|
|
3094
|
-
textPlugins: plugins
|
|
3084
|
+
textPlugins: plugins,
|
|
3085
|
+
getMaxWidth: () => {
|
|
3086
|
+
return NodeTopicThreshold.defaultTextMaxWidth;
|
|
3087
|
+
}
|
|
3095
3088
|
});
|
|
3096
3089
|
}
|
|
3097
3090
|
ngOnInit() {
|
|
@@ -3249,9 +3242,8 @@ class MindNodeComponent extends PlaitPluginElementComponent {
|
|
|
3249
3242
|
ELEMENT_TO_NODE.delete(this.element);
|
|
3250
3243
|
}
|
|
3251
3244
|
}
|
|
3252
|
-
}
|
|
3253
|
-
|
|
3254
|
-
MindNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: MindNodeComponent, selector: "plait-mind-node", usesInheritance: true, ngImport: i0, template: `
|
|
3245
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: MindNodeComponent, deps: [{ token: i0.ViewContainerRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
3246
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.3", type: MindNodeComponent, selector: "plait-mind-node", usesInheritance: true, ngImport: i0, template: `
|
|
3255
3247
|
<plait-children
|
|
3256
3248
|
*ngIf="!element.isCollapsed"
|
|
3257
3249
|
[board]="board"
|
|
@@ -3259,8 +3251,9 @@ MindNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
|
|
|
3259
3251
|
[effect]="effect"
|
|
3260
3252
|
[parentG]="parentG"
|
|
3261
3253
|
></plait-children>
|
|
3262
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PlaitChildrenElement, selector: "plait-children", inputs: ["board", "parent", "effect", "parentG"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3263
|
-
|
|
3254
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.PlaitChildrenElement, selector: "plait-children", inputs: ["board", "parent", "effect", "parentG"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3255
|
+
}
|
|
3256
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: MindNodeComponent, decorators: [{
|
|
3264
3257
|
type: Component,
|
|
3265
3258
|
args: [{
|
|
3266
3259
|
selector: 'plait-mind-node',
|
|
@@ -3303,12 +3296,12 @@ class PlaitMindComponent extends MindNodeComponent {
|
|
|
3303
3296
|
ELEMENT_TO_NODE.set(node.origin, node);
|
|
3304
3297
|
});
|
|
3305
3298
|
}
|
|
3306
|
-
}
|
|
3307
|
-
|
|
3308
|
-
PlaitMindComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.5", type: PlaitMindComponent, selector: "plait-mind", usesInheritance: true, ngImport: i0, template: `
|
|
3299
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: PlaitMindComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
3300
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.3", type: PlaitMindComponent, selector: "plait-mind", usesInheritance: true, ngImport: i0, template: `
|
|
3309
3301
|
<plait-children [board]="board" [parent]="element" [effect]="effect" [parentG]="rootG"></plait-children>
|
|
3310
|
-
`, isInline: true, dependencies: [{ kind: "component", type: i2.PlaitChildrenElement, selector: "plait-children", inputs: ["board", "parent", "effect", "parentG"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3311
|
-
|
|
3302
|
+
`, isInline: true, dependencies: [{ kind: "component", type: i2.PlaitChildrenElement, selector: "plait-children", inputs: ["board", "parent", "effect", "parentG"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
3303
|
+
}
|
|
3304
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: PlaitMindComponent, decorators: [{
|
|
3312
3305
|
type: Component,
|
|
3313
3306
|
args: [{
|
|
3314
3307
|
selector: 'plait-mind',
|
|
@@ -3320,11 +3313,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
3320
3313
|
}] });
|
|
3321
3314
|
|
|
3322
3315
|
class MindModule {
|
|
3316
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: MindModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
3317
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.3", ngImport: i0, type: MindModule, declarations: [PlaitMindComponent, MindNodeComponent], imports: [CommonModule, TextModule, PlaitModule], exports: [PlaitMindComponent, MindNodeComponent] }); }
|
|
3318
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: MindModule, imports: [CommonModule, TextModule, PlaitModule] }); }
|
|
3323
3319
|
}
|
|
3324
|
-
|
|
3325
|
-
MindModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.5", ngImport: i0, type: MindModule, declarations: [PlaitMindComponent, MindNodeComponent], imports: [CommonModule, TextModule, PlaitModule], exports: [PlaitMindComponent, MindNodeComponent] });
|
|
3326
|
-
MindModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindModule, imports: [CommonModule, TextModule, PlaitModule] });
|
|
3327
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindModule, decorators: [{
|
|
3320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: MindModule, decorators: [{
|
|
3328
3321
|
type: NgModule,
|
|
3329
3322
|
args: [{
|
|
3330
3323
|
declarations: [PlaitMindComponent, MindNodeComponent],
|
|
@@ -3864,7 +3857,7 @@ const withMindHotkey = (baseBoard) => {
|
|
|
3864
3857
|
insertMindElement(board, targetElement, findNewSiblingNodePath(board, targetElement));
|
|
3865
3858
|
return;
|
|
3866
3859
|
}
|
|
3867
|
-
if (!isVirtualKey(event) && !isSpaceHotkey(event) && isSingleSelection) {
|
|
3860
|
+
if (!isVirtualKey(event) && !isSpaceHotkey(event) && isSingleSelection && MindElement.isMindElement(board, targetElement)) {
|
|
3868
3861
|
event.preventDefault();
|
|
3869
3862
|
editTopic(targetElement);
|
|
3870
3863
|
return;
|
|
@@ -3920,18 +3913,6 @@ const getNextSelectedElement = (board, firstLevelElements) => {
|
|
|
3920
3913
|
}
|
|
3921
3914
|
return activeElement;
|
|
3922
3915
|
};
|
|
3923
|
-
const isExpandHotkey = (event) => {
|
|
3924
|
-
return isKeyHotkey('mod+/', event);
|
|
3925
|
-
};
|
|
3926
|
-
const isTabHotkey = (event) => {
|
|
3927
|
-
return event.key === 'Tab';
|
|
3928
|
-
};
|
|
3929
|
-
const isEnterHotkey = (event) => {
|
|
3930
|
-
return event.key === 'Enter';
|
|
3931
|
-
};
|
|
3932
|
-
const isSpaceHotkey = (event) => {
|
|
3933
|
-
return event.code === 'Space';
|
|
3934
|
-
};
|
|
3935
3916
|
|
|
3936
3917
|
const mouseMoveHandle = (board, event, nodeHoveredExtendRef) => {
|
|
3937
3918
|
let target = null;
|
|
@@ -4227,7 +4208,7 @@ const withNodeImageResize = (board) => {
|
|
|
4227
4208
|
if (result) {
|
|
4228
4209
|
return {
|
|
4229
4210
|
element: selectedMindElement,
|
|
4230
|
-
|
|
4211
|
+
handle: result.handle,
|
|
4231
4212
|
cursorClass: result.cursorClass
|
|
4232
4213
|
};
|
|
4233
4214
|
}
|
|
@@ -4237,7 +4218,7 @@ const withNodeImageResize = (board) => {
|
|
|
4237
4218
|
onResize: (resizeRef, resizeState) => {
|
|
4238
4219
|
let offsetX = resizeState.offsetX;
|
|
4239
4220
|
let offsetY = resizeState.offsetY;
|
|
4240
|
-
if (resizeRef.
|
|
4221
|
+
if (resizeRef.handle === ResizeHandle.nw || resizeRef.handle === ResizeHandle.sw) {
|
|
4241
4222
|
offsetX = -offsetX;
|
|
4242
4223
|
}
|
|
4243
4224
|
const originWidth = resizeRef.element.data.image.width;
|
|
@@ -4373,10 +4354,10 @@ class MindEmojiBaseComponent {
|
|
|
4373
4354
|
ngOnInit() {
|
|
4374
4355
|
this.elementRef.nativeElement.style.fontSize = `${this.fontSize}px`;
|
|
4375
4356
|
}
|
|
4357
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: MindEmojiBaseComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
4358
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.3", type: MindEmojiBaseComponent, inputs: { fontSize: "fontSize", emojiItem: "emojiItem", board: "board", element: "element" }, host: { listeners: { "mousedown": "handleClick()" }, classAttribute: "mind-node-emoji" }, ngImport: i0 }); }
|
|
4376
4359
|
}
|
|
4377
|
-
|
|
4378
|
-
MindEmojiBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: MindEmojiBaseComponent, inputs: { fontSize: "fontSize", emojiItem: "emojiItem", board: "board", element: "element" }, host: { listeners: { "mousedown": "handleClick()" }, classAttribute: "mind-node-emoji" }, ngImport: i0 });
|
|
4379
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindEmojiBaseComponent, decorators: [{
|
|
4360
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: MindEmojiBaseComponent, decorators: [{
|
|
4380
4361
|
type: Directive,
|
|
4381
4362
|
args: [{
|
|
4382
4363
|
host: {
|
|
@@ -4422,13 +4403,16 @@ class MindImageBaseComponent {
|
|
|
4422
4403
|
}
|
|
4423
4404
|
ngOnInit() {
|
|
4424
4405
|
this.activeGenerator = new ActiveGenerator(this.board, {
|
|
4425
|
-
|
|
4406
|
+
getStrokeWidth: () => {
|
|
4407
|
+
return 1;
|
|
4408
|
+
},
|
|
4426
4409
|
getRectangle: (element) => {
|
|
4427
4410
|
return getImageForeignRectangle(this.board, this.element);
|
|
4428
4411
|
},
|
|
4429
4412
|
getStrokeWidthByElement: () => {
|
|
4430
4413
|
return 0;
|
|
4431
|
-
}
|
|
4414
|
+
},
|
|
4415
|
+
hasResizeHandle: () => true
|
|
4432
4416
|
});
|
|
4433
4417
|
this.initialized = true;
|
|
4434
4418
|
}
|
|
@@ -4438,10 +4422,15 @@ class MindImageBaseComponent {
|
|
|
4438
4422
|
this.activeGenerator.draw(this.element, com.g, { selected: this._isFocus });
|
|
4439
4423
|
}
|
|
4440
4424
|
}
|
|
4425
|
+
ngOnDestroy() {
|
|
4426
|
+
if (this.activeGenerator) {
|
|
4427
|
+
this.activeGenerator.destroy();
|
|
4428
|
+
}
|
|
4429
|
+
}
|
|
4430
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: MindImageBaseComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
4431
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.3", type: MindImageBaseComponent, inputs: { imageItem: "imageItem", board: "board", element: "element", isFocus: "isFocus" }, host: { classAttribute: "mind-node-image" }, ngImport: i0 }); }
|
|
4441
4432
|
}
|
|
4442
|
-
|
|
4443
|
-
MindImageBaseComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.5", type: MindImageBaseComponent, inputs: { imageItem: "imageItem", board: "board", element: "element", isFocus: "isFocus" }, host: { classAttribute: "mind-node-image" }, ngImport: i0 });
|
|
4444
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImport: i0, type: MindImageBaseComponent, decorators: [{
|
|
4433
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.3", ngImport: i0, type: MindImageBaseComponent, decorators: [{
|
|
4445
4434
|
type: Directive,
|
|
4446
4435
|
args: [{
|
|
4447
4436
|
host: {
|
|
@@ -4466,5 +4455,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.5", ngImpor
|
|
|
4466
4455
|
* Generated bundle index. Do not edit.
|
|
4467
4456
|
*/
|
|
4468
4457
|
|
|
4469
|
-
export { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET, AbstractHandlePosition, AbstractResizeState, BASE, BRANCH_FONT_FAMILY, BRANCH_WIDTH, BaseDrawer, BranchShape, DEFAULT_FONT_FAMILY, DefaultAbstractNodeStyle, DefaultNodeStyle, ELEMENT_TO_NODE, EXTEND_DIAMETER, EXTEND_OFFSET, GRAY_COLOR, INHERIT_ATTRIBUTE_KEYS, IS_DRAGGING, LayoutDirection, LayoutDirectionsMap, MindColorfulThemeColor, MindDarkThemeColor, MindDefaultThemeColor, MindElement, MindElementShape, MindEmojiBaseComponent, MindImageBaseComponent, MindModule, MindNode, MindNodeComponent, MindPointerType, MindQueries, MindRetroThemeColor, MindSoftThemeColor, MindStarryThemeColor, MindThemeColor, MindThemeColors, MindTransforms, NodeSpace, PRIMARY_COLOR, PlaitMind, PlaitMindComponent, QUICK_INSERT_CIRCLE_COLOR, QUICK_INSERT_CIRCLE_OFFSET, QUICK_INSERT_INNER_CROSS_COLOR, ROOT_TOPIC_FONT_SIZE, ROOT_TOPIC_HEIGHT, STROKE_WIDTH, TOPIC_COLOR, TOPIC_DEFAULT_MAX_WORD_COUNT, TOPIC_FONT_SIZE, TRANSPARENT, WithMindPluginKey, addActiveOnDragOrigin, addSelectedImageElement, adjustAbstractToNode, adjustNodeToRoot, adjustRootToNode, buildImage, canSetAbstract, copyNewNode, correctLayoutByDirection, createDefaultMind, createEmptyMind, createMindElement, deleteElementHandleAbstract, deleteElementsHandleRightNodeCount, detectDropTarget, directionCorrector, directionDetector, divideElementByParent, drawFakeDragNode, drawFakeDropNode, editTopic, extractNodesText, findLastChild, findLocationLeftIndex, getAbstractBranchColor, getAbstractBranchWidth, getAbstractHandleRectangle, getAllowedDirection, getAvailableSubLayoutsByLayoutDirections, getBehindAbstracts, getBranchColorByMindElement, getBranchDirectionsByLayouts, getBranchShapeByMindElement, getBranchWidthByMindElement, getChildrenCount, getCorrespondingAbstract, getDefaultBranchColor, getDefaultBranchColorByIndex, getDefaultLayout, getEmojiFontSize, getEmojiForeignRectangle, getEmojiRectangle, getEmojisWidthHeight, getFillByElement, getFirstLevelElement, getFontSizeBySlateElement, getHitAbstractHandle, getHitImageResizeHandleDirection, getImageForeignRectangle, getInCorrectLayoutDirection, getLayoutDirection$1 as getLayoutDirection, getLayoutOptions, getLayoutReverseDirection, getLocationScope, getMindThemeColor, getNewNodeHeight, getNextBranchColor, getNodeDefaultFontSize, getOverallAbstracts, getPathByDropTarget, getRectangleByElement, getRectangleByNode, getRectangleByResizingLocation, getRelativeStartEndByAbstractRef, getRootLayout, getSelectedImageElement, getSelectedMindElements, getShapeByElement, getStrokeByMindElement, getStrokeWidthByElement, getTopicRectangleByElement, getTopicRectangleByNode, getValidAbstractRefs, handleTouchedAbstract, hasAfterDraw, hasPreviousOrNextOfDropPath, insertElementHandleAbstract, insertElementHandleRightNodeCount, insertMindElement, isChildElement, isChildOfAbstract, isChildRight, isChildUp, isCorrectLayout, isDragging, isDropStandardRight, isHitEmojis, isHitImage, isHitMindElement, isInRightBranchOfStandardLayout, isMixedLayout, isSetAbstract, isValidTarget,
|
|
4458
|
+
export { ABSTRACT_HANDLE_COLOR, ABSTRACT_HANDLE_LENGTH, ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET, AbstractHandlePosition, AbstractResizeState, BASE, BRANCH_FONT_FAMILY, BRANCH_WIDTH, BaseDrawer, BranchShape, DEFAULT_FONT_FAMILY, DefaultAbstractNodeStyle, DefaultNodeStyle, ELEMENT_TO_NODE, EXTEND_DIAMETER, EXTEND_OFFSET, GRAY_COLOR, INHERIT_ATTRIBUTE_KEYS, IS_DRAGGING, LayoutDirection, LayoutDirectionsMap, MindColorfulThemeColor, MindDarkThemeColor, MindDefaultThemeColor, MindElement, MindElementShape, MindEmojiBaseComponent, MindImageBaseComponent, MindModule, MindNode, MindNodeComponent, MindPointerType, MindQueries, MindRetroThemeColor, MindSoftThemeColor, MindStarryThemeColor, MindThemeColor, MindThemeColors, MindTransforms, NodeSpace, NodeTopicThreshold, PRIMARY_COLOR, PlaitMind, PlaitMindComponent, QUICK_INSERT_CIRCLE_COLOR, QUICK_INSERT_CIRCLE_OFFSET, QUICK_INSERT_INNER_CROSS_COLOR, ROOT_TOPIC_FONT_SIZE, ROOT_TOPIC_HEIGHT, STROKE_WIDTH, TOPIC_COLOR, TOPIC_DEFAULT_MAX_WORD_COUNT, TOPIC_FONT_SIZE, TRANSPARENT, WithMindPluginKey, addActiveOnDragOrigin, addSelectedImageElement, adjustAbstractToNode, adjustNodeToRoot, adjustRootToNode, buildImage, canSetAbstract, copyNewNode, correctLayoutByDirection, createDefaultMind, createEmptyMind, createMindElement, deleteElementHandleAbstract, deleteElementsHandleRightNodeCount, detectDropTarget, directionCorrector, directionDetector, divideElementByParent, drawFakeDragNode, drawFakeDropNode, editTopic, extractNodesText, findLastChild, findLocationLeftIndex, getAbstractBranchColor, getAbstractBranchWidth, getAbstractHandleRectangle, getAllowedDirection, getAvailableSubLayoutsByLayoutDirections, getBehindAbstracts, getBranchColorByMindElement, getBranchDirectionsByLayouts, getBranchShapeByMindElement, getBranchWidthByMindElement, getChildrenCount, getCorrespondingAbstract, getDefaultBranchColor, getDefaultBranchColorByIndex, getDefaultLayout, getEmojiFontSize, getEmojiForeignRectangle, getEmojiRectangle, getEmojisWidthHeight, getFillByElement, getFirstLevelElement, getFontSizeBySlateElement, getHitAbstractHandle, getHitImageResizeHandleDirection, getImageForeignRectangle, getInCorrectLayoutDirection, getLayoutDirection$1 as getLayoutDirection, getLayoutOptions, getLayoutReverseDirection, getLocationScope, getMindThemeColor, getNewNodeHeight, getNextBranchColor, getNodeDefaultFontSize, getOverallAbstracts, getPathByDropTarget, getRectangleByElement, getRectangleByNode, getRectangleByResizingLocation, getRelativeStartEndByAbstractRef, getRootLayout, getSelectedImageElement, getSelectedMindElements, getShapeByElement, getStrokeByMindElement, getStrokeWidthByElement, getTopicRectangleByElement, getTopicRectangleByNode, getValidAbstractRefs, handleTouchedAbstract, hasAfterDraw, hasPreviousOrNextOfDropPath, insertElementHandleAbstract, insertElementHandleRightNodeCount, insertMindElement, isChildElement, isChildOfAbstract, isChildRight, isChildUp, isCorrectLayout, isDragging, isDropStandardRight, isHitEmojis, isHitImage, isHitMindElement, isInRightBranchOfStandardLayout, isMixedLayout, isSetAbstract, isValidTarget, removeActiveOnDragOrigin, removeSelectedImageElement, selectImage, separateChildren, setImageFocus, setIsDragging, temporaryDisableSelection, withMind, withMindExtend };
|
|
4470
4459
|
//# sourceMappingURL=plait-mind.mjs.map
|