@dwelle/excalidraw 0.4.0-9db4535 → 0.4.0-9fa56da

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 (143) hide show
  1. package/CHANGELOG.md +255 -1
  2. package/README.md +4 -0
  3. package/dist/excalidraw-assets/{vendor-2002fe1b8862917b36c1.js → vendor-d415b28e9024dee4bb1b.js} +2 -2
  4. package/dist/excalidraw-assets-dev/{vendor-e6df8519da951026ff69.js → vendor-a14cd58fa2db417e42b2.js} +6 -6
  5. package/dist/excalidraw.development.js +2123 -1783
  6. package/dist/excalidraw.production.min.js +1 -1
  7. package/package.json +7 -2
  8. package/types/actions/actionAddToLibrary.d.ts +84 -43
  9. package/types/actions/actionAlign.d.ts +33 -28
  10. package/types/actions/actionBoundText.d.ts +60 -32
  11. package/types/actions/actionCanvas.d.ts +436 -164
  12. package/types/actions/actionClipboard.d.ts +140 -74
  13. package/types/actions/actionDeleteSelected.d.ts +80 -42
  14. package/types/actions/actionDistribute.d.ts +11 -12
  15. package/types/actions/actionDuplicateSelection.d.ts +2 -3
  16. package/types/actions/actionElementLock.d.ts +58 -30
  17. package/types/actions/actionExport.d.ts +303 -177
  18. package/types/actions/actionFinalize.d.ts +56 -32
  19. package/types/actions/actionFlip.d.ts +8 -9
  20. package/types/actions/actionFrame.d.ts +423 -0
  21. package/types/actions/actionGroup.d.ts +250 -13
  22. package/types/actions/actionLinearEditor.d.ts +30 -17
  23. package/types/actions/actionMenu.d.ts +87 -47
  24. package/types/actions/actionNavigate.d.ts +1 -1
  25. package/types/actions/actionProperties.d.ts +370 -187
  26. package/types/actions/actionSelectAll.d.ts +123 -4
  27. package/types/actions/actionStyles.d.ts +32 -19
  28. package/types/actions/actionToggleGridMode.d.ts +30 -17
  29. package/types/actions/actionToggleObjectsSnapMode.d.ts +137 -0
  30. package/types/actions/actionToggleStats.d.ts +30 -17
  31. package/types/actions/actionToggleViewMode.d.ts +30 -17
  32. package/types/actions/actionToggleZenMode.d.ts +30 -17
  33. package/types/actions/actionZindex.d.ts +12 -12
  34. package/types/actions/index.d.ts +1 -0
  35. package/types/actions/shortcuts.d.ts +1 -1
  36. package/types/actions/types.d.ts +4 -3
  37. package/types/appState.d.ts +10 -15
  38. package/types/clients.d.ts +1 -5
  39. package/types/clipboard.d.ts +1 -0
  40. package/types/colors.d.ts +9 -9
  41. package/types/components/Actions.d.ts +4 -5
  42. package/types/components/App.d.ts +61 -28
  43. package/types/components/Avatar.d.ts +0 -1
  44. package/types/components/Button.d.ts +0 -1
  45. package/types/components/Card.d.ts +0 -1
  46. package/types/components/ColorPicker/ColorInput.d.ts +3 -1
  47. package/types/components/ColorPicker/keyboardNavHandlers.d.ts +0 -1
  48. package/types/components/DefaultSidebar.d.ts +0 -1
  49. package/types/components/Dialog.d.ts +2 -1
  50. package/types/components/ExcalidrawLogo.d.ts +15 -0
  51. package/types/components/EyeDropper.d.ts +18 -8
  52. package/types/components/FilledButton.d.ts +2 -1
  53. package/types/components/HintViewer.d.ts +3 -4
  54. package/types/components/JSONExportDialog.d.ts +1 -1
  55. package/types/components/LaserTool/LaserPathManager.d.ts +28 -0
  56. package/types/components/LaserTool/LaserPointerButton.d.ts +10 -0
  57. package/types/components/LaserTool/LaserTool.d.ts +7 -0
  58. package/types/components/LayerUI.d.ts +6 -2
  59. package/types/components/LibraryMenuHeaderContent.d.ts +0 -1
  60. package/types/components/LibraryUnit.d.ts +0 -1
  61. package/types/components/LoadingMessage.d.ts +0 -1
  62. package/types/components/MobileMenu.d.ts +4 -3
  63. package/types/components/OverwriteConfirm/OverwriteConfirm.d.ts +17 -0
  64. package/types/components/OverwriteConfirm/OverwriteConfirmActions.d.ts +17 -0
  65. package/types/components/OverwriteConfirm/OverwriteConfirmState.d.ts +22 -0
  66. package/types/components/Section.d.ts +1 -1
  67. package/types/components/Sidebar/Sidebar.d.ts +1 -1
  68. package/types/components/Sidebar/SidebarTab.d.ts +0 -1
  69. package/types/components/Sidebar/SidebarTabTrigger.d.ts +0 -1
  70. package/types/components/Sidebar/SidebarTabTriggers.d.ts +0 -1
  71. package/types/components/Sidebar/SidebarTabs.d.ts +0 -1
  72. package/types/components/Stack.d.ts +2 -2
  73. package/types/components/ToolButton.d.ts +2 -1
  74. package/types/components/Trans.d.ts +2 -1
  75. package/types/components/canvases/InteractiveCanvas.d.ts +27 -0
  76. package/types/components/canvases/StaticCanvas.d.ts +18 -0
  77. package/types/components/canvases/index.d.ts +3 -0
  78. package/types/components/dropdownMenu/DropdownMenu.d.ts +9 -5
  79. package/types/components/dropdownMenu/DropdownMenuItem.d.ts +2 -1
  80. package/types/components/dropdownMenu/DropdownMenuItemCustom.d.ts +2 -1
  81. package/types/components/dropdownMenu/DropdownMenuItemLink.d.ts +2 -1
  82. package/types/components/dropdownMenu/DropdownMenuTrigger.d.ts +3 -2
  83. package/types/components/dropdownMenu/common.d.ts +1 -1
  84. package/types/components/icons.d.ts +6 -0
  85. package/types/components/live-collaboration/LiveCollaborationTrigger.d.ts +0 -1
  86. package/types/components/main-menu/MainMenu.d.ts +9 -5
  87. package/types/components/welcome-screen/WelcomeScreen.Center.d.ts +0 -1
  88. package/types/components/welcome-screen/WelcomeScreen.d.ts +0 -1
  89. package/types/constants.d.ts +35 -3
  90. package/types/context/tunnels.d.ts +1 -0
  91. package/types/data/transform.d.ts +71 -0
  92. package/types/data/url.d.ts +7 -0
  93. package/types/element/Hyperlink.d.ts +40 -23
  94. package/types/element/binding.d.ts +2 -1
  95. package/types/element/bounds.d.ts +30 -6
  96. package/types/element/collision.d.ts +7 -7
  97. package/types/element/dragElements.d.ts +12 -2
  98. package/types/element/embeddable.d.ts +153 -0
  99. package/types/element/index.d.ts +3 -2
  100. package/types/element/linearElementEditor.d.ts +33 -20
  101. package/types/element/newElement.d.ts +15 -6
  102. package/types/element/resizeElements.d.ts +2 -2
  103. package/types/element/sizeHelpers.d.ts +8 -1
  104. package/types/element/textElement.d.ts +5 -7
  105. package/types/element/textWysiwyg.d.ts +1 -1
  106. package/types/element/transformHandles.d.ts +10 -3
  107. package/types/element/typeChecks.d.ts +3 -1
  108. package/types/element/types.d.ts +19 -3
  109. package/types/frame.d.ts +40 -0
  110. package/types/groups.d.ts +15 -11
  111. package/types/history.d.ts +3 -3
  112. package/types/hooks/useOutsideClick.d.ts +0 -1
  113. package/types/hooks/useScrollPosition.d.ts +0 -1
  114. package/types/hooks/useStable.d.ts +1 -0
  115. package/types/i18n.d.ts +5 -2
  116. package/types/keys.d.ts +4 -0
  117. package/types/math.d.ts +3 -0
  118. package/types/packages/excalidraw/example/initialData.d.ts +182 -64
  119. package/types/packages/excalidraw/index.d.ts +3 -1
  120. package/types/packages/excalidraw/webpack.dev.config.d.ts +5 -2
  121. package/types/packages/excalidraw/webpack.prod.config.d.ts +3 -0
  122. package/types/packages/utils.d.ts +4 -1
  123. package/types/renderer/renderElement.d.ts +11 -22
  124. package/types/renderer/renderScene.d.ts +19 -27
  125. package/types/renderer/renderSnaps.d.ts +2 -0
  126. package/types/renderer/roundRect.d.ts +1 -1
  127. package/types/scene/Renderer.d.ts +25 -0
  128. package/types/scene/Scene.d.ts +23 -1
  129. package/types/scene/Shape.d.ts +12 -0
  130. package/types/scene/ShapeCache.d.ts +20 -0
  131. package/types/scene/export.d.ts +35 -9
  132. package/types/scene/scroll.d.ts +1 -1
  133. package/types/scene/scrollbars.d.ts +2 -6
  134. package/types/scene/selection.d.ts +26 -5
  135. package/types/scene/types.d.ts +66 -31
  136. package/types/snapping.d.ts +108 -0
  137. package/types/types.d.ts +130 -25
  138. package/types/utility-types.d.ts +3 -1
  139. package/types/utils.d.ts +60 -23
  140. package/types/zindex.d.ts +4 -4
  141. /package/dist/excalidraw-assets/{vendor-2002fe1b8862917b36c1.js.LICENSE.txt → vendor-d415b28e9024dee4bb1b.js.LICENSE.txt} +0 -0
  142. /package/types/packages/excalidraw/dist/excalidraw-assets/{vendor-2002fe1b8862917b36c1.d.ts → vendor-d415b28e9024dee4bb1b.d.ts} +0 -0
  143. /package/types/packages/excalidraw/dist/excalidraw-assets-dev/{vendor-e6df8519da951026ff69.d.ts → vendor-a14cd58fa2db417e42b2.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ export declare const useStable: <T extends Record<string, any>>(value: T) => T;
package/types/i18n.d.ts CHANGED
@@ -1,8 +1,11 @@
1
+ import fallbackLangData from "./locales/en.json";
2
+ import { NestedKeyOf } from "./utility-types";
1
3
  export interface Language {
2
4
  code: string;
3
5
  label: string;
4
6
  rtl?: boolean;
5
7
  }
8
+ export type TranslationKeys = NestedKeyOf<typeof fallbackLangData>;
6
9
  export declare const defaultLang: {
7
10
  code: string;
8
11
  label: string;
@@ -10,11 +13,11 @@ export declare const defaultLang: {
10
13
  export declare const languages: Language[];
11
14
  export declare const setLanguage: (lang: Language) => Promise<void>;
12
15
  export declare const getLanguage: () => Language;
13
- export declare const t: (path: string, replacement?: {
16
+ export declare const t: (path: NestedKeyOf<typeof fallbackLangData>, replacement?: {
14
17
  [key: string]: string | number;
15
18
  } | null | undefined, fallback?: string) => string;
16
19
  export declare const useI18n: () => {
17
- t: (path: string, replacement?: {
20
+ t: (path: NestedKeyOf<typeof fallbackLangData>, replacement?: {
18
21
  [key: string]: string | number;
19
22
  } | null | undefined, fallback?: string) => string;
20
23
  langCode: string;
package/types/keys.d.ts CHANGED
@@ -8,6 +8,7 @@ export declare const CODES: {
8
8
  readonly BRACKET_LEFT: "BracketLeft";
9
9
  readonly ONE: "Digit1";
10
10
  readonly TWO: "Digit2";
11
+ readonly THREE: "Digit3";
11
12
  readonly NINE: "Digit9";
12
13
  readonly QUOTE: "Quote";
13
14
  readonly ZERO: "Digit0";
@@ -18,6 +19,7 @@ export declare const CODES: {
18
19
  readonly V: "KeyV";
19
20
  readonly Z: "KeyZ";
20
21
  readonly R: "KeyR";
22
+ readonly S: "KeyS";
21
23
  };
22
24
  export declare const KEYS: {
23
25
  readonly ARROW_DOWN: "ArrowDown";
@@ -39,6 +41,7 @@ export declare const KEYS: {
39
41
  readonly CHEVRON_RIGHT: ">";
40
42
  readonly PERIOD: ".";
41
43
  readonly COMMA: ",";
44
+ readonly SUBTRACT: "-";
42
45
  readonly A: "a";
43
46
  readonly C: "c";
44
47
  readonly D: "d";
@@ -59,6 +62,7 @@ export declare const KEYS: {
59
62
  readonly Y: "y";
60
63
  readonly Z: "z";
61
64
  readonly K: "k";
65
+ readonly W: "w";
62
66
  readonly 0: "0";
63
67
  readonly 1: "1";
64
68
  readonly 2: "2";
package/types/math.d.ts CHANGED
@@ -17,6 +17,7 @@ export declare const distance2d: (x1: number, y1: number, x2: number, y2: number
17
17
  export declare const centerPoint: (a: readonly [number, number], b: readonly [number, number]) => readonly [number, number];
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
+ export declare const isPointWithinBounds: (p: readonly [number, number], q: readonly [number, number], r: readonly [number, number]) => boolean;
20
21
  export declare const getGridPoint: (x: number, y: number, gridSize: number | null) => [number, number];
21
22
  export declare const getCornerRadius: (x: number, element: ExcalidrawElement) => number;
22
23
  export declare const getControlPointsForBezierCurve: (element: NonDeleted<ExcalidrawLinearElement>, endPoint: readonly [number, number]) => [number, number][] | null;
@@ -27,3 +28,5 @@ export declare const getBezierCurveLength: (element: NonDeleted<ExcalidrawLinear
27
28
  export declare const mapIntervalToBezierT: (element: NonDeleted<ExcalidrawLinearElement>, endPoint: readonly [number, number], interval: number) => number;
28
29
  export declare const arePointsEqual: (p1: readonly [number, number], p2: readonly [number, number]) => boolean;
29
30
  export declare const isRightAngle: (angle: number) => boolean;
31
+ export declare const rangesOverlap: ([a0, a1]: [number, number], [b0, b1]: [number, number]) => boolean;
32
+ export declare const rangeIntersection: (rangeA: [number, number], rangeB: [number, number]) => [number, number] | null;
@@ -1,10 +1,42 @@
1
- declare namespace _default {
2
- const elements: ({
1
+ import { ExcalidrawElementSkeleton } from "../../../data/transform";
2
+ declare const _default: {
3
+ elements: ExcalidrawElementSkeleton[];
4
+ appState: {
5
+ viewBackgroundColor: string;
6
+ currentItemFontFamily: number;
7
+ };
8
+ scrollToContent: boolean;
9
+ libraryItems: ({
10
+ type: string;
11
+ x: number;
12
+ y: number;
13
+ strokeColor: string;
14
+ backgroundColor: string;
15
+ width: number;
16
+ height: number;
17
+ strokeSharpness: string;
18
+ points: number[][];
19
+ }[] | ({
20
+ type: string;
21
+ fillStyle: string;
22
+ strokeWidth: number;
23
+ strokeStyle: string;
24
+ x: number;
25
+ y: number;
26
+ strokeColor: string;
27
+ backgroundColor: string;
28
+ width: number;
29
+ height: number;
30
+ groupIds: string[];
31
+ points: number[][];
32
+ roughness?: undefined;
33
+ opacity?: undefined;
34
+ angle?: undefined;
35
+ seed?: undefined;
36
+ strokeSharpness?: undefined;
37
+ boundElementIds?: undefined;
38
+ } | {
3
39
  type: string;
4
- version: number;
5
- versionNonce: number;
6
- isDeleted: boolean;
7
- id: string;
8
40
  fillStyle: string;
9
41
  strokeWidth: number;
10
42
  strokeStyle: string;
@@ -18,48 +50,72 @@ declare namespace _default {
18
50
  width: number;
19
51
  height: number;
20
52
  seed: number;
21
- groupIds: never[];
22
- fileId?: undefined;
23
- strokeSharpness?: undefined;
24
- boundElements?: undefined;
25
- updated?: undefined;
26
- link?: undefined;
27
- status?: undefined;
28
- scale?: undefined;
53
+ groupIds: string[];
54
+ strokeSharpness: string;
55
+ points: number[][];
56
+ boundElementIds?: undefined;
29
57
  } | {
30
- fileId: string;
31
58
  type: string;
59
+ fillStyle: string;
60
+ strokeWidth: number;
61
+ strokeStyle: string;
62
+ roughness: number;
63
+ opacity: number;
64
+ angle: number;
32
65
  x: number;
33
66
  y: number;
67
+ strokeColor: string;
68
+ backgroundColor: string;
34
69
  width: number;
35
70
  height: number;
71
+ seed: number;
72
+ groupIds: string[];
73
+ strokeSharpness: string;
74
+ boundElementIds: string[];
75
+ points?: undefined;
76
+ } | {
77
+ type: string;
78
+ fillStyle: string;
79
+ strokeWidth: number;
80
+ strokeStyle: string;
81
+ roughness: number;
82
+ opacity: number;
36
83
  angle: number;
84
+ x: number;
85
+ y: number;
37
86
  strokeColor: string;
38
87
  backgroundColor: string;
88
+ width: number;
89
+ height: number;
90
+ seed: number;
91
+ groupIds: string[];
92
+ strokeSharpness: string;
93
+ points?: undefined;
94
+ boundElementIds?: undefined;
95
+ })[] | ({
96
+ type: string;
39
97
  fillStyle: string;
40
98
  strokeWidth: number;
41
99
  strokeStyle: string;
42
100
  roughness: number;
43
101
  opacity: number;
44
- groupIds: never[];
45
- strokeSharpness: string;
102
+ angle: number;
103
+ x: number;
104
+ y: number;
105
+ strokeColor: string;
106
+ backgroundColor: string;
107
+ width: number;
108
+ height: number;
46
109
  seed: number;
47
- version: number;
48
- versionNonce: number;
49
- isDeleted: boolean;
50
- boundElements: null;
51
- updated: number;
52
- link: null;
53
- status: string;
54
- scale: number[];
110
+ groupIds: string[];
111
+ strokeSharpness: string;
112
+ points: number[][];
113
+ version?: undefined;
114
+ versionNonce?: undefined;
115
+ isDeleted?: undefined;
55
116
  id?: undefined;
56
- })[];
57
- namespace appState {
58
- const viewBackgroundColor: string;
59
- const currentItemFontFamily: number;
60
- }
61
- const scrollToContent: boolean;
62
- const libraryItems: (({
117
+ boundElementIds?: undefined;
118
+ } | {
63
119
  type: string;
64
120
  version: number;
65
121
  versionNonce: number;
@@ -80,19 +136,10 @@ declare namespace _default {
80
136
  seed: number;
81
137
  groupIds: string[];
82
138
  strokeSharpness: string;
83
- boundElementIds: never[];
84
- startBinding: null;
85
- endBinding: null;
86
139
  points: number[][];
87
- lastCommittedPoint: null;
88
- startArrowhead: null;
89
- endArrowhead: null;
140
+ boundElementIds?: undefined;
90
141
  } | {
91
142
  type: string;
92
- version: number;
93
- versionNonce: number;
94
- isDeleted: boolean;
95
- id: string;
96
143
  fillStyle: string;
97
144
  strokeWidth: number;
98
145
  strokeStyle: string;
@@ -109,18 +156,13 @@ declare namespace _default {
109
156
  groupIds: string[];
110
157
  strokeSharpness: string;
111
158
  boundElementIds: string[];
112
- startBinding?: undefined;
113
- endBinding?: undefined;
114
159
  points?: undefined;
115
- lastCommittedPoint?: undefined;
116
- startArrowhead?: undefined;
117
- endArrowhead?: undefined;
160
+ version?: undefined;
161
+ versionNonce?: undefined;
162
+ isDeleted?: undefined;
163
+ id?: undefined;
118
164
  })[] | ({
119
165
  type: string;
120
- version: number;
121
- versionNonce: number;
122
- isDeleted: boolean;
123
- id: string;
124
166
  fillStyle: string;
125
167
  strokeWidth: number;
126
168
  strokeStyle: string;
@@ -136,17 +178,9 @@ declare namespace _default {
136
178
  seed: number;
137
179
  groupIds: string[];
138
180
  strokeSharpness: string;
139
- boundElementIds: string[];
140
181
  points?: undefined;
141
- lastCommittedPoint?: undefined;
142
- startArrowhead?: undefined;
143
- endArrowhead?: undefined;
144
182
  } | {
145
183
  type: string;
146
- version: number;
147
- versionNonce: number;
148
- isDeleted: boolean;
149
- id: string;
150
184
  fillStyle: string;
151
185
  strokeWidth: number;
152
186
  strokeStyle: string;
@@ -162,11 +196,95 @@ declare namespace _default {
162
196
  seed: number;
163
197
  groupIds: string[];
164
198
  strokeSharpness: string;
165
- boundElementIds: never[];
166
199
  points: number[][];
167
- lastCommittedPoint: null;
168
- startArrowhead: null;
169
- endArrowhead: null;
200
+ } | {
201
+ type: string;
202
+ fillStyle: string;
203
+ strokeWidth: number;
204
+ strokeStyle: string;
205
+ x: number;
206
+ y: number;
207
+ strokeColor: string;
208
+ backgroundColor: string;
209
+ width: number;
210
+ height: number;
211
+ groupIds: string[];
212
+ strokeSharpness: string;
213
+ points: number[][];
214
+ roughness?: undefined;
215
+ opacity?: undefined;
216
+ angle?: undefined;
217
+ seed?: undefined;
218
+ } | {
219
+ type: string;
220
+ fillStyle: string;
221
+ strokeWidth: number;
222
+ strokeStyle: string;
223
+ roughness: number;
224
+ opacity: number;
225
+ angle: number;
226
+ x: number;
227
+ y: number;
228
+ strokeColor: string;
229
+ backgroundColor: string;
230
+ width: number;
231
+ height: number;
232
+ groupIds: string[];
233
+ strokeSharpness: string;
234
+ points: number[][];
235
+ seed?: undefined;
236
+ } | {
237
+ type: string;
238
+ fillStyle: string;
239
+ strokeWidth: number;
240
+ strokeStyle: string;
241
+ opacity: number;
242
+ x: number;
243
+ y: number;
244
+ strokeColor: string;
245
+ backgroundColor: string;
246
+ width: number;
247
+ height: number;
248
+ seed: number;
249
+ groupIds: string[];
250
+ strokeSharpness: string;
251
+ points: number[][];
252
+ roughness?: undefined;
253
+ angle?: undefined;
254
+ })[] | ({
255
+ type: string;
256
+ fillStyle: string;
257
+ strokeWidth: number;
258
+ strokeStyle: string;
259
+ roughness: number;
260
+ opacity: number;
261
+ angle: number;
262
+ x: number;
263
+ y: number;
264
+ strokeColor: string;
265
+ backgroundColor: string;
266
+ width: number;
267
+ height: number;
268
+ seed: number;
269
+ groupIds: string[];
270
+ strokeSharpness: string;
271
+ } | {
272
+ type: string;
273
+ fillStyle: string;
274
+ strokeWidth: number;
275
+ strokeStyle: string;
276
+ x: number;
277
+ y: number;
278
+ strokeColor: string;
279
+ backgroundColor: string;
280
+ width: number;
281
+ height: number;
282
+ seed: number;
283
+ groupIds: string[];
284
+ strokeSharpness: string;
285
+ roughness?: undefined;
286
+ opacity?: undefined;
287
+ angle?: undefined;
170
288
  })[])[];
171
- }
289
+ };
172
290
  export default _default;
@@ -25,9 +25,11 @@ export { useDevice } from "../../components/App";
25
25
  export { WelcomeScreen };
26
26
  export { LiveCollaborationTrigger };
27
27
  export { DefaultSidebar } from "../../components/DefaultSidebar";
28
+ export { exportToCanvas } from "../../scene/export";
29
+ export { normalizeLink } from "../../data/url";
30
+ export { convertToExcalidrawElements } from "../../data/transform";
28
31
  export { getDefaultAppState, cleanAppStateForExport, clearAppStateForLocalStorage, } from "../../appState";
29
32
  export { jotaiScope, jotaiStore } from "../../jotai";
30
33
  export { libraryItemsAtom } from "../../data/library";
31
- export { exportToCanvas } from "../../scene/export";
32
34
  export * as icons from "../../components/icons";
33
35
  export * as actions from "../../actions/index";
@@ -36,13 +36,16 @@ export namespace module {
36
36
  } | {
37
37
  test: RegExp;
38
38
  exclude: RegExp;
39
- use: {
39
+ use: ({
40
+ loader: string;
41
+ options?: undefined;
42
+ } | {
40
43
  loader: string;
41
44
  options: {
42
45
  transpileOnly: boolean;
43
46
  configFile: string;
44
47
  };
45
- }[];
48
+ })[];
46
49
  type?: undefined;
47
50
  } | {
48
51
  test: RegExp;
@@ -36,6 +36,9 @@ export namespace module {
36
36
  test: RegExp;
37
37
  exclude: RegExp;
38
38
  use: ({
39
+ loader: string;
40
+ options?: undefined;
41
+ } | {
39
42
  loader: string;
40
43
  options: {
41
44
  transpileOnly: boolean;
@@ -5,7 +5,10 @@ type ExportToBlobConfig = ExportToCanvasConfig & {
5
5
  mimeType?: string;
6
6
  quality?: number;
7
7
  };
8
- type ExportToSvgConfig = Pick<ExportToCanvasConfig, "canvasBackgroundColor" | "padding" | "theme">;
8
+ type ExportToSvgConfig = Pick<ExportToCanvasConfig, "canvasBackgroundColor" | "padding" | "theme"> & {
9
+ exportPadding?: number;
10
+ renderEmbeddables?: boolean;
11
+ };
9
12
  export declare const exportToBlob: ({ data, config, }: {
10
13
  data: ExportToCanvasData;
11
14
  config?: ExportToBlobConfig | undefined;
@@ -1,37 +1,26 @@
1
1
  import { ExcalidrawElement, ExcalidrawTextElement, NonDeletedExcalidrawElement, ExcalidrawFreeDrawElement } from "../element/types";
2
- import { RoughCanvas } from "roughjs/bin/canvas";
3
- import { Drawable, Options } from "roughjs/bin/core";
4
- import { RoughSVG } from "roughjs/bin/svg";
5
- import { RenderConfig } from "../scene/types";
6
- import { AppState, BinaryFiles } from "../types";
2
+ import type { RoughCanvas } from "roughjs/bin/canvas";
3
+ import type { RoughSVG } from "roughjs/bin/svg";
4
+ import { StaticCanvasRenderConfig } from "../scene/types";
5
+ import { AppState, StaticCanvasAppState, BinaryFiles, InteractiveCanvasAppState } from "../types";
7
6
  export interface ExcalidrawElementWithCanvas {
8
7
  element: ExcalidrawElement | ExcalidrawTextElement;
9
8
  canvas: HTMLCanvasElement;
10
- theme: RenderConfig["theme"];
9
+ theme: AppState["theme"];
11
10
  scale: number;
12
- zoomValue: RenderConfig["zoom"]["value"];
11
+ zoomValue: AppState["zoom"]["value"];
13
12
  canvasOffsetX: number;
14
13
  canvasOffsetY: number;
15
14
  boundTextElementVersion: number | null;
15
+ containingFrameOpacity: number;
16
16
  }
17
17
  export declare const DEFAULT_LINK_SIZE = 14;
18
- type ElementShape = Drawable | Drawable[] | null;
19
- type ElementShapes = {
20
- freedraw: Drawable | null;
21
- arrow: Drawable[];
22
- line: Drawable[];
23
- text: null;
24
- image: null;
25
- };
26
- export declare const getShapeForElement: <T extends ExcalidrawElement>(element: T) => T["type"] extends keyof ElementShapes ? ElementShapes[T["type"]] | undefined : Drawable | null | undefined;
27
- export declare const setShapeForElement: <T extends ExcalidrawElement>(element: T, shape: T["type"] extends keyof ElementShapes ? ElementShapes[T["type"]] : Drawable) => WeakMap<ExcalidrawElement, ElementShape>;
28
- export declare const invalidateShapeForElement: (element: ExcalidrawElement) => boolean;
18
+ export declare let elementWithCanvasCache: WeakMap<ExcalidrawElement, ExcalidrawElementWithCanvas>;
29
19
  export declare const clearRenderCache: () => void;
30
- export declare const generateRoughOptions: (element: ExcalidrawElement, continuousPath?: boolean) => Options;
31
- export declare const renderElement: (element: NonDeletedExcalidrawElement, rc: RoughCanvas, context: CanvasRenderingContext2D, renderConfig: RenderConfig, appState: AppState) => void;
32
- export declare const renderElementToSvg: (element: NonDeletedExcalidrawElement, rsvg: RoughSVG, svgRoot: SVGElement, files: BinaryFiles, offsetX: number, offsetY: number, exportWithDarkMode?: boolean) => void;
20
+ export declare const renderSelectionElement: (element: NonDeletedExcalidrawElement, context: CanvasRenderingContext2D, appState: InteractiveCanvasAppState) => void;
21
+ export declare const renderElement: (element: NonDeletedExcalidrawElement, rc: RoughCanvas, context: CanvasRenderingContext2D, renderConfig: StaticCanvasRenderConfig, appState: StaticCanvasAppState) => void;
22
+ export declare const renderElementToSvg: (element: NonDeletedExcalidrawElement, rsvg: RoughSVG, svgRoot: SVGElement, files: BinaryFiles, offsetX: number, offsetY: number, exportWithDarkMode?: boolean, exportingFrameId?: string | null, renderEmbeddables?: boolean) => void;
33
23
  export declare let pathsCache: WeakMap<ExcalidrawFreeDrawElement, Path2D>;
34
24
  export declare function generateFreeDrawShape(element: ExcalidrawFreeDrawElement): Path2D;
35
25
  export declare function getFreeDrawPath2D(element: ExcalidrawFreeDrawElement): Path2D | undefined;
36
26
  export declare function getFreeDrawSvgPath(element: ExcalidrawFreeDrawElement): string;
37
- export {};
@@ -1,39 +1,31 @@
1
- import { RoughCanvas } from "roughjs/bin/canvas";
2
1
  import { RoughSVG } from "roughjs/bin/svg";
3
- import { AppState, BinaryFiles } from "../types";
2
+ import { BinaryFiles } from "../types";
4
3
  import { NonDeletedExcalidrawElement } from "../element/types";
5
- import { RenderConfig } from "../scene/types";
4
+ import { InteractiveSceneRenderConfig, StaticSceneRenderConfig } from "../scene/types";
5
+ import "canvas-roundrect-polyfill";
6
6
  export declare const DEFAULT_SPACING = 2;
7
- export declare const _renderScene: ({ elements, appState, rc, canvas, renderConfig, }: {
8
- elements: readonly NonDeletedExcalidrawElement[];
9
- appState: AppState;
10
- rc: RoughCanvas;
11
- canvas: HTMLCanvasElement;
12
- renderConfig: RenderConfig;
13
- }) => {
7
+ /**
8
+ * Interactive scene is the ui-canvas where we render boundinb boxes, selections
9
+ * and other ui stuff.
10
+ */
11
+ export declare const renderInteractiveScene: <U extends ({ canvas, elements, visibleElements, selectedElements, scale, appState, renderConfig, }: InteractiveSceneRenderConfig) => {
14
12
  atLeastOneVisibleElement: boolean;
15
- scrollBars?: undefined;
16
- } | {
17
- atLeastOneVisibleElement: boolean;
18
- scrollBars: import("../scene/types").ScrollBars | undefined;
19
- };
20
- /** renderScene throttled to animation framerate */
21
- export declare const renderScene: <T extends boolean = false>(config: {
22
13
  elements: readonly NonDeletedExcalidrawElement[];
23
- appState: AppState;
24
- rc: RoughCanvas;
25
- canvas: HTMLCanvasElement;
26
- renderConfig: RenderConfig;
27
- callback?: ((data: ReturnType<typeof _renderScene>) => void) | undefined;
28
- }, throttle?: T | undefined) => T extends true ? void : {
29
- atLeastOneVisibleElement: boolean;
30
14
  scrollBars?: undefined;
31
15
  } | {
32
- atLeastOneVisibleElement: boolean;
33
16
  scrollBars: import("../scene/types").ScrollBars | undefined;
34
- };
35
- export declare const renderSceneToSvg: (elements: readonly NonDeletedExcalidrawElement[], rsvg: RoughSVG, svgRoot: SVGElement, files: BinaryFiles, { offsetX, offsetY, exportWithDarkMode, }?: {
17
+ atLeastOneVisibleElement: boolean;
18
+ elements: readonly NonDeletedExcalidrawElement[];
19
+ }, T extends boolean = false>(renderConfig: InteractiveSceneRenderConfig, throttle?: T | undefined) => T extends true ? void : ReturnType<U>;
20
+ /**
21
+ * Static scene is the non-ui canvas where we render elements.
22
+ */
23
+ export declare const renderStaticScene: (renderConfig: StaticSceneRenderConfig, throttle?: boolean) => void;
24
+ export declare const cancelRender: () => void;
25
+ export declare const renderSceneToSvg: (elements: readonly NonDeletedExcalidrawElement[], rsvg: RoughSVG, svgRoot: SVGElement, files: BinaryFiles, { offsetX, offsetY, exportWithDarkMode, exportingFrameId, renderEmbeddables, }?: {
36
26
  offsetX?: number | undefined;
37
27
  offsetY?: number | undefined;
38
28
  exportWithDarkMode?: boolean | undefined;
29
+ exportingFrameId?: string | null | undefined;
30
+ renderEmbeddables?: boolean | undefined;
39
31
  }) => void;
@@ -0,0 +1,2 @@
1
+ import { InteractiveCanvasAppState } from "../types";
2
+ export declare const renderSnaps: (context: CanvasRenderingContext2D, appState: InteractiveCanvasAppState) => void;
@@ -8,4 +8,4 @@
8
8
  * @param {Number} height The height of the rectangle
9
9
  * @param {Number} radius The corner radius
10
10
  */
11
- export declare const roundRect: (context: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number) => void;
11
+ export declare const roundRect: (context: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, radius: number, strokeColor?: string) => void;
@@ -0,0 +1,25 @@
1
+ import { NonDeletedExcalidrawElement } from "../element/types";
2
+ import { AppState } from "../types";
3
+ import Scene from "./Scene";
4
+ export declare class Renderer {
5
+ private scene;
6
+ constructor(scene: Scene);
7
+ getRenderableElements: ((opts: {
8
+ zoom: AppState["zoom"];
9
+ offsetLeft: AppState["offsetLeft"];
10
+ offsetTop: AppState["offsetTop"];
11
+ scrollX: AppState["scrollX"];
12
+ scrollY: AppState["scrollY"];
13
+ height: AppState["height"];
14
+ width: AppState["width"];
15
+ editingElement: AppState["editingElement"];
16
+ pendingImageElementId: AppState["pendingImageElementId"];
17
+ versionNonce: ReturnType<InstanceType<typeof Scene>["getVersionNonce"]>;
18
+ }) => {
19
+ canvasElements: NonDeletedExcalidrawElement[];
20
+ visibleElements: readonly NonDeletedExcalidrawElement[];
21
+ }) & {
22
+ clear: () => void;
23
+ };
24
+ destroy(): void;
25
+ }
@@ -1,9 +1,11 @@
1
- import { ExcalidrawElement, NonDeletedExcalidrawElement, NonDeleted } from "../element/types";
1
+ import { ExcalidrawElement, NonDeletedExcalidrawElement, NonDeleted, ExcalidrawFrameElement } from "../element/types";
2
2
  import { LinearElementEditor } from "../element/linearElementEditor";
3
+ import { AppState } from "../types";
3
4
  type ElementIdKey = InstanceType<typeof LinearElementEditor>["elementId"];
4
5
  type ElementKey = ExcalidrawElement | ElementIdKey;
5
6
  type SceneStateCallback = () => void;
6
7
  type SceneStateCallbackRemover = () => void;
8
+ export type ExcalidrawElementsIncludingDeleted = readonly ExcalidrawElement[];
7
9
  declare class Scene {
8
10
  private static sceneMapByElement;
9
11
  private static sceneMapById;
@@ -12,10 +14,28 @@ declare class Scene {
12
14
  private callbacks;
13
15
  private nonDeletedElements;
14
16
  private elements;
17
+ private nonDeletedFrames;
18
+ private frames;
15
19
  private elementsMap;
20
+ private selectedElementsCache;
21
+ private versionNonce;
16
22
  getElementsIncludingDeleted(): readonly ExcalidrawElement[];
17
23
  getNonDeletedElements(): readonly NonDeletedExcalidrawElement[];
24
+ getFramesIncludingDeleted(): readonly ExcalidrawFrameElement[];
25
+ getSelectedElements(opts: {
26
+ selectedElementIds: AppState["selectedElementIds"];
27
+ /**
28
+ * for specific cases where you need to use elements not from current
29
+ * scene state. This in effect will likely result in cache-miss, and
30
+ * the cache won't be updated in this case.
31
+ */
32
+ elements?: readonly ExcalidrawElement[];
33
+ includeBoundTextElement?: boolean;
34
+ includeElementsInFrames?: boolean;
35
+ }): NonDeleted<ExcalidrawElement>[];
36
+ getNonDeletedFrames(): readonly NonDeleted<ExcalidrawFrameElement>[];
18
37
  getElement<T extends ExcalidrawElement>(id: T["id"]): T | null;
38
+ getVersionNonce(): number | undefined;
19
39
  getNonDeletedElement(id: ExcalidrawElement["id"]): NonDeleted<ExcalidrawElement> | null;
20
40
  /**
21
41
  * A utility method to help with updating all scene elements, with the added
@@ -35,6 +55,8 @@ declare class Scene {
35
55
  addCallback(cb: SceneStateCallback): SceneStateCallbackRemover;
36
56
  destroy(): void;
37
57
  insertElementAtIndex(element: ExcalidrawElement, index: number): void;
58
+ insertElementsAtIndex(elements: ExcalidrawElement[], index: number): void;
59
+ addNewElement: (element: ExcalidrawElement) => void;
38
60
  getElementIndex(elementId: string): number;
39
61
  }
40
62
  export default Scene;
@@ -0,0 +1,12 @@
1
+ import type { Drawable, Options } from "roughjs/bin/core";
2
+ import type { RoughGenerator } from "roughjs/bin/generator";
3
+ import type { ExcalidrawElement, NonDeletedExcalidrawElement, ExcalidrawSelectionElement } from "../element/types";
4
+ export declare const generateRoughOptions: (element: ExcalidrawElement, continuousPath?: boolean) => Options;
5
+ /**
6
+ * Generates the roughjs shape for given element.
7
+ *
8
+ * Low-level. Use `ShapeCache.generateElementShape` instead.
9
+ *
10
+ * @private
11
+ */
12
+ export declare const _generateElementShape: (element: Exclude<NonDeletedExcalidrawElement, ExcalidrawSelectionElement>, generator: RoughGenerator, isExporting?: boolean) => Drawable | Drawable[] | null;