@plait/core 0.49.0 → 0.50.1
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/constants/index.d.ts +0 -1
- package/esm2022/board/board.component.mjs +7 -6
- package/esm2022/constants/index.mjs +1 -2
- package/esm2022/interfaces/board.mjs +1 -1
- package/esm2022/plugins/create-board.mjs +5 -2
- package/esm2022/utils/clipboard/clipboard.mjs +40 -0
- package/esm2022/utils/clipboard/common.mjs +67 -0
- package/esm2022/utils/clipboard/data-transfer.mjs +33 -0
- package/esm2022/utils/clipboard/index.mjs +3 -0
- package/esm2022/utils/clipboard/navigator-clipboard.mjs +71 -0
- package/esm2022/utils/clipboard/types.mjs +6 -0
- package/esm2022/utils/helper.mjs +4 -1
- package/esm2022/utils/index.mjs +4 -1
- package/fesm2022/plait-core.mjs +215 -43
- package/fesm2022/plait-core.mjs.map +1 -1
- package/interfaces/board.d.ts +3 -2
- package/package.json +1 -1
- package/utils/clipboard/clipboard.d.ts +3 -0
- package/utils/clipboard/common.d.ts +9 -0
- package/utils/clipboard/data-transfer.d.ts +5 -0
- package/utils/clipboard/index.d.ts +2 -0
- package/utils/clipboard/navigator-clipboard.d.ts +3 -0
- package/utils/clipboard/types.d.ts +17 -0
- package/utils/helper.d.ts +1 -0
- package/utils/index.d.ts +3 -0
- package/esm2022/utils/clipboard.mjs +0 -45
- package/utils/clipboard.d.ts +0 -8
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export * from './data-transfer';
|
|
2
|
+
export * from './types';
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9jbGlwYm9hcmQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGF0YS10cmFuc2Zlcic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdfQ==
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { buildPlaitHtml, getClipboardFromHtml, getProbablySupportsClipboardRead, getProbablySupportsClipboardWrite, stripHtml } from './common';
|
|
2
|
+
export const setNavigatorClipboard = async (type, data, text = '') => {
|
|
3
|
+
let textClipboard = text;
|
|
4
|
+
if (getProbablySupportsClipboardWrite()) {
|
|
5
|
+
await navigator.clipboard.write([
|
|
6
|
+
new ClipboardItem({
|
|
7
|
+
'text/html': new Blob([buildPlaitHtml(type, data)], {
|
|
8
|
+
type: 'text/html'
|
|
9
|
+
}),
|
|
10
|
+
'text/plain': new Blob([JSON.stringify(textClipboard ?? data)], { type: 'text/plain' })
|
|
11
|
+
})
|
|
12
|
+
]);
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
export const getNavigatorClipboard = async () => {
|
|
16
|
+
if (!getProbablySupportsClipboardRead()) {
|
|
17
|
+
return {};
|
|
18
|
+
}
|
|
19
|
+
const clipboardItems = await navigator.clipboard.read();
|
|
20
|
+
let clipboardData = {};
|
|
21
|
+
if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {
|
|
22
|
+
for (const item of clipboardItems) {
|
|
23
|
+
if (isFile(item)) {
|
|
24
|
+
const clipboardFiles = item.types.filter(type => type.match(/^image\//));
|
|
25
|
+
const fileBlobs = await Promise.all(clipboardFiles.map(type => item.getType(type)));
|
|
26
|
+
const urls = fileBlobs.filter(Boolean).map(blob => URL.createObjectURL(blob));
|
|
27
|
+
const files = await Promise.all(urls.map(async (url) => {
|
|
28
|
+
const blob = await (await fetch(url)).blob();
|
|
29
|
+
return new File([blob], 'plait-file', { type: blob.type });
|
|
30
|
+
}));
|
|
31
|
+
return {
|
|
32
|
+
files
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (item.types.includes('text/html')) {
|
|
36
|
+
const htmlContent = await blobAsString(await item.getType('text/html'));
|
|
37
|
+
const htmlClipboardData = getClipboardFromHtml(htmlContent);
|
|
38
|
+
if (htmlClipboardData) {
|
|
39
|
+
return htmlClipboardData;
|
|
40
|
+
}
|
|
41
|
+
if (htmlContent && htmlContent.trim()) {
|
|
42
|
+
clipboardData = { text: stripHtml(htmlContent) };
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (item.types.includes('text/plain')) {
|
|
46
|
+
const textContent = await blobAsString(await item.getType('text/plain'));
|
|
47
|
+
clipboardData = {
|
|
48
|
+
text: stripHtml(textContent)
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return clipboardData;
|
|
54
|
+
};
|
|
55
|
+
const isFile = (item) => {
|
|
56
|
+
return item.types.find(i => i.match(/^image\//));
|
|
57
|
+
};
|
|
58
|
+
const blobAsString = (blob) => {
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
const reader = new FileReader();
|
|
61
|
+
reader.addEventListener('loadend', () => {
|
|
62
|
+
const text = reader.result;
|
|
63
|
+
resolve(text);
|
|
64
|
+
});
|
|
65
|
+
reader.addEventListener('error', () => {
|
|
66
|
+
reject(reader.error);
|
|
67
|
+
});
|
|
68
|
+
reader.readAsText(blob);
|
|
69
|
+
});
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLWNsaXBib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL2NsaXBib2FyZC9uYXZpZ2F0b3ItY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGdDQUFnQyxFQUNoQyxpQ0FBaUMsRUFDakMsU0FBUyxFQUNaLE1BQU0sVUFBVSxDQUFDO0FBR2xCLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEtBQUssRUFBRSxJQUEyQixFQUFFLElBQTJCLEVBQUUsT0FBZSxFQUFFLEVBQUUsRUFBRTtJQUN2SCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDekIsSUFBSSxpQ0FBaUMsRUFBRSxFQUFFO1FBQ3JDLE1BQU0sU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7WUFDNUIsSUFBSSxhQUFhLENBQUM7Z0JBQ2QsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFO29CQUNoRCxJQUFJLEVBQUUsV0FBVztpQkFDcEIsQ0FBQztnQkFDRixZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDO2FBQzFGLENBQUM7U0FDTCxDQUFDLENBQUM7S0FDTjtBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEtBQUssSUFBNEIsRUFBRTtJQUNwRSxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsRUFBRTtRQUNyQyxPQUFPLEVBQUUsQ0FBQztLQUNiO0lBQ0QsTUFBTSxjQUFjLEdBQUcsTUFBTSxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxD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QVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDM0IsT0FBTyxDQUFDLElBQWMsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGJ1aWxkUGxhaXRIdG1sLFxuICAgIGdldENsaXBib2FyZEZyb21IdG1sLFxuICAgIGdldFByb2JhYmx5U3VwcG9ydHNDbGlwYm9hcmRSZWFkLFxuICAgIGdldFByb2JhYmx5U3VwcG9ydHNDbGlwYm9hcmRXcml0ZSxcbiAgICBzdHJpcEh0bWxcbn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgQ2xpcGJvYXJkRGF0YSwgV3JpdGFibGVDbGlwYm9hcmREYXRhLCBXcml0YWJsZUNsaXBib2FyZFR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IHNldE5hdmlnYXRvckNsaXBib2FyZCA9IGFzeW5jICh0eXBlOiBXcml0YWJsZUNsaXBib2FyZFR5cGUsIGRhdGE6IFdyaXRhYmxlQ2xpcGJvYXJkRGF0YSwgdGV4dDogc3RyaW5nID0gJycpID0+IHtcbiAgICBsZXQgdGV4dENsaXBib2FyZCA9IHRleHQ7XG4gICAgaWYgKGdldFByb2JhYmx5U3VwcG9ydHNDbGlwYm9hcmRXcml0ZSgpKSB7XG4gICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGUoW1xuICAgICAgICAgICAgbmV3IENsaXBib2FyZEl0ZW0oe1xuICAgICAgICAgICAgICAgICd0ZXh0L2h0bWwnOiBuZXcgQmxvYihbYnVpbGRQbGFpdEh0bWwodHlwZSwgZGF0YSldLCB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd0ZXh0L2h0bWwnXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nOiBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkodGV4dENsaXBib2FyZCA/PyBkYXRhKV0sIHsgdHlwZTogJ3RleHQvcGxhaW4nIH0pXG4gICAgICAgICAgICB9KVxuICAgICAgICBdKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TmF2aWdhdG9yQ2xpcGJvYXJkID0gYXN5bmMgKCk6IFByb21pc2U8Q2xpcGJvYXJkRGF0YT4gPT4ge1xuICAgIGlmICghZ2V0UHJvYmFibHlTdXBwb3J0c0NsaXBib2FyZFJlYWQoKSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGNsaXBib2FyZEl0ZW1zID0gYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC5yZWFkKCk7XG4gICAgbGV0IGNsaXBib2FyZERhdGE6IENsaXBib2FyZERhdGEgPSB7fTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGNsaXBib2FyZEl0ZW1zKSAmJiBjbGlwYm9hcmRJdGVtc1swXSBpbnN0YW5jZW9mIENsaXBib2FyZEl0ZW0pIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNsaXBib2FyZEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXNGaWxlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkRmlsZXMgPSBpdGVtLnR5cGVzLmZpbHRlcih0eXBlID0+IHR5cGUubWF0Y2goL15pbWFnZVxcLy8pKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlQmxvYnMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGlwYm9hcmRGaWxlcy5tYXAodHlwZSA9PiBpdGVtLmdldFR5cGUodHlwZSkhKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXJscyA9IChmaWxlQmxvYnMuZmlsdGVyKEJvb2xlYW4pIGFzIChGaWxlIHwgQmxvYilbXSkubWFwKGJsb2IgPT4gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgdXJscy5tYXAoYXN5bmMgdXJsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCAoYXdhaXQgZmV0Y2godXJsKSkuYmxvYigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlKFtibG9iXSwgJ3BsYWl0LWZpbGUnLCB7IHR5cGU6IGJsb2IudHlwZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGVzLmluY2x1ZGVzKCd0ZXh0L2h0bWwnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWxDb250ZW50ID0gYXdhaXQgYmxvYkFzU3RyaW5nKGF3YWl0IGl0ZW0uZ2V0VHlwZSgndGV4dC9odG1sJykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWxDbGlwYm9hcmREYXRhID0gZ2V0Q2xpcGJvYXJkRnJvbUh0bWwoaHRtbENvbnRlbnQpO1xuICAgICAgICAgICAgICAgIGlmIChodG1sQ2xpcGJvYXJkRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbENsaXBib2FyZERhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChodG1sQ29udGVudCAmJiBodG1sQ29udGVudC50cmltKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IHsgdGV4dDogc3RyaXBIdG1sKGh0bWxDb250ZW50KSB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLnR5cGVzLmluY2x1ZGVzKCd0ZXh0L3BsYWluJykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZXh0Q29udGVudCA9IGF3YWl0IGJsb2JBc1N0cmluZyhhd2FpdCBpdGVtLmdldFR5cGUoJ3RleHQvcGxhaW4nKSk7XG4gICAgICAgICAgICAgICAgY2xpcGJvYXJkRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogc3RyaXBIdG1sKHRleHRDb250ZW50KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNsaXBib2FyZERhdGE7XG59O1xuXG5jb25zdCBpc0ZpbGUgPSAoaXRlbTogQ2xpcGJvYXJkSXRlbSkgPT4ge1xuICAgIHJldHVybiBpdGVtLnR5cGVzLmZpbmQoaSA9PiBpLm1hdGNoKC9eaW1hZ2VcXC8vKSk7XG59O1xuXG5jb25zdCBibG9iQXNTdHJpbmcgPSAoYmxvYjogQmxvYikgPT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgICAgICAgIHJlc29sdmUodGV4dCBhcyBzdHJpbmcpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgKCkgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KHJlYWRlci5lcnJvcik7XG4gICAgICAgIH0pO1xuICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKTtcbiAgICB9KTtcbn07XG4iXX0=
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export var WritableClipboardType;
|
|
2
|
+
(function (WritableClipboardType) {
|
|
3
|
+
WritableClipboardType["medias"] = "medias";
|
|
4
|
+
WritableClipboardType["elements"] = "elements";
|
|
5
|
+
})(WritableClipboardType || (WritableClipboardType = {}));
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9jbGlwYm9hcmQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFOLElBQVkscUJBR1g7QUFIRCxXQUFZLHFCQUFxQjtJQUM3QiwwQ0FBbUIsQ0FBQTtJQUNuQiw4Q0FBdUIsQ0FBQTtBQUMzQixDQUFDLEVBSFcscUJBQXFCLEtBQXJCLHFCQUFxQixRQUdoQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgZW51bSBXcml0YWJsZUNsaXBib2FyZFR5cGUge1xuICAgICdtZWRpYXMnID0gJ21lZGlhcycsXG4gICAgJ2VsZW1lbnRzJyA9ICdlbGVtZW50cydcbn1cblxuZXhwb3J0IHR5cGUgV3JpdGFibGVDbGlwYm9hcmREYXRhID0gUGxhaXRFbGVtZW50W10gfCBhbnlbXTtcblxuZXhwb3J0IGludGVyZmFjZSBXcml0YWJsZUNsaXBib2FyZENvbnRleHQge1xuICAgIHRleHQ6IHN0cmluZztcbiAgICB0eXBlOiBXcml0YWJsZUNsaXBib2FyZFR5cGU7XG4gICAgZGF0YTogV3JpdGFibGVDbGlwYm9hcmREYXRhO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsaXBib2FyZERhdGEge1xuICAgIGZpbGVzPzogRmlsZVtdO1xuICAgIGVsZW1lbnRzPzogUGxhaXRFbGVtZW50W107XG4gICAgbWVkaWFzPzogYW55W107XG4gICAgdGV4dD86IHN0cmluZztcbn1cbiJdfQ==
|
package/esm2022/utils/helper.mjs
CHANGED
|
@@ -17,4 +17,7 @@ export function normalizePoint(point) {
|
|
|
17
17
|
export const RgbaToHEX = (Rgb, opacity) => {
|
|
18
18
|
return Rgb + Math.floor(opacity * 255).toString(16);
|
|
19
19
|
};
|
|
20
|
-
|
|
20
|
+
export function isContextmenu(event) {
|
|
21
|
+
return event.button === 2;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFVO0lBQ3hDLE9BQU8sS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQ2pELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFlO0lBQzFDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUFDO1lBQ0ksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDWCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNkO1FBQ0gsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLE9BQWUsRUFBRSxFQUFFO0lBQ3RELE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUM7QUFFRixNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWlCO0lBQzNDLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICog6KeE6IyDIHBvaW50XG4gKiBAcGFyYW0gcG9pbnRcbiAqIEByZXR1cm5zIHBvaW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQb2ludChwb2ludDogbnVtYmVyW10pIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwb2ludClcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHg6IHBvaW50WzBdLFxuICAgICAgICAgICAgICB5OiBwb2ludFsxXVxuICAgICAgICAgIH1cbiAgICAgICAgOiBwb2ludDtcbn1cblxuZXhwb3J0IGNvbnN0IFJnYmFUb0hFWCA9IChSZ2I6IHN0cmluZywgb3BhY2l0eTogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIFJnYiArIE1hdGguZmxvb3Iob3BhY2l0eSAqIDI1NSkudG9TdHJpbmcoMTYpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGV4dG1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQuYnV0dG9uID09PSAyO1xufVxuIl19
|
package/esm2022/utils/index.mjs
CHANGED
|
@@ -18,8 +18,11 @@ export * from './viewport';
|
|
|
18
18
|
export * from './common';
|
|
19
19
|
export * from './moving-element';
|
|
20
20
|
export * from './to-image';
|
|
21
|
+
export * from './clipboard/types';
|
|
22
|
+
export * from './clipboard/clipboard';
|
|
23
|
+
export * from './clipboard/common';
|
|
21
24
|
export * from './clipboard';
|
|
22
25
|
export * from './touch';
|
|
23
26
|
export * from './dnd';
|
|
24
27
|
export * from './to-point';
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb20nO1xuZXhwb3J0ICogZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2hpc3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9ob3RrZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vaWQtY3JlYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL21hdGgnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWFrLW1hcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhdy9yZWN0YW5nbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3L2Fycm93JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhdy9jaXJjbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3L2xpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi90cmVlJztcbmV4cG9ydCAqIGZyb20gJy4vZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbW92aW5nLWVsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1pbWFnZSc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC9jbGlwYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGlwYm9hcmQvY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY2xpcGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vdG91Y2gnO1xuZXhwb3J0ICogZnJvbSAnLi9kbmQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1wb2ludCc7XG4iXX0=
|
package/fesm2022/plait-core.mjs
CHANGED
|
@@ -321,7 +321,6 @@ const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';
|
|
|
321
321
|
const ACTIVE_STROKE_WIDTH = 1;
|
|
322
322
|
const SELECTION_RECTANGLE_CLASS_NAME = 'selection-rectangle';
|
|
323
323
|
|
|
324
|
-
const CLIP_BOARD_FORMAT_KEY = 'x-plait-fragment';
|
|
325
324
|
const HOST_CLASS_NAME = 'plait-board-container';
|
|
326
325
|
const ACTIVE_MOVING_CLASS_NAME = 'active-with-moving';
|
|
327
326
|
const SCROLL_BAR_WIDTH = 20;
|
|
@@ -891,6 +890,9 @@ function normalizePoint(point) {
|
|
|
891
890
|
const RgbaToHEX = (Rgb, opacity) => {
|
|
892
891
|
return Rgb + Math.floor(opacity * 255).toString(16);
|
|
893
892
|
};
|
|
893
|
+
function isContextmenu(event) {
|
|
894
|
+
return event.button === 2;
|
|
895
|
+
}
|
|
894
896
|
|
|
895
897
|
/**
|
|
896
898
|
* Check whether to merge an operation into the previous operation.
|
|
@@ -1789,48 +1791,215 @@ function downloadImage(url, name) {
|
|
|
1789
1791
|
a.remove();
|
|
1790
1792
|
}
|
|
1791
1793
|
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
+
var WritableClipboardType;
|
|
1795
|
+
(function (WritableClipboardType) {
|
|
1796
|
+
WritableClipboardType["medias"] = "medias";
|
|
1797
|
+
WritableClipboardType["elements"] = "elements";
|
|
1798
|
+
})(WritableClipboardType || (WritableClipboardType = {}));
|
|
1799
|
+
|
|
1800
|
+
const buildPlaitHtml = (type, data) => {
|
|
1801
|
+
const stringifiedClipboard = JSON.stringify({
|
|
1802
|
+
type,
|
|
1803
|
+
data
|
|
1804
|
+
});
|
|
1805
|
+
return `<plait>${stringifiedClipboard}</plait>`;
|
|
1794
1806
|
};
|
|
1795
|
-
const
|
|
1796
|
-
const
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1807
|
+
const getClipboardFromHtml = (html) => {
|
|
1808
|
+
const plaitString = html?.match(/<plait[^>]*>(.*)<\/plait>/)?.[1];
|
|
1809
|
+
if (plaitString) {
|
|
1810
|
+
try {
|
|
1811
|
+
const plaitJson = JSON.parse(plaitString);
|
|
1812
|
+
if (plaitJson) {
|
|
1813
|
+
if (plaitJson.type === WritableClipboardType.elements) {
|
|
1814
|
+
return {
|
|
1815
|
+
elements: plaitJson.data
|
|
1816
|
+
};
|
|
1817
|
+
}
|
|
1818
|
+
else if (plaitJson.type === WritableClipboardType.medias) {
|
|
1819
|
+
return {
|
|
1820
|
+
medias: plaitJson.data
|
|
1821
|
+
};
|
|
1822
|
+
}
|
|
1823
|
+
}
|
|
1824
|
+
}
|
|
1825
|
+
catch (error) {
|
|
1826
|
+
console.error(error);
|
|
1827
|
+
return null;
|
|
1828
|
+
}
|
|
1829
|
+
}
|
|
1830
|
+
return null;
|
|
1804
1831
|
};
|
|
1805
|
-
const
|
|
1806
|
-
|
|
1807
|
-
|
|
1832
|
+
const stripHtml = (html) => {
|
|
1833
|
+
// See <https://github.com/developit/preact-markup/blob/4788b8d61b4e24f83688710746ee36e7464f7bbc/src/parse-markup.js#L60-L69>
|
|
1834
|
+
const doc = document.implementation.createHTMLDocument('');
|
|
1835
|
+
doc.documentElement.innerHTML = html.trim();
|
|
1836
|
+
return doc.body.textContent || doc.body.innerText || '';
|
|
1808
1837
|
};
|
|
1809
|
-
const
|
|
1810
|
-
|
|
1811
|
-
const encoded = window.btoa(encodeURIComponent(stringObj));
|
|
1812
|
-
data?.setData(getClipboardByKey(key), encoded);
|
|
1838
|
+
const getProbablySupportsClipboardWrite = () => {
|
|
1839
|
+
return 'clipboard' in navigator && 'write' in navigator.clipboard;
|
|
1813
1840
|
};
|
|
1814
|
-
const
|
|
1815
|
-
|
|
1816
|
-
let nodesData = [];
|
|
1817
|
-
if (encoded) {
|
|
1818
|
-
const decoded = decodeURIComponent(window.atob(encoded));
|
|
1819
|
-
nodesData = JSON.parse(decoded);
|
|
1820
|
-
}
|
|
1821
|
-
return nodesData;
|
|
1841
|
+
const getProbablySupportsClipboardWriteText = () => {
|
|
1842
|
+
return 'clipboard' in navigator && 'writeText' in navigator.clipboard;
|
|
1822
1843
|
};
|
|
1823
|
-
const
|
|
1824
|
-
return
|
|
1844
|
+
const getProbablySupportsClipboardRead = () => {
|
|
1845
|
+
return 'clipboard' in navigator && 'read' in navigator.clipboard;
|
|
1825
1846
|
};
|
|
1826
|
-
const
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1847
|
+
const createClipboardContext = (type, data, text) => {
|
|
1848
|
+
return {
|
|
1849
|
+
type,
|
|
1850
|
+
data,
|
|
1851
|
+
text
|
|
1852
|
+
};
|
|
1853
|
+
};
|
|
1854
|
+
const addClipboardContext = (clipboardContext, addition) => {
|
|
1855
|
+
const { type, data, text } = clipboardContext;
|
|
1856
|
+
if (type === addition.type) {
|
|
1857
|
+
return {
|
|
1858
|
+
type,
|
|
1859
|
+
data: data.concat(addition.data),
|
|
1860
|
+
text: text + ' ' + addition.text
|
|
1861
|
+
};
|
|
1862
|
+
}
|
|
1863
|
+
return clipboardContext;
|
|
1864
|
+
};
|
|
1865
|
+
|
|
1866
|
+
const setDataTransferClipboard = (dataTransfer, type, data) => {
|
|
1867
|
+
dataTransfer?.setData(`text/html`, buildPlaitHtml(type, data));
|
|
1868
|
+
};
|
|
1869
|
+
const setDataTransferClipboardText = (data, text) => {
|
|
1870
|
+
data?.setData(`text/plain`, text);
|
|
1871
|
+
};
|
|
1872
|
+
const getDataTransferClipboard = (data) => {
|
|
1873
|
+
const html = data?.getData(`text/html`);
|
|
1874
|
+
if (html) {
|
|
1875
|
+
const htmlClipboardData = getClipboardFromHtml(html);
|
|
1876
|
+
if (htmlClipboardData) {
|
|
1877
|
+
return htmlClipboardData;
|
|
1878
|
+
}
|
|
1879
|
+
}
|
|
1880
|
+
return {};
|
|
1881
|
+
};
|
|
1882
|
+
const getDataTransferClipboardText = (data) => {
|
|
1883
|
+
if (!data) {
|
|
1884
|
+
return {};
|
|
1885
|
+
}
|
|
1886
|
+
const text = data?.getData(`text/plain`);
|
|
1887
|
+
if (text) {
|
|
1888
|
+
const htmlClipboardData = getClipboardFromHtml(text);
|
|
1889
|
+
if (htmlClipboardData) {
|
|
1890
|
+
return htmlClipboardData;
|
|
1891
|
+
}
|
|
1892
|
+
}
|
|
1893
|
+
return {
|
|
1894
|
+
text
|
|
1895
|
+
};
|
|
1896
|
+
};
|
|
1897
|
+
|
|
1898
|
+
const setNavigatorClipboard = async (type, data, text = '') => {
|
|
1899
|
+
let textClipboard = text;
|
|
1900
|
+
if (getProbablySupportsClipboardWrite()) {
|
|
1901
|
+
await navigator.clipboard.write([
|
|
1902
|
+
new ClipboardItem({
|
|
1903
|
+
'text/html': new Blob([buildPlaitHtml(type, data)], {
|
|
1904
|
+
type: 'text/html'
|
|
1905
|
+
}),
|
|
1906
|
+
'text/plain': new Blob([JSON.stringify(textClipboard ?? data)], { type: 'text/plain' })
|
|
1907
|
+
})
|
|
1908
|
+
]);
|
|
1909
|
+
}
|
|
1910
|
+
};
|
|
1911
|
+
const getNavigatorClipboard = async () => {
|
|
1912
|
+
if (!getProbablySupportsClipboardRead()) {
|
|
1913
|
+
return {};
|
|
1914
|
+
}
|
|
1915
|
+
const clipboardItems = await navigator.clipboard.read();
|
|
1916
|
+
let clipboardData = {};
|
|
1917
|
+
if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {
|
|
1918
|
+
for (const item of clipboardItems) {
|
|
1919
|
+
if (isFile(item)) {
|
|
1920
|
+
const clipboardFiles = item.types.filter(type => type.match(/^image\//));
|
|
1921
|
+
const fileBlobs = await Promise.all(clipboardFiles.map(type => item.getType(type)));
|
|
1922
|
+
const urls = fileBlobs.filter(Boolean).map(blob => URL.createObjectURL(blob));
|
|
1923
|
+
const files = await Promise.all(urls.map(async (url) => {
|
|
1924
|
+
const blob = await (await fetch(url)).blob();
|
|
1925
|
+
return new File([blob], 'plait-file', { type: blob.type });
|
|
1926
|
+
}));
|
|
1927
|
+
return {
|
|
1928
|
+
files
|
|
1929
|
+
};
|
|
1930
|
+
}
|
|
1931
|
+
if (item.types.includes('text/html')) {
|
|
1932
|
+
const htmlContent = await blobAsString(await item.getType('text/html'));
|
|
1933
|
+
const htmlClipboardData = getClipboardFromHtml(htmlContent);
|
|
1934
|
+
if (htmlClipboardData) {
|
|
1935
|
+
return htmlClipboardData;
|
|
1936
|
+
}
|
|
1937
|
+
if (htmlContent && htmlContent.trim()) {
|
|
1938
|
+
clipboardData = { text: stripHtml(htmlContent) };
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1941
|
+
if (item.types.includes('text/plain')) {
|
|
1942
|
+
const textContent = await blobAsString(await item.getType('text/plain'));
|
|
1943
|
+
clipboardData = {
|
|
1944
|
+
text: stripHtml(textContent)
|
|
1945
|
+
};
|
|
1946
|
+
}
|
|
1947
|
+
}
|
|
1948
|
+
}
|
|
1949
|
+
return clipboardData;
|
|
1950
|
+
};
|
|
1951
|
+
const isFile = (item) => {
|
|
1952
|
+
return item.types.find(i => i.match(/^image\//));
|
|
1953
|
+
};
|
|
1954
|
+
const blobAsString = (blob) => {
|
|
1955
|
+
return new Promise((resolve, reject) => {
|
|
1956
|
+
const reader = new FileReader();
|
|
1957
|
+
reader.addEventListener('loadend', () => {
|
|
1958
|
+
const text = reader.result;
|
|
1959
|
+
resolve(text);
|
|
1960
|
+
});
|
|
1961
|
+
reader.addEventListener('error', () => {
|
|
1962
|
+
reject(reader.error);
|
|
1963
|
+
});
|
|
1964
|
+
reader.readAsText(blob);
|
|
1965
|
+
});
|
|
1966
|
+
};
|
|
1967
|
+
|
|
1968
|
+
const getClipboardData = async (dataTransfer) => {
|
|
1969
|
+
let clipboardData = {};
|
|
1970
|
+
if (dataTransfer) {
|
|
1971
|
+
if (dataTransfer.files.length) {
|
|
1972
|
+
return { files: Array.from(dataTransfer.files) };
|
|
1973
|
+
}
|
|
1974
|
+
clipboardData = getDataTransferClipboard(dataTransfer);
|
|
1975
|
+
if (Object.keys(clipboardData).length === 0) {
|
|
1976
|
+
clipboardData = getDataTransferClipboardText(dataTransfer);
|
|
1977
|
+
}
|
|
1978
|
+
return clipboardData;
|
|
1979
|
+
}
|
|
1980
|
+
if (getProbablySupportsClipboardRead()) {
|
|
1981
|
+
return await getNavigatorClipboard();
|
|
1982
|
+
}
|
|
1983
|
+
return clipboardData;
|
|
1984
|
+
};
|
|
1985
|
+
const setClipboardData = async (dataTransfer, clipboardContext) => {
|
|
1986
|
+
if (!clipboardContext) {
|
|
1987
|
+
return;
|
|
1988
|
+
}
|
|
1989
|
+
const { type, data, text } = clipboardContext;
|
|
1990
|
+
if (getProbablySupportsClipboardWrite()) {
|
|
1991
|
+
return await setNavigatorClipboard(type, data, text);
|
|
1992
|
+
}
|
|
1993
|
+
if (dataTransfer) {
|
|
1994
|
+
setDataTransferClipboard(dataTransfer, type, data);
|
|
1995
|
+
setDataTransferClipboardText(dataTransfer, text);
|
|
1996
|
+
return;
|
|
1997
|
+
}
|
|
1998
|
+
// Compatible with situations where navigator.clipboard.write is not supported and dataTransfer is empty
|
|
1999
|
+
// Such as contextmenu copy in Firefox.
|
|
2000
|
+
if (getProbablySupportsClipboardWriteText()) {
|
|
2001
|
+
return await navigator.clipboard.writeText(buildPlaitHtml(type, data));
|
|
2002
|
+
}
|
|
1834
2003
|
};
|
|
1835
2004
|
|
|
1836
2005
|
const BOARD_TO_TOUCH_REF = new WeakMap();
|
|
@@ -2975,7 +3144,9 @@ function createBoard(children, options) {
|
|
|
2975
3144
|
globalKeydown: (event) => { },
|
|
2976
3145
|
keyup: (event) => { },
|
|
2977
3146
|
dblclick: (event) => { },
|
|
2978
|
-
setFragment: (data) => {
|
|
3147
|
+
setFragment: (data, clipboardContext) => {
|
|
3148
|
+
setClipboardData(data, clipboardContext);
|
|
3149
|
+
},
|
|
2979
3150
|
insertFragment: (data) => { },
|
|
2980
3151
|
deleteFragment: (data) => {
|
|
2981
3152
|
const elements = board.getDeletedFragment([]);
|
|
@@ -4265,15 +4436,16 @@ class PlaitBoardComponent {
|
|
|
4265
4436
|
const selectedElements = getSelectedElements(this.board);
|
|
4266
4437
|
event.preventDefault();
|
|
4267
4438
|
const rectangle = getRectangleByElements(this.board, selectedElements, false);
|
|
4268
|
-
this.board.setFragment(event.clipboardData, rectangle, 'copy');
|
|
4439
|
+
this.board.setFragment(event.clipboardData, null, rectangle, 'copy');
|
|
4269
4440
|
});
|
|
4270
4441
|
fromEvent(document, 'paste')
|
|
4271
4442
|
.pipe(takeUntil(this.destroy$), filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board)))
|
|
4272
|
-
.subscribe((clipboardEvent) => {
|
|
4443
|
+
.subscribe(async (clipboardEvent) => {
|
|
4273
4444
|
const mousePoint = PlaitBoard.getMovingPointInBoard(this.board);
|
|
4274
4445
|
if (mousePoint) {
|
|
4275
4446
|
const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));
|
|
4276
|
-
|
|
4447
|
+
const clipboardData = await getClipboardData(clipboardEvent.clipboardData);
|
|
4448
|
+
this.board.insertFragment(clipboardEvent.clipboardData, clipboardData, targetPoint);
|
|
4277
4449
|
}
|
|
4278
4450
|
});
|
|
4279
4451
|
fromEvent(document, 'cut')
|
|
@@ -4282,7 +4454,7 @@ class PlaitBoardComponent {
|
|
|
4282
4454
|
const selectedElements = getSelectedElements(this.board);
|
|
4283
4455
|
event.preventDefault();
|
|
4284
4456
|
const rectangle = getRectangleByElements(this.board, selectedElements, false);
|
|
4285
|
-
this.board.setFragment(event.clipboardData, rectangle, 'cut');
|
|
4457
|
+
this.board.setFragment(event.clipboardData, null, rectangle, 'cut');
|
|
4286
4458
|
this.board.deleteFragment(event.clipboardData);
|
|
4287
4459
|
});
|
|
4288
4460
|
}
|
|
@@ -4611,5 +4783,5 @@ function createModModifierKeys() {
|
|
|
4611
4783
|
* Generated bundle index. Do not edit.
|
|
4612
4784
|
*/
|
|
4613
4785
|
|
|
4614
|
-
export { A, ACTIVE_MOVING_CLASS_NAME, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_AFTER_CHANGE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK,
|
|
4786
|
+
export { A, ACTIVE_MOVING_CLASS_NAME, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_AFTER_CHANGE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, CursorClass, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_DRAGGING, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RIGHT_ARROW, RectangleClient, ResizeCursorClass, RetroThemeColor, RgbaToHEX, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, WritableClipboardType, X, Y, Z, ZERO, addClipboardContext, addMovingElements, addSelectedElement, arrowPoints, buildPlaitHtml, cacheMovingElements, cacheSelectedElements, calcNewViewBox, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createClipboardContext, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downScale, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardData, getClipboardFromHtml, getDataTransferClipboard, getDataTransferClipboardText, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getProbablySupportsClipboardRead, getProbablySupportsClipboardWrite, getProbablySupportsClipboardWriteText, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isContextmenu, isDOMElement, isDOMNode, isDragging, isFromScrolling, isFromViewportChange, isHandleSelection, isInPlaitBoard, isLineHitLine, isMainPointer, isMovingElements, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetSelectionOperation, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setDataTransferClipboard, setDataTransferClipboardText, setDragging, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, stripHtml, temporaryDisableSelection, throttleRAF, toHostPoint, toHostPointFromViewBoxPoint, toImage, toScreenPointFromHostPoint, toViewBoxPoint, toViewBoxPoints, updateForeignObject, updateForeignObjectWidth, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
|
|
4615
4787
|
//# sourceMappingURL=plait-core.mjs.map
|