@8btc/xcanvas 0.0.14-beta.13 → 0.0.14-beta.14

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 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
- * 插入embeddableElement元素
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
- insertCustomElement: (
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
- insertVideos: (urls: string[]) => Promise<void>;
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.13";
5
+ const version = "0.0.14-beta.14";
6
6
  const packageJson = {
7
7
  version
8
8
  };
@@ -501,17 +501,24 @@ function ApiFactory() {
501
501
  }
502
502
  });
503
503
  },
504
- insertVideos: async (urls) => {
505
- if (urls.length === 0) return;
506
- const rets = await Promise.all(
507
- urls.map(async (it) => {
508
- const temp = await getVideoDimensions(it);
509
- return {
510
- ...temp,
511
- url: it
512
- };
513
- })
504
+ insertVideo: async (url) => {
505
+ const currentElements = excalidrawAPI.getSceneElements();
506
+ const dimension = await getVideoDimensions(url);
507
+ const rets = [
508
+ {
509
+ ...dimension,
510
+ url
511
+ }
512
+ ];
513
+ const existElements = currentElements.filter(
514
+ (el) => el.type === "embeddable" && el.customData?.component === "video" && el.customData?.url === url
514
515
  );
516
+ if (existElements.length > 0) {
517
+ excalidrawAPI.scrollToContent(existElements, {
518
+ animate: true
519
+ });
520
+ return;
521
+ }
515
522
  const places = findPlaceForNewElements(
516
523
  excalidrawAPI.getAppState(),
517
524
  excalidrawAPI.getSceneElements(),
@@ -562,7 +569,6 @@ function ApiFactory() {
562
569
  };
563
570
  })
564
571
  );
565
- const currentElements = excalidrawAPI.getSceneElements();
566
572
  excalidrawAPI.updateScene({
567
573
  elements: [...currentElements, ...els]
568
574
  });
@@ -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.13";
5
+ const version = "0.0.14-beta.14";
6
6
  const packageJson = {
7
7
  version
8
8
  };
@@ -501,17 +501,24 @@
501
501
  }
502
502
  });
503
503
  },
504
- insertVideos: async (urls) => {
505
- if (urls.length === 0) return;
506
- const rets = await Promise.all(
507
- urls.map(async (it) => {
508
- const temp = await getVideoDimensions(it);
509
- return {
510
- ...temp,
511
- url: it
512
- };
513
- })
504
+ insertVideo: async (url) => {
505
+ const currentElements = excalidrawAPI.getSceneElements();
506
+ const dimension = await getVideoDimensions(url);
507
+ const rets = [
508
+ {
509
+ ...dimension,
510
+ url
511
+ }
512
+ ];
513
+ const existElements = currentElements.filter(
514
+ (el) => el.type === "embeddable" && el.customData?.component === "video" && el.customData?.url === url
514
515
  );
516
+ if (existElements.length > 0) {
517
+ excalidrawAPI.scrollToContent(existElements, {
518
+ animate: true
519
+ });
520
+ return;
521
+ }
515
522
  const places = findPlaceForNewElements(
516
523
  excalidrawAPI.getAppState(),
517
524
  excalidrawAPI.getSceneElements(),
@@ -562,7 +569,6 @@
562
569
  };
563
570
  })
564
571
  );
565
- const currentElements = excalidrawAPI.getSceneElements();
566
572
  excalidrawAPI.updateScene({
567
573
  elements: [...currentElements, ...els]
568
574
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@8btc/xcanvas",
3
3
  "private": false,
4
- "version": "0.0.14-beta.13",
4
+ "version": "0.0.14-beta.14",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",
7
7
  "exports": {