@8btc/xcanvas 0.0.14-beta.13 → 0.0.14-beta.15
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/README.md +23 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +18 -13
- package/dist/index.umd.cjs +18 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -20,6 +20,8 @@ export interface XCanvasAPI {
|
|
|
20
20
|
insertImgs: (url: string[]) => Promise<void>;
|
|
21
21
|
/** 追加多张图片到画布末尾, 如果画布中存在对应图片(url相同),则不做任何操作 */
|
|
22
22
|
appendImgs: (urls: string[]) => Promise<void>;
|
|
23
|
+
// 插入的图片后缀会自动带上时间戳后缀,用于解决maze跨域问题 `${url}?t=${Date.now()}`
|
|
24
|
+
appendImgsForMaze: (urls: string[]) => Promise<void>;
|
|
23
25
|
/** 保存canvas数据 */
|
|
24
26
|
save: () => any;
|
|
25
27
|
/** 从数据中恢复canvas画布 */
|
|
@@ -39,18 +41,22 @@ export interface XCanvasAPI {
|
|
|
39
41
|
reset: () => void;
|
|
40
42
|
/**
|
|
41
43
|
* 导出当前选区为图片(dataUrl), 特殊情况:当前选区为单张外部传入图片,则直接返回外部图片url
|
|
44
|
+
*
|
|
45
|
+
* @param tryToSplit 是否尝试拆分选区内的图片元素(当选区内全是图片时生效)
|
|
46
|
+
* 如果选区内的元素都是图片,则返回选区内图片url数组
|
|
47
|
+
* 如果选区内有非图片元素,则返回选区区域的dataUrl
|
|
42
48
|
* @returns dataUrl | url
|
|
43
49
|
* @throws 如果没有选区,调用这个函数会抛出错误
|
|
44
50
|
*/
|
|
45
|
-
exportSelection: () => Promise<string>;
|
|
51
|
+
exportSelection: (tryToSplit?: boolean) => Promise<string | string[]>;
|
|
46
52
|
/**
|
|
47
|
-
*
|
|
53
|
+
* 在当前旁边插入embeddableElement元素
|
|
48
54
|
*
|
|
49
55
|
* @param data 调用 renderEmbeddable 时, 可以从 element.data 访问到这里传入的数据
|
|
50
56
|
* @param positonCalculator 入参为当前选区左上角x,y 和宽高,返回值为插入元素的左上角x,y,w,h
|
|
51
57
|
* @returns 如果成功插入返回元素id,否则返回undefined
|
|
52
58
|
*/
|
|
53
|
-
|
|
59
|
+
insertCustomElementBesideSelection: (
|
|
54
60
|
data: {
|
|
55
61
|
component: string,
|
|
56
62
|
link?: string,
|
|
@@ -70,5 +76,19 @@ export interface XCanvasAPI {
|
|
|
70
76
|
height: number,
|
|
71
77
|
}
|
|
72
78
|
) => string | undefined;
|
|
79
|
+
/**
|
|
80
|
+
* 判断当前是否可以裁切图片
|
|
81
|
+
*/
|
|
82
|
+
predicateCropImage: () => boolean;
|
|
83
|
+
/**
|
|
84
|
+
* 裁切图片
|
|
85
|
+
*/
|
|
86
|
+
cropImage: () => void;
|
|
87
|
+
/**
|
|
88
|
+
* 删除选区里的全部元素
|
|
89
|
+
*/
|
|
90
|
+
deleteSelection: () => void;
|
|
91
|
+
/** 插入多个视频 */
|
|
92
|
+
insertVideos: (urls: string[]) => Promise<void>;
|
|
73
93
|
}
|
|
74
94
|
```
|
package/dist/index.d.ts
CHANGED
|
@@ -75,8 +75,8 @@ export declare interface XCanvasAPI {
|
|
|
75
75
|
* 删除选区里的全部元素
|
|
76
76
|
*/
|
|
77
77
|
deleteSelection: () => void;
|
|
78
|
-
/**
|
|
79
|
-
|
|
78
|
+
/** 插入一个视频 */
|
|
79
|
+
insertVideo: (urls: string) => Promise<void>;
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
export declare interface XcanvasProps extends ExcalidrawProps {
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { atom, useAtom, useAtomValue, useSetAtom } from "jotai";
|
|
3
3
|
import { Excalidraw, convertToExcalidrawElements, exportToCanvas } from "@8btc/excalidraw";
|
|
4
4
|
import { useEffect } from "react";
|
|
5
|
-
const version = "0.0.14-beta.
|
|
5
|
+
const version = "0.0.14-beta.15";
|
|
6
6
|
const packageJson = {
|
|
7
7
|
version
|
|
8
8
|
};
|
|
@@ -298,7 +298,6 @@ function ApiFactory() {
|
|
|
298
298
|
(it) => it.type === "embeddable" && it.id === id
|
|
299
299
|
);
|
|
300
300
|
if (!loadingEl) {
|
|
301
|
-
insertImgs(urls);
|
|
302
301
|
return;
|
|
303
302
|
}
|
|
304
303
|
const rets = await Promise.all(
|
|
@@ -501,17 +500,24 @@ function ApiFactory() {
|
|
|
501
500
|
}
|
|
502
501
|
});
|
|
503
502
|
},
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
const
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
503
|
+
insertVideo: async (url) => {
|
|
504
|
+
const currentElements = excalidrawAPI.getSceneElements();
|
|
505
|
+
const dimension = await getVideoDimensions(url);
|
|
506
|
+
const rets = [
|
|
507
|
+
{
|
|
508
|
+
...dimension,
|
|
509
|
+
url
|
|
510
|
+
}
|
|
511
|
+
];
|
|
512
|
+
const existElements = currentElements.filter(
|
|
513
|
+
(el) => el.type === "embeddable" && el.customData?.component === "video" && el.customData?.url === url
|
|
514
514
|
);
|
|
515
|
+
if (existElements.length > 0) {
|
|
516
|
+
excalidrawAPI.scrollToContent(existElements, {
|
|
517
|
+
animate: true
|
|
518
|
+
});
|
|
519
|
+
return;
|
|
520
|
+
}
|
|
515
521
|
const places = findPlaceForNewElements(
|
|
516
522
|
excalidrawAPI.getAppState(),
|
|
517
523
|
excalidrawAPI.getSceneElements(),
|
|
@@ -562,7 +568,6 @@ function ApiFactory() {
|
|
|
562
568
|
};
|
|
563
569
|
})
|
|
564
570
|
);
|
|
565
|
-
const currentElements = excalidrawAPI.getSceneElements();
|
|
566
571
|
excalidrawAPI.updateScene({
|
|
567
572
|
elements: [...currentElements, ...els]
|
|
568
573
|
});
|
package/dist/index.umd.cjs
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("react/jsx-runtime"), require("jotai"), require("@8btc/excalidraw"), require("react")) : typeof define === "function" && define.amd ? define(["exports", "react/jsx-runtime", "jotai", "@8btc/excalidraw", "react"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.XCanvas = {}, global.jsxRuntime, global.Jotai, global.Excalidraw, global.React));
|
|
3
3
|
})(this, (function(exports2, jsxRuntime, jotai, excalidraw, react) {
|
|
4
4
|
"use strict";
|
|
5
|
-
const version = "0.0.14-beta.
|
|
5
|
+
const version = "0.0.14-beta.15";
|
|
6
6
|
const packageJson = {
|
|
7
7
|
version
|
|
8
8
|
};
|
|
@@ -298,7 +298,6 @@
|
|
|
298
298
|
(it) => it.type === "embeddable" && it.id === id
|
|
299
299
|
);
|
|
300
300
|
if (!loadingEl) {
|
|
301
|
-
insertImgs(urls);
|
|
302
301
|
return;
|
|
303
302
|
}
|
|
304
303
|
const rets = await Promise.all(
|
|
@@ -501,17 +500,24 @@
|
|
|
501
500
|
}
|
|
502
501
|
});
|
|
503
502
|
},
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
const
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
503
|
+
insertVideo: async (url) => {
|
|
504
|
+
const currentElements = excalidrawAPI.getSceneElements();
|
|
505
|
+
const dimension = await getVideoDimensions(url);
|
|
506
|
+
const rets = [
|
|
507
|
+
{
|
|
508
|
+
...dimension,
|
|
509
|
+
url
|
|
510
|
+
}
|
|
511
|
+
];
|
|
512
|
+
const existElements = currentElements.filter(
|
|
513
|
+
(el) => el.type === "embeddable" && el.customData?.component === "video" && el.customData?.url === url
|
|
514
514
|
);
|
|
515
|
+
if (existElements.length > 0) {
|
|
516
|
+
excalidrawAPI.scrollToContent(existElements, {
|
|
517
|
+
animate: true
|
|
518
|
+
});
|
|
519
|
+
return;
|
|
520
|
+
}
|
|
515
521
|
const places = findPlaceForNewElements(
|
|
516
522
|
excalidrawAPI.getAppState(),
|
|
517
523
|
excalidrawAPI.getSceneElements(),
|
|
@@ -562,7 +568,6 @@
|
|
|
562
568
|
};
|
|
563
569
|
})
|
|
564
570
|
);
|
|
565
|
-
const currentElements = excalidrawAPI.getSceneElements();
|
|
566
571
|
excalidrawAPI.updateScene({
|
|
567
572
|
elements: [...currentElements, ...els]
|
|
568
573
|
});
|