@nous-excalidraw/math 0.18.4 → 0.18.5

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 (38) hide show
  1. package/dist/types/element/src/typeChecks.d.ts +2 -0
  2. package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +6 -0
  3. package/dist/types/excalidraw/actions/actionBoundText.d.ts +4 -0
  4. package/dist/types/excalidraw/actions/actionCanvas.d.ts +25 -1
  5. package/dist/types/excalidraw/actions/actionClipboard.d.ts +4 -0
  6. package/dist/types/excalidraw/actions/actionCropEditor.d.ts +2 -0
  7. package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +6 -0
  8. package/dist/types/excalidraw/actions/actionDeselect.d.ts +2 -0
  9. package/dist/types/excalidraw/actions/actionElementLink.d.ts +2 -0
  10. package/dist/types/excalidraw/actions/actionElementLock.d.ts +4 -0
  11. package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +2 -0
  12. package/dist/types/excalidraw/actions/actionExport.d.ts +5 -1
  13. package/dist/types/excalidraw/actions/actionFrame.d.ts +8 -0
  14. package/dist/types/excalidraw/actions/actionGroup.d.ts +4 -0
  15. package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +2 -0
  16. package/dist/types/excalidraw/actions/actionLink.d.ts +2 -0
  17. package/dist/types/excalidraw/actions/actionMenu.d.ts +2 -0
  18. package/dist/types/excalidraw/actions/actionProperties.d.ts +4 -0
  19. package/dist/types/excalidraw/actions/actionSelectAll.d.ts +2 -0
  20. package/dist/types/excalidraw/actions/actionStyles.d.ts +2 -0
  21. package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +2 -0
  22. package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +2 -0
  23. package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +2 -0
  24. package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +2 -0
  25. package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +2 -0
  26. package/dist/types/excalidraw/actions/actionToggleStats.d.ts +2 -0
  27. package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +2 -0
  28. package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +2 -0
  29. package/dist/types/excalidraw/components/App.d.ts +13 -0
  30. package/dist/types/excalidraw/components/FrameResizeDimensionLabel.d.ts +8 -0
  31. package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +1 -0
  32. package/dist/types/excalidraw/data/blob.d.ts +6 -2
  33. package/dist/types/excalidraw/data/json.d.ts +3 -1
  34. package/dist/types/excalidraw/renderer/interactiveScene.d.ts +1 -1
  35. package/dist/types/excalidraw/scene/types.d.ts +2 -0
  36. package/dist/types/excalidraw/types.d.ts +11 -0
  37. package/package.json +2 -2
  38. package/dist/types/excalidraw/components/LoadingMessage.d.ts +0 -5
@@ -31,6 +31,8 @@ export declare const isRectangularElement: (element?: ExcalidrawElement | null)
31
31
  export declare const isTextBindableContainer: (element: ExcalidrawElement | null, includeLocked?: boolean) => element is ExcalidrawTextContainer;
32
32
  export declare const isExcalidrawElement: (element: any) => element is ExcalidrawElement;
33
33
  export declare const isFlowchartNodeElement: (element: ExcalidrawElement) => element is ExcalidrawFlowchartNodeElement;
34
+ /** Elements that support an interactive hover outline along their geometry (not frame/image/embed). */
35
+ export declare const isHoverNativeOutlineShapeElement: (element: ExcalidrawElement | null | undefined) => boolean;
34
36
  export declare const hasBoundTextElement: (element: ExcalidrawElement | null) => element is MarkNonNullable<ExcalidrawBindableElement, "boundElements">;
35
37
  export declare const isBoundToContainer: (element: ExcalidrawElement | null) => element is ExcalidrawTextElementWithContainer;
36
38
  export declare const isArrowBoundToElement: (element: ExcalidrawArrowElement) => boolean;
@@ -35,6 +35,8 @@ export declare const actionAddToLibrary: {
35
35
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
36
36
  } | null;
37
37
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
38
+ hoverOutlineElementId: string | null;
39
+ hoveredFrameId: string | null;
38
40
  frameRendering: {
39
41
  enabled: boolean;
40
42
  name: boolean;
@@ -190,6 +192,8 @@ export declare const actionAddToLibrary: {
190
192
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
191
193
  } | null;
192
194
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
195
+ hoverOutlineElementId: string | null;
196
+ hoveredFrameId: string | null;
193
197
  frameRendering: {
194
198
  enabled: boolean;
195
199
  name: boolean;
@@ -350,6 +354,8 @@ export declare const actionAddToLibrary: {
350
354
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
351
355
  } | null;
352
356
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
357
+ hoverOutlineElementId: string | null;
358
+ hoveredFrameId: string | null;
353
359
  frameRendering: {
354
360
  enabled: boolean;
355
361
  name: boolean;
@@ -55,6 +55,8 @@ export declare const actionBindText: {
55
55
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
56
56
  } | null;
57
57
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
58
+ hoverOutlineElementId: string | null;
59
+ hoveredFrameId: string | null;
58
60
  frameRendering: {
59
61
  enabled: boolean;
60
62
  name: boolean;
@@ -227,6 +229,8 @@ export declare const actionWrapTextInContainer: {
227
229
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
228
230
  } | null;
229
231
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
232
+ hoverOutlineElementId: string | null;
233
+ hoveredFrameId: string | null;
230
234
  frameRendering: {
231
235
  enabled: boolean;
232
236
  name: boolean;
@@ -67,6 +67,7 @@ export declare const actionClearCanvas: {
67
67
  [id: string]: true;
68
68
  }>;
69
69
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
70
+ hoverOutlineElementId: string | null;
70
71
  activeEmbeddable: {
71
72
  element: import("@nous-excalidraw/element/types").NonDeletedExcalidrawElement;
72
73
  state: "hover" | "active";
@@ -103,6 +104,7 @@ export declare const actionClearCanvas: {
103
104
  shouldCacheIgnoreZoom: boolean;
104
105
  exportScale: number;
105
106
  currentItemArrowType: "sharp" | "round" | "elbow";
107
+ selectedElementsAreBeingDragged: boolean;
106
108
  bindMode: import("@nous-excalidraw/element/types").BindMode;
107
109
  contextMenu: {
108
110
  items: import("../components/ContextMenu").ContextMenuItems;
@@ -116,6 +118,7 @@ export declare const actionClearCanvas: {
116
118
  boxSelectionMode: import("../types").BoxSelectionMode;
117
119
  bindingPreference: "enabled" | "disabled";
118
120
  startBoundElement: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawBindableElement> | null;
121
+ hoveredFrameId: string | null;
119
122
  editingFrame: string | null;
120
123
  preferredSelectionTool: {
121
124
  type: "selection" | "lasso";
@@ -150,7 +153,6 @@ export declare const actionClearCanvas: {
150
153
  previousSelectedElementIds: {
151
154
  [id: string]: true;
152
155
  };
153
- selectedElementsAreBeingDragged: boolean;
154
156
  toast: {
155
157
  message: React.ReactNode;
156
158
  closable?: boolean;
@@ -216,6 +218,8 @@ export declare const actionZoomIn: {
216
218
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
217
219
  } | null;
218
220
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
221
+ hoverOutlineElementId: string | null;
222
+ hoveredFrameId: string | null;
219
223
  frameRendering: {
220
224
  enabled: boolean;
221
225
  name: boolean;
@@ -392,6 +396,8 @@ export declare const actionZoomOut: {
392
396
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
393
397
  } | null;
394
398
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
399
+ hoverOutlineElementId: string | null;
400
+ hoveredFrameId: string | null;
395
401
  frameRendering: {
396
402
  enabled: boolean;
397
403
  name: boolean;
@@ -568,6 +574,8 @@ export declare const actionResetZoom: {
568
574
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
569
575
  } | null;
570
576
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
577
+ hoverOutlineElementId: string | null;
578
+ hoveredFrameId: string | null;
571
579
  frameRendering: {
572
580
  enabled: boolean;
573
581
  name: boolean;
@@ -745,6 +753,8 @@ export declare const zoomToFitBounds: ({ bounds, appState, canvasOffsets, fitToV
745
753
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
746
754
  } | null;
747
755
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
756
+ hoverOutlineElementId: string | null;
757
+ hoveredFrameId: string | null;
748
758
  frameRendering: {
749
759
  enabled: boolean;
750
760
  name: boolean;
@@ -918,6 +928,8 @@ export declare const zoomToFit: ({ canvasOffsets, targetElements, appState, fitT
918
928
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
919
929
  } | null;
920
930
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
931
+ hoverOutlineElementId: string | null;
932
+ hoveredFrameId: string | null;
921
933
  frameRendering: {
922
934
  enabled: boolean;
923
935
  name: boolean;
@@ -1088,6 +1100,8 @@ export declare const actionZoomToFitSelectionInViewport: {
1088
1100
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
1089
1101
  } | null;
1090
1102
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
1103
+ hoverOutlineElementId: string | null;
1104
+ hoveredFrameId: string | null;
1091
1105
  frameRendering: {
1092
1106
  enabled: boolean;
1093
1107
  name: boolean;
@@ -1262,6 +1276,8 @@ export declare const actionZoomToFitSelection: {
1262
1276
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
1263
1277
  } | null;
1264
1278
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
1279
+ hoverOutlineElementId: string | null;
1280
+ hoveredFrameId: string | null;
1265
1281
  frameRendering: {
1266
1282
  enabled: boolean;
1267
1283
  name: boolean;
@@ -1437,6 +1453,8 @@ export declare const actionZoomToFit: {
1437
1453
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
1438
1454
  } | null;
1439
1455
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
1456
+ hoverOutlineElementId: string | null;
1457
+ hoveredFrameId: string | null;
1440
1458
  frameRendering: {
1441
1459
  enabled: boolean;
1442
1460
  name: boolean;
@@ -1612,6 +1630,8 @@ export declare const actionToggleEraserTool: {
1612
1630
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
1613
1631
  } | null;
1614
1632
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
1633
+ hoverOutlineElementId: string | null;
1634
+ hoveredFrameId: string | null;
1615
1635
  frameRendering: {
1616
1636
  enabled: boolean;
1617
1637
  name: boolean;
@@ -1778,6 +1798,8 @@ export declare const actionToggleLassoTool: {
1778
1798
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
1779
1799
  } | null;
1780
1800
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
1801
+ hoverOutlineElementId: string | null;
1802
+ hoveredFrameId: string | null;
1781
1803
  frameRendering: {
1782
1804
  enabled: boolean;
1783
1805
  name: boolean;
@@ -1943,6 +1965,8 @@ export declare const actionToggleHandTool: {
1943
1965
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
1944
1966
  } | null;
1945
1967
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
1968
+ hoverOutlineElementId: string | null;
1969
+ hoveredFrameId: string | null;
1946
1970
  frameRendering: {
1947
1971
  enabled: boolean;
1948
1972
  name: boolean;
@@ -36,6 +36,8 @@ export declare const actionPaste: {
36
36
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
37
37
  } | null;
38
38
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
39
+ hoverOutlineElementId: string | null;
40
+ hoveredFrameId: string | null;
39
41
  frameRendering: {
40
42
  enabled: boolean;
41
43
  name: boolean;
@@ -246,6 +248,8 @@ export declare const actionCopyAsPng: {
246
248
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
247
249
  } | null;
248
250
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
251
+ hoverOutlineElementId: string | null;
252
+ hoveredFrameId: string | null;
249
253
  frameRendering: {
250
254
  enabled: boolean;
251
255
  name: boolean;
@@ -37,6 +37,8 @@ export declare const actionToggleCropEditor: {
37
37
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
38
38
  } | null;
39
39
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
40
+ hoverOutlineElementId: string | null;
41
+ hoveredFrameId: string | null;
40
42
  frameRendering: {
41
43
  enabled: boolean;
42
44
  name: boolean;
@@ -38,6 +38,8 @@ export declare const actionDeleteSelected: {
38
38
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
39
39
  } | null;
40
40
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
41
+ hoverOutlineElementId: string | null;
42
+ hoveredFrameId: string | null;
41
43
  frameRendering: {
42
44
  enabled: boolean;
43
45
  name: boolean;
@@ -231,6 +233,8 @@ export declare const actionDeleteSelected: {
231
233
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
232
234
  } | null;
233
235
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
236
+ hoverOutlineElementId: string | null;
237
+ hoveredFrameId: string | null;
234
238
  frameRendering: {
235
239
  enabled: boolean;
236
240
  name: boolean;
@@ -397,6 +401,8 @@ export declare const actionDeleteSelected: {
397
401
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
398
402
  } | null;
399
403
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
404
+ hoverOutlineElementId: string | null;
405
+ hoveredFrameId: string | null;
400
406
  frameRendering: {
401
407
  enabled: boolean;
402
408
  name: boolean;
@@ -35,6 +35,8 @@ export declare const actionDeselect: {
35
35
  isMidpointSnappingEnabled: boolean;
36
36
  startBoundElement: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawBindableElement> | null;
37
37
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
38
+ hoverOutlineElementId: string | null;
39
+ hoveredFrameId: string | null;
38
40
  frameRendering: {
39
41
  enabled: boolean;
40
42
  name: boolean;
@@ -66,6 +66,8 @@ export declare const actionLinkToElement: {
66
66
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
67
67
  } | null;
68
68
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
69
+ hoverOutlineElementId: string | null;
70
+ hoveredFrameId: string | null;
69
71
  frameRendering: {
70
72
  enabled: boolean;
71
73
  name: boolean;
@@ -48,6 +48,8 @@ export declare const actionToggleElementLock: {
48
48
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
49
49
  } | null;
50
50
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
51
+ hoverOutlineElementId: string | null;
52
+ hoveredFrameId: string | null;
51
53
  frameRendering: {
52
54
  enabled: boolean;
53
55
  name: boolean;
@@ -219,6 +221,8 @@ export declare const actionUnlockAllElements: {
219
221
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
220
222
  } | null;
221
223
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
224
+ hoverOutlineElementId: string | null;
225
+ hoveredFrameId: string | null;
222
226
  frameRendering: {
223
227
  enabled: boolean;
224
228
  name: boolean;
@@ -39,6 +39,8 @@ export declare const actionSetEmbeddableAsActiveTool: {
39
39
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
40
40
  } | null;
41
41
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
42
+ hoverOutlineElementId: string | null;
43
+ hoveredFrameId: string | null;
42
44
  frameRendering: {
43
45
  enabled: boolean;
44
46
  name: boolean;
@@ -117,6 +117,7 @@ export declare const actionLoadScene: {
117
117
  [id: string]: true;
118
118
  }>;
119
119
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
120
+ hoverOutlineElementId: string | null;
120
121
  activeTool: {
121
122
  lastActiveTool: import("../types").ActiveTool | null;
122
123
  locked: boolean;
@@ -158,6 +159,7 @@ export declare const actionLoadScene: {
158
159
  shouldCacheIgnoreZoom: boolean;
159
160
  exportScale: number;
160
161
  currentItemArrowType: "sharp" | "round" | "elbow";
162
+ selectedElementsAreBeingDragged: boolean;
161
163
  bindMode: import("@nous-excalidraw/element/types").BindMode;
162
164
  gridSize: number;
163
165
  contextMenu: {
@@ -172,6 +174,7 @@ export declare const actionLoadScene: {
172
174
  boxSelectionMode: import("../types").BoxSelectionMode;
173
175
  bindingPreference: "enabled" | "disabled";
174
176
  startBoundElement: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawBindableElement> | null;
177
+ hoveredFrameId: string | null;
175
178
  editingFrame: string | null;
176
179
  preferredSelectionTool: {
177
180
  type: "selection" | "lasso";
@@ -210,7 +213,6 @@ export declare const actionLoadScene: {
210
213
  previousSelectedElementIds: {
211
214
  [id: string]: true;
212
215
  };
213
- selectedElementsAreBeingDragged: boolean;
214
216
  toast: {
215
217
  message: React.ReactNode;
216
218
  closable?: boolean;
@@ -266,6 +268,8 @@ export declare const actionLoadScene: {
266
268
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
267
269
  } | null;
268
270
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
271
+ hoverOutlineElementId: string | null;
272
+ hoveredFrameId: string | null;
269
273
  frameRendering: {
270
274
  enabled: boolean;
271
275
  name: boolean;
@@ -36,6 +36,8 @@ export declare const actionSelectAllElementsInFrame: {
36
36
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
37
37
  } | null;
38
38
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
39
+ hoverOutlineElementId: string | null;
40
+ hoveredFrameId: string | null;
39
41
  frameRendering: {
40
42
  enabled: boolean;
41
43
  name: boolean;
@@ -212,6 +214,8 @@ export declare const actionRemoveAllElementsFromFrame: {
212
214
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
213
215
  } | null;
214
216
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
217
+ hoverOutlineElementId: string | null;
218
+ hoveredFrameId: string | null;
215
219
  frameRendering: {
216
220
  enabled: boolean;
217
221
  name: boolean;
@@ -392,6 +396,8 @@ export declare const actionupdateFrameRendering: {
392
396
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
393
397
  } | null;
394
398
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
399
+ hoverOutlineElementId: string | null;
400
+ hoveredFrameId: string | null;
395
401
  editingFrame: string | null;
396
402
  elementsToHighlight: import("@nous-excalidraw/element/types").NonDeleted<ExcalidrawElement>[] | null;
397
403
  editingTextElement: import("@nous-excalidraw/element/types").ExcalidrawTextElement | null;
@@ -565,6 +571,8 @@ export declare const actionSetFrameAsActiveTool: {
565
571
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
566
572
  } | null;
567
573
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
574
+ hoverOutlineElementId: string | null;
575
+ hoveredFrameId: string | null;
568
576
  frameRendering: {
569
577
  enabled: boolean;
570
578
  name: boolean;
@@ -42,6 +42,8 @@ export declare const actionGroup: {
42
42
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
43
43
  } | null;
44
44
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
45
+ hoverOutlineElementId: string | null;
46
+ hoveredFrameId: string | null;
45
47
  frameRendering: {
46
48
  enabled: boolean;
47
49
  name: boolean;
@@ -217,6 +219,8 @@ export declare const actionUngroup: {
217
219
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
218
220
  } | null;
219
221
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
222
+ hoverOutlineElementId: string | null;
223
+ hoveredFrameId: string | null;
220
224
  frameRendering: {
221
225
  enabled: boolean;
222
226
  name: boolean;
@@ -69,6 +69,8 @@ export declare const actionToggleLinearEditor: {
69
69
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
70
70
  } | null;
71
71
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
72
+ hoverOutlineElementId: string | null;
73
+ hoveredFrameId: string | null;
72
74
  frameRendering: {
73
75
  enabled: boolean;
74
76
  name: boolean;
@@ -33,6 +33,8 @@ export declare const actionLink: {
33
33
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
34
34
  } | null;
35
35
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
36
+ hoverOutlineElementId: string | null;
37
+ hoveredFrameId: string | null;
36
38
  frameRendering: {
37
39
  enabled: boolean;
38
40
  name: boolean;
@@ -40,6 +40,8 @@ export declare const actionShortcuts: {
40
40
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
41
41
  } | null;
42
42
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
43
+ hoverOutlineElementId: string | null;
44
+ hoveredFrameId: string | null;
43
45
  frameRendering: {
44
46
  enabled: boolean;
45
47
  name: boolean;
@@ -62,6 +62,8 @@ export declare const actionDecreaseFontSize: {
62
62
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
63
63
  } | null;
64
64
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
65
+ hoverOutlineElementId: string | null;
66
+ hoveredFrameId: string | null;
65
67
  frameRendering: {
66
68
  enabled: boolean;
67
69
  name: boolean;
@@ -233,6 +235,8 @@ export declare const actionIncreaseFontSize: {
233
235
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
234
236
  } | null;
235
237
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
238
+ hoverOutlineElementId: string | null;
239
+ hoveredFrameId: string | null;
236
240
  frameRendering: {
237
241
  enabled: boolean;
238
242
  name: boolean;
@@ -40,6 +40,8 @@ export declare const actionSelectAll: {
40
40
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
41
41
  } | null;
42
42
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
43
+ hoverOutlineElementId: string | null;
44
+ hoveredFrameId: string | null;
43
45
  frameRendering: {
44
46
  enabled: boolean;
45
47
  name: boolean;
@@ -38,6 +38,8 @@ export declare const actionCopyStyles: {
38
38
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
39
39
  } | null;
40
40
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
41
+ hoverOutlineElementId: string | null;
42
+ hoveredFrameId: string | null;
41
43
  frameRendering: {
42
44
  enabled: boolean;
43
45
  name: boolean;
@@ -34,6 +34,8 @@ export declare const actionToggleArrowBinding: {
34
34
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
35
35
  } | null;
36
36
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
37
+ hoverOutlineElementId: string | null;
38
+ hoveredFrameId: string | null;
37
39
  frameRendering: {
38
40
  enabled: boolean;
39
41
  name: boolean;
@@ -39,6 +39,8 @@ export declare const actionToggleGridMode: {
39
39
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
40
40
  } | null;
41
41
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
42
+ hoverOutlineElementId: string | null;
43
+ hoveredFrameId: string | null;
42
44
  frameRendering: {
43
45
  enabled: boolean;
44
46
  name: boolean;
@@ -34,6 +34,8 @@ export declare const actionToggleMidpointSnapping: {
34
34
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
35
35
  } | null;
36
36
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
37
+ hoverOutlineElementId: string | null;
38
+ hoveredFrameId: string | null;
37
39
  frameRendering: {
38
40
  enabled: boolean;
39
41
  name: boolean;
@@ -37,6 +37,8 @@ export declare const actionToggleObjectsSnapMode: {
37
37
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
38
38
  } | null;
39
39
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
40
+ hoverOutlineElementId: string | null;
41
+ hoveredFrameId: string | null;
40
42
  frameRendering: {
41
43
  enabled: boolean;
42
44
  name: boolean;
@@ -43,6 +43,8 @@ export declare const actionToggleSearchMenu: {
43
43
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
44
44
  } | null;
45
45
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
46
+ hoverOutlineElementId: string | null;
47
+ hoveredFrameId: string | null;
46
48
  frameRendering: {
47
49
  enabled: boolean;
48
50
  name: boolean;
@@ -39,6 +39,8 @@ export declare const actionToggleStats: {
39
39
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
40
40
  } | null;
41
41
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
42
+ hoverOutlineElementId: string | null;
43
+ hoveredFrameId: string | null;
42
44
  frameRendering: {
43
45
  enabled: boolean;
44
46
  name: boolean;
@@ -36,6 +36,8 @@ export declare const actionToggleViewMode: {
36
36
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
37
37
  } | null;
38
38
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
39
+ hoverOutlineElementId: string | null;
40
+ hoveredFrameId: string | null;
39
41
  frameRendering: {
40
42
  enabled: boolean;
41
43
  name: boolean;
@@ -36,6 +36,8 @@ export declare const actionToggleZenMode: {
36
36
  midPoint?: import("@nous-excalidraw/math").GlobalPoint;
37
37
  } | null;
38
38
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
39
+ hoverOutlineElementId: string | null;
40
+ hoveredFrameId: string | null;
39
41
  frameRendering: {
40
42
  enabled: boolean;
41
43
  name: boolean;
@@ -67,6 +67,7 @@ export declare const useExcalidrawAPI: () => ExcalidrawImperativeAPI | null;
67
67
  declare class App extends React.Component<AppProps, AppState> {
68
68
  canvas: AppClassProperties["canvas"];
69
69
  interactiveCanvas: AppClassProperties["interactiveCanvas"];
70
+ outlineOverlayCanvas: AppClassProperties["outlineOverlayCanvas"];
70
71
  sessionExportThemeOverride: AppState["theme"] | undefined;
71
72
  rc: RoughCanvas;
72
73
  unmounted: boolean;
@@ -481,6 +482,12 @@ declare class App extends React.Component<AppProps, AppState> {
481
482
  private getTextElementAtPosition;
482
483
  private isHittingTextAutoResizeHandle;
483
484
  private handleTextAutoResizeHandlePointerDown;
485
+ /**
486
+ * When a frame wins z-order at a point, its full interior still hits — so
487
+ * images/embeds below it in the stack never surface. Prefer the topmost
488
+ * descendant in the same hit stack that passes a real geometry hit.
489
+ */
490
+ private getTopFrameDescendantHitUnderPoint;
484
491
  private getElementAtPosition;
485
492
  private getElementsAtPosition;
486
493
  getElementHitThreshold(element: ExcalidrawElement): number;
@@ -495,6 +502,11 @@ declare class App extends React.Component<AppProps, AppState> {
495
502
  private getElementLinkAtPosition;
496
503
  private handleElementLinkClick;
497
504
  private getTopLayerFrameAtSceneCoords;
505
+ private clearHoverOutlineIfNeeded;
506
+ /** Unified frame hover: title band, frame interior, or any element inside the frame. */
507
+ private computeHoveredFrameId;
508
+ private updateFrameHoverAndOutline;
509
+ private updateFrameHoverStateFromSceneCoords;
498
510
  private handleCanvasPointerMove;
499
511
  private handleEraser;
500
512
  private handleTouchMove;
@@ -565,6 +577,7 @@ declare class App extends React.Component<AppProps, AppState> {
565
577
  * to render new images. This is just a failsafe */
566
578
  private scheduleImageRefresh;
567
579
  private clearSelection;
580
+ private handleOutlineOverlayCanvasRef;
568
581
  private handleInteractiveCanvasRef;
569
582
  private insertImages;
570
583
  private handleAppOnDrop;
@@ -0,0 +1,8 @@
1
+ import type { ElementsMap, NonDeletedExcalidrawElement } from "@nous-excalidraw/element/types";
2
+ import type { AppState } from "../types";
3
+ import "./FrameResizeDimensionLabel.scss";
4
+ export declare const FrameResizeDimensionLabel: ({ element, elementsMap, appState, }: {
5
+ element: NonDeletedExcalidrawElement;
6
+ elementsMap: ElementsMap;
7
+ appState: AppState;
8
+ }) => import("react/jsx-runtime").JSX.Element;
@@ -7,6 +7,7 @@ import type { DOMAttributes } from "react";
7
7
  type InteractiveCanvasProps = {
8
8
  containerRef: React.RefObject<HTMLDivElement | null>;
9
9
  canvas: HTMLCanvasElement | null;
10
+ outlineOverlayCanvas: HTMLCanvasElement | null;
10
11
  elementsMap: RenderableElementsMap;
11
12
  visibleElements: readonly NonDeletedExcalidrawElement[];
12
13
  selectedElements: readonly NonDeletedExcalidrawElement[];
@@ -55,6 +55,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
55
55
  [id: string]: true;
56
56
  }>;
57
57
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
58
+ hoverOutlineElementId: string | null;
58
59
  activeTool: {
59
60
  lastActiveTool: import("../types").ActiveTool | null;
60
61
  locked: boolean;
@@ -96,6 +97,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
96
97
  shouldCacheIgnoreZoom: boolean;
97
98
  exportScale: number;
98
99
  currentItemArrowType: "sharp" | "round" | "elbow";
100
+ selectedElementsAreBeingDragged: boolean;
99
101
  bindMode: import("@nous-excalidraw/element/types").BindMode;
100
102
  gridSize: number;
101
103
  contextMenu: {
@@ -110,6 +112,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
110
112
  boxSelectionMode: import("../types").BoxSelectionMode;
111
113
  bindingPreference: "enabled" | "disabled";
112
114
  startBoundElement: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawBindableElement> | null;
115
+ hoveredFrameId: string | null;
113
116
  editingFrame: string | null;
114
117
  preferredSelectionTool: {
115
118
  type: "selection" | "lasso";
@@ -148,7 +151,6 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
148
151
  previousSelectedElementIds: {
149
152
  [id: string]: true;
150
153
  };
151
- selectedElementsAreBeingDragged: boolean;
152
154
  toast: {
153
155
  message: React.ReactNode;
154
156
  closable?: boolean;
@@ -221,6 +223,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
221
223
  [id: string]: true;
222
224
  }>;
223
225
  frameToHighlight: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
226
+ hoverOutlineElementId: string | null;
224
227
  activeTool: {
225
228
  lastActiveTool: import("../types").ActiveTool | null;
226
229
  locked: boolean;
@@ -262,6 +265,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
262
265
  shouldCacheIgnoreZoom: boolean;
263
266
  exportScale: number;
264
267
  currentItemArrowType: "sharp" | "round" | "elbow";
268
+ selectedElementsAreBeingDragged: boolean;
265
269
  bindMode: import("@nous-excalidraw/element/types").BindMode;
266
270
  gridSize: number;
267
271
  contextMenu: {
@@ -276,6 +280,7 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
276
280
  boxSelectionMode: import("../types").BoxSelectionMode;
277
281
  bindingPreference: "enabled" | "disabled";
278
282
  startBoundElement: import("@nous-excalidraw/element/types").NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawBindableElement> | null;
283
+ hoveredFrameId: string | null;
279
284
  editingFrame: string | null;
280
285
  preferredSelectionTool: {
281
286
  type: "selection" | "lasso";
@@ -314,7 +319,6 @@ fileHandle?: FileSystemFileHandle | null) => Promise<{
314
319
  previousSelectedElementIds: {
315
320
  [id: string]: true;
316
321
  };
317
- selectedElementsAreBeingDragged: boolean;
318
322
  toast: {
319
323
  message: React.ReactNode;
320
324
  closable?: boolean;
@@ -53,6 +53,7 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
53
53
  [id: string]: true;
54
54
  }>;
55
55
  frameToHighlight: NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawFrameLikeElement> | null;
56
+ hoverOutlineElementId: string | null;
56
57
  activeTool: {
57
58
  lastActiveTool: import("../types").ActiveTool | null;
58
59
  locked: boolean;
@@ -94,6 +95,7 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
94
95
  shouldCacheIgnoreZoom: boolean;
95
96
  exportScale: number;
96
97
  currentItemArrowType: "sharp" | "round" | "elbow";
98
+ selectedElementsAreBeingDragged: boolean;
97
99
  bindMode: import("@nous-excalidraw/element/types").BindMode;
98
100
  gridSize: number;
99
101
  contextMenu: {
@@ -108,6 +110,7 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
108
110
  boxSelectionMode: import("../types").BoxSelectionMode;
109
111
  bindingPreference: "enabled" | "disabled";
110
112
  startBoundElement: NonDeleted<import("@nous-excalidraw/element/types").ExcalidrawBindableElement> | null;
113
+ hoveredFrameId: string | null;
111
114
  editingFrame: string | null;
112
115
  preferredSelectionTool: {
113
116
  type: "selection" | "lasso";
@@ -146,7 +149,6 @@ export declare const loadFromJSON: (localAppState: AppState, localElements: read
146
149
  previousSelectedElementIds: {
147
150
  [id: string]: true;
148
151
  };
149
- selectedElementsAreBeingDragged: boolean;
150
152
  toast: {
151
153
  message: React.ReactNode;
152
154
  closable?: boolean;
@@ -1,6 +1,6 @@
1
1
  import { getScrollBars } from "../scene/scrollbars";
2
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) => {
3
+ declare const _renderInteractiveScene: ({ app, canvas, outlineOverlayCanvas, elementsMap, visibleElements, selectedElements, allElementsMap, scale, appState, renderConfig, editorInterface, animationState, deltaTime, }: InteractiveSceneRenderConfig) => {
4
4
  scrollBars?: ReturnType<typeof getScrollBars>;
5
5
  atLeastOneVisibleElement: boolean;
6
6
  elementsMap: RenderableElementsMap;
@@ -74,6 +74,8 @@ export type InteractiveSceneRenderAnimationState = {
74
74
  export type InteractiveSceneRenderConfig = {
75
75
  app: AppClassProperties;
76
76
  canvas: HTMLCanvasElement | null;
77
+ /** When set, hover outline + selection borders render here so they paint above DOM embeds (iframes). */
78
+ outlineOverlayCanvas?: HTMLCanvasElement | null;
77
79
  elementsMap: RenderableElementsMap;
78
80
  visibleElements: readonly NonDeletedExcalidrawElement[];
79
81
  selectedElements: readonly NonDeletedExcalidrawElement[];
@@ -129,6 +129,7 @@ export type StaticCanvasAppState = Readonly<_CommonCanvasAppState & {
129
129
  croppingElementId: AppState["croppingElementId"];
130
130
  }>;
131
131
  export type InteractiveCanvasAppState = Readonly<_CommonCanvasAppState & {
132
+ hoverOutlineElementId: AppState["hoverOutlineElementId"];
132
133
  activeTool: AppState["activeTool"];
133
134
  activeEmbeddable: AppState["activeEmbeddable"];
134
135
  selectionElement: AppState["selectionElement"];
@@ -154,6 +155,7 @@ export type InteractiveCanvasAppState = Readonly<_CommonCanvasAppState & {
154
155
  shouldCacheIgnoreZoom: AppState["shouldCacheIgnoreZoom"];
155
156
  exportScale: AppState["exportScale"];
156
157
  currentItemArrowType: AppState["currentItemArrowType"];
158
+ selectedElementsAreBeingDragged: AppState["selectedElementsAreBeingDragged"];
157
159
  }>;
158
160
  export type ObservedAppState = ObservedStandaloneAppState & ObservedElementsAppState;
159
161
  export type ObservedStandaloneAppState = {
@@ -223,6 +225,13 @@ export interface AppState {
223
225
  midPoint?: GlobalPoint;
224
226
  } | null;
225
227
  frameToHighlight: NonDeleted<ExcalidrawFrameLikeElement> | null;
228
+ /** Interactive canvas: 2px screen hover outline for frame / image / embeddable */
229
+ hoverOutlineElementId: string | null;
230
+ /**
231
+ * Frame under cursor for unified hover (title + outline): frame rect, label,
232
+ * or any child inside the frame.
233
+ */
234
+ hoveredFrameId: string | null;
226
235
  frameRendering: {
227
236
  enabled: boolean;
228
237
  name: boolean;
@@ -601,6 +610,8 @@ export type AppClassProperties = {
601
610
  api: App["api"];
602
611
  sessionExportThemeOverride: App["sessionExportThemeOverride"];
603
612
  interactiveCanvas: HTMLCanvasElement | null;
613
+ /** Renders selection/hover outlines above embed layer; pointer-events none */
614
+ outlineOverlayCanvas: HTMLCanvasElement | null;
604
615
  /** static canvas */
605
616
  canvas: HTMLCanvasElement;
606
617
  focusContainer(): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nous-excalidraw/math",
3
- "version": "0.18.4",
3
+ "version": "0.18.5",
4
4
  "type": "module",
5
5
  "types": "./dist/types/math/src/index.d.ts",
6
6
  "main": "./dist/prod/index.js",
@@ -61,6 +61,6 @@
61
61
  "build:esm": "rimraf dist && node ../../scripts/buildBase.js && yarn gen:types"
62
62
  },
63
63
  "dependencies": {
64
- "@nous-excalidraw/common": "0.18.4"
64
+ "@nous-excalidraw/common": "0.18.5"
65
65
  }
66
66
  }
@@ -1,5 +0,0 @@
1
- import type { Theme } from "@nous-excalidraw/element/types";
2
- export declare const LoadingMessage: React.FC<{
3
- delay?: number;
4
- theme?: Theme;
5
- }>;