@excalidraw/common 0.18.0-4a5c9e9 → 0.18.0-4ce38fb

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 (217) hide show
  1. package/dist/dev/index.js +204 -85
  2. package/dist/dev/index.js.map +3 -3
  3. package/dist/prod/index.js +3 -3
  4. package/dist/types/common/src/colors.d.ts +23 -1
  5. package/dist/types/common/src/constants.d.ts +66 -7
  6. package/dist/types/common/src/keys.d.ts +4 -0
  7. package/dist/types/common/src/points.d.ts +1 -1
  8. package/dist/types/common/src/random.d.ts +7 -0
  9. package/dist/types/common/src/utils.d.ts +6 -43
  10. package/dist/types/element/src/Scene.d.ts +7 -5
  11. package/dist/types/element/src/align.d.ts +2 -2
  12. package/dist/types/element/src/arrowEndpointText.d.ts +49 -0
  13. package/dist/types/element/src/arrows/focus.d.ts +5 -2
  14. package/dist/types/element/src/binding.d.ts +28 -13
  15. package/dist/types/element/src/bounds.d.ts +22 -7
  16. package/dist/types/element/src/bucketFill.d.ts +110 -0
  17. package/dist/types/element/src/collision.d.ts +14 -5
  18. package/dist/types/element/src/comparisons.d.ts +8 -5
  19. package/dist/types/element/src/convertToShape.d.ts +23 -0
  20. package/dist/types/element/src/delta.d.ts +23 -1
  21. package/dist/types/element/src/distribute.d.ts +2 -2
  22. package/dist/types/element/src/dragElements.d.ts +27 -0
  23. package/dist/types/element/src/duplicate.d.ts +64 -3
  24. package/dist/types/element/src/embeddable.d.ts +2 -2
  25. package/dist/types/element/src/flowchart.d.ts +11 -7
  26. package/dist/types/element/src/fractionalIndex.d.ts +2 -2
  27. package/dist/types/element/src/frame.d.ts +11 -10
  28. package/dist/types/element/src/groups.d.ts +9 -9
  29. package/dist/types/element/src/index.d.ts +6 -1
  30. package/dist/types/element/src/linearElementEditor.d.ts +27 -10
  31. package/dist/types/element/src/listMarker.d.ts +34 -0
  32. package/dist/types/element/src/mutateElement.d.ts +1 -1
  33. package/dist/types/element/src/newElement.d.ts +53 -3
  34. package/dist/types/element/src/renderElement.d.ts +21 -7
  35. package/dist/types/element/src/resizeElements.d.ts +2 -2
  36. package/dist/types/element/src/selection.d.ts +6 -6
  37. package/dist/types/element/src/shape.d.ts +27 -1
  38. package/dist/types/element/src/sizeHelpers.d.ts +6 -0
  39. package/dist/types/element/src/sortElements.d.ts +10 -0
  40. package/dist/types/element/src/stickyNote.d.ts +183 -0
  41. package/dist/types/element/src/textElement.d.ts +20 -9
  42. package/dist/types/element/src/transform.d.ts +26 -7
  43. package/dist/types/element/src/typeChecks.d.ts +29 -27
  44. package/dist/types/element/src/types.d.ts +43 -7
  45. package/dist/types/element/src/utils.d.ts +15 -4
  46. package/dist/types/element/src/zindex.d.ts +2 -2
  47. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +87 -18
  48. package/dist/types/excalidraw/actions/actionAlign.d.ts +6 -6
  49. package/dist/types/excalidraw/actions/actionBoundText.d.ts +58 -12
  50. package/dist/types/excalidraw/actions/actionCanvas.d.ts +266 -941
  51. package/dist/types/excalidraw/actions/actionClipboard.d.ts +58 -12
  52. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +29 -6
  53. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +89 -19
  54. package/dist/types/excalidraw/actions/actionDeselect.d.ts +30 -7
  55. package/dist/types/excalidraw/actions/actionDistribute.d.ts +2 -3
  56. package/dist/types/excalidraw/actions/actionElementLink.d.ts +29 -6
  57. package/dist/types/excalidraw/actions/actionElementLock.d.ts +59 -13
  58. package/dist/types/excalidraw/actions/actionExport.d.ts +64 -18
  59. package/dist/types/excalidraw/actions/actionFinalize.d.ts +1 -0
  60. package/dist/types/excalidraw/actions/actionFrame.d.ts +150 -203
  61. package/dist/types/excalidraw/actions/actionGroup.d.ts +73 -27
  62. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +84 -9
  63. package/dist/types/excalidraw/actions/actionLink.d.ts +30 -7
  64. package/dist/types/excalidraw/actions/actionMenu.d.ts +29 -6
  65. package/dist/types/excalidraw/actions/actionProperties.d.ts +96 -34
  66. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +34 -11
  67. package/dist/types/excalidraw/actions/actionStyles.d.ts +30 -7
  68. package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +1 -1
  69. package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +30 -7
  70. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +33 -11
  71. package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +30 -7
  72. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +30 -7
  73. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +33 -11
  74. package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +1 -1
  75. package/dist/types/excalidraw/actions/{actionEmbeddable.d.ts → actionToggleShowHints.d.ts} +45 -19
  76. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +30 -7
  77. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +31 -8
  78. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +30 -7
  79. package/dist/types/excalidraw/actions/colorTargets.d.ts +39 -0
  80. package/dist/types/excalidraw/actions/index.d.ts +2 -2
  81. package/dist/types/excalidraw/actions/manager.d.ts +1 -0
  82. package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
  83. package/dist/types/excalidraw/actions/types.d.ts +8 -4
  84. package/dist/types/excalidraw/{animated-trail.d.ts → animatedTrail.d.ts} +4 -3
  85. package/dist/types/excalidraw/appState.d.ts +34 -10
  86. package/dist/types/excalidraw/components/Actions.d.ts +17 -12
  87. package/dist/types/excalidraw/components/ActiveConfirmDialog.d.ts +1 -1
  88. package/dist/types/excalidraw/components/App.arrowText.d.ts +70 -0
  89. package/dist/types/excalidraw/components/App.bucketFill.d.ts +48 -0
  90. package/dist/types/excalidraw/components/App.clipboard.d.ts +31 -0
  91. package/dist/types/excalidraw/components/App.cursor.d.ts +38 -0
  92. package/dist/types/excalidraw/components/App.d.ts +301 -93
  93. package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
  94. package/dist/types/excalidraw/components/App.duplicate.d.ts +101 -0
  95. package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
  96. package/dist/types/excalidraw/components/App.pan.d.ts +62 -0
  97. package/dist/types/excalidraw/components/App.text.d.ts +146 -0
  98. package/dist/types/excalidraw/components/App.textTool.d.ts +140 -0
  99. package/dist/types/excalidraw/components/App.toolDrag.d.ts +63 -0
  100. package/dist/types/excalidraw/components/App.viewport.d.ts +113 -0
  101. package/dist/types/excalidraw/components/App.wheel.d.ts +26 -0
  102. package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +9 -3
  103. package/dist/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +3 -1
  104. package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +5 -1
  105. package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +9 -2
  106. package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +4 -2
  107. package/dist/types/excalidraw/components/ColorPicker/TopPicks.d.ts +8 -1
  108. package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -1
  109. package/dist/types/excalidraw/components/ColorPicker/colorTopPicksDnD.d.ts +11 -0
  110. package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -1
  111. package/dist/types/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -2
  112. package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +2 -2
  113. package/dist/types/excalidraw/components/CursorHint.d.ts +46 -0
  114. package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -1
  115. package/dist/types/excalidraw/components/FileDropOverlay.d.ts +2 -0
  116. package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +4 -1
  117. package/dist/types/excalidraw/components/FontPicker/FontPickerList.d.ts +6 -1
  118. package/dist/types/excalidraw/components/FontPicker/fontTopPicksDnD.d.ts +12 -0
  119. package/dist/types/excalidraw/components/IconButton.d.ts +48 -0
  120. package/dist/types/excalidraw/components/Island.d.ts +7 -0
  121. package/dist/types/excalidraw/components/LaserPointerButton.d.ts +2 -4
  122. package/dist/types/excalidraw/components/LayerUI.d.ts +5 -2
  123. package/dist/types/excalidraw/components/LibraryMenu.d.ts +1 -1
  124. package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +6 -2
  125. package/dist/types/excalidraw/components/LibraryUnit.d.ts +7 -2
  126. package/dist/types/excalidraw/components/LockButton.d.ts +3 -4
  127. package/dist/types/excalidraw/components/MagicButton.d.ts +0 -2
  128. package/dist/types/excalidraw/components/MobileMenu.d.ts +4 -4
  129. package/dist/types/excalidraw/components/MobileToolbar.d.ts +9 -0
  130. package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
  131. package/dist/types/excalidraw/components/PenModeButton.d.ts +2 -5
  132. package/dist/types/excalidraw/components/Popover.d.ts +1 -3
  133. package/dist/types/excalidraw/components/{ButtonIcon.d.ts → RadioButton.d.ts} +2 -5
  134. package/dist/types/excalidraw/components/SVGLayer.d.ts +1 -1
  135. package/dist/types/excalidraw/components/SearchMenu.d.ts +1 -1
  136. package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +1 -1
  137. package/dist/types/excalidraw/components/Stats/Angle.d.ts +2 -2
  138. package/dist/types/excalidraw/components/Stats/Dimension.d.ts +2 -2
  139. package/dist/types/excalidraw/components/Stats/DragInput.d.ts +2 -2
  140. package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +2 -2
  141. package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +2 -2
  142. package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +2 -2
  143. package/dist/types/excalidraw/components/Stats/Position.d.ts +3 -3
  144. package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
  145. package/dist/types/excalidraw/components/TTDDialog/TTDContext.d.ts +4 -4
  146. package/dist/types/excalidraw/components/TTDDialog/useTTDChatStorage.d.ts +3 -3
  147. package/dist/types/excalidraw/components/ToolPopover.d.ts +3 -6
  148. package/dist/types/excalidraw/components/Toolbar.d.ts +11 -0
  149. package/dist/types/excalidraw/components/Tools.d.ts +151 -0
  150. package/dist/types/excalidraw/components/Tooltip.d.ts +15 -1
  151. package/dist/types/excalidraw/components/TopPicksDnD/TopPicksContextMenu.d.ts +14 -0
  152. package/dist/types/excalidraw/components/TopPicksDnD/TopPicksTip.d.ts +11 -0
  153. package/dist/types/excalidraw/components/TopPicksDnD/topPicksDnD.d.ts +58 -0
  154. package/dist/types/excalidraw/components/UserList.d.ts +3 -2
  155. package/dist/types/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.d.ts +11 -0
  156. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +3 -1
  157. package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +3 -0
  158. package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
  159. package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +2 -1
  160. package/dist/types/excalidraw/components/footer/Footer.d.ts +3 -1
  161. package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +2 -2
  162. package/dist/types/excalidraw/components/icons.d.ts +7 -1
  163. package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +10 -4
  164. package/dist/types/excalidraw/components/positionElementBesideCursor.d.ts +26 -0
  165. package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +39 -0
  166. package/dist/types/excalidraw/data/blob.d.ts +70 -24
  167. package/dist/types/excalidraw/data/index.d.ts +4 -4
  168. package/dist/types/excalidraw/data/json.d.ts +41 -18
  169. package/dist/types/excalidraw/data/library.d.ts +1 -1
  170. package/dist/types/excalidraw/drawShapeTrail.d.ts +16 -0
  171. package/dist/types/excalidraw/eraser/index.d.ts +2 -3
  172. package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -2
  173. package/dist/types/excalidraw/hooks/useAppStateValue.d.ts +29 -0
  174. package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
  175. package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +5 -5
  176. package/dist/types/excalidraw/{laser-trails.d.ts → laserTrails.d.ts} +5 -7
  177. package/dist/types/excalidraw/lasso/index.d.ts +2 -3
  178. package/dist/types/excalidraw/lasso/utils.d.ts +2 -0
  179. package/dist/types/excalidraw/renderOverrides.d.ts +9 -0
  180. package/dist/types/excalidraw/renderer/animation.d.ts +5 -1
  181. package/dist/types/excalidraw/renderer/helpers.d.ts +25 -0
  182. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +2 -4
  183. package/dist/types/excalidraw/scene/Renderer.d.ts +489 -20
  184. package/dist/types/excalidraw/scene/export.d.ts +3 -3
  185. package/dist/types/excalidraw/scene/index.d.ts +2 -2
  186. package/dist/types/excalidraw/scene/types.d.ts +7 -4
  187. package/dist/types/excalidraw/snapping.d.ts +7 -7
  188. package/dist/types/excalidraw/types.d.ts +531 -29
  189. package/dist/types/excalidraw/viewport.d.ts +302 -0
  190. package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +13 -3
  191. package/dist/types/fractional-indexing/src/index.d.ts +29 -0
  192. package/dist/types/laser-pointer/src/index.d.ts +2 -0
  193. package/dist/types/laser-pointer/src/math.d.ts +16 -0
  194. package/dist/types/laser-pointer/src/simplify.d.ts +2 -0
  195. package/dist/types/laser-pointer/src/state.d.ts +36 -0
  196. package/dist/types/math/src/constants.d.ts +0 -1
  197. package/dist/types/math/src/curve.d.ts +23 -13
  198. package/dist/types/math/src/index.d.ts +1 -0
  199. package/dist/types/math/src/pca.d.ts +79 -0
  200. package/dist/types/math/src/point.d.ts +1 -0
  201. package/dist/types/math/src/polygon.d.ts +25 -1
  202. package/dist/types/math/src/segment.d.ts +6 -0
  203. package/dist/types/utils/src/export.d.ts +4 -3
  204. package/dist/types/utils/src/index.d.ts +1 -2
  205. package/dist/types/utils/src/shape.d.ts +2 -2
  206. package/package.json +1 -1
  207. package/dist/types/excalidraw/animation-frame-handler.d.ts +0 -16
  208. package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +0 -10
  209. package/dist/types/excalidraw/components/HandButton.d.ts +0 -10
  210. package/dist/types/excalidraw/components/MobileToolBar.d.ts +0 -10
  211. package/dist/types/excalidraw/components/ToolButton.d.ts +0 -49
  212. package/dist/types/excalidraw/components/shapes.d.ts +0 -263
  213. package/dist/types/excalidraw/cursor.d.ts +0 -5
  214. package/dist/types/excalidraw/scene/scroll.d.ts +0 -18
  215. package/dist/types/excalidraw/scene/zoom.d.ts +0 -12
  216. package/dist/types/utils/src/bbox.d.ts +0 -9
  217. package/dist/types/utils/src/withinBounds.d.ts +0 -19
@@ -0,0 +1,9 @@
1
+ import type { ElementRenderOffsets, ElementRenderOverrides } from "./types";
2
+ /** Validate and copy before publishing, so a rejected snapshot changes nothing. */
3
+ export declare const copyElementRenderOverrides: (overrides: ElementRenderOverrides | null) => ElementRenderOverrides;
4
+ /**
5
+ * Extracts the offsets of a snapshot, returning `previous` when they are the
6
+ * same. Visibility is memoized on this map's identity, so a snapshot that only
7
+ * changes opacities (a fade) never re-runs viewport geometry.
8
+ */
9
+ export declare const getElementRenderOffsets: (overrides: ElementRenderOverrides, previous: ElementRenderOffsets) => ElementRenderOffsets;
@@ -3,10 +3,14 @@ export type Animation<R extends object> = (params: {
3
3
  state?: R;
4
4
  }) => R | null | undefined;
5
5
  export declare class AnimationController {
6
- private static isRunning;
6
+ private static scheduledFrame;
7
7
  private static animations;
8
8
  static start<R extends object>(key: string, animation: Animation<R>): void;
9
+ private static scheduleNextFrame;
10
+ private static cancelScheduledFrame;
11
+ private static cancelScheduledFrameIfIdle;
9
12
  private static tick;
10
13
  static running(key: string): boolean;
11
14
  static cancel(key: string): void;
15
+ static reset(): void;
12
16
  }
@@ -1,6 +1,31 @@
1
1
  import type { StaticCanvasRenderConfig } from "../scene/types";
2
2
  import type { AppState, StaticCanvasAppState } from "../types";
3
+ export declare const DEFAULT_SELECTION_COLOR = "#6965db";
4
+ /**
5
+ * Returns the theme's selection color (`--color-selection`), read from the
6
+ * computed style of any element inside the editor container so that host
7
+ * overrides are respected. Falls back to the default when unavailable.
8
+ */
9
+ export declare const getSelectionColor: (element: Element | null | undefined) => string;
3
10
  export declare const fillCircle: (context: CanvasRenderingContext2D, cx: number, cy: number, radius: number, stroke: boolean, fill?: boolean) => void;
11
+ /**
12
+ * The scroll the renderers draw at: the real one, rounded to whole device
13
+ * pixels. Panning writes a fractional scroll (pointer delta ÷ zoom), and an
14
+ * element's cached bitmap blitted at a fractional device offset gets
15
+ * resampled — so as the fraction drifts under a pan, every element pulses
16
+ * between crisp and soft. A whole-pixel scroll moves the scene the way a
17
+ * browser scrolls a page: each element keeps its own, constant sub-pixel
18
+ * phase and a pan never changes how anything is filtered. The difference
19
+ * stays under half a device pixel, so hit-testing and DOM overlays keep
20
+ * using the real scroll. Identity when nothing needs to change.
21
+ */
22
+ export declare const snapScrollToDevicePixels: <T extends {
23
+ scrollX: number;
24
+ scrollY: number;
25
+ zoom: {
26
+ value: number;
27
+ };
28
+ }>(appState: T, scale: number) => T;
4
29
  export declare const getNormalizedCanvasDimensions: (canvas: HTMLCanvasElement, scale: number) => [number, number];
5
30
  export declare const bootstrapCanvas: ({ canvas, scale, normalizedWidth, normalizedHeight, theme, isExporting, viewBackgroundColor, }: {
6
31
  canvas: HTMLCanvasElement;
@@ -1,9 +1,7 @@
1
1
  import { getScrollBars } from "../scene/scrollbars";
2
- import type { InteractiveSceneRenderConfig, RenderableElementsMap } from "../scene/types";
3
- declare const _renderInteractiveScene: ({ app, canvas, elementsMap, visibleElements, selectedElements, allElementsMap, scale, appState, renderConfig, editorInterface, animationState, deltaTime, }: InteractiveSceneRenderConfig) => {
2
+ import type { InteractiveSceneRenderConfig } from "../scene/types";
3
+ declare const _renderInteractiveScene: ({ app, canvas, elementsMap, visibleElements, selectedElements, allElementsMap, scale, appState: unsnappedAppState, renderConfig, editorInterface, animationState, deltaTime, }: InteractiveSceneRenderConfig) => {
4
4
  scrollBars?: ReturnType<typeof getScrollBars>;
5
- atLeastOneVisibleElement: boolean;
6
- elementsMap: RenderableElementsMap;
7
5
  animationState?: typeof animationState;
8
6
  };
9
7
  /**
@@ -1,30 +1,499 @@
1
- import type { ExcalidrawElement, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
1
+ import type { NonDeletedExcalidrawElement } from "@excalidraw/element/types";
2
2
  import type { Scene } from "@excalidraw/element";
3
3
  import type { RenderableElementsMap } from "./types";
4
- import type { AppState } from "../types";
4
+ import type { AppState, ElementRenderOffsets } from "../types";
5
+ type GetRenderableElementsOpts = {
6
+ zoom: AppState["zoom"];
7
+ offsetLeft: AppState["offsetLeft"];
8
+ offsetTop: AppState["offsetTop"];
9
+ scrollX: AppState["scrollX"];
10
+ scrollY: AppState["scrollY"];
11
+ height: AppState["height"];
12
+ width: AppState["width"];
13
+ editingTextElement: AppState["editingTextElement"];
14
+ newElement: AppState["newElement"];
15
+ selectedElements: readonly NonDeletedExcalidrawElement[];
16
+ selectedElementsAreBeingDragged: AppState["selectedElementsAreBeingDragged"];
17
+ frameToHighlight: AppState["frameToHighlight"];
18
+ };
5
19
  export declare class Renderer {
6
20
  private scene;
7
21
  constructor(scene: Scene);
8
- getRenderableElements: ((opts: {
9
- zoom: Readonly<{
10
- value: import("../types").NormalizedZoomValue;
11
- }>;
12
- offsetLeft: AppState["offsetLeft"];
13
- offsetTop: AppState["offsetTop"];
14
- scrollX: AppState["scrollX"];
15
- scrollY: AppState["scrollY"];
16
- height: AppState["height"];
17
- width: AppState["width"];
18
- editingTextElement: AppState["editingTextElement"];
19
- /** note: first render of newElement will always bust the cache
20
- * (we'd have to prefilter elements outside of this function) */
21
- newElementId: ExcalidrawElement["id"] | undefined;
22
- sceneNonce: ReturnType<InstanceType<typeof Scene>["getSceneNonce"]>;
23
- }) => {
22
+ /**
23
+ * Adjusts the document-visible set for render-override translations: an
24
+ * element leaves it when its offset moves it out of view and enters it when
25
+ * its offset brings it in; everything else keeps its document visibility.
26
+ * Only translated elements go through viewport geometry. The result is
27
+ * memoized on the offsets' identity so that opacity-only snapshots don't
28
+ * reach it at all.
29
+ */
30
+ getVisibleElementsWithRenderOffsets(visibleElements: readonly NonDeletedExcalidrawElement[], elementsMap: RenderableElementsMap, appState: AppState, offsets: ElementRenderOffsets): readonly NonDeletedExcalidrawElement[];
31
+ private _getVisibleElementsWithRenderOffsets;
32
+ /** the document-visible elements as a set, cached per visible array */
33
+ private visibleSets;
34
+ private getVisibleSet;
35
+ private getVisibleCanvasElements;
36
+ private getRenderableElementsMap;
37
+ private sortSelectedElementsIntoHighlightedFrame;
38
+ private _getRenderableElements;
39
+ getRenderableElements: (opts: GetRenderableElementsOpts) => {
24
40
  elementsMap: RenderableElementsMap;
25
41
  visibleElements: readonly NonDeletedExcalidrawElement[];
26
- }) & {
27
- clear: () => void;
42
+ newElementCanvasElement: (Readonly<{
43
+ id: string;
44
+ x: number;
45
+ y: number;
46
+ strokeColor: string;
47
+ backgroundColor: string;
48
+ fillStyle: import("@excalidraw/element/types").FillStyle;
49
+ strokeWidth: number;
50
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
51
+ roundness: null | {
52
+ type: import("@excalidraw/element/types").RoundnessType;
53
+ value?: number;
54
+ };
55
+ roughness: number;
56
+ opacity: number;
57
+ width: number;
58
+ height: number;
59
+ angle: import("@excalidraw/math").Radians;
60
+ seed: number;
61
+ version: number;
62
+ versionNonce: number;
63
+ index: import("@excalidraw/element/types").FractionalIndex | null;
64
+ isDeleted: boolean;
65
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
66
+ frameId: string | null;
67
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
68
+ updated: number;
69
+ created: number | null;
70
+ link: string | null;
71
+ locked: boolean;
72
+ customData?: Record<string, any>;
73
+ }> & Readonly<{
74
+ type: "line" | "arrow";
75
+ points: readonly import("@excalidraw/math").LocalPoint[];
76
+ startBinding: import("@excalidraw/element/types").FixedPointBinding | null;
77
+ endBinding: import("@excalidraw/element/types").FixedPointBinding | null;
78
+ startArrowhead: import("@excalidraw/element/types").Arrowhead | null;
79
+ endArrowhead: import("@excalidraw/element/types").Arrowhead | null;
80
+ }> & {
81
+ isDeleted: false;
82
+ }) | (Readonly<{
83
+ id: string;
84
+ x: number;
85
+ y: number;
86
+ strokeColor: string;
87
+ backgroundColor: string;
88
+ fillStyle: import("@excalidraw/element/types").FillStyle;
89
+ strokeWidth: number;
90
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
91
+ roundness: null | {
92
+ type: import("@excalidraw/element/types").RoundnessType;
93
+ value?: number;
94
+ };
95
+ roughness: number;
96
+ opacity: number;
97
+ width: number;
98
+ height: number;
99
+ angle: import("@excalidraw/math").Radians;
100
+ seed: number;
101
+ version: number;
102
+ versionNonce: number;
103
+ index: import("@excalidraw/element/types").FractionalIndex | null;
104
+ isDeleted: boolean;
105
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
106
+ frameId: string | null;
107
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
108
+ updated: number;
109
+ created: number | null;
110
+ link: string | null;
111
+ locked: boolean;
112
+ customData?: Record<string, any>;
113
+ }> & {
114
+ type: "rectangle";
115
+ } & {
116
+ isDeleted: false;
117
+ }) | (Readonly<{
118
+ id: string;
119
+ x: number;
120
+ y: number;
121
+ strokeColor: string;
122
+ backgroundColor: string;
123
+ fillStyle: import("@excalidraw/element/types").FillStyle;
124
+ strokeWidth: number;
125
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
126
+ roundness: null | {
127
+ type: import("@excalidraw/element/types").RoundnessType;
128
+ value?: number;
129
+ };
130
+ roughness: number;
131
+ opacity: number;
132
+ width: number;
133
+ height: number;
134
+ angle: import("@excalidraw/math").Radians;
135
+ seed: number;
136
+ version: number;
137
+ versionNonce: number;
138
+ index: import("@excalidraw/element/types").FractionalIndex | null;
139
+ isDeleted: boolean;
140
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
141
+ frameId: string | null;
142
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
143
+ updated: number;
144
+ created: number | null;
145
+ link: string | null;
146
+ locked: boolean;
147
+ customData?: Record<string, any>;
148
+ }> & Readonly<{
149
+ type: "stickynote";
150
+ baseHeight: number;
151
+ }> & {
152
+ isDeleted: false;
153
+ }) | (Readonly<{
154
+ id: string;
155
+ x: number;
156
+ y: number;
157
+ strokeColor: string;
158
+ backgroundColor: string;
159
+ fillStyle: import("@excalidraw/element/types").FillStyle;
160
+ strokeWidth: number;
161
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
162
+ roundness: null | {
163
+ type: import("@excalidraw/element/types").RoundnessType;
164
+ value?: number;
165
+ };
166
+ roughness: number;
167
+ opacity: number;
168
+ width: number;
169
+ height: number;
170
+ angle: import("@excalidraw/math").Radians;
171
+ seed: number;
172
+ version: number;
173
+ versionNonce: number;
174
+ index: import("@excalidraw/element/types").FractionalIndex | null;
175
+ isDeleted: boolean;
176
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
177
+ frameId: string | null;
178
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
179
+ updated: number;
180
+ created: number | null;
181
+ link: string | null;
182
+ locked: boolean;
183
+ customData?: Record<string, any>;
184
+ }> & {
185
+ type: "diamond";
186
+ } & {
187
+ isDeleted: false;
188
+ }) | (Readonly<{
189
+ id: string;
190
+ x: number;
191
+ y: number;
192
+ strokeColor: string;
193
+ backgroundColor: string;
194
+ fillStyle: import("@excalidraw/element/types").FillStyle;
195
+ strokeWidth: number;
196
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
197
+ roundness: null | {
198
+ type: import("@excalidraw/element/types").RoundnessType;
199
+ value?: number;
200
+ };
201
+ roughness: number;
202
+ opacity: number;
203
+ width: number;
204
+ height: number;
205
+ angle: import("@excalidraw/math").Radians;
206
+ seed: number;
207
+ version: number;
208
+ versionNonce: number;
209
+ index: import("@excalidraw/element/types").FractionalIndex | null;
210
+ isDeleted: boolean;
211
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
212
+ frameId: string | null;
213
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
214
+ updated: number;
215
+ created: number | null;
216
+ link: string | null;
217
+ locked: boolean;
218
+ customData?: Record<string, any>;
219
+ }> & {
220
+ type: "ellipse";
221
+ } & {
222
+ isDeleted: false;
223
+ }) | (Readonly<{
224
+ id: string;
225
+ x: number;
226
+ y: number;
227
+ strokeColor: string;
228
+ backgroundColor: string;
229
+ fillStyle: import("@excalidraw/element/types").FillStyle;
230
+ strokeWidth: number;
231
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
232
+ roundness: null | {
233
+ type: import("@excalidraw/element/types").RoundnessType;
234
+ value?: number;
235
+ };
236
+ roughness: number;
237
+ opacity: number;
238
+ width: number;
239
+ height: number;
240
+ angle: import("@excalidraw/math").Radians;
241
+ seed: number;
242
+ version: number;
243
+ versionNonce: number;
244
+ index: import("@excalidraw/element/types").FractionalIndex | null;
245
+ isDeleted: boolean;
246
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
247
+ frameId: string | null;
248
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
249
+ updated: number;
250
+ created: number | null;
251
+ link: string | null;
252
+ locked: boolean;
253
+ customData?: Record<string, any>;
254
+ }> & Readonly<{
255
+ type: "embeddable";
256
+ }> & {
257
+ isDeleted: false;
258
+ }) | (Readonly<{
259
+ id: string;
260
+ x: number;
261
+ y: number;
262
+ strokeColor: string;
263
+ backgroundColor: string;
264
+ fillStyle: import("@excalidraw/element/types").FillStyle;
265
+ strokeWidth: number;
266
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
267
+ roundness: null | {
268
+ type: import("@excalidraw/element/types").RoundnessType;
269
+ value?: number;
270
+ };
271
+ roughness: number;
272
+ opacity: number;
273
+ width: number;
274
+ height: number;
275
+ angle: import("@excalidraw/math").Radians;
276
+ seed: number;
277
+ version: number;
278
+ versionNonce: number;
279
+ index: import("@excalidraw/element/types").FractionalIndex | null;
280
+ isDeleted: boolean;
281
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
282
+ frameId: string | null;
283
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
284
+ updated: number;
285
+ created: number | null;
286
+ link: string | null;
287
+ locked: boolean;
288
+ customData?: Record<string, any>;
289
+ }> & Readonly<{
290
+ type: "iframe";
291
+ customData?: {
292
+ generationData?: import("@excalidraw/element/types").MagicGenerationData;
293
+ };
294
+ }> & {
295
+ isDeleted: false;
296
+ }) | (Readonly<{
297
+ id: string;
298
+ x: number;
299
+ y: number;
300
+ strokeColor: string;
301
+ backgroundColor: string;
302
+ fillStyle: import("@excalidraw/element/types").FillStyle;
303
+ strokeWidth: number;
304
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
305
+ roundness: null | {
306
+ type: import("@excalidraw/element/types").RoundnessType;
307
+ value?: number;
308
+ };
309
+ roughness: number;
310
+ opacity: number;
311
+ width: number;
312
+ height: number;
313
+ angle: import("@excalidraw/math").Radians;
314
+ seed: number;
315
+ version: number;
316
+ versionNonce: number;
317
+ index: import("@excalidraw/element/types").FractionalIndex | null;
318
+ isDeleted: boolean;
319
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
320
+ frameId: string | null;
321
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
322
+ updated: number;
323
+ created: number | null;
324
+ link: string | null;
325
+ locked: boolean;
326
+ customData?: Record<string, any>;
327
+ }> & Readonly<{
328
+ type: "image";
329
+ fileId: import("@excalidraw/element/types").FileId | null;
330
+ status: "pending" | "saved" | "error";
331
+ scale: [number, number];
332
+ crop: import("@excalidraw/element/types").ImageCrop | null;
333
+ }> & {
334
+ isDeleted: false;
335
+ }) | (Readonly<{
336
+ id: string;
337
+ x: number;
338
+ y: number;
339
+ strokeColor: string;
340
+ backgroundColor: string;
341
+ fillStyle: import("@excalidraw/element/types").FillStyle;
342
+ strokeWidth: number;
343
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
344
+ roundness: null | {
345
+ type: import("@excalidraw/element/types").RoundnessType;
346
+ value?: number;
347
+ };
348
+ roughness: number;
349
+ opacity: number;
350
+ width: number;
351
+ height: number;
352
+ angle: import("@excalidraw/math").Radians;
353
+ seed: number;
354
+ version: number;
355
+ versionNonce: number;
356
+ index: import("@excalidraw/element/types").FractionalIndex | null;
357
+ isDeleted: boolean;
358
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
359
+ frameId: string | null;
360
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
361
+ updated: number;
362
+ created: number | null;
363
+ link: string | null;
364
+ locked: boolean;
365
+ customData?: Record<string, any>;
366
+ }> & {
367
+ type: "frame";
368
+ name: string | null;
369
+ } & {
370
+ isDeleted: false;
371
+ }) | (Readonly<{
372
+ id: string;
373
+ x: number;
374
+ y: number;
375
+ strokeColor: string;
376
+ backgroundColor: string;
377
+ fillStyle: import("@excalidraw/element/types").FillStyle;
378
+ strokeWidth: number;
379
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
380
+ roundness: null | {
381
+ type: import("@excalidraw/element/types").RoundnessType;
382
+ value?: number;
383
+ };
384
+ roughness: number;
385
+ opacity: number;
386
+ width: number;
387
+ height: number;
388
+ angle: import("@excalidraw/math").Radians;
389
+ seed: number;
390
+ version: number;
391
+ versionNonce: number;
392
+ index: import("@excalidraw/element/types").FractionalIndex | null;
393
+ isDeleted: boolean;
394
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
395
+ frameId: string | null;
396
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
397
+ updated: number;
398
+ created: number | null;
399
+ link: string | null;
400
+ locked: boolean;
401
+ customData?: Record<string, any>;
402
+ }> & {
403
+ type: "magicframe";
404
+ name: string | null;
405
+ } & {
406
+ isDeleted: false;
407
+ }) | (Readonly<{
408
+ id: string;
409
+ x: number;
410
+ y: number;
411
+ strokeColor: string;
412
+ backgroundColor: string;
413
+ fillStyle: import("@excalidraw/element/types").FillStyle;
414
+ strokeWidth: number;
415
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
416
+ roundness: null | {
417
+ type: import("@excalidraw/element/types").RoundnessType;
418
+ value?: number;
419
+ };
420
+ roughness: number;
421
+ opacity: number;
422
+ width: number;
423
+ height: number;
424
+ angle: import("@excalidraw/math").Radians;
425
+ seed: number;
426
+ version: number;
427
+ versionNonce: number;
428
+ index: import("@excalidraw/element/types").FractionalIndex | null;
429
+ isDeleted: boolean;
430
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
431
+ frameId: string | null;
432
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
433
+ updated: number;
434
+ created: number | null;
435
+ link: string | null;
436
+ locked: boolean;
437
+ customData?: Record<string, any>;
438
+ }> & Readonly<{
439
+ type: "text";
440
+ fontSize: number;
441
+ fontFamily: import("@excalidraw/element/types").FontFamilyValues;
442
+ baseFontSize: number | null;
443
+ text: string;
444
+ textAlign: import("@excalidraw/element/types").TextAlign;
445
+ verticalAlign: import("@excalidraw/element/types").VerticalAlign;
446
+ containerId: import("@excalidraw/element/types").ExcalidrawTextContainer["id"] | null;
447
+ originalText: string;
448
+ autoResize: boolean;
449
+ lineHeight: number & {
450
+ _brand: "unitlessLineHeight";
451
+ };
452
+ labelPosition?: number | null;
453
+ }> & {
454
+ isDeleted: false;
455
+ }) | (Readonly<{
456
+ id: string;
457
+ x: number;
458
+ y: number;
459
+ strokeColor: string;
460
+ backgroundColor: string;
461
+ fillStyle: import("@excalidraw/element/types").FillStyle;
462
+ strokeWidth: number;
463
+ strokeStyle: import("@excalidraw/element/types").StrokeStyle;
464
+ roundness: null | {
465
+ type: import("@excalidraw/element/types").RoundnessType;
466
+ value?: number;
467
+ };
468
+ roughness: number;
469
+ opacity: number;
470
+ width: number;
471
+ height: number;
472
+ angle: import("@excalidraw/math").Radians;
473
+ seed: number;
474
+ version: number;
475
+ versionNonce: number;
476
+ index: import("@excalidraw/element/types").FractionalIndex | null;
477
+ isDeleted: boolean;
478
+ groupIds: readonly import("@excalidraw/element/types").GroupId[];
479
+ frameId: string | null;
480
+ boundElements: readonly import("@excalidraw/element/types").BoundElement[] | null;
481
+ updated: number;
482
+ created: number | null;
483
+ link: string | null;
484
+ locked: boolean;
485
+ customData?: Record<string, any>;
486
+ }> & Readonly<{
487
+ type: "freedraw";
488
+ points: readonly import("@excalidraw/math").LocalPoint[];
489
+ pressures: readonly number[];
490
+ simulatePressure: boolean;
491
+ strokeOptions: import("@excalidraw/element/types").StrokeOptions;
492
+ }> & {
493
+ isDeleted: false;
494
+ }) | null;
495
+ canvasNonce: string;
28
496
  };
29
497
  destroy(): void;
30
498
  }
499
+ export {};
@@ -1,10 +1,10 @@
1
- import type { ExcalidrawFrameLikeElement, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
1
+ import type { ExcalidrawFrameLikeElement, NonDeleted, NonDeletedExcalidrawElement } from "@excalidraw/element/types";
2
2
  import type { AppState, BinaryFiles } from "../types";
3
3
  export declare const exportToCanvas: (elements: readonly NonDeletedExcalidrawElement[], appState: AppState, files: BinaryFiles, { exportBackground, exportPadding, viewBackgroundColor, exportingFrame, }: {
4
4
  exportBackground: boolean;
5
5
  exportPadding?: number;
6
6
  viewBackgroundColor: string;
7
- exportingFrame?: ExcalidrawFrameLikeElement | null;
7
+ exportingFrame?: NonDeleted<ExcalidrawFrameLikeElement> | null;
8
8
  }, createCanvas?: (width: number, height: number) => {
9
9
  canvas: HTMLCanvasElement;
10
10
  scale: number;
@@ -22,7 +22,7 @@ export declare const exportToSvg: (elements: readonly NonDeletedExcalidrawElemen
22
22
  * if true, all embeddables passed in will be rendered when possible.
23
23
  */
24
24
  renderEmbeddables?: boolean;
25
- exportingFrame?: ExcalidrawFrameLikeElement | null;
25
+ exportingFrame?: NonDeleted<ExcalidrawFrameLikeElement> | null;
26
26
  skipInliningFonts?: true;
27
27
  reuseImages?: boolean;
28
28
  }) => Promise<SVGSVGElement>;
@@ -1,4 +1,4 @@
1
1
  export { isSomeElementSelected, getElementsWithinSelection, getSelectedElements, getTargetElements, } from "@excalidraw/element";
2
- export { calculateScrollCenter } from "./scroll";
3
- export { hasBackground, hasStrokeWidth, hasStrokeStyle, canHaveArrowheads, canChangeRoundness, } from "@excalidraw/element";
2
+ export { getScrollToContentState } from "../viewport";
3
+ export { hasBackground, hasFillStyle, hasRoughness, hasStrokeWidth, hasStrokeStyle, hasFreedrawMode, canHaveArrowheads, canChangeRoundness, } from "@excalidraw/element";
4
4
  export { getNormalizedZoom, getNormalizedGridSize, getNormalizedGridStep, } from "./normalize";
@@ -1,7 +1,7 @@
1
1
  import type { UserIdleState, EditorInterface } from "@excalidraw/common";
2
2
  import type { ExcalidrawElement, NonDeletedElementsMap, NonDeletedExcalidrawElement, NonDeletedSceneElementsMap } from "@excalidraw/element/types";
3
3
  import type { MakeBrand } from "@excalidraw/common/utility-types";
4
- import type { AppClassProperties, AppState, EmbedsValidationStatus, ElementsPendingErasure, InteractiveCanvasAppState, StaticCanvasAppState, SocketId, PendingExcalidrawElements } from "../types";
4
+ import type { AppClassProperties, AppState, EmbedsValidationStatus, ElementRenderOverrides, ElementsPendingErasure, InteractiveCanvasAppState, StaticCanvasAppState, SocketId, PendingExcalidrawElements } from "../types";
5
5
  import type { RoughCanvas } from "roughjs/bin/canvas";
6
6
  import type { Drawable } from "roughjs/bin/core";
7
7
  export type RenderableElementsMap = NonDeletedElementsMap & MakeBrand<"RenderableElementsMap">;
@@ -9,6 +9,9 @@ export type StaticCanvasRenderConfig = {
9
9
  canvasBackgroundColor: AppState["viewBackgroundColor"];
10
10
  imageCache: AppClassProperties["imageCache"];
11
11
  renderGrid: boolean;
12
+ /** whether to render link icons on elements with links (never rendered
13
+ when exporting). @default true */
14
+ renderLinks?: boolean;
12
15
  /** when exporting the behavior is slightly different (e.g. we can't use
13
16
  CSS filters), and we disable render optimizations for best output */
14
17
  isExporting: boolean;
@@ -16,6 +19,7 @@ export type StaticCanvasRenderConfig = {
16
19
  elementsPendingErasure: ElementsPendingErasure;
17
20
  pendingFlowchartNodes: PendingExcalidrawElements | null;
18
21
  theme: AppState["theme"];
22
+ elementRenderOverrides?: ElementRenderOverrides;
19
23
  };
20
24
  export type SVGRenderConfig = {
21
25
  offsetX: number;
@@ -52,8 +56,6 @@ export type InteractiveCanvasRenderConfig = {
52
56
  renderScrollbars?: boolean;
53
57
  };
54
58
  export type RenderInteractiveSceneCallback = {
55
- atLeastOneVisibleElement: boolean;
56
- elementsMap: RenderableElementsMap;
57
59
  scrollBars?: ScrollBars;
58
60
  };
59
61
  export type StaticSceneRenderConfig = {
@@ -89,7 +91,7 @@ export type InteractiveSceneRenderConfig = {
89
91
  export type NewElementSceneRenderConfig = {
90
92
  canvas: HTMLCanvasElement | null;
91
93
  rc: RoughCanvas;
92
- newElement: ExcalidrawElement | null;
94
+ newElement: NonDeletedExcalidrawElement | null;
93
95
  elementsMap: RenderableElementsMap;
94
96
  allElementsMap: NonDeletedSceneElementsMap;
95
97
  scale: number;
@@ -131,6 +133,7 @@ export type ElementShapes = {
131
133
  arrow: Drawable[];
132
134
  line: Drawable[];
133
135
  text: null;
136
+ stickynote: null;
134
137
  image: null;
135
138
  frame: null;
136
139
  magicframe: null;