@plait/core 0.49.0 → 0.50.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/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 +36 -0
- package/esm2022/utils/clipboard/common.mjs +64 -0
- package/esm2022/utils/clipboard/data-transfer.mjs +21 -0
- package/esm2022/utils/clipboard/index.mjs +3 -0
- package/esm2022/utils/clipboard/navigator-clipboard.mjs +73 -0
- package/esm2022/utils/clipboard/types.mjs +6 -0
- package/esm2022/utils/index.mjs +4 -1
- package/fesm2022/plait-core.mjs +194 -42
- 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 +8 -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/index.d.ts +3 -0
- package/esm2022/utils/clipboard.mjs +0 -45
- package/utils/clipboard.d.ts +0 -8
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { buildPlaitHtml, getClipboardFromHtml, stripHtml } from './common';
|
|
2
|
+
export const setNavigatorClipboard = async (type, data, text = '') => {
|
|
3
|
+
let textClipboard = text;
|
|
4
|
+
if ('clipboard' in navigator && 'write' in navigator.clipboard) {
|
|
5
|
+
if (navigator.clipboard && typeof navigator.clipboard.write === 'function') {
|
|
6
|
+
await navigator.clipboard.write([
|
|
7
|
+
new ClipboardItem({
|
|
8
|
+
'text/html': new Blob([buildPlaitHtml(type, data)], {
|
|
9
|
+
type: 'text/html'
|
|
10
|
+
}),
|
|
11
|
+
'text/plain': new Blob([JSON.stringify(textClipboard ?? data)], { type: 'text/plain' })
|
|
12
|
+
})
|
|
13
|
+
]);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export const getNavigatorClipboard = async () => {
|
|
18
|
+
if (!('clipboard' in navigator && 'read' in navigator.clipboard)) {
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
const clipboardItems = await navigator.clipboard.read();
|
|
22
|
+
let clipboardData = {};
|
|
23
|
+
if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {
|
|
24
|
+
for (const item of clipboardItems) {
|
|
25
|
+
if (isFile(item)) {
|
|
26
|
+
const clipboardFiles = item.types.filter(type => type.match(/^image\//));
|
|
27
|
+
const fileBlobs = await Promise.all(clipboardFiles.map(type => item.getType(type)));
|
|
28
|
+
const urls = fileBlobs.filter(Boolean).map(blob => URL.createObjectURL(blob));
|
|
29
|
+
const files = await Promise.all(urls.map(async (url) => {
|
|
30
|
+
const blob = await (await fetch(url)).blob();
|
|
31
|
+
return new File([blob], 'plait-file', { type: blob.type });
|
|
32
|
+
}));
|
|
33
|
+
return {
|
|
34
|
+
files
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (item.types.includes('text/html')) {
|
|
38
|
+
const htmlContent = await blobAsString(await item.getType('text/html'));
|
|
39
|
+
const htmlClipboardData = getClipboardFromHtml(htmlContent);
|
|
40
|
+
if (htmlClipboardData) {
|
|
41
|
+
return htmlClipboardData;
|
|
42
|
+
}
|
|
43
|
+
if (htmlContent && htmlContent.trim()) {
|
|
44
|
+
clipboardData = { text: stripHtml(htmlContent) };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (item.types.includes('text/plain')) {
|
|
48
|
+
const textContent = await blobAsString(await item.getType('text/plain'));
|
|
49
|
+
clipboardData = {
|
|
50
|
+
text: stripHtml(textContent)
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return clipboardData;
|
|
56
|
+
};
|
|
57
|
+
const isFile = (item) => {
|
|
58
|
+
return item.types.find(i => i.match(/^image\//));
|
|
59
|
+
};
|
|
60
|
+
const blobAsString = (blob) => {
|
|
61
|
+
return new Promise((resolve, reject) => {
|
|
62
|
+
const reader = new FileReader();
|
|
63
|
+
reader.addEventListener('loadend', () => {
|
|
64
|
+
const text = reader.result;
|
|
65
|
+
resolve(text);
|
|
66
|
+
});
|
|
67
|
+
reader.addEventListener('error', () => {
|
|
68
|
+
reject(reader.error);
|
|
69
|
+
});
|
|
70
|
+
reader.readAsText(blob);
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLWNsaXBib2FyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL2NsaXBib2FyZC9uYXZpZ2F0b3ItY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRzNFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLEtBQUssRUFBRSxJQUEyQixFQUFFLElBQTJCLEVBQUUsT0FBZSxFQUFFLEVBQUUsRUFBRTtJQUN2SCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDekIsSUFBSSxXQUFXLElBQUksU0FBUyxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQzVELElBQUksU0FBUyxDQUFDLFNBQVMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLFVBQVUsRUFBRTtZQUN4RSxNQUFNLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2dCQUM1QixJQUFJLGFBQWEsQ0FBQztvQkFDZCxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUU7d0JBQ2hELElBQUksRUFBRSxXQUFXO3FCQUNwQixDQUFDO29CQUNGLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUM7aUJBQzFGLENBQUM7YUFDTCxDQUFDLENBQUM7U0FDTjtLQUNKO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsS0FBSyxJQUE0QixFQUFFO0lBQ3BFLElBQUksQ0FBQyxDQUFDLFdBQVcs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QUMsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBVSxFQUFFLEVBQUU7SUFDaEMsT0FBTyxJQUFJLE9BQU8sQ0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxNQUFNLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDM0IsT0FBTyxDQUFDLElBQWMsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidWlsZFBsYWl0SHRtbCwgZ2V0Q2xpcGJvYXJkRnJvbUh0bWwsIHN0cmlwSHRtbCB9IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IENsaXBib2FyZERhdGEsIFdyaXRhYmxlQ2xpcGJvYXJkRGF0YSwgV3JpdGFibGVDbGlwYm9hcmRUeXBlIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBzZXROYXZpZ2F0b3JDbGlwYm9hcmQgPSBhc3luYyAodHlwZTogV3JpdGFibGVDbGlwYm9hcmRUeXBlLCBkYXRhOiBXcml0YWJsZUNsaXBib2FyZERhdGEsIHRleHQ6IHN0cmluZyA9ICcnKSA9PiB7XG4gICAgbGV0IHRleHRDbGlwYm9hcmQgPSB0ZXh0O1xuICAgIGlmICgnY2xpcGJvYXJkJyBpbiBuYXZpZ2F0b3IgJiYgJ3dyaXRlJyBpbiBuYXZpZ2F0b3IuY2xpcGJvYXJkKSB7XG4gICAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkICYmIHR5cGVvZiBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlKFtcbiAgICAgICAgICAgICAgICBuZXcgQ2xpcGJvYXJkSXRlbSh7XG4gICAgICAgICAgICAgICAgICAgICd0ZXh0L2h0bWwnOiBuZXcgQmxvYihbYnVpbGRQbGFpdEh0bWwodHlwZSwgZGF0YSldLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndGV4dC9odG1sJ1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgJ3RleHQvcGxhaW4nOiBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkodGV4dENsaXBib2FyZCA/PyBkYXRhKV0sIHsgdHlwZTogJ3RleHQvcGxhaW4nIH0pXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldE5hdmlnYXRvckNsaXBib2FyZCA9IGFzeW5jICgpOiBQcm9taXNlPENsaXBib2FyZERhdGE+ID0+IHtcbiAgICBpZiAoISgnY2xpcGJvYXJkJyBpbiBuYXZpZ2F0b3IgJiYgJ3JlYWQnIGluIG5hdmlnYXRvci5jbGlwYm9hcmQpKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgY2xpcGJvYXJkSXRlbXMgPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLnJlYWQoKTtcbiAgICBsZXQgY2xpcGJvYXJkRGF0YTogQ2xpcGJvYXJkRGF0YSA9IHt9O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2xpcGJvYXJkSXRlbXMpICYmIGNsaXBib2FyZEl0ZW1zWzBdIGluc3RhbmNlb2YgQ2xpcGJvYXJkSXRlbSkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY2xpcGJvYXJkSXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChpc0ZpbGUoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGlwYm9hcmRGaWxlcyA9IGl0ZW0udHlwZXMuZmlsdGVyKHR5cGUgPT4gdHlwZS5tYXRjaCgvXmltYWdlXFwvLykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVCbG9icyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaXBib2FyZEZpbGVzLm1hcCh0eXBlID0+IGl0ZW0uZ2V0VHlwZSh0eXBlKSEpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cmxzID0gKGZpbGVCbG9icy5maWx0ZXIoQm9vbGVhbikgYXMgKEZpbGUgfCBCbG9iKVtdKS5tYXAoYmxvYiA9PiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICAgICAgICB1cmxzLm1hcChhc3luYyB1cmwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IChhd2FpdCBmZXRjaCh1cmwpKS5ibG9iKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGUoW2Jsb2JdLCAncGxhaXQtZmlsZScsIHsgdHlwZTogYmxvYi50eXBlIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZXNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZXMuaW5jbHVkZXMoJ3RleHQvaHRtbCcpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbENvbnRlbnQgPSBhd2FpdCBibG9iQXNTdHJpbmcoYXdhaXQgaXRlbS5nZXRUeXBlKCd0ZXh0L2h0bWwnKSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbENsaXBib2FyZERhdGEgPSBnZXRDbGlwYm9hcmRGcm9tSHRtbChodG1sQ29udGVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGh0bWxDbGlwYm9hcmREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sQ2xpcGJvYXJkRGF0YTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGh0bWxDb250ZW50ICYmIGh0bWxDb250ZW50LnRyaW0oKSkge1xuICAgICAgICAgICAgICAgICAgICBjbGlwYm9hcmREYXRhID0geyB0ZXh0OiBzdHJpcEh0bWwoaHRtbENvbnRlbnQpIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZXMuaW5jbHVkZXMoJ3RleHQvcGxhaW4nKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRleHRDb250ZW50ID0gYXdhaXQgYmxvYkFzU3RyaW5nKGF3YWl0IGl0ZW0uZ2V0VHlwZSgndGV4dC9wbGFpbicpKTtcbiAgICAgICAgICAgICAgICBjbGlwYm9hcmREYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdHJpcEh0bWwodGV4dENvbnRlbnQpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2xpcGJvYXJkRGF0YTtcbn07XG5cbmNvbnN0IGlzRmlsZSA9IChpdGVtOiBDbGlwYm9hcmRJdGVtKSA9PiB7XG4gICAgcmV0dXJuIGl0ZW0udHlwZXMuZmluZChpID0+IGkubWF0Y2goL15pbWFnZVxcLy8pKTtcbn07XG5cbmNvbnN0IGJsb2JBc1N0cmluZyA9IChibG9iOiBCbG9iKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRleHQgPSByZWFkZXIucmVzdWx0O1xuICAgICAgICAgICAgcmVzb2x2ZSh0ZXh0IGFzIHN0cmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZWFkZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCAoKSA9PiB7XG4gICAgICAgICAgICByZWplY3QocmVhZGVyLmVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IpO1xuICAgIH0pO1xufTtcbiJdfQ==
|
|
@@ -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/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;
|
|
@@ -1789,48 +1788,198 @@ function downloadImage(url, name) {
|
|
|
1789
1788
|
a.remove();
|
|
1790
1789
|
}
|
|
1791
1790
|
|
|
1792
|
-
|
|
1793
|
-
|
|
1791
|
+
var WritableClipboardType;
|
|
1792
|
+
(function (WritableClipboardType) {
|
|
1793
|
+
WritableClipboardType["medias"] = "medias";
|
|
1794
|
+
WritableClipboardType["elements"] = "elements";
|
|
1795
|
+
})(WritableClipboardType || (WritableClipboardType = {}));
|
|
1796
|
+
|
|
1797
|
+
const buildPlaitHtml = (type, data) => {
|
|
1798
|
+
const stringifiedClipboard = JSON.stringify({
|
|
1799
|
+
type,
|
|
1800
|
+
data
|
|
1801
|
+
});
|
|
1802
|
+
return `<plait>${stringifiedClipboard}</plait>`;
|
|
1794
1803
|
};
|
|
1795
|
-
const
|
|
1796
|
-
const
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
+
const getClipboardFromHtml = (html) => {
|
|
1805
|
+
const plaitString = html?.match(/<plait[^>]*>(.*)<\/plait>/)?.[1];
|
|
1806
|
+
if (plaitString) {
|
|
1807
|
+
try {
|
|
1808
|
+
const plaitJson = JSON.parse(plaitString);
|
|
1809
|
+
if (plaitJson) {
|
|
1810
|
+
if (plaitJson.type === WritableClipboardType.elements) {
|
|
1811
|
+
return {
|
|
1812
|
+
elements: plaitJson.data
|
|
1813
|
+
};
|
|
1814
|
+
}
|
|
1815
|
+
else if (plaitJson.type === WritableClipboardType.medias) {
|
|
1816
|
+
return {
|
|
1817
|
+
medias: plaitJson.data
|
|
1818
|
+
};
|
|
1819
|
+
}
|
|
1820
|
+
}
|
|
1821
|
+
}
|
|
1822
|
+
catch (error) {
|
|
1823
|
+
console.error(error);
|
|
1824
|
+
return null;
|
|
1825
|
+
}
|
|
1826
|
+
}
|
|
1827
|
+
return null;
|
|
1804
1828
|
};
|
|
1805
|
-
const
|
|
1806
|
-
|
|
1807
|
-
|
|
1829
|
+
const stripHtml = (html) => {
|
|
1830
|
+
// See <https://github.com/developit/preact-markup/blob/4788b8d61b4e24f83688710746ee36e7464f7bbc/src/parse-markup.js#L60-L69>
|
|
1831
|
+
const doc = document.implementation.createHTMLDocument('');
|
|
1832
|
+
doc.documentElement.innerHTML = html.trim();
|
|
1833
|
+
return doc.body.textContent || doc.body.innerText || '';
|
|
1808
1834
|
};
|
|
1809
|
-
const
|
|
1810
|
-
|
|
1811
|
-
const encoded = window.btoa(encodeURIComponent(stringObj));
|
|
1812
|
-
data?.setData(getClipboardByKey(key), encoded);
|
|
1835
|
+
const getProbablySupportsClipboardWrite = () => {
|
|
1836
|
+
return 'clipboard' in navigator && 'write' in navigator.clipboard;
|
|
1813
1837
|
};
|
|
1814
|
-
const
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1838
|
+
const getProbablySupportsClipboardRead = () => {
|
|
1839
|
+
return 'clipboard' in navigator && 'read' in navigator.clipboard;
|
|
1840
|
+
};
|
|
1841
|
+
const createClipboardContext = (type, data, text) => {
|
|
1842
|
+
return {
|
|
1843
|
+
type,
|
|
1844
|
+
data,
|
|
1845
|
+
text
|
|
1846
|
+
};
|
|
1822
1847
|
};
|
|
1823
|
-
const
|
|
1848
|
+
const addClipboardContext = (clipboardContext, addition) => {
|
|
1849
|
+
const { type, data, text } = clipboardContext;
|
|
1850
|
+
if (type === addition.type) {
|
|
1851
|
+
return {
|
|
1852
|
+
type,
|
|
1853
|
+
data: data.concat(addition.data),
|
|
1854
|
+
text: text + ' ' + addition.text
|
|
1855
|
+
};
|
|
1856
|
+
}
|
|
1857
|
+
return clipboardContext;
|
|
1858
|
+
};
|
|
1859
|
+
|
|
1860
|
+
const setDataTransferClipboard = (dataTransfer, type, data) => {
|
|
1861
|
+
dataTransfer?.setData(`text/html`, buildPlaitHtml(type, data));
|
|
1862
|
+
};
|
|
1863
|
+
const setDataTransferClipboardText = (data, text) => {
|
|
1864
|
+
data?.setData(`text/plain`, text);
|
|
1865
|
+
};
|
|
1866
|
+
const getDataTransferClipboard = (data) => {
|
|
1867
|
+
const html = data?.getData(`text/html`);
|
|
1868
|
+
if (html) {
|
|
1869
|
+
const htmlClipboardData = getClipboardFromHtml(html);
|
|
1870
|
+
if (htmlClipboardData) {
|
|
1871
|
+
return htmlClipboardData;
|
|
1872
|
+
}
|
|
1873
|
+
}
|
|
1874
|
+
return {};
|
|
1875
|
+
};
|
|
1876
|
+
const getDataTransferClipboardText = (data) => {
|
|
1824
1877
|
return (data ? data.getData(`text/plain`) : '');
|
|
1825
1878
|
};
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
let
|
|
1829
|
-
if (
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1879
|
+
|
|
1880
|
+
const setNavigatorClipboard = async (type, data, text = '') => {
|
|
1881
|
+
let textClipboard = text;
|
|
1882
|
+
if ('clipboard' in navigator && 'write' in navigator.clipboard) {
|
|
1883
|
+
if (navigator.clipboard && typeof navigator.clipboard.write === 'function') {
|
|
1884
|
+
await navigator.clipboard.write([
|
|
1885
|
+
new ClipboardItem({
|
|
1886
|
+
'text/html': new Blob([buildPlaitHtml(type, data)], {
|
|
1887
|
+
type: 'text/html'
|
|
1888
|
+
}),
|
|
1889
|
+
'text/plain': new Blob([JSON.stringify(textClipboard ?? data)], { type: 'text/plain' })
|
|
1890
|
+
})
|
|
1891
|
+
]);
|
|
1892
|
+
}
|
|
1893
|
+
}
|
|
1894
|
+
};
|
|
1895
|
+
const getNavigatorClipboard = async () => {
|
|
1896
|
+
if (!('clipboard' in navigator && 'read' in navigator.clipboard)) {
|
|
1897
|
+
return {};
|
|
1898
|
+
}
|
|
1899
|
+
const clipboardItems = await navigator.clipboard.read();
|
|
1900
|
+
let clipboardData = {};
|
|
1901
|
+
if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {
|
|
1902
|
+
for (const item of clipboardItems) {
|
|
1903
|
+
if (isFile(item)) {
|
|
1904
|
+
const clipboardFiles = item.types.filter(type => type.match(/^image\//));
|
|
1905
|
+
const fileBlobs = await Promise.all(clipboardFiles.map(type => item.getType(type)));
|
|
1906
|
+
const urls = fileBlobs.filter(Boolean).map(blob => URL.createObjectURL(blob));
|
|
1907
|
+
const files = await Promise.all(urls.map(async (url) => {
|
|
1908
|
+
const blob = await (await fetch(url)).blob();
|
|
1909
|
+
return new File([blob], 'plait-file', { type: blob.type });
|
|
1910
|
+
}));
|
|
1911
|
+
return {
|
|
1912
|
+
files
|
|
1913
|
+
};
|
|
1914
|
+
}
|
|
1915
|
+
if (item.types.includes('text/html')) {
|
|
1916
|
+
const htmlContent = await blobAsString(await item.getType('text/html'));
|
|
1917
|
+
const htmlClipboardData = getClipboardFromHtml(htmlContent);
|
|
1918
|
+
if (htmlClipboardData) {
|
|
1919
|
+
return htmlClipboardData;
|
|
1920
|
+
}
|
|
1921
|
+
if (htmlContent && htmlContent.trim()) {
|
|
1922
|
+
clipboardData = { text: stripHtml(htmlContent) };
|
|
1923
|
+
}
|
|
1924
|
+
}
|
|
1925
|
+
if (item.types.includes('text/plain')) {
|
|
1926
|
+
const textContent = await blobAsString(await item.getType('text/plain'));
|
|
1927
|
+
clipboardData = {
|
|
1928
|
+
text: stripHtml(textContent)
|
|
1929
|
+
};
|
|
1930
|
+
}
|
|
1931
|
+
}
|
|
1932
|
+
}
|
|
1933
|
+
return clipboardData;
|
|
1934
|
+
};
|
|
1935
|
+
const isFile = (item) => {
|
|
1936
|
+
return item.types.find(i => i.match(/^image\//));
|
|
1937
|
+
};
|
|
1938
|
+
const blobAsString = (blob) => {
|
|
1939
|
+
return new Promise((resolve, reject) => {
|
|
1940
|
+
const reader = new FileReader();
|
|
1941
|
+
reader.addEventListener('loadend', () => {
|
|
1942
|
+
const text = reader.result;
|
|
1943
|
+
resolve(text);
|
|
1944
|
+
});
|
|
1945
|
+
reader.addEventListener('error', () => {
|
|
1946
|
+
reject(reader.error);
|
|
1947
|
+
});
|
|
1948
|
+
reader.readAsText(blob);
|
|
1949
|
+
});
|
|
1950
|
+
};
|
|
1951
|
+
|
|
1952
|
+
const getClipboardData = async (dataTransfer) => {
|
|
1953
|
+
let clipboardData = {};
|
|
1954
|
+
if (dataTransfer) {
|
|
1955
|
+
if (dataTransfer.files.length) {
|
|
1956
|
+
return { files: Array.from(dataTransfer.files) };
|
|
1957
|
+
}
|
|
1958
|
+
clipboardData = getDataTransferClipboard(dataTransfer);
|
|
1959
|
+
if (Object.keys(clipboardData).length === 0) {
|
|
1960
|
+
clipboardData = {
|
|
1961
|
+
text: getDataTransferClipboardText(dataTransfer)
|
|
1962
|
+
};
|
|
1963
|
+
}
|
|
1964
|
+
return clipboardData;
|
|
1965
|
+
}
|
|
1966
|
+
if (getProbablySupportsClipboardRead()) {
|
|
1967
|
+
return await getNavigatorClipboard();
|
|
1968
|
+
}
|
|
1969
|
+
return clipboardData;
|
|
1970
|
+
};
|
|
1971
|
+
const setClipboardData = async (dataTransfer, clipboardContext) => {
|
|
1972
|
+
if (!clipboardContext) {
|
|
1973
|
+
return;
|
|
1974
|
+
}
|
|
1975
|
+
const { type, data, text } = clipboardContext;
|
|
1976
|
+
if (getProbablySupportsClipboardWrite()) {
|
|
1977
|
+
return await setNavigatorClipboard(type, data, text);
|
|
1978
|
+
}
|
|
1979
|
+
if (dataTransfer) {
|
|
1980
|
+
setDataTransferClipboard(dataTransfer, type, data);
|
|
1981
|
+
setDataTransferClipboardText(dataTransfer, text);
|
|
1982
|
+
}
|
|
1834
1983
|
};
|
|
1835
1984
|
|
|
1836
1985
|
const BOARD_TO_TOUCH_REF = new WeakMap();
|
|
@@ -2975,7 +3124,9 @@ function createBoard(children, options) {
|
|
|
2975
3124
|
globalKeydown: (event) => { },
|
|
2976
3125
|
keyup: (event) => { },
|
|
2977
3126
|
dblclick: (event) => { },
|
|
2978
|
-
setFragment: (data) => {
|
|
3127
|
+
setFragment: (data, clipboardContext) => {
|
|
3128
|
+
setClipboardData(data, clipboardContext);
|
|
3129
|
+
},
|
|
2979
3130
|
insertFragment: (data) => { },
|
|
2980
3131
|
deleteFragment: (data) => {
|
|
2981
3132
|
const elements = board.getDeletedFragment([]);
|
|
@@ -4265,15 +4416,16 @@ class PlaitBoardComponent {
|
|
|
4265
4416
|
const selectedElements = getSelectedElements(this.board);
|
|
4266
4417
|
event.preventDefault();
|
|
4267
4418
|
const rectangle = getRectangleByElements(this.board, selectedElements, false);
|
|
4268
|
-
this.board.setFragment(event.clipboardData, rectangle, 'copy');
|
|
4419
|
+
this.board.setFragment(event.clipboardData, null, rectangle, 'copy');
|
|
4269
4420
|
});
|
|
4270
4421
|
fromEvent(document, 'paste')
|
|
4271
4422
|
.pipe(takeUntil(this.destroy$), filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board)))
|
|
4272
|
-
.subscribe((clipboardEvent) => {
|
|
4423
|
+
.subscribe(async (clipboardEvent) => {
|
|
4273
4424
|
const mousePoint = PlaitBoard.getMovingPointInBoard(this.board);
|
|
4274
4425
|
if (mousePoint) {
|
|
4275
4426
|
const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));
|
|
4276
|
-
|
|
4427
|
+
const clipboardData = await getClipboardData(clipboardEvent.clipboardData);
|
|
4428
|
+
this.board.insertFragment(clipboardEvent.clipboardData, clipboardData, targetPoint);
|
|
4277
4429
|
}
|
|
4278
4430
|
});
|
|
4279
4431
|
fromEvent(document, 'cut')
|
|
@@ -4282,7 +4434,7 @@ class PlaitBoardComponent {
|
|
|
4282
4434
|
const selectedElements = getSelectedElements(this.board);
|
|
4283
4435
|
event.preventDefault();
|
|
4284
4436
|
const rectangle = getRectangleByElements(this.board, selectedElements, false);
|
|
4285
|
-
this.board.setFragment(event.clipboardData, rectangle, 'cut');
|
|
4437
|
+
this.board.setFragment(event.clipboardData, null, rectangle, 'cut');
|
|
4286
4438
|
this.board.deleteFragment(event.clipboardData);
|
|
4287
4439
|
});
|
|
4288
4440
|
}
|
|
@@ -4611,5 +4763,5 @@ function createModModifierKeys() {
|
|
|
4611
4763
|
* Generated bundle index. Do not edit.
|
|
4612
4764
|
*/
|
|
4613
4765
|
|
|
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,
|
|
4766
|
+
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, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, 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
4767
|
//# sourceMappingURL=plait-core.mjs.map
|