@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.
@@ -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==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb20nO1xuZXhwb3J0ICogZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2hpc3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9ob3RrZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vaWQtY3JlYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL21hdGgnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWFrLW1hcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhdy9yZWN0YW5nbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3L2Fycm93JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhdy9jaXJjbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3L2xpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi90cmVlJztcbmV4cG9ydCAqIGZyb20gJy4vZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbW92aW5nLWVsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1pbWFnZSc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZCc7XG5leHBvcnQgKiBmcm9tICcuL3RvdWNoJztcbmV4cG9ydCAqIGZyb20gJy4vZG5kJztcbmV4cG9ydCAqIGZyb20gJy4vdG8tcG9pbnQnO1xuIl19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb20nO1xuZXhwb3J0ICogZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2hpc3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9ob3RrZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vaWQtY3JlYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL21hdGgnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWFrLW1hcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhdy9yZWN0YW5nbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3L2Fycm93JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhdy9jaXJjbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3L2xpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi90cmVlJztcbmV4cG9ydCAqIGZyb20gJy4vZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbW92aW5nLWVsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1pbWFnZSc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC9jbGlwYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGlwYm9hcmQvY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY2xpcGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vdG91Y2gnO1xuZXhwb3J0ICogZnJvbSAnLi9kbmQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1wb2ludCc7XG4iXX0=
@@ -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
- const getClipboardByKey = (key) => {
1793
- return `application/x-plait-${key}-fragment`;
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 setClipboardData = (data, elements) => {
1796
- const result = [...elements];
1797
- const pluginContextResult = getDataFromClipboard(data);
1798
- if (pluginContextResult) {
1799
- result.push(...pluginContextResult);
1800
- }
1801
- const stringObj = JSON.stringify(result);
1802
- const encoded = window.btoa(encodeURIComponent(stringObj));
1803
- data?.setData(`application/${CLIP_BOARD_FORMAT_KEY}`, encoded);
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 setClipboardDataByText = (data, text) => {
1806
- const pluginContextResult = getTextFromClipboard(data);
1807
- data?.setData(`text/plain`, text + '\n' + pluginContextResult);
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 setClipboardDataByMedia = (data, media, key) => {
1810
- const stringObj = JSON.stringify(media);
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 getDataFromClipboard = (data) => {
1815
- const encoded = data?.getData(`application/${CLIP_BOARD_FORMAT_KEY}`);
1816
- let nodesData = [];
1817
- if (encoded) {
1818
- const decoded = decodeURIComponent(window.atob(encoded));
1819
- nodesData = JSON.parse(decoded);
1820
- }
1821
- return nodesData;
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 getTextFromClipboard = (data) => {
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
- const getClipboardDataByMedia = (data, key) => {
1827
- const encoded = data?.getData(getClipboardByKey(key));
1828
- let imageItem = null;
1829
- if (encoded) {
1830
- const decoded = decodeURIComponent(window.atob(encoded));
1831
- imageItem = JSON.parse(decoded);
1832
- }
1833
- return imageItem;
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
- this.board.insertFragment(clipboardEvent.clipboardData, targetPoint);
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, CLIP_BOARD_FORMAT_KEY, 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, X, Y, Z, ZERO, addMovingElements, addSelectedElement, arrowPoints, cacheMovingElements, cacheSelectedElements, calcNewViewBox, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, 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, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, 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, setClipboardDataByMedia, setClipboardDataByText, setDragging, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, temporaryDisableSelection, throttleRAF, toHostPoint, toHostPointFromViewBoxPoint, toImage, toScreenPointFromHostPoint, toViewBoxPoint, toViewBoxPoints, updateForeignObject, updateForeignObjectWidth, updateViewportByScrolling, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
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