@excalidraw/excalidraw 0.12.0-0a5da02 → 0.12.0-0d1058a

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.
Files changed (87) hide show
  1. package/CHANGELOG.md +9 -850
  2. package/README.md +22 -10
  3. package/dist/excalidraw-assets/locales/bn-BD-json-906099d3f665de611389.js +1 -0
  4. package/dist/excalidraw-assets/locales/ca-ES-json-7f3f0a2c7f428fa60e01.js +1 -0
  5. package/dist/excalidraw-assets/locales/el-GR-json-18ce48894d32ca4895b8.js +1 -0
  6. package/dist/excalidraw-assets/locales/es-ES-json-69a6c81b0e5dc370ea1a.js +1 -0
  7. package/dist/excalidraw-assets/locales/ko-KR-json-8e7ae1bb19a7677a8190.js +1 -0
  8. package/dist/excalidraw-assets/locales/lt-LT-json-4147c3543dce75362050.js +1 -0
  9. package/dist/excalidraw-assets/locales/pt-BR-json-4ffa2f70c2863bca4f91.js +1 -0
  10. package/dist/excalidraw-assets/locales/pt-PT-json-4368eca89d2b2b3fb444.js +1 -0
  11. package/dist/excalidraw-assets/locales/vi-VN-json-929afcbc15b2c06a64f2.js +1 -0
  12. package/dist/excalidraw-assets/vendor-cb04f63875674d708080.js +2 -0
  13. package/dist/excalidraw-assets/{vendor-52b1f3361986b6c6a4fe.js.LICENSE.txt → vendor-cb04f63875674d708080.js.LICENSE.txt} +0 -0
  14. package/dist/excalidraw-assets-dev/locales/bn-BD-json-c3b027e18322cd5f67dd.js +22 -0
  15. package/dist/excalidraw-assets-dev/locales/ca-ES-json-465e286330127bad8841.js +22 -0
  16. package/dist/excalidraw-assets-dev/locales/el-GR-json-33bcaca5c1eb85d3d81a.js +22 -0
  17. package/dist/excalidraw-assets-dev/locales/es-ES-json-41e67e045d8f77e56a7a.js +22 -0
  18. package/dist/excalidraw-assets-dev/locales/ko-KR-json-b6b0f0c8dc22ac7a3377.js +22 -0
  19. package/dist/excalidraw-assets-dev/locales/lt-LT-json-09b44716baf6aae6bf11.js +22 -0
  20. package/dist/excalidraw-assets-dev/locales/pt-BR-json-5abf09146a4f4387393d.js +22 -0
  21. package/dist/excalidraw-assets-dev/locales/pt-PT-json-c72abd8cf29d14347cf5.js +22 -0
  22. package/dist/excalidraw-assets-dev/locales/{bn-BD-json-02993b6dba9e7f115b53.js → vi-VN-json-03f122275dad01552357.js} +4 -4
  23. package/dist/excalidraw-assets-dev/{vendor-c0592035c3911af79359.js → vendor-e6df8519da951026ff69.js} +1 -1
  24. package/dist/excalidraw.development.js +59 -59
  25. package/dist/excalidraw.production.min.js +1 -1
  26. package/dist/excalidraw.production.min.js.LICENSE.txt +0 -9
  27. package/package.json +1 -1
  28. package/types/actions/actionClipboard.d.ts +1 -0
  29. package/types/actions/actionDeleteSelected.d.ts +1 -0
  30. package/types/actions/actionExport.d.ts +1 -1
  31. package/types/components/Actions.d.ts +13 -2
  32. package/types/components/App.d.ts +3 -0
  33. package/types/components/Footer.d.ts +9 -0
  34. package/types/components/LayerUI.d.ts +1 -1
  35. package/types/components/LibraryMenu.d.ts +1 -2
  36. package/types/components/MobileMenu.d.ts +3 -3
  37. package/types/components/Stats.d.ts +1 -1
  38. package/types/data/blob.d.ts +1 -1
  39. package/types/element/Hyperlink.d.ts +1 -2
  40. package/types/element/bounds.d.ts +1 -1
  41. package/types/element/linearElementEditor.d.ts +34 -15
  42. package/types/element/transformHandles.d.ts +5 -4
  43. package/types/element/types.d.ts +1 -0
  44. package/types/math.d.ts +8 -1
  45. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{bn-BD-json-aa99c5a33f005fb00c6b.d.ts → bn-BD-json-906099d3f665de611389.d.ts} +0 -0
  46. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{ca-ES-json-32cf66a0dfdbbafb6903.d.ts → ca-ES-json-7f3f0a2c7f428fa60e01.d.ts} +0 -0
  47. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{el-GR-json-74f57c0f8b11ac1b6dde.d.ts → el-GR-json-18ce48894d32ca4895b8.d.ts} +0 -0
  48. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{es-ES-json-ffb4e65453db2f3058d4.d.ts → es-ES-json-69a6c81b0e5dc370ea1a.d.ts} +0 -0
  49. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{ko-KR-json-f27d159b2556809076aa.d.ts → ko-KR-json-8e7ae1bb19a7677a8190.d.ts} +0 -0
  50. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{lt-LT-json-7277ad8dae6d3e6607b3.d.ts → lt-LT-json-4147c3543dce75362050.d.ts} +0 -0
  51. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{pt-BR-json-686219f43cd76123b7fa.d.ts → pt-BR-json-4ffa2f70c2863bca4f91.d.ts} +0 -0
  52. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{pt-PT-json-be4502ca3a1250845c39.d.ts → pt-PT-json-4368eca89d2b2b3fb444.d.ts} +0 -0
  53. package/types/packages/excalidraw/dist/excalidraw-assets/locales/{vi-VN-json-5c276b534d762658589c.d.ts → vi-VN-json-929afcbc15b2c06a64f2.d.ts} +0 -0
  54. package/types/packages/excalidraw/dist/excalidraw-assets/{vendor-52b1f3361986b6c6a4fe.d.ts → vendor-cb04f63875674d708080.d.ts} +0 -0
  55. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{bn-BD-json-02993b6dba9e7f115b53.d.ts → bn-BD-json-c3b027e18322cd5f67dd.d.ts} +0 -0
  56. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{ca-ES-json-7aabb5b31e7a995a90e3.d.ts → ca-ES-json-465e286330127bad8841.d.ts} +0 -0
  57. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{el-GR-json-2bc44d5450554154e110.d.ts → el-GR-json-33bcaca5c1eb85d3d81a.d.ts} +0 -0
  58. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{es-ES-json-9e5e962b234d2fa5aac2.d.ts → es-ES-json-41e67e045d8f77e56a7a.d.ts} +0 -0
  59. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{ko-KR-json-09de6762eea271167b56.d.ts → ko-KR-json-b6b0f0c8dc22ac7a3377.d.ts} +0 -0
  60. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{lt-LT-json-a17971ff33b8929e96d3.d.ts → lt-LT-json-09b44716baf6aae6bf11.d.ts} +0 -0
  61. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{pt-BR-json-5e4c8cd83b785ed859c2.d.ts → pt-BR-json-5abf09146a4f4387393d.d.ts} +0 -0
  62. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{pt-PT-json-a7f89a1c6f1c380141e5.d.ts → pt-PT-json-c72abd8cf29d14347cf5.d.ts} +0 -0
  63. package/types/packages/excalidraw/dist/excalidraw-assets-dev/locales/{vi-VN-json-670ecb0ad40c0453bdfd.d.ts → vi-VN-json-03f122275dad01552357.d.ts} +0 -0
  64. package/types/packages/excalidraw/dist/excalidraw-assets-dev/{vendor-c0592035c3911af79359.d.ts → vendor-e6df8519da951026ff69.d.ts} +0 -0
  65. package/types/packages/utils.d.ts +4 -1
  66. package/types/points.d.ts +2 -1
  67. package/types/polyfill.d.ts +2 -0
  68. package/types/renderer/renderScene.d.ts +18 -2
  69. package/types/types.d.ts +0 -1
  70. package/dist/excalidraw-assets/locales/bn-BD-json-aa99c5a33f005fb00c6b.js +0 -1
  71. package/dist/excalidraw-assets/locales/ca-ES-json-32cf66a0dfdbbafb6903.js +0 -1
  72. package/dist/excalidraw-assets/locales/el-GR-json-74f57c0f8b11ac1b6dde.js +0 -1
  73. package/dist/excalidraw-assets/locales/es-ES-json-ffb4e65453db2f3058d4.js +0 -1
  74. package/dist/excalidraw-assets/locales/ko-KR-json-f27d159b2556809076aa.js +0 -1
  75. package/dist/excalidraw-assets/locales/lt-LT-json-7277ad8dae6d3e6607b3.js +0 -1
  76. package/dist/excalidraw-assets/locales/pt-BR-json-686219f43cd76123b7fa.js +0 -1
  77. package/dist/excalidraw-assets/locales/pt-PT-json-be4502ca3a1250845c39.js +0 -1
  78. package/dist/excalidraw-assets/locales/vi-VN-json-5c276b534d762658589c.js +0 -1
  79. package/dist/excalidraw-assets/vendor-52b1f3361986b6c6a4fe.js +0 -2
  80. package/dist/excalidraw-assets-dev/locales/ca-ES-json-7aabb5b31e7a995a90e3.js +0 -22
  81. package/dist/excalidraw-assets-dev/locales/el-GR-json-2bc44d5450554154e110.js +0 -22
  82. package/dist/excalidraw-assets-dev/locales/es-ES-json-9e5e962b234d2fa5aac2.js +0 -22
  83. package/dist/excalidraw-assets-dev/locales/ko-KR-json-09de6762eea271167b56.js +0 -22
  84. package/dist/excalidraw-assets-dev/locales/lt-LT-json-a17971ff33b8929e96d3.js +0 -22
  85. package/dist/excalidraw-assets-dev/locales/pt-BR-json-5e4c8cd83b785ed859c2.js +0 -22
  86. package/dist/excalidraw-assets-dev/locales/pt-PT-json-a7f89a1c6f1c380141e5.js +0 -22
  87. package/dist/excalidraw-assets-dev/locales/vi-VN-json-670ecb0ad40c0453bdfd.js +0 -22
@@ -1,12 +1,3 @@
1
- /**
2
- * @license
3
- * Lodash <https://lodash.com/>
4
- * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
5
- * Released under MIT license <https://lodash.com/license>
6
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
7
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
8
- */
9
-
10
1
  /**
11
2
  * @license React
12
3
  * react-jsx-runtime.production.min.js
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@excalidraw/excalidraw",
3
- "version": "0.12.0-0a5da02",
3
+ "version": "0.12.0-0d1058a",
4
4
  "main": "main.js",
5
5
  "types": "types/packages/excalidraw/index.d.ts",
6
6
  "files": [
@@ -140,6 +140,7 @@ export declare const actionCut: {
140
140
  y: number;
141
141
  }>;
142
142
  hoverPointIndex: number;
143
+ segmentMidPointHoveredCoords: readonly [number, number] | null;
143
144
  };
144
145
  isLoading: boolean;
145
146
  errorMessage: string | null;
@@ -131,6 +131,7 @@ export declare const actionDeleteSelected: {
131
131
  y: number;
132
132
  }>;
133
133
  hoverPointIndex: number;
134
+ segmentMidPointHoveredCoords: readonly [number, number] | null;
134
135
  };
135
136
  isLoading: boolean;
136
137
  errorMessage: string | null;
@@ -882,7 +882,7 @@ export declare const actionLoadScene: {
882
882
  commitToHistory: false;
883
883
  }>;
884
884
  keyTest: (event: KeyboardEvent | import("react").KeyboardEvent<Element>) => boolean;
885
- PanelComponent: ({ updateData, appState }: import("./types").PanelComponentProps) => JSX.Element;
885
+ PanelComponent: ({ updateData }: import("./types").PanelComponentProps) => JSX.Element;
886
886
  } & {
887
887
  keyTest?: ((event: KeyboardEvent | import("react").KeyboardEvent<Element>) => boolean) | undefined;
888
888
  };
@@ -2,11 +2,10 @@ import React from "react";
2
2
  import { ActionManager } from "../actions/manager";
3
3
  import { ExcalidrawElement, PointerType } from "../element/types";
4
4
  import { AppState, Zoom } from "../types";
5
- export declare const SelectedShapeActions: ({ appState, elements, renderAction, activeTool, }: {
5
+ export declare const SelectedShapeActions: ({ appState, elements, renderAction, }: {
6
6
  appState: AppState;
7
7
  elements: readonly ExcalidrawElement[];
8
8
  renderAction: ActionManager["renderAction"];
9
- activeTool: AppState["activeTool"]["type"];
10
9
  }) => JSX.Element;
11
10
  export declare const ShapesSwitcher: ({ canvas, activeTool, setAppState, onImageAction, appState, }: {
12
11
  canvas: HTMLCanvasElement | null;
@@ -21,3 +20,15 @@ export declare const ZoomActions: ({ renderAction, zoom, }: {
21
20
  renderAction: ActionManager["renderAction"];
22
21
  zoom: Zoom;
23
22
  }) => JSX.Element;
23
+ export declare const UndoRedoActions: ({ renderAction, className, }: {
24
+ renderAction: ActionManager["renderAction"];
25
+ className?: string | undefined;
26
+ }) => JSX.Element;
27
+ export declare const ExitZenModeAction: ({ actionManager, showExitZenModeBtn, }: {
28
+ actionManager: ActionManager;
29
+ showExitZenModeBtn: boolean;
30
+ }) => JSX.Element;
31
+ export declare const FinalizeAction: ({ renderAction, className, }: {
32
+ renderAction: ActionManager["renderAction"];
33
+ className?: string | undefined;
34
+ }) => JSX.Element;
@@ -17,6 +17,8 @@ export declare const useExcalidrawContainer: () => {
17
17
  container: HTMLDivElement | null;
18
18
  id: string | null;
19
19
  };
20
+ export declare const useExcalidrawElements: () => readonly NonDeletedExcalidrawElement[];
21
+ export declare const useExcalidrawAppState: () => AppState;
20
22
  declare class App extends React.Component<AppProps, AppState> {
21
23
  canvas: AppClassProperties["canvas"];
22
24
  rc: RoughCanvas | null;
@@ -69,6 +71,7 @@ declare class App extends React.Component<AppProps, AppState> {
69
71
  private removeEventListeners;
70
72
  private addEventListeners;
71
73
  componentDidUpdate(prevProps: AppProps, prevState: AppState): void;
74
+ private renderScene;
72
75
  private onScroll;
73
76
  private onCut;
74
77
  private onCopy;
@@ -0,0 +1,9 @@
1
+ import { ActionManager } from "../actions/manager";
2
+ import { AppState, ExcalidrawProps } from "../types";
3
+ declare const Footer: ({ appState, actionManager, renderCustomFooter, showExitZenModeBtn, }: {
4
+ appState: AppState;
5
+ actionManager: ActionManager;
6
+ renderCustomFooter?: ExcalidrawProps["renderFooter"];
7
+ showExitZenModeBtn: boolean;
8
+ }) => JSX.Element;
9
+ export default Footer;
@@ -33,5 +33,5 @@ interface LayerUIProps {
33
33
  insertOnCanvasDirectly: boolean;
34
34
  }) => void;
35
35
  }
36
- declare const _default: React.MemoExoticComponent<({ actionManager, appState, files, setAppState, canvas, elements, onCollabButtonClick, onLockToggle, onPenModeToggle, onInsertElements, showExitZenModeBtn, showThemeBtn, isCollaborating, renderTopRightUI, renderCustomFooter, renderCustomStats, libraryReturnUrl, UIOptions, focusContainer, library, id, onImageAction, }: LayerUIProps) => JSX.Element>;
36
+ declare const _default: React.MemoExoticComponent<({ actionManager, appState, files, setAppState, elements, canvas, onCollabButtonClick, onLockToggle, onPenModeToggle, onInsertElements, showExitZenModeBtn, showThemeBtn, isCollaborating, renderTopRightUI, renderCustomFooter, renderCustomStats, libraryReturnUrl, UIOptions, focusContainer, library, id, onImageAction, }: LayerUIProps) => JSX.Element>;
37
37
  export default _default;
@@ -1,12 +1,11 @@
1
1
  import Library from "../data/library";
2
2
  import { LibraryItems, LibraryItem, AppState, BinaryFiles, ExcalidrawProps } from "../types";
3
3
  import "./LibraryMenu.scss";
4
- export declare const LibraryMenu: ({ onClose, onInsertLibraryItems, pendingElements, onAddToLibrary, theme, setAppState, files, libraryReturnUrl, focusContainer, library, id, appState, }: {
4
+ export declare const LibraryMenu: ({ onClose, onInsertLibraryItems, pendingElements, onAddToLibrary, setAppState, files, libraryReturnUrl, focusContainer, library, id, appState, }: {
5
5
  pendingElements: LibraryItem["elements"];
6
6
  onClose: () => void;
7
7
  onInsertLibraryItems: (libraryItems: LibraryItems) => void;
8
8
  onAddToLibrary: () => void;
9
- theme: AppState["theme"];
10
9
  files: BinaryFiles;
11
10
  setAppState: React.Component<any, AppState>["setState"];
12
11
  libraryReturnUrl: ExcalidrawProps["libraryReturnUrl"];
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { AppState } from "../types";
2
+ import { AppState, ExcalidrawProps } from "../types";
3
3
  import { ActionManager } from "../actions/manager";
4
4
  import { NonDeletedExcalidrawElement } from "../element/types";
5
5
  declare type MobileMenuProps = {
@@ -21,7 +21,7 @@ declare type MobileMenuProps = {
21
21
  insertOnCanvasDirectly: boolean;
22
22
  }) => void;
23
23
  renderTopRightUI?: (isMobile: boolean, appState: AppState) => JSX.Element | null;
24
- renderStats: () => JSX.Element | null;
24
+ renderCustomStats?: ExcalidrawProps["renderCustomStats"];
25
25
  };
26
- export declare const MobileMenu: ({ appState, elements, libraryMenu, actionManager, renderJSONExportDialog, renderImageExportDialog, setAppState, onCollabButtonClick, onLockToggle, onPenModeToggle, canvas, isCollaborating, renderCustomFooter, showThemeBtn, onImageAction, renderTopRightUI, renderStats, }: MobileMenuProps) => JSX.Element;
26
+ export declare const MobileMenu: ({ appState, elements, libraryMenu, actionManager, renderJSONExportDialog, renderImageExportDialog, setAppState, onCollabButtonClick, onLockToggle, onPenModeToggle, canvas, isCollaborating, renderCustomFooter, showThemeBtn, onImageAction, renderTopRightUI, renderCustomStats, }: MobileMenuProps) => JSX.Element;
27
27
  export {};
@@ -8,4 +8,4 @@ export declare const Stats: (props: {
8
8
  elements: readonly NonDeletedExcalidrawElement[];
9
9
  onClose: () => void;
10
10
  renderCustomStats: ExcalidrawProps["renderCustomStats"];
11
- }) => JSX.Element | null;
11
+ }) => JSX.Element;
@@ -40,7 +40,7 @@ export declare const getFileFromEvent: (event: React.DragEvent<HTMLDivElement>)
40
40
  }>;
41
41
  export declare const getFileHandle: (event: React.DragEvent<HTMLDivElement>) => Promise<FileSystemHandle | null>;
42
42
  export declare const createFile: (blob: File | Blob | ArrayBuffer, mimeType: ValueOf<typeof MIME_TYPES>, name: string | undefined) => File;
43
- /** attemps to detect correct mimeType if none is set, or if an image
43
+ /** attempts to detect correct mimeType if none is set, or if an image
44
44
  * has an incorrect extension.
45
45
  * Note: doesn't handle missing .excalidraw/.excalidrawlib extension */
46
46
  export declare const normalizeFile: (file: File) => Promise<File>;
@@ -4,9 +4,8 @@ import { NonDeletedExcalidrawElement } from "./types";
4
4
  import { Bounds } from "./bounds";
5
5
  import "./Hyperlink.scss";
6
6
  export declare const EXTERNAL_LINK_IMG: HTMLImageElement;
7
- export declare const Hyperlink: ({ element, appState, setAppState, onLinkOpen, }: {
7
+ export declare const Hyperlink: ({ element, setAppState, onLinkOpen, }: {
8
8
  element: NonDeletedExcalidrawElement;
9
- appState: AppState;
10
9
  setAppState: React.Component<any, AppState>["setState"];
11
10
  onLinkOpen: ExcalidrawProps["onLinkOpen"];
12
11
  }) => JSX.Element | null;
@@ -8,7 +8,7 @@ export declare const getCurvePathOps: (shape: Drawable) => Op[];
8
8
  export declare const getArrowheadPoints: (element: ExcalidrawLinearElement, shape: Drawable[], position: "start" | "end", arrowhead: Arrowhead) => number[] | null;
9
9
  export declare const getElementBounds: (element: ExcalidrawElement) => [number, number, number, number];
10
10
  export declare const getCommonBounds: (elements: readonly ExcalidrawElement[]) => [number, number, number, number];
11
- export declare const getResizedElementAbsoluteCoords: (element: ExcalidrawElement, nextWidth: number, nextHeight: number) => [number, number, number, number];
11
+ export declare const getResizedElementAbsoluteCoords: (element: ExcalidrawElement, nextWidth: number, nextHeight: number, normalizePoints: boolean) => [number, number, number, number];
12
12
  export declare const getElementPointsCoords: (element: ExcalidrawLinearElement, points: readonly (readonly [number, number])[], sharpness: ExcalidrawElement["strokeSharpness"]) => [number, number, number, number];
13
13
  export declare const getClosestElementBounds: (elements: readonly ExcalidrawElement[], from: {
14
14
  x: number;
@@ -3,27 +3,33 @@ import { NonDeleted, ExcalidrawLinearElement, ExcalidrawElement, PointBinding, E
3
3
  import { Point, AppState } from "../types";
4
4
  import History from "../history";
5
5
  import Scene from "../scene/Scene";
6
+ declare const editorMidPointsCache: {
7
+ version: number | null;
8
+ points: (Point | null)[];
9
+ zoom: number | null;
10
+ };
6
11
  export declare class LinearElementEditor {
7
- elementId: ExcalidrawElement["id"] & {
12
+ readonly elementId: ExcalidrawElement["id"] & {
8
13
  _brand: "excalidrawLinearElementId";
9
14
  };
10
15
  /** indices */
11
- selectedPointsIndices: readonly number[] | null;
12
- pointerDownState: Readonly<{
16
+ readonly selectedPointsIndices: readonly number[] | null;
17
+ readonly pointerDownState: Readonly<{
13
18
  prevSelectedPointsIndices: readonly number[] | null;
14
19
  /** index */
15
20
  lastClickedPoint: number;
16
21
  }>;
17
22
  /** whether you're dragging a point */
18
- isDragging: boolean;
19
- lastUncommittedPoint: Point | null;
20
- pointerOffset: Readonly<{
23
+ readonly isDragging: boolean;
24
+ readonly lastUncommittedPoint: Point | null;
25
+ readonly pointerOffset: Readonly<{
21
26
  x: number;
22
27
  y: number;
23
28
  }>;
24
- startBindingElement: ExcalidrawBindableElement | null | "keep";
25
- endBindingElement: ExcalidrawBindableElement | null | "keep";
26
- hoverPointIndex: number;
29
+ readonly startBindingElement: ExcalidrawBindableElement | null | "keep";
30
+ readonly endBindingElement: ExcalidrawBindableElement | null | "keep";
31
+ readonly hoverPointIndex: number;
32
+ readonly segmentMidPointHoveredCoords: Point | null;
27
33
  constructor(element: NonDeleted<ExcalidrawLinearElement>, scene: Scene);
28
34
  static POINT_HANDLE_SIZE: number;
29
35
  /**
@@ -33,11 +39,20 @@ export declare class LinearElementEditor {
33
39
  static getElement(id: InstanceType<typeof LinearElementEditor>["elementId"]): NonDeleted<ExcalidrawLinearElement> | null;
34
40
  static handleBoxSelection(event: PointerEvent, appState: AppState, setState: React.Component<any, AppState>["setState"]): false | undefined;
35
41
  /** @returns whether point was dragged */
36
- static handlePointDragging(appState: AppState, scenePointerX: number, scenePointerY: number, maybeSuggestBinding: (element: NonDeleted<ExcalidrawLinearElement>, pointSceneCoords: {
42
+ static handlePointDragging(event: PointerEvent, appState: AppState, scenePointerX: number, scenePointerY: number, maybeSuggestBinding: (element: NonDeleted<ExcalidrawLinearElement>, pointSceneCoords: {
37
43
  x: number;
38
44
  y: number;
39
45
  }[]) => void, linearElementEditor: LinearElementEditor): boolean;
40
46
  static handlePointerUp(event: PointerEvent, editingLinearElement: LinearElementEditor, appState: AppState): LinearElementEditor;
47
+ static getEditorMidPoints: (element: NonDeleted<ExcalidrawLinearElement>, appState: AppState) => (typeof editorMidPointsCache)["points"];
48
+ static updateEditorMidPointsCache: (element: NonDeleted<ExcalidrawLinearElement>, appState: AppState) => void;
49
+ static getSegmentMidpointHitCoords: (linearElementEditor: LinearElementEditor, scenePointer: {
50
+ x: number;
51
+ y: number;
52
+ }, appState: AppState) => readonly [number, number] | null;
53
+ static isSegmentTooShort(element: NonDeleted<ExcalidrawLinearElement>, startPoint: Point, endPoint: Point, zoom: AppState["zoom"]): boolean;
54
+ static getSegmentMidPoint(element: NonDeleted<ExcalidrawLinearElement>, startPoint: Point, endPoint: Point, endPointIndex: number): readonly [number, number];
55
+ static getSegmentMidPointIndex(linearElementEditor: LinearElementEditor, appState: AppState, midPoint: Point): number;
41
56
  static handlePointerDown(event: React.PointerEvent<HTMLCanvasElement>, appState: AppState, history: History, scenePointer: {
42
57
  x: number;
43
58
  y: number;
@@ -45,12 +60,14 @@ export declare class LinearElementEditor {
45
60
  didAddPoint: boolean;
46
61
  hitElement: NonDeleted<ExcalidrawElement> | null;
47
62
  linearElementEditor: LinearElementEditor | null;
63
+ isMidPoint: boolean;
48
64
  };
49
- static handlePointerMove(event: React.PointerEvent<HTMLCanvasElement>, scenePointerX: number, scenePointerY: number, linearElementEditor: LinearElementEditor, gridSize: number | null): LinearElementEditor;
65
+ static arePointsEqual(point1: Point | null, point2: Point | null): boolean;
66
+ static handlePointerMove(event: React.PointerEvent<HTMLCanvasElement>, scenePointerX: number, scenePointerY: number, appState: AppState): LinearElementEditor | null;
50
67
  /** scene coords */
51
68
  static getPointGlobalCoordinates(element: NonDeleted<ExcalidrawLinearElement>, point: Point): readonly [number, number];
52
69
  /** scene coords */
53
- static getPointsGlobalCoordinates(element: NonDeleted<ExcalidrawLinearElement>): number[][];
70
+ static getPointsGlobalCoordinates(element: NonDeleted<ExcalidrawLinearElement>): Point[];
54
71
  static getPointAtIndexGlobalCoordinates(element: NonDeleted<ExcalidrawLinearElement>, indexMaybeFromEnd: number): Point;
55
72
  static pointFromAbsoluteCoords(element: NonDeleted<ExcalidrawLinearElement>, absoluteCoords: Point): Point;
56
73
  static getPointIndexUnderCursor(element: NonDeleted<ExcalidrawLinearElement>, zoom: AppState["zoom"], x: number, y: number): number;
@@ -78,7 +95,6 @@ export declare class LinearElementEditor {
78
95
  /** index */
79
96
  lastClickedPoint: number;
80
97
  }>;
81
- /** whether you're dragging a point */
82
98
  isDragging: boolean;
83
99
  lastUncommittedPoint: readonly [number, number] | null;
84
100
  pointerOffset: Readonly<{
@@ -88,6 +104,7 @@ export declare class LinearElementEditor {
88
104
  startBindingElement: ExcalidrawBindableElement | "keep" | null;
89
105
  endBindingElement: ExcalidrawBindableElement | "keep" | null;
90
106
  hoverPointIndex: number;
107
+ segmentMidPointHoveredCoords: readonly [number, number] | null;
91
108
  };
92
109
  isLoading: boolean;
93
110
  errorMessage: string | null;
@@ -153,7 +170,7 @@ export declare class LinearElementEditor {
153
170
  shouldCacheIgnoreZoom: boolean;
154
171
  showHelpDialog: boolean;
155
172
  toast: {
156
- message: string;
173
+ message: string; /** @returns whether point was dragged */
157
174
  closable?: boolean | undefined;
158
175
  duration?: number | undefined;
159
176
  } | null;
@@ -188,7 +205,7 @@ export declare class LinearElementEditor {
188
205
  };
189
206
  };
190
207
  static deletePoints(element: NonDeleted<ExcalidrawLinearElement>, pointIndices: readonly number[]): void;
191
- static addPoints(element: NonDeleted<ExcalidrawLinearElement>, targetPoints: {
208
+ static addPoints(element: NonDeleted<ExcalidrawLinearElement>, appState: AppState, targetPoints: {
192
209
  point: Point;
193
210
  }[]): void;
194
211
  static movePoints(element: NonDeleted<ExcalidrawLinearElement>, targetPoints: {
@@ -200,4 +217,6 @@ export declare class LinearElementEditor {
200
217
  endBinding?: PointBinding;
201
218
  }): void;
202
219
  private static _updatePoints;
220
+ private static _getShiftLockedDelta;
203
221
  }
222
+ export {};
@@ -1,6 +1,6 @@
1
- import { ExcalidrawElement, PointerType } from "./types";
1
+ import { ExcalidrawElement, NonDeletedExcalidrawElement, PointerType } from "./types";
2
2
  import { Bounds } from "./bounds";
3
- import { Zoom } from "../types";
3
+ import { AppState, Zoom } from "../types";
4
4
  export declare type TransformHandleDirection = "n" | "s" | "w" | "e" | "nw" | "ne" | "sw" | "se";
5
5
  export declare type TransformHandleType = TransformHandleDirection | "rotation";
6
6
  export declare type TransformHandle = [number, number, number, number];
@@ -17,12 +17,13 @@ export declare const OMIT_SIDES_FOR_MULTIPLE_ELEMENTS: {
17
17
  export declare const getTransformHandlesFromCoords: ([x1, y1, x2, y2]: Bounds, angle: number, zoom: Zoom, pointerType: PointerType, omitSides?: {
18
18
  e?: boolean | undefined;
19
19
  s?: boolean | undefined;
20
- n?: boolean | undefined;
21
20
  w?: boolean | undefined;
21
+ n?: boolean | undefined;
22
22
  nw?: boolean | undefined;
23
23
  ne?: boolean | undefined;
24
24
  sw?: boolean | undefined;
25
25
  se?: boolean | undefined;
26
26
  rotation?: boolean | undefined;
27
- }) => TransformHandles;
27
+ }, margin?: number) => TransformHandles;
28
28
  export declare const getTransformHandles: (element: ExcalidrawElement, zoom: Zoom, pointerType?: PointerType) => TransformHandles;
29
+ export declare const shouldShowBoundingBox: (elements: NonDeletedExcalidrawElement[], appState: AppState) => boolean;
@@ -53,6 +53,7 @@ declare type _ExcalidrawElementBase = Readonly<{
53
53
  updated: number;
54
54
  link: string | null;
55
55
  locked: boolean;
56
+ customData?: Record<string, any>;
56
57
  }>;
57
58
  export declare type ExcalidrawSelectionElement = _ExcalidrawElementBase & {
58
59
  type: "selection";
package/types/math.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Point, Zoom } from "./types";
2
- import { ExcalidrawLinearElement } from "./element/types";
2
+ import { ExcalidrawLinearElement, NonDeleted } from "./element/types";
3
3
  export declare const rotate: (x1: number, y1: number, x2: number, y2: number, angle: number) => [number, number];
4
4
  export declare const rotatePoint: (point: readonly [number, number], center: readonly [number, number], angle: number) => [number, number];
5
5
  export declare const adjustXYWithRotation: (sides: {
@@ -18,3 +18,10 @@ export declare const centerPoint: (a: readonly [number, number], b: readonly [nu
18
18
  export declare const isPathALoop: (points: ExcalidrawLinearElement["points"], zoomValue?: Zoom["value"]) => boolean;
19
19
  export declare const isPointInPolygon: (points: Point[], x: number, y: number) => boolean;
20
20
  export declare const getGridPoint: (x: number, y: number, gridSize: number | null) => [number, number];
21
+ export declare const getControlPointsForBezierCurve: (element: NonDeleted<ExcalidrawLinearElement>, endPoint: readonly [number, number]) => [number, number][] | null;
22
+ export declare const getBezierXY: (p0: readonly [number, number], p1: readonly [number, number], p2: readonly [number, number], p3: readonly [number, number], t: number) => number[];
23
+ export declare const getPointsInBezierCurve: (element: NonDeleted<ExcalidrawLinearElement>, endPoint: readonly [number, number]) => [number, number][];
24
+ export declare const getBezierCurveArcLengths: (element: NonDeleted<ExcalidrawLinearElement>, endPoint: readonly [number, number]) => number[];
25
+ export declare const getBezierCurveLength: (element: NonDeleted<ExcalidrawLinearElement>, endPoint: readonly [number, number]) => number;
26
+ export declare const mapIntervalToBezierT: (element: NonDeleted<ExcalidrawLinearElement>, endPoint: readonly [number, number], interval: number) => number;
27
+ export declare const arePointsEqual: (p1: readonly [number, number], p2: readonly [number, number]) => boolean;
@@ -13,10 +13,13 @@ declare type ExportOpts = {
13
13
  scale?: number;
14
14
  };
15
15
  };
16
- export declare const exportToCanvas: ({ elements, appState, files, maxWidthOrHeight, getDimensions, }: ExportOpts) => Promise<HTMLCanvasElement>;
16
+ export declare const exportToCanvas: ({ elements, appState, files, maxWidthOrHeight, getDimensions, exportPadding, }: ExportOpts & {
17
+ exportPadding?: number | undefined;
18
+ }) => Promise<HTMLCanvasElement>;
17
19
  export declare const exportToBlob: (opts: ExportOpts & {
18
20
  mimeType?: string;
19
21
  quality?: number;
22
+ exportPadding?: number;
20
23
  }) => Promise<Blob>;
21
24
  export declare const exportToSvg: ({ elements, appState, files, exportPadding, }: Omit<ExportOpts, "getDimensions"> & {
22
25
  exportPadding?: number | undefined;
package/types/points.d.ts CHANGED
@@ -3,4 +3,5 @@ export declare const getSizeFromPoints: (points: readonly Point[]) => {
3
3
  width: number;
4
4
  height: number;
5
5
  };
6
- export declare const rescalePoints: (dimension: 0 | 1, nextDimensionSize: number, prevPoints: readonly Point[]) => Point[];
6
+ /** @arg dimension, 0 for rescaling only x, 1 for y */
7
+ export declare const rescalePoints: (dimension: 0 | 1, newSize: number, points: readonly Point[], normalize: boolean) => Point[];
@@ -0,0 +1,2 @@
1
+ declare const polyfill: () => void;
2
+ export default polyfill;
@@ -3,7 +3,15 @@ import { RoughSVG } from "roughjs/bin/svg";
3
3
  import { AppState, BinaryFiles } from "../types";
4
4
  import { NonDeletedExcalidrawElement } from "../element/types";
5
5
  import { RenderConfig } from "../scene/types";
6
- export declare const _renderScene: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, selectionElement: NonDeletedExcalidrawElement | null, scale: number, rc: RoughCanvas, canvas: HTMLCanvasElement, renderConfig: RenderConfig) => {
6
+ export declare const DEFAULT_SPACING = 4;
7
+ export declare const _renderScene: ({ elements, appState, scale, rc, canvas, renderConfig, }: {
8
+ elements: readonly NonDeletedExcalidrawElement[];
9
+ appState: AppState;
10
+ scale: number;
11
+ rc: RoughCanvas;
12
+ canvas: HTMLCanvasElement;
13
+ renderConfig: RenderConfig;
14
+ }) => {
7
15
  atLeastOneVisibleElement: boolean;
8
16
  scrollBars?: undefined;
9
17
  } | {
@@ -11,7 +19,15 @@ export declare const _renderScene: (elements: readonly NonDeletedExcalidrawEleme
11
19
  scrollBars: import("../scene/types").ScrollBars | undefined;
12
20
  };
13
21
  /** renderScene throttled to animation framerate */
14
- export declare const renderScene: <T extends boolean = false>(elements: readonly NonDeletedExcalidrawElement[], appState: AppState, selectionElement: NonDeletedExcalidrawElement | null, scale: number, rc: RoughCanvas, canvas: HTMLCanvasElement, renderConfig: RenderConfig, callback?: ((data: ReturnType<typeof _renderScene>) => void) | undefined, throttle?: T | undefined) => T extends true ? void : {
22
+ export declare const renderScene: <T extends boolean = false>(config: {
23
+ elements: readonly NonDeletedExcalidrawElement[];
24
+ appState: AppState;
25
+ scale: number;
26
+ rc: RoughCanvas;
27
+ canvas: HTMLCanvasElement;
28
+ renderConfig: RenderConfig;
29
+ callback?: ((data: ReturnType<typeof _renderScene>) => void) | undefined;
30
+ }, throttle?: T | undefined) => T extends true ? void : {
15
31
  atLeastOneVisibleElement: boolean;
16
32
  scrollBars?: undefined;
17
33
  } | {
package/types/types.d.ts CHANGED
@@ -323,7 +323,6 @@ export declare type PointerDownState = Readonly<{
323
323
  wasAddedToSelection: boolean;
324
324
  hasBeenDuplicated: boolean;
325
325
  hasHitCommonBoundingBoxOfSelectedElements: boolean;
326
- hasHitElementInside: boolean;
327
326
  };
328
327
  withCmdOrCtrl: boolean;
329
328
  drag: {
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkExcalidrawLib=self.webpackChunkExcalidrawLib||[]).push([[429],{8525:function(e){e.exports=JSON.parse('{"labels":{"paste":"","pasteCharts":"","selectAll":"","multiSelect":"","moveCanvas":"","cut":"","copy":"","copyAsPng":"","copyAsSvg":"","copyText":"","bringForward":"","sendToBack":"","bringToFront":"","sendBackward":"","delete":"","copyStyles":"","pasteStyles":"","stroke":"","background":"","fill":"","strokeWidth":"","strokeStyle":"","strokeStyle_solid":"","strokeStyle_dashed":"","strokeStyle_dotted":"","sloppiness":"","opacity":"","textAlign":"","edges":"","sharp":"","round":"","arrowheads":"","arrowhead_none":"","arrowhead_arrow":"","arrowhead_bar":"","arrowhead_dot":"","arrowhead_triangle":"","fontSize":"","fontFamily":"","onlySelected":"","withBackground":"","exportEmbedScene":"","exportEmbedScene_details":"","addWatermark":"","handDrawn":"","normal":"","code":"","small":"","medium":"","large":"","veryLarge":"","solid":"","hachure":"","crossHatch":"","thin":"","bold":"","left":"","center":"","right":"","extraBold":"","architect":"","artist":"","cartoonist":"","fileTitle":"","colorPicker":"","canvasColors":"","canvasBackground":"","drawingCanvas":"","layers":"","actions":"","language":"","liveCollaboration":"","duplicateSelection":"","untitled":"","name":"","yourName":"","madeWithExcalidraw":"","group":"","ungroup":"","collaborators":"","showGrid":"","addToLibrary":"","removeFromLibrary":"","libraryLoadingMessage":"","libraries":"","loadingScene":"","align":"","alignTop":"","alignBottom":"","alignLeft":"","alignRight":"","centerVertically":"","centerHorizontally":"","distributeHorizontally":"","distributeVertically":"","flipHorizontal":"","flipVertical":"","viewMode":"","toggleExportColorScheme":"","share":"","showStroke":"","showBackground":"","toggleTheme":"","personalLib":"","excalidrawLib":"","decreaseFontSize":"","increaseFontSize":"","unbindText":"","bindText":"","link":{"edit":"","create":"","label":""},"elementLock":{"lock":"","unlock":"","lockAll":"","unlockAll":""},"statusPublished":"","sidebarLock":""},"library":{"noItems":"","hint_emptyLibrary":"","hint_emptyPrivateLibrary":""},"buttons":{"clearReset":"","exportJSON":"","exportImage":"","export":"","exportToPng":"","exportToSvg":"","copyToClipboard":"","copyPngToClipboard":"","scale":"","save":"","saveAs":"","load":"","getShareableLink":"","close":"","selectLanguage":"","scrollBackToContent":"","zoomIn":"","zoomOut":"","resetZoom":"","menu":"","done":"","edit":"","undo":"","redo":"","resetLibrary":"","createNewRoom":"","fullScreen":"","darkMode":"","lightMode":"","zenMode":"","exitZenMode":"","cancel":"","clear":"","remove":"","publishLibrary":"","submit":"","confirm":""},"alerts":{"clearReset":"","couldNotCreateShareableLink":"","couldNotCreateShareableLinkTooBig":"","couldNotLoadInvalidFile":"","importBackendFailed":"","cannotExportEmptyCanvas":"","couldNotCopyToClipboard":"","decryptFailed":"","uploadedSecurly":"","loadSceneOverridePrompt":"","collabStopOverridePrompt":"","errorAddingToLibrary":"","errorRemovingFromLibrary":"","confirmAddLibrary":"","imageDoesNotContainScene":"","cannotRestoreFromImage":"","invalidSceneUrl":"","resetLibrary":"","removeItemsFromsLibrary":"","invalidEncryptionKey":""},"errors":{"unsupportedFileType":"","imageInsertError":"","fileTooBig":"","svgImageInsertError":"","invalidSVGString":"","cannotResolveCollabServer":"","importLibraryError":""},"toolBar":{"selection":"","image":"","rectangle":"","diamond":"","ellipse":"","arrow":"","line":"","freedraw":"","text":"","library":"","lock":"","penMode":"","link":"","eraser":""},"headings":{"canvasActions":"","selectedShapeActions":"","shapes":""},"hints":{"canvasPanning":"","linearElement":"","freeDraw":"","text":"","text_selected":"","text_editing":"","linearElementMulti":"","lockAngle":"","resize":"","resizeImage":"","rotate":"","lineEditor_info":"","lineEditor_pointSelected":"","lineEditor_nothingSelected":"","placeImage":"","publishLibrary":"","bindTextToElement":"","deepBoxSelect":"","eraserRevert":""},"canvasError":{"cannotShowPreview":"","canvasTooBig":"","canvasTooBigTip":""},"errorSplash":{"headingMain_pre":"","headingMain_button":"","clearCanvasMessage":"","clearCanvasMessage_button":"","clearCanvasCaveat":"","trackedToSentry_pre":"","trackedToSentry_post":"","openIssueMessage_pre":"","openIssueMessage_button":"","openIssueMessage_post":"","sceneContent":""},"roomDialog":{"desc_intro":"","desc_privacy":"","button_startSession":"","button_stopSession":"","desc_inProgressIntro":"","desc_shareLink":"","desc_exitSession":"","shareTitle":""},"errorDialog":{"title":""},"exportDialog":{"disk_title":"","disk_details":"","disk_button":"","link_title":"","link_details":"","link_button":"","excalidrawplus_description":"","excalidrawplus_button":"","excalidrawplus_exportError":""},"helpDialog":{"blog":"","click":"","deepSelect":"","deepBoxSelect":"","curvedArrow":"","curvedLine":"","documentation":"","doubleClick":"","drag":"","editor":"","editSelectedShape":"","github":"","howto":"","or":"","preventBinding":"","tools":"","shortcuts":"","textFinish":"","textNewLine":"","title":"","view":"","zoomToFit":"","zoomToSelection":"","toggleElementLock":""},"clearCanvasDialog":{"title":""},"publishDialog":{"title":"","itemName":"","authorName":"","githubUsername":"","twitterUsername":"","libraryName":"","libraryDesc":"","website":"","placeholder":{"authorName":"","libraryName":"","libraryDesc":"","githubHandle":"","twitterHandle":"","website":""},"errors":{"required":"","website":""},"noteDescription":{"pre":"","link":"","post":""},"noteGuidelines":{"pre":"","link":"","post":""},"noteLicense":{"pre":"","link":"","post":""},"noteItems":"","atleastOneLibItem":"","republishWarning":""},"publishSuccessDialog":{"title":"","content":"","link":""},"confirmDialog":{"resetLibrary":"","removeItemsFromLib":""},"encrypted":{"tooltip":"","link":""},"stats":{"angle":"","element":"","elements":"","height":"","scene":"","selected":"","storage":"","title":"","total":"","version":"","versionCopy":"","versionNotAvailable":"","width":""},"toast":{"addedToLibrary":"","copyStyles":"","copyToClipboard":"","copyToClipboardAsPng":"","fileSaved":"","fileSavedToFilename":"","canvas":"","selection":""},"colors":{"495057":"","ffffff":"","f8f9fa":"","f1f3f5":"","fff5f5":"","fff0f6":"","f8f0fc":"","f3f0ff":"","edf2ff":"","e7f5ff":"","e3fafc":"","e6fcf5":"","ebfbee":"","f4fce3":"","fff9db":"","fff4e6":"","transparent":"","ced4da":"","868e96":"","fa5252":"","e64980":"","be4bdb":"","7950f2":"","4c6ef5":"","228be6":"","15aabf":"","12b886":"","40c057":"","82c91e":"","fab005":"","fd7e14":"","000000":"","343a40":"","c92a2a":"","a61e4d":"","862e9c":"","5f3dc4":"","364fc7":"","1864ab":"","0b7285":"","087f5b":"","2b8a3e":"","5c940d":"","e67700":"","d9480f":""}}')}}]);
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunkExcalidrawLib=self.webpackChunkExcalidrawLib||[]).push([[130],{510:function(e){e.exports=JSON.parse('{"labels":{"paste":"Enganxa","pasteCharts":"Enganxa els diagrames","selectAll":"Selecciona-ho tot","multiSelect":"Afegeix un element a la selecció","moveCanvas":"Mou el llenç","cut":"Retalla","copy":"Copia","copyAsPng":"Copia al porta-retalls com a PNG","copyAsSvg":"Copia al porta-retalls com a SVG","copyText":"Copia al porta-retalls com a text","bringForward":"Porta endavant","sendToBack":"Envia enrere","bringToFront":"Porta al davant","sendBackward":"Envia al fons","delete":"Elimina","copyStyles":"Copia els estils","pasteStyles":"Enganxa els estils","stroke":"Color del traç","background":"Color del fons","fill":"Estil del fons","strokeWidth":"Amplada del traç","strokeStyle":"Estil del traç","strokeStyle_solid":"Sòlid","strokeStyle_dashed":"Guions","strokeStyle_dotted":"Punts","sloppiness":"Estil del traç","opacity":"Opacitat","textAlign":"Alineació del text","edges":"Vores","sharp":"Agut","round":"Arrodonit","arrowheads":"Puntes de fletxa","arrowhead_none":"Cap","arrowhead_arrow":"Fletxa","arrowhead_bar":"Barra","arrowhead_dot":"Punt","arrowhead_triangle":"Triangle","fontSize":"Mida de lletra","fontFamily":"Tipus de lletra","onlySelected":"Només seleccionats","withBackground":"Fons","exportEmbedScene":"Insereix l\'escena","exportEmbedScene_details":"Les dades de l’escena es desaran al fitxer PNG/SVG de manera que es pugui restaurar l’escena.\\nAugmentarà la mida del fitxer exportat.","addWatermark":"Afegeix-hi «Fet amb Excalidraw»","handDrawn":"Dibuixat a mà","normal":"Normal","code":"Codi","small":"Petit","medium":"Mitjà","large":"Gran","veryLarge":"Molt gran","solid":"Sòlid","hachure":"Ratlletes","crossHatch":"Ratlletes creuades","thin":"Fi","bold":"Negreta","left":"Esquerra","center":"Centre","right":"Dreta","extraBold":"Extra negreta","architect":"Arquitecte","artist":"Artista","cartoonist":"Dibuixant","fileTitle":"Nom del fitxer","colorPicker":"Selector de colors","canvasColors":"Usat al llenç","canvasBackground":"Fons del llenç","drawingCanvas":"Llenç de dibuix","layers":"Capes","actions":"Accions","language":"Llengua","liveCollaboration":"Col·laboració en directe","duplicateSelection":"Duplica","untitled":"Sense títol","name":"Nom","yourName":"El vostre nom","madeWithExcalidraw":"Fet amb Excalidraw","group":"Agrupa la selecció","ungroup":"Desagrupa la selecció","collaborators":"Col·laboradors","showGrid":"Mostra la graella","addToLibrary":"Afegir a la biblioteca","removeFromLibrary":"Eliminar de la biblioteca","libraryLoadingMessage":"S\'està carregant la biblioteca…","libraries":"Explora les biblioteques","loadingScene":"S\'està carregant l\'escena…","align":"Alinea","alignTop":"Alinea a la part superior","alignBottom":"Alinea a la part inferior","alignLeft":"Alinea a l’esquerra","alignRight":"Alinea a la dreta","centerVertically":"Centra verticalment","centerHorizontally":"Centra horitzontalment","distributeHorizontally":"Distribueix horitzontalment","distributeVertically":"Distribueix verticalment","flipHorizontal":"Capgira horitzontalment","flipVertical":"Capgira verticalment","viewMode":"Mode de visualització","toggleExportColorScheme":"Canvia l\'esquema de colors de l\'exportació","share":"Comparteix","showStroke":"Mostra el selector de color del traç","showBackground":"Mostra el selector de color de fons","toggleTheme":"Activa o desactiva el tema","personalLib":"Biblioteca personal","excalidrawLib":"Biblioteca d\'Excalidraw","decreaseFontSize":"Redueix la mida de la lletra","increaseFontSize":"Augmenta la mida de la lletra","unbindText":"Desvincular el text","bindText":"","link":{"edit":"Edita l\'enllaç","create":"Crea un enllaç","label":"Enllaç"},"elementLock":{"lock":"Bloca","unlock":"Desbloca","lockAll":"Bloca-ho tot","unlockAll":"Desbloca-ho tot"},"statusPublished":"Publicat","sidebarLock":""},"library":{"noItems":"","hint_emptyLibrary":"","hint_emptyPrivateLibrary":""},"buttons":{"clearReset":"Neteja el llenç","exportJSON":"Exporta a un fitxer","exportImage":"Desa com a imatge","export":"Exporta","exportToPng":"Exporta a PNG","exportToSvg":"Exporta a SNG","copyToClipboard":"Copia al porta-retalls","copyPngToClipboard":"Copia el PNG al porta-retalls","scale":"Escala","save":"Desa al fitxer actual","saveAs":"Anomena i desa","load":"Carrega","getShareableLink":"Obté l\'enllaç per a compartir","close":"Tanca","selectLanguage":"Trieu la llengua","scrollBackToContent":"Torna al contingut","zoomIn":"Apropa\'t","zoomOut":"Allunya\'t","resetZoom":"Restableix el zoom","menu":"Menú","done":"Fet","edit":"Edita","undo":"Desfés","redo":"Refés","resetLibrary":"Restableix la biblioteca","createNewRoom":"Crea una sala nova","fullScreen":"Pantalla completa","darkMode":"Mode fosc","lightMode":"Mode clar","zenMode":"Mode zen","exitZenMode":"Surt de mode zen","cancel":"Cancel·la","clear":"Neteja","remove":"Suprimeix","publishLibrary":"Publica","submit":"Envia","confirm":"Confirma"},"alerts":{"clearReset":"S\'esborrarà tot el llenç. N\'esteu segur?","couldNotCreateShareableLink":"No s\'ha pogut crear un enllaç per a compartir.","couldNotCreateShareableLinkTooBig":"No s’ha pogut crear un enllaç per a compartir: l’escena és massa gran","couldNotLoadInvalidFile":"No s\'ha pogut carregar un fitxer no vàlid","importBackendFailed":"Importació fallida.","cannotExportEmptyCanvas":"No es pot exportar un llenç buit.","couldNotCopyToClipboard":"No s\'ha pogut copiar al porta-retalls.","decryptFailed":"No s\'ha pogut desencriptar.","uploadedSecurly":"La càrrega s\'ha assegurat amb xifratge punta a punta, cosa que significa que el servidor Excalidraw i tercers no poden llegir el contingut.","loadSceneOverridePrompt":"Si carregas aquest dibuix extern, substituirá el que tens. Vols continuar?","collabStopOverridePrompt":"Aturar la sessió provocarà la sobreescriptura del dibuix previ, que hi ha desat en l\'emmagatzematge local. N\'esteu segur?\\n\\n(Si voleu conservar el dibuix local, tanqueu la pentanya del navegador en comptes d\'aturar la sessió).","errorAddingToLibrary":"No s\'ha pogut afegir l\'element a la biblioteca","errorRemovingFromLibrary":"No s\'ha pogut eliminar l\'element de la biblioteca","confirmAddLibrary":"Això afegirà {{numShapes}} forma(es) a la vostra biblioteca. Estàs segur?","imageDoesNotContainScene":"Aquesta imatge no sembla contenir cap dada d\'escena. Heu activat l\'incrustació de l\'escena durant l\'exportació?","cannotRestoreFromImage":"L’escena no s’ha pogut restaurar des d’aquest fitxer d’imatge","invalidSceneUrl":"No s\'ha pogut importar l\'escena des de l\'adreça URL proporcionada. Està malformada o no conté dades Excalidraw JSON vàlides.","resetLibrary":"Això buidarà la biblioteca. N\'esteu segur?","removeItemsFromsLibrary":"Suprimir {{count}} element(s) de la biblioteca?","invalidEncryptionKey":"La clau d\'encriptació ha de tenir 22 caràcters. La col·laboració en directe està desactivada."},"errors":{"unsupportedFileType":"Tipus de fitxer no suportat.","imageInsertError":"No s\'ha pogut insertar la imatge, torneu-ho a provar més tard...","fileTooBig":"El fitxer és massa gros. La mida màxima permesa és {{maxSize}}.","svgImageInsertError":"No ha estat possible inserir la imatge SVG. Les marques SVG semblen invàlides.","invalidSVGString":"SVG no vàlid.","cannotResolveCollabServer":"","importLibraryError":"No s\'ha pogut carregar la biblioteca"},"toolBar":{"selection":"Selecció","image":"Insereix imatge","rectangle":"Rectangle","diamond":"Rombe","ellipse":"El·lipse","arrow":"Fletxa","line":"Línia","freedraw":"Dibuix","text":"Text","library":"Biblioteca","lock":"Mantenir activa l\'eina seleccionada desprès de dibuixar","penMode":"Evita el zoom i accepta solament el dibuix lliure amb bolígraf","link":"Afegeix / actualitza l\'enllaç per a la forma seleccionada","eraser":"Esborrador"},"headings":{"canvasActions":"Accions del llenç","selectedShapeActions":"Accions per a les formes seleccionades","shapes":"Formes"},"hints":{"canvasPanning":"Per a moure el llenç, mantingueu premuda la roda del ratolí o la tecla espai mentre l\'arrossegueu","linearElement":"Feu clic per a dibuixar múltiples punts; arrossegueu per a una sola línia","freeDraw":"Feu clic i arrossegueu, deixeu anar per a finalitzar","text":"Consell: també podeu afegir text fent doble clic en qualsevol lloc amb l\'eina de selecció","text_selected":"Feu doble clic o premeu Retorn per a editar el text","text_editing":"Premeu Escapada o Ctrl+Retorn (o Ordre+Retorn) per a finalitzar l\'edició","linearElementMulti":"Feu clic a l\'ultim punt, o pitgeu Esc o Retorn per a finalitzar","lockAngle":"Per restringir els angles, mantenir premut el majúscul (SHIFT)","resize":"Per restringir les proporcions mentres es canvia la mida, mantenir premut el majúscul (SHIFT); per canviar la mida des del centre, mantenir premut ALT","resizeImage":"Podeu redimensionar lliurement prement MAJÚSCULA;\\nper a redimensionar des del centre, premeu ALT","rotate":"Per restringir els angles mentre gira, mantenir premut el majúscul (SHIFT)","lineEditor_info":"Fes doble clic o premi Enter per editar punts","lineEditor_pointSelected":"Premeu Suprimir per a eliminar el(s) punt(s), CtrlOrCmd+D per a duplicar-lo, o arrossegueu-lo per a moure\'l","lineEditor_nothingSelected":"Seleccioneu un punt per a editar-lo (premeu SHIFT si voleu\\nselecció múltiple), o manteniu Alt i feu clic per a afegir més punts","placeImage":"Feu clic per a col·locar la imatge o clic i arrossegar per a establir-ne la mida manualment","publishLibrary":"Publiqueu la vostra pròpia llibreria","bindTextToElement":"Premeu enter per a afegir-hi text","deepBoxSelect":"Manteniu CtrlOrCmd per a selecció profunda, i per a evitar l\'arrossegament","eraserRevert":"Mantingueu premuda Alt per a revertir els elements seleccionats per a esborrar"},"canvasError":{"cannotShowPreview":"No es pot mostrar la previsualització","canvasTooBig":"Pot ser que el llenç sigui massa gran.","canvasTooBigTip":"Consell: proveu d’acostar una mica els elements més allunyats."},"errorSplash":{"headingMain_pre":"S\'ha produït un error. Proveu ","headingMain_button":"recarregar la pàgina.","clearCanvasMessage":"Si la recàrrega no funciona, proveu ","clearCanvasMessage_button":"esborrar el llenç.","clearCanvasCaveat":" Això resultarà en la pèrdua de feina ","trackedToSentry_pre":"L\'error amb l\'identificador ","trackedToSentry_post":" s\'ha rastrejat en el nostre sistema.","openIssueMessage_pre":"Anàvem amb molta cura de no incloure la informació de la vostra escena en l\'error. Si l\'escena no és privada, podeu fer-ne el seguiment al nostre ","openIssueMessage_button":"rastrejador d\'errors.","openIssueMessage_post":" Incloeu la informació a continuació copiant i enganxant a GitHub Issues.","sceneContent":"Contingut de l\'escena:"},"roomDialog":{"desc_intro":"Podeu convidar persones a la vostra escena actual a col·laborar amb vós.","desc_privacy":"No us preocupeu, la sessió utilitza el xifratge de punta a punta, de manera que qualsevol cosa que dibuixeu romandrà privada. Ni tan sols el nostre servidor podrà veure què feu.","button_startSession":"Inicia la sessió","button_stopSession":"Atura la sessió","desc_inProgressIntro":"La sessió de col·laboració en directe està en marxa.","desc_shareLink":"Comparteix aquest enllaç amb qualsevol persona amb qui vulgueu col·laborar:","desc_exitSession":"Si atureu la sessió, us desconectareu de la sala, però podreu continuar treballant amb el dibuix localment. Tingues en compte que això no afectarà a altres persones, i encara podran col·laborar en la seva versió.","shareTitle":"Uniu-vos a una sessió de col·laboració en directe a Excalidraw"},"errorDialog":{"title":"Error"},"exportDialog":{"disk_title":"Desa al disc","disk_details":"Exporta les dades de l\'escena a un fitxer que després podreu importar.","disk_button":"Desa en un fitxer","link_title":"Enllaç per a compartir","link_details":"Exporta com a un enllaç de només lectura.","link_button":"Exporta a un enllaç","excalidrawplus_description":"Desa l\'escena en el vostre espai de treball Excalidraw+.","excalidrawplus_button":"Exporta","excalidrawplus_exportError":"No és possible exportar a Excalidraw+ ara mateix..."},"helpDialog":{"blog":"Llegiu el nostre blog","click":"clic","deepSelect":"Selecció profunda","deepBoxSelect":"","curvedArrow":"Fletxa corba","curvedLine":"Línia corba","documentation":"Documentació","doubleClick":"doble clic","drag":"arrossega","editor":"Editor","editSelectedShape":"Edita la forma seleccionada (text, fletxa o línia)","github":"Hi heu trobat un problema? Informeu-ne","howto":"Seguiu les nostres guies","or":"o","preventBinding":"Prevenir vinculació de la fletxa","tools":"Eines","shortcuts":"Dreceres de teclat","textFinish":"Finalitza l\'edició (editor de text)","textNewLine":"Afegeix una línia nova (editor de text)","title":"Ajuda","view":"Visualització","zoomToFit":"Zoom per veure tots els elements","zoomToSelection":"Zoom per veure la selecció","toggleElementLock":""},"clearCanvasDialog":{"title":"Neteja el llenç"},"publishDialog":{"title":"Publica la biblioteca","itemName":"Nom de l\'element","authorName":"Nom de l\'autor/a","githubUsername":"Nom d\'usuari de GitHub","twitterUsername":"Nom d\'usuari de Twitter","libraryName":"Nom de la biblioteca","libraryDesc":"Descripció de la biblioteca","website":"Lloc web","placeholder":{"authorName":"Nom o usuari","libraryName":"Nom de la vostra biblioteca","libraryDesc":"Descripció de la biblioteca per a ajudar a la gent a entendre\'n el funcionament","githubHandle":"","twitterHandle":"Usuari de twitter (opcional), per tal que puguem donar-vos crèdit quan fem la promoció a Twitter","website":"Enllaç al vostre lloc web personal o a qualsevol altre (opcional)"},"errors":{"required":"Requerit","website":"Introduïu una URL vàlida"},"noteDescription":{"pre":"Envieu la vostra biblioteca perquè sigui inclosa al ","link":"repositori públic","post":"per tal que altres persones puguin fer-ne ús en els seus dibuixos."},"noteGuidelines":{"pre":"La biblioteca ha de ser aprovada manualment. Si us plau, llegiu les ","link":"directrius","post":" abans d\'enviar-hi res. Necessitareu un compte de GitHub per a comunicar i fer-hi canvis si cal, però no és requisit imprescindible."},"noteLicense":{"pre":"Quan l\'envieu, accepteu que la biblioteca sigui publicada sota la ","link":"llicència MIT, ","post":"que, en resum, vol dir que qualsevol persona pot fer-ne ús sense restriccions."},"noteItems":"Cada element de la biblioteca ha de tenir el seu propi nom per tal que sigui filtrable. S\'hi inclouran els elements següents:","atleastOneLibItem":"Si us plau, seleccioneu si més no un element de la biblioteca per a començar","republishWarning":"Nota: alguns dels elements seleccionats s\'han marcat com a publicats/enviats. Només hauríeu de reenviar elements quan actualitzeu una biblioteca existent."},"publishSuccessDialog":{"title":"Biblioteca enviada","content":"Gràcies, {{authorName}}. La vostra biblioteca ha estat enviada per a ser revisada. Podeu comprovar-ne l\'estat","link":"aquí"},"confirmDialog":{"resetLibrary":"Restableix la biblioteca","removeItemsFromLib":"Suprimeix els elements seleccionats de la llibreria"},"encrypted":{"tooltip":"Els vostres dibuixos estan xifrats de punta a punta de manera que els servidors d’Excalidraw no els veuran mai.","link":"Article del blog sobre encriptació d\'extrem a extrem a Excalidraw"},"stats":{"angle":"Angle","element":"Element","elements":"Elements","height":"Altura","scene":"Escena","selected":"Seleccionat","storage":"Emmagatzematge","title":"Estadístiques per nerds","total":"Total","version":"Versió","versionCopy":"Feu clic per a copiar","versionNotAvailable":"Versió no disponible","width":"Amplada"},"toast":{"addedToLibrary":"Afegit a la biblioteca","copyStyles":"S\'han copiat els estils.","copyToClipboard":"S\'ha copiat al porta-retalls.","copyToClipboardAsPng":"S\'ha copiat {{exportSelection}} al porta-retalls en format PNG\\n({{exportColorScheme}})","fileSaved":"S\'ha desat el fitxer.","fileSavedToFilename":"S\'ha desat a {filename}","canvas":"el llenç","selection":"la selecció"},"colors":{"495057":"Gris 7","ffffff":"Blanc","f8f9fa":"Gris 0","f1f3f5":"Gris 1","fff5f5":"Vermell 0","fff0f6":"Rosa 0","f8f0fc":"Malva 0","f3f0ff":"Violat 0","edf2ff":"Indi 0","e7f5ff":"Blau 0","e3fafc":"Cian 0","e6fcf5":"Xarxet 0","ebfbee":"Verd 0","f4fce3":"Llima 0","fff9db":"Groc 0","fff4e6":"Taronja 0","transparent":"Transparent","ced4da":"Gris 4","868e96":"Gris 6","fa5252":"Vermell 6","e64980":"Rosa 6","be4bdb":"Malva 6","7950f2":"Violat 6","4c6ef5":"Indi 6","228be6":"Blau 6","15aabf":"Cian 6","12b886":"Xarxet 6","40c057":"Verd 6","82c91e":"Llima 6","fab005":"Groc 6","fd7e14":"Taronja 6","000000":"Negre","343a40":"Gris 8","c92a2a":"Vermell 9","a61e4d":"Rosa 9","862e9c":"Malva 9","5f3dc4":"Violat 9","364fc7":"Indi 9","1864ab":"Blau 9","0b7285":"Cian 9","087f5b":"Xarxet 9","2b8a3e":"Verd 9","5c940d":"Llima 9","e67700":"Groc 9","d9480f":"Taronja 9"}}')}}]);