@plait/common 0.77.3 → 0.78.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/fesm2022/plait-common.mjs.map +1 -1
- package/package.json +1 -3
- package/esm2022/algorithms/a-star.mjs +0 -58
- package/esm2022/algorithms/data-structures/graph.mjs +0 -47
- package/esm2022/algorithms/data-structures/index.mjs +0 -3
- package/esm2022/algorithms/data-structures/priority-queue.mjs +0 -13
- package/esm2022/algorithms/index.mjs +0 -3
- package/esm2022/constants/default.mjs +0 -11
- package/esm2022/constants/index.mjs +0 -5
- package/esm2022/constants/media.mjs +0 -8
- package/esm2022/constants/property.mjs +0 -7
- package/esm2022/constants/resize.mjs +0 -12
- package/esm2022/core/element-flavour.mjs +0 -8
- package/esm2022/core/element-ref.mjs +0 -32
- package/esm2022/core/group.component.mjs +0 -39
- package/esm2022/core/index.mjs +0 -5
- package/esm2022/core/render-component.mjs +0 -2
- package/esm2022/generators/active.generator.mjs +0 -50
- package/esm2022/generators/generator.mjs +0 -70
- package/esm2022/generators/group.generator.mjs +0 -21
- package/esm2022/generators/index.mjs +0 -4
- package/esm2022/image/image-base.component.mjs +0 -9
- package/esm2022/image/image.generator.mjs +0 -98
- package/esm2022/image/index.mjs +0 -4
- package/esm2022/image/with-image.mjs +0 -8
- package/esm2022/plait-common.mjs +0 -5
- package/esm2022/plugins/index.mjs +0 -3
- package/esm2022/plugins/with-group.mjs +0 -198
- package/esm2022/plugins/with-resize.mjs +0 -111
- package/esm2022/public-api.mjs +0 -16
- package/esm2022/shapes/common.mjs +0 -14
- package/esm2022/shapes/index.mjs +0 -2
- package/esm2022/text/index.mjs +0 -5
- package/esm2022/text/text-manage.mjs +0 -147
- package/esm2022/text/text-measure.mjs +0 -59
- package/esm2022/text/types.mjs +0 -7
- package/esm2022/text/with-text.mjs +0 -8
- package/esm2022/transforms/align.mjs +0 -116
- package/esm2022/transforms/index.mjs +0 -3
- package/esm2022/transforms/property.mjs +0 -40
- package/esm2022/types/index.mjs +0 -3
- package/esm2022/types/resize.mjs +0 -2
- package/esm2022/types/rotate.mjs +0 -2
- package/esm2022/utils/animate.mjs +0 -38
- package/esm2022/utils/clipboard.mjs +0 -30
- package/esm2022/utils/creation-mode.mjs +0 -19
- package/esm2022/utils/default-orthogonal-routing.mjs +0 -87
- package/esm2022/utils/direction.mjs +0 -93
- package/esm2022/utils/drawing/index.mjs +0 -3
- package/esm2022/utils/drawing/resize-handle.mjs +0 -25
- package/esm2022/utils/drawing/rotate-handle.mjs +0 -22
- package/esm2022/utils/elbow-line-route.mjs +0 -256
- package/esm2022/utils/elements.mjs +0 -19
- package/esm2022/utils/hot-key.mjs +0 -29
- package/esm2022/utils/image.mjs +0 -50
- package/esm2022/utils/index.mjs +0 -19
- package/esm2022/utils/line-path.mjs +0 -80
- package/esm2022/utils/math.mjs +0 -24
- package/esm2022/utils/memorize.mjs +0 -10
- package/esm2022/utils/resize.mjs +0 -137
- package/esm2022/utils/rotate.mjs +0 -16
- package/esm2022/utils/stroke.mjs +0 -12
- package/esm2022/utils/text.mjs +0 -105
- package/esm2022/utils/vector.mjs +0 -43
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { hotkeys } from '@plait/core';
|
|
2
|
-
import { isKeyHotkey } from 'is-hotkey';
|
|
3
|
-
export function isVirtualKey(e) {
|
|
4
|
-
const isMod = e.ctrlKey || e.metaKey;
|
|
5
|
-
const isAlt = isKeyHotkey('alt', e);
|
|
6
|
-
const isShift = isKeyHotkey('shift', e);
|
|
7
|
-
const isCapsLock = e.key.includes('CapsLock');
|
|
8
|
-
const isTab = e.key.includes('Tab');
|
|
9
|
-
const isEsc = e.key.includes('Escape');
|
|
10
|
-
const isF = e.key.startsWith('F');
|
|
11
|
-
const isArrow = e.key.includes('Arrow') ? true : false;
|
|
12
|
-
return isCapsLock || isMod || isAlt || isArrow || isShift || isTab || isEsc || isF;
|
|
13
|
-
}
|
|
14
|
-
export const isExpandHotkey = (event) => {
|
|
15
|
-
return isKeyHotkey('mod+/', event);
|
|
16
|
-
};
|
|
17
|
-
export const isTabHotkey = (event) => {
|
|
18
|
-
return event.key === 'Tab';
|
|
19
|
-
};
|
|
20
|
-
export const isEnterHotkey = (event) => {
|
|
21
|
-
return event.key === 'Enter';
|
|
22
|
-
};
|
|
23
|
-
export const isSpaceHotkey = (event) => {
|
|
24
|
-
return event.code === 'Space';
|
|
25
|
-
};
|
|
26
|
-
export const isDelete = (event) => {
|
|
27
|
-
return hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event);
|
|
28
|
-
};
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG90LWtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvaG90LWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFeEMsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFnQjtJQUN6QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDckMsTUFBTSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzlDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN2RCxPQUFPLFVBQVUsSUFBSSxLQUFLLElBQUksS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDdkYsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtJQUNuRCxPQUFPLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ2hELE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ2xELE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQ2xELE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUM7QUFDbEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBb0IsRUFBRSxFQUFFO0lBQzdDLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG90a2V5cyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGlzS2V5SG90a2V5IH0gZnJvbSAnaXMtaG90a2V5JztcblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbEtleShlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgY29uc3QgaXNNb2QgPSBlLmN0cmxLZXkgfHwgZS5tZXRhS2V5O1xuICAgIGNvbnN0IGlzQWx0ID0gaXNLZXlIb3RrZXkoJ2FsdCcsIGUpO1xuICAgIGNvbnN0IGlzU2hpZnQgPSBpc0tleUhvdGtleSgnc2hpZnQnLCBlKTtcbiAgICBjb25zdCBpc0NhcHNMb2NrID0gZS5rZXkuaW5jbHVkZXMoJ0NhcHNMb2NrJyk7XG4gICAgY29uc3QgaXNUYWIgPSBlLmtleS5pbmNsdWRlcygnVGFiJyk7XG4gICAgY29uc3QgaXNFc2MgPSBlLmtleS5pbmNsdWRlcygnRXNjYXBlJyk7XG4gICAgY29uc3QgaXNGID0gZS5rZXkuc3RhcnRzV2l0aCgnRicpO1xuICAgIGNvbnN0IGlzQXJyb3cgPSBlLmtleS5pbmNsdWRlcygnQXJyb3cnKSA/IHRydWUgOiBmYWxzZTtcbiAgICByZXR1cm4gaXNDYXBzTG9jayB8fCBpc01vZCB8fCBpc0FsdCB8fCBpc0Fycm93IHx8IGlzU2hpZnQgfHwgaXNUYWIgfHwgaXNFc2MgfHwgaXNGO1xufVxuXG5leHBvcnQgY29uc3QgaXNFeHBhbmRIb3RrZXkgPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICByZXR1cm4gaXNLZXlIb3RrZXkoJ21vZCsvJywgZXZlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVGFiSG90a2V5ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIGV2ZW50LmtleSA9PT0gJ1RhYic7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFbnRlckhvdGtleSA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5rZXkgPT09ICdFbnRlcic7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTcGFjZUhvdGtleSA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5jb2RlID09PSAnU3BhY2UnO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRGVsZXRlID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIGhvdGtleXMuaXNEZWxldGVCYWNrd2FyZChldmVudCkgfHwgaG90a2V5cy5pc0RlbGV0ZUZvcndhcmQoZXZlbnQpO1xufTtcbiJdfQ==
|
package/esm2022/utils/image.mjs
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard } from '@plait/core';
|
|
2
|
-
export const selectImage = (board, defaultImageWidth, handle, acceptImageTypes = ['png', 'jpeg', 'gif', 'bmp']) => {
|
|
3
|
-
const inputFile = document.createElement('input');
|
|
4
|
-
inputFile.setAttribute('type', 'file');
|
|
5
|
-
const acceptImageTypesString = '.' + acceptImageTypes.join(',.');
|
|
6
|
-
inputFile.setAttribute('accept', acceptImageTypesString);
|
|
7
|
-
inputFile.onchange = (event) => {
|
|
8
|
-
buildImage(board, event.target.files[0], defaultImageWidth, handle);
|
|
9
|
-
};
|
|
10
|
-
inputFile.click();
|
|
11
|
-
};
|
|
12
|
-
export const buildImage = async (board, imageFile, defaultImageWidth, handle) => {
|
|
13
|
-
let width = 0, height = 0;
|
|
14
|
-
await getImageSize(imageFile, defaultImageWidth).then((value) => {
|
|
15
|
-
width = value.width;
|
|
16
|
-
height = value.height;
|
|
17
|
-
});
|
|
18
|
-
let imageItem = null;
|
|
19
|
-
const url = URL.createObjectURL(imageFile);
|
|
20
|
-
const context = PlaitBoard.getBoardContext(board);
|
|
21
|
-
context.setUploadingFile({ url, file: imageFile });
|
|
22
|
-
imageItem = {
|
|
23
|
-
url,
|
|
24
|
-
width,
|
|
25
|
-
height
|
|
26
|
-
};
|
|
27
|
-
handle(imageItem);
|
|
28
|
-
};
|
|
29
|
-
function getImageSize(file, defaultImageWidth) {
|
|
30
|
-
return new Promise((resolve, reject) => {
|
|
31
|
-
const image = new Image();
|
|
32
|
-
image.src = URL.createObjectURL(file);
|
|
33
|
-
image.onload = function () {
|
|
34
|
-
const width = defaultImageWidth;
|
|
35
|
-
const height = (defaultImageWidth * image.naturalHeight) / image.naturalWidth;
|
|
36
|
-
resolve(image.naturalWidth > defaultImageWidth ? { width, height } : { width: image.naturalWidth, height: image.naturalHeight });
|
|
37
|
-
};
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
const BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE = new WeakMap();
|
|
41
|
-
export const getElementOfFocusedImage = (board) => {
|
|
42
|
-
return BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.get(board);
|
|
43
|
-
};
|
|
44
|
-
export const addElementOfFocusedImage = (board, element) => {
|
|
45
|
-
BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.set(board, element);
|
|
46
|
-
};
|
|
47
|
-
export const removeElementOfFocusedImage = (board) => {
|
|
48
|
-
BOARD_TO_ELEMENT_OF_FOCUSED_IMAGE.delete(board);
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3V0aWxzL2ltYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQWdCLE1BQU0sYUFBYSxDQUFDO0FBUXZELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUN2QixLQUFpQixFQUNqQixpQkFBeUIsRUFDekIsTUFBOEMsRUFDOUMsbUJBQTZCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQzVELEVBQUU7SUFDQSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRSxTQUFTLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3pELFNBQVMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtRQUNsQyxVQUFVLENBQUMsS0FBSyxFQUFHLEtBQUssQ0FBQyxNQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pGLENBQUMsQ0FBQztJQUNGLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUMzQixLQUFpQixFQUNqQixTQUFlLEVBQ2YsaUJBQXlCLEVBQ3pCLE1BQThDLEVBQ2hELEVBQUU7SUFDQSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQ1QsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQXdDLEVBQUUsRUFBRTtRQUMvRixLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztJQUVILElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztJQUNyQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRW5ELFNBQVMsR0FBRztRQUNSLEdBQUc7UUFDSCxLQUFLO1FBQ0wsTUFBTTtLQUNULENBQUM7SUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUYsU0FBUyxZQUFZLENBQUMsSUFBVSxFQUFFLGlCQUF5QjtJQUN2RCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDMUIsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXRDLEtBQUssQ0FBQyxNQUFNLEdBQUc7WUFDWCxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQztZQUNoQyxNQUFNLE1BQU0sR0FBRyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1lBQzlFLE9BQU8sQ0FDSCxLQUFLLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUMxSCxDQUFDO1FBQ04sQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxpQ0FBaUMsR0FBRyxJQUFJLE9BQU8sRUFBNEIsQ0FBQztBQUVsRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUMxRCxPQUFPLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBcUIsRUFBRSxFQUFFO0lBQ2pGLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDN0QsaUNBQWlDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBDb21tb25JbWFnZUl0ZW0ge1xuICAgIHVybDogc3RyaW5nO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RJbWFnZSA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBkZWZhdWx0SW1hZ2VXaWR0aDogbnVtYmVyLFxuICAgIGhhbmRsZTogKGNvbW1vbkltYWdlOiBDb21tb25JbWFnZUl0ZW0pID0+IHZvaWQsXG4gICAgYWNjZXB0SW1hZ2VUeXBlczogc3RyaW5nW10gPSBbJ3BuZycsICdqcGVnJywgJ2dpZicsICdibXAnXVxuKSA9PiB7XG4gICAgY29uc3QgaW5wdXRGaWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICBpbnB1dEZpbGUuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2ZpbGUnKTtcbiAgICBjb25zdCBhY2NlcHRJbWFnZVR5cGVzU3RyaW5nID0gJy4nICsgYWNjZXB0SW1hZ2VUeXBlcy5qb2luKCcsLicpO1xuICAgIGlucHV0RmlsZS5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsIGFjY2VwdEltYWdlVHlwZXNTdHJpbmcpO1xuICAgIGlucHV0RmlsZS5vbmNoYW5nZSA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgYnVpbGRJbWFnZShib2FyZCwgKGV2ZW50LnRhcmdldCBhcyBhbnkpLmZpbGVzWzBdLCBkZWZhdWx0SW1hZ2VXaWR0aCwgaGFuZGxlKTtcbiAgICB9O1xuICAgIGlucHV0RmlsZS5jbGljaygpO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkSW1hZ2UgPSBhc3luYyAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgaW1hZ2VGaWxlOiBGaWxlLFxuICAgIGRlZmF1bHRJbWFnZVdpZHRoOiBudW1iZXIsXG4gICAgaGFuZGxlOiAoY29tbW9uSW1hZ2U6IENvbW1vbkltYWdlSXRlbSkgPT4gdm9pZFxuKSA9PiB7XG4gICAgbGV0IHdpZHRoID0gMCxcbiAgICAgICAgaGVpZ2h0ID0gMDtcbiAgICBhd2FpdCBnZXRJbWFnZVNpemUoaW1hZ2VGaWxlLCBkZWZhdWx0SW1hZ2VXaWR0aCkudGhlbigodmFsdWU6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSkgPT4ge1xuICAgICAgICB3aWR0aCA9IHZhbHVlLndpZHRoO1xuICAgICAgICBoZWlnaHQgPSB2YWx1ZS5oZWlnaHQ7XG4gICAgfSk7XG5cbiAgICBsZXQgaW1hZ2VJdGVtID0gbnVsbDtcbiAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGltYWdlRmlsZSk7XG4gICAgY29uc3QgY29udGV4dCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250ZXh0KGJvYXJkKTtcbiAgICBjb250ZXh0LnNldFVwbG9hZGluZ0ZpbGUoeyB1cmwsIGZpbGU6IGltYWdlRmlsZSB9KTtcblxuICAgIGltYWdlSXRlbSA9IHtcbiAgICAgICAgdXJsLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgaGVpZ2h0XG4gICAgfTtcbiAgICBoYW5kbGUoaW1hZ2VJdGVtKTtcbn07XG5cbmZ1bmN0aW9uIGdldEltYWdlU2l6ZShmaWxlOiBGaWxlLCBkZWZhdWx0SW1hZ2VXaWR0aDogbnVtYmVyKTogUHJvbWlzZTx7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBpbWFnZSA9IG5ldyBJbWFnZSgpO1xuICAgICAgICBpbWFnZS5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xuXG4gICAgICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBkZWZhdWx0SW1hZ2VXaWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IChkZWZhdWx0SW1hZ2VXaWR0aCAqIGltYWdlLm5hdHVyYWxIZWlnaHQpIC8gaW1hZ2UubmF0dXJhbFdpZHRoO1xuICAgICAgICAgICAgcmVzb2x2ZShcbiAgICAgICAgICAgICAgICBpbWFnZS5uYXR1cmFsV2lkdGggPiBkZWZhdWx0SW1hZ2VXaWR0aCA/IHsgd2lkdGgsIGhlaWdodCB9IDogeyB3aWR0aDogaW1hZ2UubmF0dXJhbFdpZHRoLCBoZWlnaHQ6IGltYWdlLm5hdHVyYWxIZWlnaHQgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuY29uc3QgQk9BUkRfVE9fRUxFTUVOVF9PRl9GT0NVU0VEX0lNQUdFID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50PigpO1xuXG5leHBvcnQgY29uc3QgZ2V0RWxlbWVudE9mRm9jdXNlZEltYWdlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIEJPQVJEX1RPX0VMRU1FTlRfT0ZfRk9DVVNFRF9JTUFHRS5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnRPZkZvY3VzZWRJbWFnZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgQk9BUkRfVE9fRUxFTUVOVF9PRl9GT0NVU0VEX0lNQUdFLnNldChib2FyZCwgZWxlbWVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRWxlbWVudE9mRm9jdXNlZEltYWdlID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgQk9BUkRfVE9fRUxFTUVOVF9PRl9GT0NVU0VEX0lNQUdFLmRlbGV0ZShib2FyZCk7XG59O1xuIl19
|
package/esm2022/utils/index.mjs
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export * from './resize';
|
|
2
|
-
export * from './line-path';
|
|
3
|
-
export * from './default-orthogonal-routing';
|
|
4
|
-
export * from './hot-key';
|
|
5
|
-
export * from './creation-mode';
|
|
6
|
-
export * from './direction';
|
|
7
|
-
export * from './text';
|
|
8
|
-
export * from './image';
|
|
9
|
-
export * from './elbow-line-route';
|
|
10
|
-
export * from './memorize';
|
|
11
|
-
export * from './vector';
|
|
12
|
-
export * from './math';
|
|
13
|
-
export * from './drawing';
|
|
14
|
-
export * from './rotate';
|
|
15
|
-
export * from './elements';
|
|
16
|
-
export * from './animate';
|
|
17
|
-
export * from './stroke';
|
|
18
|
-
export * from './clipboard';
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yZXNpemUnO1xuZXhwb3J0ICogZnJvbSAnLi9saW5lLXBhdGgnO1xuZXhwb3J0ICogZnJvbSAnLi9kZWZhdWx0LW9ydGhvZ29uYWwtcm91dGluZyc7XG5leHBvcnQgKiBmcm9tICcuL2hvdC1rZXknO1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGlvbi1tb2RlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vdGV4dCc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vZWxib3ctbGluZS1yb3V0ZSc7XG5leHBvcnQgKiBmcm9tICcuL21lbW9yaXplJztcbmV4cG9ydCAqIGZyb20gJy4vdmVjdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbWF0aCc7XG5leHBvcnQgKiBmcm9tICcuL2RyYXdpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9yb3RhdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9lbGVtZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2FuaW1hdGUnO1xuZXhwb3J0ICogZnJvbSAnLi9zdHJva2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGlwYm9hcmQnO1xuIl19
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { Point, distanceBetweenPointAndPoint } from '@plait/core';
|
|
2
|
-
import { isPointOnSegment } from './math';
|
|
3
|
-
export function getPointOnPolyline(points, ratio) {
|
|
4
|
-
const totalLength = calculatePolylineLength(points);
|
|
5
|
-
const targetDistance = totalLength * ratio;
|
|
6
|
-
let accumulatedDistance = 0;
|
|
7
|
-
for (let i = 0; i < points.length - 1; i++) {
|
|
8
|
-
const [x1, y1] = points[i];
|
|
9
|
-
const [x2, y2] = points[i + 1];
|
|
10
|
-
const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);
|
|
11
|
-
if (accumulatedDistance + segmentLength >= targetDistance) {
|
|
12
|
-
const remainingDistance = targetDistance - accumulatedDistance;
|
|
13
|
-
const ratioInSegment = remainingDistance / segmentLength;
|
|
14
|
-
const targetX = x1 + (x2 - x1) * ratioInSegment;
|
|
15
|
-
const targetY = y1 + (y2 - y1) * ratioInSegment;
|
|
16
|
-
return [targetX, targetY];
|
|
17
|
-
}
|
|
18
|
-
accumulatedDistance += segmentLength;
|
|
19
|
-
}
|
|
20
|
-
return points[points.length - 1];
|
|
21
|
-
}
|
|
22
|
-
export function calculatePolylineLength(points) {
|
|
23
|
-
let length = 0;
|
|
24
|
-
for (let i = 0; i < points.length - 1; i++) {
|
|
25
|
-
const [x1, y1] = points[i];
|
|
26
|
-
const [x2, y2] = points[i + 1];
|
|
27
|
-
length += distanceBetweenPointAndPoint(x1, y1, x2, y2);
|
|
28
|
-
}
|
|
29
|
-
return length;
|
|
30
|
-
}
|
|
31
|
-
export function getRatioByPoint(points, point) {
|
|
32
|
-
const totalLength = calculatePolylineLength(points);
|
|
33
|
-
let distance = 0;
|
|
34
|
-
for (let i = 0; i < points.length - 1; i++) {
|
|
35
|
-
const isOverlap = isPointOnSegment(point, points[i], points[i + 1]);
|
|
36
|
-
if (isOverlap) {
|
|
37
|
-
distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);
|
|
38
|
-
return distance / totalLength;
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
throw new Error('Cannot get ratio by point');
|
|
45
|
-
}
|
|
46
|
-
export const removeDuplicatePoints = (points) => {
|
|
47
|
-
const newArray = [];
|
|
48
|
-
points.forEach(point => {
|
|
49
|
-
const index = newArray.findIndex(otherPoint => {
|
|
50
|
-
return Point.isEquals(point, otherPoint);
|
|
51
|
-
});
|
|
52
|
-
if (index === -1)
|
|
53
|
-
newArray.push(point);
|
|
54
|
-
});
|
|
55
|
-
return newArray;
|
|
56
|
-
};
|
|
57
|
-
export function simplifyOrthogonalPoints(points) {
|
|
58
|
-
if (points.length <= 2)
|
|
59
|
-
return points;
|
|
60
|
-
let simplifiedPoints = [points[0]];
|
|
61
|
-
for (let i = 1; i < points.length - 1; i++) {
|
|
62
|
-
const previous = points[i - 1];
|
|
63
|
-
const current = points[i];
|
|
64
|
-
const next = points[i + 1];
|
|
65
|
-
const isTurn = !(Point.isOverHorizontal([previous, current, next]) || Point.isOverVertical([previous, current, next]));
|
|
66
|
-
if (isTurn) {
|
|
67
|
-
simplifiedPoints.push(current);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
simplifiedPoints.push(points[points.length - 1]);
|
|
71
|
-
return simplifiedPoints;
|
|
72
|
-
}
|
|
73
|
-
export const getExtendPoint = (source, target, extendDistance) => {
|
|
74
|
-
const distance = distanceBetweenPointAndPoint(...source, ...target);
|
|
75
|
-
const isEqual = Point.isEquals(source, target);
|
|
76
|
-
const sin = isEqual ? 1 : (target[1] - source[1]) / distance;
|
|
77
|
-
const cos = isEqual ? 1 : (target[0] - source[0]) / distance;
|
|
78
|
-
return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];
|
|
79
|
-
};
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9saW5lLXBhdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFFMUMsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWUsRUFBRSxLQUFhO0lBQzdELE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELE1BQU0sY0FBYyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFM0MsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0IsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sYUFBYSxHQUFHLDRCQUE0QixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLElBQUksbUJBQW1CLEdBQUcsYUFBYSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3hELE1BQU0saUJBQWlCLEdBQUcsY0FBYyxHQUFHLG1CQUFtQixDQUFDO1lBQy9ELE1BQU0sY0FBYyxHQUFHLGlCQUFpQixHQUFHLGFBQWEsQ0FBQztZQUV6RCxNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDO1lBQ2hELE1BQU0sT0FBTyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUM7WUFDaEQsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRUQsbUJBQW1CLElBQUksYUFBYSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLENBQUM7QUFFRCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsTUFBZTtJQUNuRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUN6QyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxJQUFJLDRCQUE0QixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFlLEVBQUUsS0FBWTtJQUN6RCxNQUFNLFdBQVcsR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDakIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNaLFFBQVEsSUFBSSw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN6RixPQUFPLFFBQVEsR0FBRyxXQUFXLENBQUM7UUFDbEMsQ0FBQzthQUFNLENBQUM7WUFDSixRQUFRLElBQUksNEJBQTRCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RyxDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtJQUNyRCxNQUFNLFFBQVEsR0FBWSxFQUFFLENBQUM7SUFDN0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNuQixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQzFDLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDN0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7WUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxRQUFRLENBQUM7QUFDcEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE1BQWU7SUFDcEQsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUN0QyxJQUFJLGdCQUFnQixHQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2SCxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDTCxDQUFDO0lBQ0QsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakQsT0FBTyxnQkFBZ0IsQ0FBQztBQUM1QixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBYSxFQUFFLE1BQWEsRUFBRSxjQUFzQixFQUFTLEVBQUU7SUFDMUYsTUFBTSxRQUFRLEdBQUcsNEJBQTRCLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUNwRSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMvQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQzdELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDN0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDaEYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQsIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBpc1BvaW50T25TZWdtZW50IH0gZnJvbSAnLi9tYXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBvaW50T25Qb2x5bGluZShwb2ludHM6IFBvaW50W10sIHJhdGlvOiBudW1iZXIpIHtcbiAgICBjb25zdCB0b3RhbExlbmd0aCA9IGNhbGN1bGF0ZVBvbHlsaW5lTGVuZ3RoKHBvaW50cyk7XG4gICAgY29uc3QgdGFyZ2V0RGlzdGFuY2UgPSB0b3RhbExlbmd0aCAqIHJhdGlvO1xuXG4gICAgbGV0IGFjY3VtdWxhdGVkRGlzdGFuY2UgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBbeDEsIHkxXSA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgW3gyLCB5Ml0gPSBwb2ludHNbaSArIDFdO1xuICAgICAgICBjb25zdCBzZWdtZW50TGVuZ3RoID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCh4MSwgeTEsIHgyLCB5Mik7XG5cbiAgICAgICAgaWYgKGFjY3VtdWxhdGVkRGlzdGFuY2UgKyBzZWdtZW50TGVuZ3RoID49IHRhcmdldERpc3RhbmNlKSB7XG4gICAgICAgICAgICBjb25zdCByZW1haW5pbmdEaXN0YW5jZSA9IHRhcmdldERpc3RhbmNlIC0gYWNjdW11bGF0ZWREaXN0YW5jZTtcbiAgICAgICAgICAgIGNvbnN0IHJhdGlvSW5TZWdtZW50ID0gcmVtYWluaW5nRGlzdGFuY2UgLyBzZWdtZW50TGVuZ3RoO1xuXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRYID0geDEgKyAoeDIgLSB4MSkgKiByYXRpb0luU2VnbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFkgPSB5MSArICh5MiAtIHkxKSAqIHJhdGlvSW5TZWdtZW50O1xuICAgICAgICAgICAgcmV0dXJuIFt0YXJnZXRYLCB0YXJnZXRZXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFjY3VtdWxhdGVkRGlzdGFuY2UgKz0gc2VnbWVudExlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZVBvbHlsaW5lTGVuZ3RoKHBvaW50czogUG9pbnRbXSkge1xuICAgIGxldCBsZW5ndGggPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBbeDEsIHkxXSA9IHBvaW50c1tpXTtcbiAgICAgICAgY29uc3QgW3gyLCB5Ml0gPSBwb2ludHNbaSArIDFdO1xuICAgICAgICBsZW5ndGggKz0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCh4MSwgeTEsIHgyLCB5Mik7XG4gICAgfVxuICAgIHJldHVybiBsZW5ndGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYXRpb0J5UG9pbnQocG9pbnRzOiBQb2ludFtdLCBwb2ludDogUG9pbnQpIHtcbiAgICBjb25zdCB0b3RhbExlbmd0aCA9IGNhbGN1bGF0ZVBvbHlsaW5lTGVuZ3RoKHBvaW50cyk7XG4gICAgbGV0IGRpc3RhbmNlID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3QgaXNPdmVybGFwID0gaXNQb2ludE9uU2VnbWVudChwb2ludCwgcG9pbnRzW2ldLCBwb2ludHNbaSArIDFdKTtcbiAgICAgICAgaWYgKGlzT3ZlcmxhcCkge1xuICAgICAgICAgICAgZGlzdGFuY2UgKz0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludFswXSwgcG9pbnRbMV0sIHBvaW50c1tpXVswXSwgcG9pbnRzW2ldWzFdKTtcbiAgICAgICAgICAgIHJldHVybiBkaXN0YW5jZSAvIHRvdGFsTGVuZ3RoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGlzdGFuY2UgKz0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludHNbaV1bMF0sIHBvaW50c1tpXVsxXSwgcG9pbnRzW2kgKyAxXVswXSwgcG9pbnRzW2kgKyAxXVsxXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgZ2V0IHJhdGlvIGJ5IHBvaW50Jyk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVEdXBsaWNhdGVQb2ludHMgPSAocG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgY29uc3QgbmV3QXJyYXk6IFBvaW50W10gPSBbXTtcbiAgICBwb2ludHMuZm9yRWFjaChwb2ludCA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gbmV3QXJyYXkuZmluZEluZGV4KG90aGVyUG9pbnQgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFBvaW50LmlzRXF1YWxzKHBvaW50LCBvdGhlclBvaW50KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIG5ld0FycmF5LnB1c2gocG9pbnQpO1xuICAgIH0pO1xuICAgIHJldHVybiBuZXdBcnJheTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGlmeU9ydGhvZ29uYWxQb2ludHMocG9pbnRzOiBQb2ludFtdKSB7XG4gICAgaWYgKHBvaW50cy5sZW5ndGggPD0gMikgcmV0dXJuIHBvaW50cztcbiAgICBsZXQgc2ltcGxpZmllZFBvaW50czogUG9pbnRbXSA9IFtwb2ludHNbMF1dO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcG9pbnRzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IHBvaW50c1tpIC0gMV07XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBwb2ludHNbaV07XG4gICAgICAgIGNvbnN0IG5leHQgPSBwb2ludHNbaSArIDFdO1xuICAgICAgICBjb25zdCBpc1R1cm4gPSAhKFBvaW50LmlzT3Zlckhvcml6b250YWwoW3ByZXZpb3VzLCBjdXJyZW50LCBuZXh0XSkgfHwgUG9pbnQuaXNPdmVyVmVydGljYWwoW3ByZXZpb3VzLCBjdXJyZW50LCBuZXh0XSkpO1xuICAgICAgICBpZiAoaXNUdXJuKSB7XG4gICAgICAgICAgICBzaW1wbGlmaWVkUG9pbnRzLnB1c2goY3VycmVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2ltcGxpZmllZFBvaW50cy5wdXNoKHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV0pO1xuICAgIHJldHVybiBzaW1wbGlmaWVkUG9pbnRzO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RXh0ZW5kUG9pbnQgPSAoc291cmNlOiBQb2ludCwgdGFyZ2V0OiBQb2ludCwgZXh0ZW5kRGlzdGFuY2U6IG51bWJlcik6IFBvaW50ID0+IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQoLi4uc291cmNlLCAuLi50YXJnZXQpO1xuICAgIGNvbnN0IGlzRXF1YWwgPSBQb2ludC5pc0VxdWFscyhzb3VyY2UsIHRhcmdldCk7XG4gICAgY29uc3Qgc2luID0gaXNFcXVhbCA/IDEgOiAodGFyZ2V0WzFdIC0gc291cmNlWzFdKSAvIGRpc3RhbmNlO1xuICAgIGNvbnN0IGNvcyA9IGlzRXF1YWwgPyAxIDogKHRhcmdldFswXSAtIHNvdXJjZVswXSkgLyBkaXN0YW5jZTtcbiAgICByZXR1cm4gW3NvdXJjZVswXSArIGV4dGVuZERpc3RhbmNlICogY29zLCBzb3VyY2VbMV0gKyBleHRlbmREaXN0YW5jZSAqIHNpbl07XG59O1xuIl19
|
package/esm2022/utils/math.mjs
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { distanceBetweenPointAndPoint } from '@plait/core';
|
|
2
|
-
import { getPointByVectorDirectionComponent, getUnitVectorByPointAndPoint } from './vector';
|
|
3
|
-
export function isPointOnSegment(point, startPoint, endPoint) {
|
|
4
|
-
const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);
|
|
5
|
-
const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);
|
|
6
|
-
const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
7
|
-
return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;
|
|
8
|
-
}
|
|
9
|
-
export const getCrossingPointsBetweenPointAndSegment = (point, startPoint, endPoint) => {
|
|
10
|
-
const result = [];
|
|
11
|
-
const xRange = [Math.min(startPoint[0], endPoint[0]), Math.max(startPoint[0], endPoint[0])];
|
|
12
|
-
const yRange = [Math.min(startPoint[1], endPoint[1]), Math.max(startPoint[1], endPoint[1])];
|
|
13
|
-
const unitVector = getUnitVectorByPointAndPoint(startPoint, endPoint);
|
|
14
|
-
if (point[0] >= xRange[0] && point[0] <= xRange[1]) {
|
|
15
|
-
const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[0] - startPoint[0], true);
|
|
16
|
-
result.push(crossingPoint);
|
|
17
|
-
}
|
|
18
|
-
else if (point[1] >= yRange[0] && point[1] <= yRange[1]) {
|
|
19
|
-
const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[1] - startPoint[1], false);
|
|
20
|
-
result.push(crossingPoint);
|
|
21
|
-
}
|
|
22
|
-
return result;
|
|
23
|
-
};
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvbWF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVMsNEJBQTRCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTVGLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFZLEVBQUUsVUFBaUIsRUFBRSxRQUFlO0lBQzdFLE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZHLE1BQU0sYUFBYSxHQUFHLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2pHLE1BQU0sYUFBYSxHQUFHLDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEdBQUcsYUFBYSxHQUFHLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sdUNBQXVDLEdBQUcsQ0FBQyxLQUFZLEVBQUUsVUFBaUIsRUFBRSxRQUFlLEVBQUUsRUFBRTtJQUN4RyxNQUFNLE1BQU0sR0FBWSxFQUFFLENBQUM7SUFDM0IsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVGLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RixNQUFNLFVBQVUsR0FBRyw0QkFBNEIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRCxNQUFNLGFBQWEsR0FBRyxrQ0FBa0MsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFVLENBQUM7UUFDMUgsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQixDQUFDO1NBQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxNQUFNLGFBQWEsR0FBRyxrQ0FBa0MsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFVLENBQUM7UUFDM0gsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQsIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBnZXRQb2ludEJ5VmVjdG9yRGlyZWN0aW9uQ29tcG9uZW50LCBnZXRVbml0VmVjdG9yQnlQb2ludEFuZFBvaW50IH0gZnJvbSAnLi92ZWN0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNQb2ludE9uU2VnbWVudChwb2ludDogUG9pbnQsIHN0YXJ0UG9pbnQ6IFBvaW50LCBlbmRQb2ludDogUG9pbnQpIHtcbiAgICBjb25zdCBkaXN0YW5jZVRvU3RhcnQgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgc3RhcnRQb2ludFswXSwgc3RhcnRQb2ludFsxXSk7XG4gICAgY29uc3QgZGlzdGFuY2VUb0VuZCA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdLCBlbmRQb2ludFswXSwgZW5kUG9pbnRbMV0pO1xuICAgIGNvbnN0IHNlZ21lbnRMZW5ndGggPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHN0YXJ0UG9pbnRbMF0sIHN0YXJ0UG9pbnRbMV0sIGVuZFBvaW50WzBdLCBlbmRQb2ludFsxXSk7XG4gICAgcmV0dXJuIE1hdGguYWJzKGRpc3RhbmNlVG9TdGFydCArIGRpc3RhbmNlVG9FbmQgLSBzZWdtZW50TGVuZ3RoKSA8IDAuMTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldENyb3NzaW5nUG9pbnRzQmV0d2VlblBvaW50QW5kU2VnbWVudCA9IChwb2ludDogUG9pbnQsIHN0YXJ0UG9pbnQ6IFBvaW50LCBlbmRQb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IFBvaW50W10gPSBbXTtcbiAgICBjb25zdCB4UmFuZ2UgPSBbTWF0aC5taW4oc3RhcnRQb2ludFswXSwgZW5kUG9pbnRbMF0pLCBNYXRoLm1heChzdGFydFBvaW50WzBdLCBlbmRQb2ludFswXSldO1xuICAgIGNvbnN0IHlSYW5nZSA9IFtNYXRoLm1pbihzdGFydFBvaW50WzFdLCBlbmRQb2ludFsxXSksIE1hdGgubWF4KHN0YXJ0UG9pbnRbMV0sIGVuZFBvaW50WzFdKV07XG4gICAgY29uc3QgdW5pdFZlY3RvciA9IGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgIGlmIChwb2ludFswXSA+PSB4UmFuZ2VbMF0gJiYgcG9pbnRbMF0gPD0geFJhbmdlWzFdKSB7XG4gICAgICAgIGNvbnN0IGNyb3NzaW5nUG9pbnQgPSBnZXRQb2ludEJ5VmVjdG9yRGlyZWN0aW9uQ29tcG9uZW50KHN0YXJ0UG9pbnQsIHVuaXRWZWN0b3IsIHBvaW50WzBdIC0gc3RhcnRQb2ludFswXSwgdHJ1ZSkgYXMgUG9pbnQ7XG4gICAgICAgIHJlc3VsdC5wdXNoKGNyb3NzaW5nUG9pbnQpO1xuICAgIH0gZWxzZSBpZiAocG9pbnRbMV0gPj0geVJhbmdlWzBdICYmIHBvaW50WzFdIDw9IHlSYW5nZVsxXSkge1xuICAgICAgICBjb25zdCBjcm9zc2luZ1BvaW50ID0gZ2V0UG9pbnRCeVZlY3RvckRpcmVjdGlvbkNvbXBvbmVudChzdGFydFBvaW50LCB1bml0VmVjdG9yLCBwb2ludFsxXSAtIHN0YXJ0UG9pbnRbMV0sIGZhbHNlKSBhcyBQb2ludDtcbiAgICAgICAgcmVzdWx0LnB1c2goY3Jvc3NpbmdQb2ludCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuIl19
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
const map = new Map();
|
|
2
|
-
export const memorizeLatest = (memorizedKey, propertyKey, propertyValue) => {
|
|
3
|
-
let obj = map.has(memorizedKey) ? map.get(memorizedKey) : {};
|
|
4
|
-
obj[propertyKey] = propertyValue;
|
|
5
|
-
map.set(memorizedKey, obj);
|
|
6
|
-
};
|
|
7
|
-
export const getMemorizedLatest = (memorizedKey) => {
|
|
8
|
-
return map.get(memorizedKey);
|
|
9
|
-
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3JpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3V0aWxzL21lbW9yaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7QUFFbkMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQzFCLFlBQW9CLEVBQ3BCLFdBQW9CLEVBQ3BCLGFBQXlCLEVBQzNCLEVBQUU7SUFDQSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDN0QsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLGFBQWEsQ0FBQztJQUNqQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUF3QyxZQUFvQixFQUFLLEVBQUU7SUFDakcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuZXhwb3J0IGNvbnN0IG1lbW9yaXplTGF0ZXN0ID0gPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEVsZW1lbnQ+KFxuICAgIG1lbW9yaXplZEtleTogc3RyaW5nLFxuICAgIHByb3BlcnR5S2V5OiBrZXlvZiBULFxuICAgIHByb3BlcnR5VmFsdWU6IFRba2V5b2YgVF1cbikgPT4ge1xuICAgIGxldCBvYmogPSBtYXAuaGFzKG1lbW9yaXplZEtleSkgPyBtYXAuZ2V0KG1lbW9yaXplZEtleSkgOiB7fTtcbiAgICBvYmpbcHJvcGVydHlLZXldID0gcHJvcGVydHlWYWx1ZTtcbiAgICBtYXAuc2V0KG1lbW9yaXplZEtleSwgb2JqKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNZW1vcml6ZWRMYXRlc3QgPSA8VCBleHRlbmRzIFBsYWl0RWxlbWVudCA9IFBsYWl0RWxlbWVudD4obWVtb3JpemVkS2V5OiBzdHJpbmcpOiBUID0+IHtcbiAgICByZXR1cm4gbWFwLmdldChtZW1vcml6ZWRLZXkpO1xufTtcbiJdfQ==
|
package/esm2022/utils/resize.mjs
DELETED
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, RectangleClient, ResizeCursorClass, setDragging, RESIZE_CURSORS, rotatePoints, getSelectedElements, isSelectionMoving } from '@plait/core';
|
|
2
|
-
export const getResizeHandleByIndex = (index) => {
|
|
3
|
-
return `${index}`;
|
|
4
|
-
};
|
|
5
|
-
export const getIndexByResizeHandle = (resizeHandle) => {
|
|
6
|
-
return Number(resizeHandle);
|
|
7
|
-
};
|
|
8
|
-
export const getSymmetricHandleIndex = (board, index) => {
|
|
9
|
-
const originIndex = isEdgeHandle(board, getResizeHandleByIndex(index)) ? index - 4 : index;
|
|
10
|
-
let originSymmetricHandleIndex = originIndex + 2;
|
|
11
|
-
if (originSymmetricHandleIndex >= 4) {
|
|
12
|
-
originSymmetricHandleIndex = originSymmetricHandleIndex - 4;
|
|
13
|
-
}
|
|
14
|
-
return isEdgeHandle(board, getResizeHandleByIndex(index)) ? originSymmetricHandleIndex + 4 : originSymmetricHandleIndex;
|
|
15
|
-
};
|
|
16
|
-
const getResizeCursorClassByIndex = (index) => {
|
|
17
|
-
switch (index) {
|
|
18
|
-
case 0:
|
|
19
|
-
case 2:
|
|
20
|
-
return ResizeCursorClass.nwse;
|
|
21
|
-
case 1:
|
|
22
|
-
case 3:
|
|
23
|
-
return ResizeCursorClass.nesw;
|
|
24
|
-
case 4:
|
|
25
|
-
case 6:
|
|
26
|
-
return ResizeCursorClass.ns;
|
|
27
|
-
case 5:
|
|
28
|
-
case 7:
|
|
29
|
-
return ResizeCursorClass.ew;
|
|
30
|
-
default:
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
export const getRotatedResizeCursorClassByAngle = (cursor, angle) => {
|
|
35
|
-
const index = RESIZE_CURSORS.indexOf(cursor);
|
|
36
|
-
if (index >= 0) {
|
|
37
|
-
const temp = Math.round(angle / (Math.PI / 4));
|
|
38
|
-
cursor = RESIZE_CURSORS[(index + temp) % RESIZE_CURSORS.length];
|
|
39
|
-
}
|
|
40
|
-
return cursor;
|
|
41
|
-
};
|
|
42
|
-
export const getRectangleResizeHandleRefs = (rectangle, diameter) => {
|
|
43
|
-
const corners = RectangleClient.getCornerPoints(rectangle);
|
|
44
|
-
const refs = corners.map((corner, index) => {
|
|
45
|
-
return {
|
|
46
|
-
rectangle: {
|
|
47
|
-
x: corner[0] - diameter / 2,
|
|
48
|
-
y: corner[1] - diameter / 2,
|
|
49
|
-
width: diameter,
|
|
50
|
-
height: diameter
|
|
51
|
-
},
|
|
52
|
-
handle: getResizeHandleByIndex(index),
|
|
53
|
-
cursorClass: getResizeCursorClassByIndex(index)
|
|
54
|
-
};
|
|
55
|
-
});
|
|
56
|
-
const rectangles = getResizeSideRectangles(corners, diameter / 2);
|
|
57
|
-
refs.push(...rectangles.map((rectangle, index) => {
|
|
58
|
-
return {
|
|
59
|
-
rectangle,
|
|
60
|
-
handle: getResizeHandleByIndex(index + 4),
|
|
61
|
-
cursorClass: getResizeCursorClassByIndex(index + 4)
|
|
62
|
-
};
|
|
63
|
-
}));
|
|
64
|
-
return refs;
|
|
65
|
-
};
|
|
66
|
-
export const getResizeHandlePointByIndex = (rectangle, index) => {
|
|
67
|
-
if (index <= 3) {
|
|
68
|
-
const corners = RectangleClient.getCornerPoints(rectangle);
|
|
69
|
-
return corners[index];
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
const edgeCenterPoints = RectangleClient.getEdgeCenterPoints(rectangle);
|
|
73
|
-
return edgeCenterPoints[index - 4];
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
const getResizeSideRectangles = (cornerPoints, offset) => {
|
|
77
|
-
const result = [];
|
|
78
|
-
for (let i = 0; i < cornerPoints.length; i++) {
|
|
79
|
-
let rectangle = RectangleClient.getRectangleByPoints([cornerPoints[i], cornerPoints[(i + 1) % 4]]);
|
|
80
|
-
const arr = new Array(2).fill(0);
|
|
81
|
-
arr[(i + 1) % 2] = offset / 2;
|
|
82
|
-
rectangle = RectangleClient.expand(rectangle, arr[0], arr[1]);
|
|
83
|
-
result.push(rectangle);
|
|
84
|
-
}
|
|
85
|
-
return result;
|
|
86
|
-
};
|
|
87
|
-
export const IS_RESIZING = new WeakMap();
|
|
88
|
-
export const isResizing = (board) => {
|
|
89
|
-
return !!IS_RESIZING.get(board);
|
|
90
|
-
};
|
|
91
|
-
export const isResizingByCondition = (board, match) => {
|
|
92
|
-
return isResizing(board) && match(IS_RESIZING.get(board));
|
|
93
|
-
};
|
|
94
|
-
export const addResizing = (board, resizeRef, key) => {
|
|
95
|
-
PlaitBoard.getBoardContainer(board).classList.add(`${key}-resizing`);
|
|
96
|
-
IS_RESIZING.set(board, resizeRef);
|
|
97
|
-
setDragging(board, true);
|
|
98
|
-
};
|
|
99
|
-
export const removeResizing = (board, key) => {
|
|
100
|
-
PlaitBoard.getBoardContainer(board).classList.remove(`${key}-resizing`);
|
|
101
|
-
IS_RESIZING.delete(board);
|
|
102
|
-
setDragging(board, false);
|
|
103
|
-
};
|
|
104
|
-
export const isEdgeHandle = (board, handle) => {
|
|
105
|
-
const index = getIndexByResizeHandle(handle);
|
|
106
|
-
if (index >= 4) {
|
|
107
|
-
return true;
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
return false;
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
export const isCornerHandle = (board, handle) => {
|
|
114
|
-
return !isEdgeHandle(board, handle);
|
|
115
|
-
};
|
|
116
|
-
// 处理元素先旋转后resize导致的位置偏移
|
|
117
|
-
export const resetPointsAfterResize = (originRectangle, currentRectangle, originSelectionCenterPoint, currentSelectionCenterPoint, angle) => {
|
|
118
|
-
const correctSelectionCenterPoint = rotatePoints([currentSelectionCenterPoint], originSelectionCenterPoint, angle)[0];
|
|
119
|
-
const rotatedElementCenterPoint = rotatePoints([RectangleClient.getCenterPoint(currentRectangle)], originSelectionCenterPoint, angle)[0];
|
|
120
|
-
const currentPoints = RectangleClient.getPoints(currentRectangle);
|
|
121
|
-
const originRectangleCenterPoint = RectangleClient.getCenterPoint(originRectangle);
|
|
122
|
-
const correctElementCenterPoint = rotatePoints([rotatedElementCenterPoint], correctSelectionCenterPoint, -angle)[0];
|
|
123
|
-
const rotatedPoints = rotatePoints(currentPoints, originRectangleCenterPoint, angle);
|
|
124
|
-
return rotatePoints(rotatedPoints, correctElementCenterPoint, -angle);
|
|
125
|
-
};
|
|
126
|
-
export const hasMoreThanOnePoint = (element) => {
|
|
127
|
-
const points = element.points;
|
|
128
|
-
return points && points.length > 1;
|
|
129
|
-
};
|
|
130
|
-
export const hasResizeHandle = (board, element) => {
|
|
131
|
-
if (PlaitBoard.hasBeenTextEditing(board) || isSelectionMoving(board)) {
|
|
132
|
-
return false;
|
|
133
|
-
}
|
|
134
|
-
const selectedElements = getSelectedElements(board);
|
|
135
|
-
return selectedElements.length === 1 && selectedElements[0] === element && hasMoreThanOnePoint(element);
|
|
136
|
-
};
|
|
137
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFFVixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLFdBQVcsRUFDWCxjQUFjLEVBQ2QsWUFBWSxFQUVaLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDcEIsTUFBTSxhQUFhLENBQUM7QUFJckIsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtJQUNwRCxPQUFPLEdBQUcsS0FBSyxFQUFrQixDQUFDO0FBQ3RDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsWUFBMEIsRUFBRSxFQUFFO0lBQ2pFLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFhLEVBQUUsRUFBRTtJQUN4RSxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMzRixJQUFJLDBCQUEwQixHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7SUFDakQsSUFBSSwwQkFBMEIsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUNsQywwQkFBMEIsR0FBRywwQkFBMEIsR0FBRyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNELE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO0FBQzVILENB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Q0FBbUIsQ0FBQztBQUM1RixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtJQUN6RCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBaUIsQ0FBQztJQUN6QyxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE9BQXFCLEVBQUUsRUFBRTtJQUN4RSxJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ25FLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxPQUFPLElBQUksbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBSZXNpemVDdXJzb3JDbGFzcyxcbiAgICBzZXREcmFnZ2luZyxcbiAgICBSRVNJWkVfQ1VSU09SUyxcbiAgICByb3RhdGVQb2ludHMsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIGdldFNlbGVjdGVkRWxlbWVudHMsXG4gICAgaXNTZWxlY3Rpb25Nb3Zpbmdcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplSGFuZGxlIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Jlc2l6ZSc7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnRPckFycmF5LCBSZXNpemVSZWYgfSBmcm9tICcuLi90eXBlcy9yZXNpemUnO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplSGFuZGxlQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGAke2luZGV4fWAgYXMgUmVzaXplSGFuZGxlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEluZGV4QnlSZXNpemVIYW5kbGUgPSAocmVzaXplSGFuZGxlOiBSZXNpemVIYW5kbGUpID0+IHtcbiAgICByZXR1cm4gTnVtYmVyKHJlc2l6ZUhhbmRsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3ltbWV0cmljSGFuZGxlSW5kZXggPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBvcmlnaW5JbmRleCA9IGlzRWRnZUhhbmRsZShib2FyZCwgZ2V0UmVzaXplSGFuZGxlQnlJbmRleChpbmRleCkpID8gaW5kZXggLSA0IDogaW5kZXg7XG4gICAgbGV0IG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4ID0gb3JpZ2luSW5kZXggKyAyO1xuICAgIGlmIChvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleCA+PSA0KSB7XG4gICAgICAgIG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4ID0gb3JpZ2luU3ltbWV0cmljSGFuZGxlSW5kZXggLSA0O1xuICAgIH1cbiAgICByZXR1cm4gaXNFZGdlSGFuZGxlKGJvYXJkLCBnZXRSZXNpemVIYW5kbGVCeUluZGV4KGluZGV4KSkgPyBvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleCArIDQgOiBvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleDtcbn07XG5cbmNvbnN0IGdldFJlc2l6ZUN1cnNvckNsYXNzQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgc3dpdGNoIChpbmRleCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5ud3NlO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5uZXN3O1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5ucztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gUmVzaXplQ3Vyc29yQ2xhc3MuZXc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um90YXRlZFJlc2l6ZUN1cnNvckNsYXNzQnlBbmdsZSA9IChjdXJzb3I6IFJlc2l6ZUN1cnNvckNsYXNzLCBhbmdsZTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSBSRVNJWkVfQ1VSU09SUy5pbmRleE9mKGN1cnNvcik7XG4gICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IE1hdGgucm91bmQoYW5nbGUgLyAoTWF0aC5QSSAvIDQpKTtcbiAgICAgICAgY3Vyc29yID0gUkVTSVpFX0NVUlNPUlNbKGluZGV4ICsgdGVtcCkgJSBSRVNJWkVfQ1VSU09SUy5sZW5ndGhdIGFzIFJlc2l6ZUN1cnNvckNsYXNzO1xuICAgIH1cbiAgICByZXR1cm4gY3Vyc29yO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZnMgPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGRpYW1ldGVyOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBjb3JuZXJzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIGNvbnN0IHJlZnMgPSBjb3JuZXJzLm1hcCgoY29ybmVyLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICByZWN0YW5nbGU6IHtcbiAgICAgICAgICAgICAgICB4OiBjb3JuZXJbMF0gLSBkaWFtZXRlciAvIDIsXG4gICAgICAgICAgICAgICAgeTogY29ybmVyWzFdIC0gZGlhbWV0ZXIgLyAyLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBkaWFtZXRlcixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGRpYW1ldGVyXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGFuZGxlOiBnZXRSZXNpemVIYW5kbGVCeUluZGV4KGluZGV4KSBhcyBSZXNpemVIYW5kbGUsXG4gICAgICAgICAgICBjdXJzb3JDbGFzczogZ2V0UmVzaXplQ3Vyc29yQ2xhc3NCeUluZGV4KGluZGV4KSBhcyBSZXNpemVDdXJzb3JDbGFzc1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIGNvbnN0IHJlY3RhbmdsZXMgPSBnZXRSZXNpemVTaWRlUmVjdGFuZ2xlcyhjb3JuZXJzLCBkaWFtZXRlciAvIDIpO1xuICAgIHJlZnMucHVzaChcbiAgICAgICAgLi4ucmVjdGFuZ2xlcy5tYXAoKHJlY3RhbmdsZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgIGhhbmRsZTogZ2V0UmVzaXplSGFuZGxlQnlJbmRleChpbmRleCArIDQpIGFzIFJlc2l6ZUhhbmRsZSxcbiAgICAgICAgICAgICAgICBjdXJzb3JDbGFzczogZ2V0UmVzaXplQ3Vyc29yQ2xhc3NCeUluZGV4KGluZGV4ICsgNCkgYXMgUmVzaXplQ3Vyc29yQ2xhc3NcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gcmVmcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVIYW5kbGVQb2ludEJ5SW5kZXggPSAocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoaW5kZXggPD0gMykge1xuICAgICAgICBjb25zdCBjb3JuZXJzID0gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICByZXR1cm4gY29ybmVyc1tpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZWRnZUNlbnRlclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBlZGdlQ2VudGVyUG9pbnRzW2luZGV4IC0gNF07XG4gICAgfVxufTtcblxuY29uc3QgZ2V0UmVzaXplU2lkZVJlY3RhbmdsZXMgPSAoY29ybmVyUG9pbnRzOiBQb2ludFtdLCBvZmZzZXQ6IG51bWJlcik6IFJlY3RhbmdsZUNsaWVudFtdID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvcm5lclBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtjb3JuZXJQb2ludHNbaV0sIGNvcm5lclBvaW50c1soaSArIDEpICUgNF1dKTtcbiAgICAgICAgY29uc3QgYXJyID0gbmV3IEFycmF5KDIpLmZpbGwoMCk7XG4gICAgICAgIGFyclsoaSArIDEpICUgMl0gPSBvZmZzZXQgLyAyO1xuICAgICAgICByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZXhwYW5kKHJlY3RhbmdsZSwgYXJyWzBdLCBhcnJbMV0pO1xuICAgICAgICByZXN1bHQucHVzaChyZWN0YW5nbGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IElTX1JFU0laSU5HID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgUmVzaXplUmVmPGFueSwgYW55LCBhbnk+PigpO1xuXG5leHBvcnQgY29uc3QgaXNSZXNpemluZyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAhIUlTX1JFU0laSU5HLmdldChib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNSZXNpemluZ0J5Q29uZGl0aW9uID0gPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnRPckFycmF5LCBLPihcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBtYXRjaDogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFQsIEs+KSA9PiBib29sZWFuXG4pID0+IHtcbiAgICByZXR1cm4gaXNSZXNpemluZyhib2FyZCkgJiYgbWF0Y2goSVNfUkVTSVpJTkcuZ2V0KGJvYXJkKSEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFJlc2l6aW5nID0gPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnRPckFycmF5LCBLLCBQPihib2FyZDogUGxhaXRCb2FyZCwgcmVzaXplUmVmOiBSZXNpemVSZWY8VCwgSywgUD4sIGtleTogc3RyaW5nKSA9PiB7XG4gICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LmFkZChgJHtrZXl9LXJlc2l6aW5nYCk7XG4gICAgSVNfUkVTSVpJTkcuc2V0KGJvYXJkLCByZXNpemVSZWYpO1xuICAgIHNldERyYWdnaW5nKGJvYXJkLCB0cnVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVSZXNpemluZyA9IChib2FyZDogUGxhaXRCb2FyZCwga2V5OiBzdHJpbmcpID0+IHtcbiAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QucmVtb3ZlKGAke2tleX0tcmVzaXppbmdgKTtcbiAgICBJU19SRVNJWklORy5kZWxldGUoYm9hcmQpO1xuICAgIHNldERyYWdnaW5nKGJvYXJkLCBmYWxzZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNFZGdlSGFuZGxlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBoYW5kbGU6IFJlc2l6ZUhhbmRsZSkgPT4ge1xuICAgIGNvbnN0IGluZGV4ID0gZ2V0SW5kZXhCeVJlc2l6ZUhhbmRsZShoYW5kbGUpO1xuICAgIGlmIChpbmRleCA+PSA0KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNDb3JuZXJIYW5kbGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGhhbmRsZTogUmVzaXplSGFuZGxlKSA9PiB7XG4gICAgcmV0dXJuICFpc0VkZ2VIYW5kbGUoYm9hcmQsIGhhbmRsZSk7XG59O1xuXG4vLyDlpITnkIblhYPntKDlhYjml4vovazlkI5yZXNpemXlr7zoh7TnmoTkvY3nva7lgY/np7tcbmV4cG9ydCBjb25zdCByZXNldFBvaW50c0FmdGVyUmVzaXplID0gKFxuICAgIG9yaWdpblJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGN1cnJlbnRSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCxcbiAgICBvcmlnaW5TZWxlY3Rpb25DZW50ZXJQb2ludDogUG9pbnQsXG4gICAgY3VycmVudFNlbGVjdGlvbkNlbnRlclBvaW50OiBQb2ludCxcbiAgICBhbmdsZTogbnVtYmVyXG4pOiBbUG9pbnQsIFBvaW50XSA9PiB7XG4gICAgY29uc3QgY29ycmVjdFNlbGVjdGlvbkNlbnRlclBvaW50ID0gcm90YXRlUG9pbnRzKFtjdXJyZW50U2VsZWN0aW9uQ2VudGVyUG9pbnRdLCBvcmlnaW5TZWxlY3Rpb25DZW50ZXJQb2ludCwgYW5nbGUpWzBdO1xuICAgIGNvbnN0IHJvdGF0ZWRFbGVtZW50Q2VudGVyUG9pbnQgPSByb3RhdGVQb2ludHMoXG4gICAgICAgIFtSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoY3VycmVudFJlY3RhbmdsZSkgYXMgUG9pbnRdLFxuICAgICAgICBvcmlnaW5TZWxlY3Rpb25DZW50ZXJQb2ludCxcbiAgICAgICAgYW5nbGVcbiAgICApWzBdO1xuXG4gICAgY29uc3QgY3VycmVudFBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMoY3VycmVudFJlY3RhbmdsZSk7XG4gICAgY29uc3Qgb3JpZ2luUmVjdGFuZ2xlQ2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQob3JpZ2luUmVjdGFuZ2xlKTtcblxuICAgIGNvbnN0IGNvcnJlY3RFbGVtZW50Q2VudGVyUG9pbnQgPSByb3RhdGVQb2ludHMoW3JvdGF0ZWRFbGVtZW50Q2VudGVyUG9pbnRdLCBjb3JyZWN0U2VsZWN0aW9uQ2VudGVyUG9pbnQsIC1hbmdsZSlbMF07XG5cbiAgICBjb25zdCByb3RhdGVkUG9pbnRzID0gcm90YXRlUG9pbnRzKGN1cnJlbnRQb2ludHMsIG9yaWdpblJlY3RhbmdsZUNlbnRlclBvaW50LCBhbmdsZSk7XG4gICAgcmV0dXJuIHJvdGF0ZVBvaW50cyhyb3RhdGVkUG9pbnRzLCBjb3JyZWN0RWxlbWVudENlbnRlclBvaW50LCAtYW5nbGUpIGFzIFtQb2ludCwgUG9pbnRdO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc01vcmVUaGFuT25lUG9pbnQgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcG9pbnRzID0gZWxlbWVudC5wb2ludHMgYXMgUG9pbnRbXTtcbiAgICByZXR1cm4gcG9pbnRzICYmIHBvaW50cy5sZW5ndGggPiAxO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1Jlc2l6ZUhhbmRsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgaWYgKFBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKGJvYXJkKSB8fCBpc1NlbGVjdGlvbk1vdmluZyhib2FyZCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgcmV0dXJuIHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxICYmIHNlbGVjdGVkRWxlbWVudHNbMF0gPT09IGVsZW1lbnQgJiYgaGFzTW9yZVRoYW5PbmVQb2ludChlbGVtZW50KTtcbn07XG4iXX0=
|
package/esm2022/utils/rotate.mjs
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { PlaitBoard, setDragging } from '@plait/core';
|
|
2
|
-
export const IS_ROTATING = new WeakMap();
|
|
3
|
-
export const isRotating = (board) => {
|
|
4
|
-
return !!IS_ROTATING.get(board);
|
|
5
|
-
};
|
|
6
|
-
export const addRotating = (board, rotateRef) => {
|
|
7
|
-
PlaitBoard.getBoardContainer(board).classList.add(`draw-elements-rotating`);
|
|
8
|
-
IS_ROTATING.set(board, rotateRef);
|
|
9
|
-
setDragging(board, true);
|
|
10
|
-
};
|
|
11
|
-
export const removeRotating = (board) => {
|
|
12
|
-
PlaitBoard.getBoardContainer(board).classList.remove(`draw-elements-rotating`);
|
|
13
|
-
IS_ROTATING.delete(board);
|
|
14
|
-
setDragging(board, false);
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9yb3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdEQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO0FBRWhFLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUM1QyxPQUFPLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsU0FBb0IsRUFBRSxFQUFFO0lBQ25FLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDNUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDaEQsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMvRSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgc2V0RHJhZ2dpbmcgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBSb3RhdGVSZWYgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBJU19ST1RBVElORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFJvdGF0ZVJlZj4oKTtcblxuZXhwb3J0IGNvbnN0IGlzUm90YXRpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19ST1RBVElORy5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFJvdGF0aW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkLCByb3RhdGVSZWY6IFJvdGF0ZVJlZikgPT4ge1xuICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoYGRyYXctZWxlbWVudHMtcm90YXRpbmdgKTtcbiAgICBJU19ST1RBVElORy5zZXQoYm9hcmQsIHJvdGF0ZVJlZik7XG4gICAgc2V0RHJhZ2dpbmcoYm9hcmQsIHRydWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZVJvdGF0aW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZShgZHJhdy1lbGVtZW50cy1yb3RhdGluZ2ApO1xuICAgIElTX1JPVEFUSU5HLmRlbGV0ZShib2FyZCk7XG4gICAgc2V0RHJhZ2dpbmcoYm9hcmQsIGZhbHNlKTtcbn07XG4iXX0=
|
package/esm2022/utils/stroke.mjs
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { StrokeStyle } from '../constants';
|
|
2
|
-
export const getStrokeLineDash = (strokeStyle, strokeWidth) => {
|
|
3
|
-
switch (strokeStyle) {
|
|
4
|
-
case StrokeStyle.dashed:
|
|
5
|
-
return [8, 8 + strokeWidth];
|
|
6
|
-
case StrokeStyle.dotted:
|
|
7
|
-
return [2, 4 + strokeWidth];
|
|
8
|
-
default:
|
|
9
|
-
return undefined;
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Ryb2tlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9zdHJva2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzQyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFdBQXdCLEVBQUUsV0FBbUIsRUFBRSxFQUFFO0lBQy9FLFFBQVEsV0FBVyxFQUFFLENBQUM7UUFDbEIsS0FBSyxXQUFXLENBQUMsTUFBTTtZQUNuQixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQztRQUNoQyxLQUFLLFdBQVcsQ0FBQyxNQUFNO1lBQ25CLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDO1FBQ2hDO1lBQ0ksT0FBTyxTQUFTLENBQUM7SUFDekIsQ0FBQztBQUNMLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0cm9rZVN0eWxlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IGdldFN0cm9rZUxpbmVEYXNoID0gKHN0cm9rZVN0eWxlOiBTdHJva2VTdHlsZSwgc3Ryb2tlV2lkdGg6IG51bWJlcikgPT4ge1xuICAgIHN3aXRjaCAoc3Ryb2tlU3R5bGUpIHtcbiAgICAgICAgY2FzZSBTdHJva2VTdHlsZS5kYXNoZWQ6XG4gICAgICAgICAgICByZXR1cm4gWzgsIDggKyBzdHJva2VXaWR0aF07XG4gICAgICAgIGNhc2UgU3Ryb2tlU3R5bGUuZG90dGVkOlxuICAgICAgICAgICAgcmV0dXJuIFsyLCA0ICsgc3Ryb2tlV2lkdGhdO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59O1xuIl19
|
package/esm2022/utils/text.mjs
DELETED
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { PlaitElement, getSelectedElements } from '@plait/core';
|
|
2
|
-
import { Node } from 'slate';
|
|
3
|
-
export const getTextManages = (element) => {
|
|
4
|
-
const ref = PlaitElement.getElementRef(element);
|
|
5
|
-
return ref?.getTextManages() || [];
|
|
6
|
-
};
|
|
7
|
-
export const getFirstTextManage = (element) => {
|
|
8
|
-
const textManage = getTextManages(element)[0];
|
|
9
|
-
if (!textManage) {
|
|
10
|
-
console.warn('can not find textManage');
|
|
11
|
-
}
|
|
12
|
-
return textManage;
|
|
13
|
-
};
|
|
14
|
-
export const getTextEditorsByElement = (element) => {
|
|
15
|
-
return getTextManages(element).map(manage => {
|
|
16
|
-
return manage.editor;
|
|
17
|
-
});
|
|
18
|
-
};
|
|
19
|
-
export const getFirstTextEditor = (element) => {
|
|
20
|
-
const textEditor = getTextEditorsByElement(element)[0];
|
|
21
|
-
if (!textEditor) {
|
|
22
|
-
console.warn('can not find textManage');
|
|
23
|
-
}
|
|
24
|
-
return textEditor;
|
|
25
|
-
};
|
|
26
|
-
export const findFirstTextEditor = (board) => {
|
|
27
|
-
const selectedElements = getSelectedElements(board);
|
|
28
|
-
let firstEditor = null;
|
|
29
|
-
selectedElements.forEach(element => {
|
|
30
|
-
const editors = getTextEditorsByElement(element);
|
|
31
|
-
if (!firstEditor && editors && editors.length > 0) {
|
|
32
|
-
firstEditor = editors[0];
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
return firstEditor;
|
|
36
|
-
};
|
|
37
|
-
export const getElementsText = (elements) => {
|
|
38
|
-
return elements
|
|
39
|
-
.map(item => {
|
|
40
|
-
try {
|
|
41
|
-
const editors = getTextEditorsByElement(item);
|
|
42
|
-
if (editors.length) {
|
|
43
|
-
return editors
|
|
44
|
-
.map(editor => {
|
|
45
|
-
const textsEntry = Node.texts(editor);
|
|
46
|
-
return Array.from(textsEntry).reduce((total, text) => (total += text[0].text), '');
|
|
47
|
-
})
|
|
48
|
-
.join(' ');
|
|
49
|
-
}
|
|
50
|
-
return '';
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
return '';
|
|
54
|
-
}
|
|
55
|
-
})
|
|
56
|
-
.filter(item => item)
|
|
57
|
-
.join(' ');
|
|
58
|
-
};
|
|
59
|
-
export const getTextEditors = (board, elements) => {
|
|
60
|
-
const selectedElements = elements || getSelectedElements(board);
|
|
61
|
-
if (selectedElements.length) {
|
|
62
|
-
const textManages = [];
|
|
63
|
-
selectedElements.forEach(item => {
|
|
64
|
-
textManages.push(...getTextManages(item));
|
|
65
|
-
});
|
|
66
|
-
const editingTextManage = textManages.find(textManage => textManage.isEditing);
|
|
67
|
-
if (editingTextManage) {
|
|
68
|
-
return [editingTextManage.editor];
|
|
69
|
-
}
|
|
70
|
-
return textManages.map(item => {
|
|
71
|
-
return item.editor;
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
return undefined;
|
|
75
|
-
};
|
|
76
|
-
export const getEditingTextEditor = (board, elements) => {
|
|
77
|
-
const selectedElements = elements || getSelectedElements(board);
|
|
78
|
-
const textManages = [];
|
|
79
|
-
selectedElements.forEach(item => {
|
|
80
|
-
textManages.push(...getTextManages(item));
|
|
81
|
-
});
|
|
82
|
-
const editingTextManage = textManages.find(textManage => textManage.isEditing);
|
|
83
|
-
if (editingTextManage) {
|
|
84
|
-
return editingTextManage.editor;
|
|
85
|
-
}
|
|
86
|
-
return undefined;
|
|
87
|
-
};
|
|
88
|
-
export const buildText = (text, align, properties) => {
|
|
89
|
-
properties = properties || {};
|
|
90
|
-
const plaitText = typeof text === 'string' ? { children: [{ text, ...properties }] } : text;
|
|
91
|
-
if (align) {
|
|
92
|
-
plaitText.align = align;
|
|
93
|
-
}
|
|
94
|
-
return plaitText;
|
|
95
|
-
};
|
|
96
|
-
export const getLineHeightByFontSize = (fontSize) => {
|
|
97
|
-
if (fontSize === 14) {
|
|
98
|
-
return 20;
|
|
99
|
-
}
|
|
100
|
-
if (fontSize === 18) {
|
|
101
|
-
return 25;
|
|
102
|
-
}
|
|
103
|
-
return fontSize * 1.5;
|
|
104
|
-
};
|
|
105
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBVSxJQUFJLEVBQVcsTUFBTSxPQUFPLENBQUM7QUFhOUMsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQ3BELE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQXdCLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLE9BQU8sR0FBRyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtJQUN4RCxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBNkMsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDdkcsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3hDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUF3QyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtJQUM3RixNQUFNLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQyxPQUFP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QUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtJQUN4RCxJQUFJLFFBQVEsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNsQixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDRCxJQUFJLFFBQVEsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUNsQixPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBnZXRTZWxlY3RlZEVsZW1lbnRzIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgRWRpdG9yLCBOb2RlLCBFbGVtZW50IH0gZnJvbSAnc2xhdGUnO1xuaW1wb3J0IHsgVGV4dE1hbmFnZSB9IGZyb20gJy4uL3RleHQvdGV4dC1tYW5hZ2UnO1xuaW1wb3J0IHsgQWxpZ25tZW50LCBDdXN0b21UZXh0LCBQYXJhZ3JhcGhFbGVtZW50IH0gZnJvbSAnLi4vdGV4dC90eXBlcyc7XG5pbXBvcnQgeyBQbGFpdENvbW1vbkVsZW1lbnRSZWYgfSBmcm9tICcuLi9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBUZXh0SW50ZXJmYWNlIHtcbiAgICBnZXRUZXh0RWRpdG9yczogKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiBFZGl0b3JbXSB8IHVuZGVmaW5lZDtcbiAgICBmaW5kRmlyc3RUZXh0RWRpdG9yOiAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IG51bGw7XG4gICAgZ2V0Rmlyc3RUZXh0RWRpdG9yOiAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiBFZGl0b3I7XG4gICAgZ2V0VGV4dEVkaXRvcnNCeUVsZW1lbnQ6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IEVkaXRvcltdO1xuICAgIGdldEVkaXRpbmdUZXh0RWRpdG9yOiAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W10pID0+IEVkaXRvciB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRleHRNYW5hZ2VzID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHJlZiA9IFBsYWl0RWxlbWVudC5nZXRFbGVtZW50UmVmPFBsYWl0Q29tbW9uRWxlbWVudFJlZj4oZWxlbWVudCk7XG4gICAgcmV0dXJuIHJlZj8uZ2V0VGV4dE1hbmFnZXMoKSB8fCBbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaXJzdFRleHRNYW5hZ2UgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgdGV4dE1hbmFnZSA9IGdldFRleHRNYW5hZ2VzKGVsZW1lbnQpWzBdO1xuICAgIGlmICghdGV4dE1hbmFnZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ2NhbiBub3QgZmluZCB0ZXh0TWFuYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0TWFuYWdlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRFZGl0b3JzQnlFbGVtZW50OiBUZXh0SW50ZXJmYWNlWydnZXRUZXh0RWRpdG9yc0J5RWxlbWVudCddID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBnZXRUZXh0TWFuYWdlcyhlbGVtZW50KS5tYXAobWFuYWdlID0+IHtcbiAgICAgICAgcmV0dXJuIG1hbmFnZS5lZGl0b3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmlyc3RUZXh0RWRpdG9yOiBUZXh0SW50ZXJmYWNlWydnZXRGaXJzdFRleHRFZGl0b3InXSA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCB0ZXh0RWRpdG9yID0gZ2V0VGV4dEVkaXRvcnNCeUVsZW1lbnQoZWxlbWVudClbMF07XG4gICAgaWYgKCF0ZXh0RWRpdG9yKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignY2FuIG5vdCBmaW5kIHRleHRNYW5hZ2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHRFZGl0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZEZpcnN0VGV4dEVkaXRvcjogVGV4dEludGVyZmFjZVsnZmluZEZpcnN0VGV4dEVkaXRvciddID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGxldCBmaXJzdEVkaXRvcjogRWRpdG9yIHwgbnVsbCA9IG51bGw7XG4gICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCBlZGl0b3JzID0gZ2V0VGV4dEVkaXRvcnNCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmICghZmlyc3RFZGl0b3IgJiYgZWRpdG9ycyAmJiBlZGl0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZpcnN0RWRpdG9yID0gZWRpdG9yc1swXTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaXJzdEVkaXRvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50c1RleHQgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnRzXG4gICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9yc0J5RWxlbWVudChpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAoZWRpdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkaXRvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZWRpdG9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0c0VudHJ5ID0gTm9kZS50ZXh0cyhlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRleHRzRW50cnkpLnJlZHVjZSgodG90YWwsIHRleHQpID0+ICh0b3RhbCArPSB0ZXh0WzBdLnRleHQpLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtKVxuICAgICAgICAuam9pbignICcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRFZGl0b3JzOiBUZXh0SW50ZXJmYWNlWydnZXRUZXh0RWRpdG9ycyddID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50cz86IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGVsZW1lbnRzIHx8IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGlmIChzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB0ZXh0TWFuYWdlczogVGV4dE1hbmFnZVtdID0gW107XG4gICAgICAgIHNlbGVjdGVkRWxlbWVudHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIHRleHRNYW5hZ2VzLnB1c2goLi4uZ2V0VGV4dE1hbmFnZXMoaXRlbSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZWRpdGluZ1RleHRNYW5hZ2UgPSB0ZXh0TWFuYWdlcy5maW5kKHRleHRNYW5hZ2UgPT4gdGV4dE1hbmFnZS5pc0VkaXRpbmcpO1xuICAgICAgICBpZiAoZWRpdGluZ1RleHRNYW5hZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBbZWRpdGluZ1RleHRNYW5hZ2UuZWRpdG9yXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGV4dE1hbmFnZXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZWRpdG9yO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFZGl0aW5nVGV4dEVkaXRvcjogVGV4dEludGVyZmFjZVsnZ2V0RWRpdGluZ1RleHRFZGl0b3InXSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM/OiBQbGFpdEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBlbGVtZW50cyB8fCBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBjb25zdCB0ZXh0TWFuYWdlczogVGV4dE1hbmFnZVtdID0gW107XG4gICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICB0ZXh0TWFuYWdlcy5wdXNoKC4uLmdldFRleHRNYW5hZ2VzKGl0ZW0pKTtcbiAgICB9KTtcbiAgICBjb25zdCBlZGl0aW5nVGV4dE1hbmFnZSA9IHRleHRNYW5hZ2VzLmZpbmQodGV4dE1hbmFnZSA9PiB0ZXh0TWFuYWdlLmlzRWRpdGluZyk7XG4gICAgaWYgKGVkaXRpbmdUZXh0TWFuYWdlKSB7XG4gICAgICAgIHJldHVybiBlZGl0aW5nVGV4dE1hbmFnZS5lZGl0b3I7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRUZXh0ID0gKHRleHQ6IHN0cmluZyB8IEVsZW1lbnQsIGFsaWduPzogQWxpZ25tZW50LCBwcm9wZXJ0aWVzPzogUGFydGlhbDxDdXN0b21UZXh0PikgPT4ge1xuICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgIGNvbnN0IHBsYWl0VGV4dCA9IHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJyA/IHsgY2hpbGRyZW46IFt7IHRleHQsIC4uLnByb3BlcnRpZXMgfV0gfSA6IHRleHQ7XG4gICAgaWYgKGFsaWduKSB7XG4gICAgICAgIChwbGFpdFRleHQgYXMgUGFyYWdyYXBoRWxlbWVudCkuYWxpZ24gPSBhbGlnbjtcbiAgICB9XG4gICAgcmV0dXJuIHBsYWl0VGV4dDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMaW5lSGVpZ2h0QnlGb250U2l6ZSA9IChmb250U2l6ZTogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGZvbnRTaXplID09PSAxNCkge1xuICAgICAgICByZXR1cm4gMjA7XG4gICAgfVxuICAgIGlmIChmb250U2l6ZSA9PT0gMTgpIHtcbiAgICAgICAgcmV0dXJuIDI1O1xuICAgIH1cbiAgICByZXR1cm4gZm9udFNpemUgKiAxLjU7XG59O1xuIl19
|