@tldraw/editor 4.6.0-next.fecc64eee134 → 5.0.0

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 (324) hide show
  1. package/dist-cjs/index.d.ts +493 -170
  2. package/dist-cjs/index.js +14 -23
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +3 -0
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/components/MenuClickCapture.js +93 -47
  7. package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
  8. package/dist-cjs/lib/components/default-components/CanvasOverlays.js +180 -0
  9. package/dist-cjs/lib/components/default-components/CanvasOverlays.js.map +7 -0
  10. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +46 -248
  11. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +3 -3
  12. package/dist-cjs/lib/editor/Editor.js +142 -33
  13. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  14. package/dist-cjs/lib/editor/assets/AssetUtil.js +1 -0
  15. package/dist-cjs/lib/editor/assets/AssetUtil.js.map +1 -1
  16. package/dist-cjs/lib/editor/bindings/BindingUtil.js +1 -0
  17. package/dist-cjs/lib/editor/bindings/BindingUtil.js.map +1 -1
  18. package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js +1 -0
  19. package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js.map +1 -1
  20. package/dist-cjs/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.js +98 -0
  21. package/dist-cjs/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.js.map +7 -0
  22. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +1 -0
  23. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +1 -1
  24. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js +1 -0
  25. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js.map +1 -1
  26. package/dist-cjs/lib/editor/managers/FontManager/FontManager.js +2 -0
  27. package/dist-cjs/lib/editor/managers/FontManager/FontManager.js.map +1 -1
  28. package/dist-cjs/lib/editor/managers/HistoryManager/HistoryManager.js +2 -0
  29. package/dist-cjs/lib/editor/managers/HistoryManager/HistoryManager.js.map +1 -1
  30. package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js +12 -0
  31. package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js.map +2 -2
  32. package/dist-cjs/lib/editor/managers/ScribbleManager/ScribbleManager.js +1 -0
  33. package/dist-cjs/lib/editor/managers/ScribbleManager/ScribbleManager.js.map +1 -1
  34. package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js +1 -0
  35. package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js.map +1 -1
  36. package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js +1 -0
  37. package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js.map +1 -1
  38. package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js +2 -1
  39. package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js.map +2 -2
  40. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js +1 -0
  41. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js.map +1 -1
  42. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +1 -0
  43. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +1 -1
  44. package/dist-cjs/lib/editor/managers/ThemeManager/ThemeManager.js +1 -0
  45. package/dist-cjs/lib/editor/managers/ThemeManager/ThemeManager.js.map +1 -1
  46. package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js +14 -0
  47. package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js.map +2 -2
  48. package/dist-cjs/lib/editor/managers/TickManager/TickManager.js +1 -0
  49. package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +1 -1
  50. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +2 -0
  51. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +1 -1
  52. package/dist-cjs/lib/editor/overlays/OverlayManager.js +154 -0
  53. package/dist-cjs/lib/editor/overlays/OverlayManager.js.map +7 -0
  54. package/dist-cjs/lib/editor/overlays/OverlayUtil.js +92 -0
  55. package/dist-cjs/lib/editor/overlays/OverlayUtil.js.map +7 -0
  56. package/dist-cjs/lib/editor/overlays/ShapeIndicatorOverlayUtil.js +161 -0
  57. package/dist-cjs/lib/editor/overlays/ShapeIndicatorOverlayUtil.js.map +7 -0
  58. package/dist-cjs/lib/editor/overlays/getOverlayDisplayValues.js +39 -0
  59. package/dist-cjs/lib/editor/overlays/getOverlayDisplayValues.js.map +7 -0
  60. package/dist-cjs/lib/editor/shapes/BaseFrameLikeShapeUtil.js +79 -0
  61. package/dist-cjs/lib/editor/shapes/BaseFrameLikeShapeUtil.js.map +7 -0
  62. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +36 -23
  63. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  64. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +32 -2
  65. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +2 -2
  66. package/dist-cjs/lib/editor/tools/StateNode.js +1 -0
  67. package/dist-cjs/lib/editor/tools/StateNode.js.map +1 -1
  68. package/dist-cjs/lib/editor/types/event-types.js.map +2 -2
  69. package/dist-cjs/lib/exports/ExportDelay.js +1 -0
  70. package/dist-cjs/lib/exports/ExportDelay.js.map +1 -1
  71. package/dist-cjs/lib/exports/StyleEmbedder.js +1 -0
  72. package/dist-cjs/lib/exports/StyleEmbedder.js.map +1 -1
  73. package/dist-cjs/lib/exports/fetchCache.js +1 -1
  74. package/dist-cjs/lib/exports/fetchCache.js.map +2 -2
  75. package/dist-cjs/lib/exports/getSvgJsx.js +2 -1
  76. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  77. package/dist-cjs/lib/hooks/EditorComponentsContext.js.map +2 -2
  78. package/dist-cjs/lib/hooks/useCanvasEvents.js +25 -4
  79. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  80. package/dist-cjs/lib/hooks/useEditorComponents.js +0 -28
  81. package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
  82. package/dist-cjs/lib/hooks/usePeerIds.js +1 -36
  83. package/dist-cjs/lib/hooks/usePeerIds.js.map +2 -2
  84. package/dist-cjs/lib/hooks/useShapeCulling.js +2 -1
  85. package/dist-cjs/lib/hooks/useShapeCulling.js.map +2 -2
  86. package/dist-cjs/lib/options.js +1 -0
  87. package/dist-cjs/lib/options.js.map +2 -2
  88. package/dist-cjs/lib/primitives/Vec.js +3 -0
  89. package/dist-cjs/lib/primitives/Vec.js.map +1 -1
  90. package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -0
  91. package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +1 -1
  92. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +1 -0
  93. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +1 -1
  94. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +2 -0
  95. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +1 -1
  96. package/dist-cjs/lib/primitives/geometry/Stadium2d.js +1 -0
  97. package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +1 -1
  98. package/dist-cjs/lib/utils/EditorAtom.js +2 -0
  99. package/dist-cjs/lib/utils/EditorAtom.js.map +1 -1
  100. package/dist-cjs/lib/utils/reparenting.js +20 -7
  101. package/dist-cjs/lib/utils/reparenting.js.map +2 -2
  102. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +5 -0
  103. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
  104. package/dist-cjs/version.js +4 -4
  105. package/dist-cjs/version.js.map +1 -1
  106. package/dist-esm/index.d.mts +493 -170
  107. package/dist-esm/index.mjs +21 -41
  108. package/dist-esm/index.mjs.map +2 -2
  109. package/dist-esm/lib/TldrawEditor.mjs +3 -0
  110. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  111. package/dist-esm/lib/components/MenuClickCapture.mjs +94 -48
  112. package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
  113. package/dist-esm/lib/components/default-components/CanvasOverlays.mjs +160 -0
  114. package/dist-esm/lib/components/default-components/CanvasOverlays.mjs.map +7 -0
  115. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +47 -249
  116. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +3 -3
  117. package/dist-esm/lib/editor/Editor.mjs +143 -35
  118. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  119. package/dist-esm/lib/editor/assets/AssetUtil.mjs +1 -0
  120. package/dist-esm/lib/editor/assets/AssetUtil.mjs.map +1 -1
  121. package/dist-esm/lib/editor/bindings/BindingUtil.mjs +1 -0
  122. package/dist-esm/lib/editor/bindings/BindingUtil.mjs.map +1 -1
  123. package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs +1 -0
  124. package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs.map +1 -1
  125. package/dist-esm/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.mjs +83 -0
  126. package/dist-esm/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.mjs.map +7 -0
  127. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +1 -0
  128. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +1 -1
  129. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs +1 -0
  130. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +1 -1
  131. package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs +2 -0
  132. package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs.map +1 -1
  133. package/dist-esm/lib/editor/managers/HistoryManager/HistoryManager.mjs +2 -0
  134. package/dist-esm/lib/editor/managers/HistoryManager/HistoryManager.mjs.map +1 -1
  135. package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs +12 -0
  136. package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs.map +2 -2
  137. package/dist-esm/lib/editor/managers/ScribbleManager/ScribbleManager.mjs +1 -0
  138. package/dist-esm/lib/editor/managers/ScribbleManager/ScribbleManager.mjs.map +1 -1
  139. package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs +1 -0
  140. package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs.map +1 -1
  141. package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs +1 -0
  142. package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs.map +1 -1
  143. package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs +2 -1
  144. package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs.map +2 -2
  145. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs +1 -0
  146. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs.map +1 -1
  147. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +1 -0
  148. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +1 -1
  149. package/dist-esm/lib/editor/managers/ThemeManager/ThemeManager.mjs +1 -0
  150. package/dist-esm/lib/editor/managers/ThemeManager/ThemeManager.mjs.map +1 -1
  151. package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs +14 -0
  152. package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs.map +2 -2
  153. package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs +1 -0
  154. package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +1 -1
  155. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +2 -0
  156. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +1 -1
  157. package/dist-esm/lib/editor/overlays/OverlayManager.mjs +136 -0
  158. package/dist-esm/lib/editor/overlays/OverlayManager.mjs.map +7 -0
  159. package/dist-esm/lib/editor/overlays/OverlayUtil.mjs +72 -0
  160. package/dist-esm/lib/editor/overlays/OverlayUtil.mjs.map +7 -0
  161. package/dist-esm/lib/editor/overlays/ShapeIndicatorOverlayUtil.mjs +141 -0
  162. package/dist-esm/lib/editor/overlays/ShapeIndicatorOverlayUtil.mjs.map +7 -0
  163. package/dist-esm/lib/editor/overlays/getOverlayDisplayValues.mjs +19 -0
  164. package/dist-esm/lib/editor/overlays/getOverlayDisplayValues.mjs.map +7 -0
  165. package/dist-esm/lib/editor/shapes/BaseFrameLikeShapeUtil.mjs +59 -0
  166. package/dist-esm/lib/editor/shapes/BaseFrameLikeShapeUtil.mjs.map +7 -0
  167. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +36 -23
  168. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  169. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +32 -2
  170. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +2 -2
  171. package/dist-esm/lib/editor/tools/StateNode.mjs +1 -0
  172. package/dist-esm/lib/editor/tools/StateNode.mjs.map +1 -1
  173. package/dist-esm/lib/editor/types/event-types.mjs.map +2 -2
  174. package/dist-esm/lib/exports/ExportDelay.mjs +1 -0
  175. package/dist-esm/lib/exports/ExportDelay.mjs.map +1 -1
  176. package/dist-esm/lib/exports/StyleEmbedder.mjs +1 -0
  177. package/dist-esm/lib/exports/StyleEmbedder.mjs.map +1 -1
  178. package/dist-esm/lib/exports/fetchCache.mjs +2 -2
  179. package/dist-esm/lib/exports/fetchCache.mjs.map +2 -2
  180. package/dist-esm/lib/exports/getSvgJsx.mjs +2 -1
  181. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  182. package/dist-esm/lib/hooks/EditorComponentsContext.mjs.map +2 -2
  183. package/dist-esm/lib/hooks/useCanvasEvents.mjs +25 -4
  184. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  185. package/dist-esm/lib/hooks/useEditorComponents.mjs +0 -28
  186. package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
  187. package/dist-esm/lib/hooks/usePeerIds.mjs +2 -40
  188. package/dist-esm/lib/hooks/usePeerIds.mjs.map +2 -2
  189. package/dist-esm/lib/hooks/useShapeCulling.mjs +2 -1
  190. package/dist-esm/lib/hooks/useShapeCulling.mjs.map +2 -2
  191. package/dist-esm/lib/options.mjs +1 -0
  192. package/dist-esm/lib/options.mjs.map +2 -2
  193. package/dist-esm/lib/primitives/Vec.mjs +3 -0
  194. package/dist-esm/lib/primitives/Vec.mjs.map +1 -1
  195. package/dist-esm/lib/primitives/geometry/Circle2d.mjs +1 -0
  196. package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +1 -1
  197. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +1 -0
  198. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +1 -1
  199. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +2 -0
  200. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +1 -1
  201. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs +1 -0
  202. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +1 -1
  203. package/dist-esm/lib/utils/EditorAtom.mjs +2 -0
  204. package/dist-esm/lib/utils/EditorAtom.mjs.map +1 -1
  205. package/dist-esm/lib/utils/reparenting.mjs +20 -7
  206. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  207. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +5 -0
  208. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
  209. package/dist-esm/version.mjs +4 -4
  210. package/dist-esm/version.mjs.map +1 -1
  211. package/editor.css +4 -243
  212. package/package.json +7 -7
  213. package/src/index.ts +18 -39
  214. package/src/lib/TldrawEditor.tsx +9 -0
  215. package/src/lib/components/MenuClickCapture.tsx +124 -64
  216. package/src/lib/components/default-components/CanvasOverlays.tsx +208 -0
  217. package/src/lib/components/default-components/DefaultCanvas.tsx +51 -322
  218. package/src/lib/editor/Editor.test.ts +3 -1
  219. package/src/lib/editor/Editor.ts +167 -38
  220. package/src/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.ts +98 -0
  221. package/src/lib/editor/managers/InputsManager/InputsManager.ts +12 -0
  222. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +13 -2
  223. package/src/lib/editor/managers/SnapManager/SnapManager.ts +1 -1
  224. package/src/lib/editor/managers/ThemeManager/defaultThemes.ts +14 -0
  225. package/src/lib/editor/overlays/OverlayManager.ts +183 -0
  226. package/src/lib/editor/overlays/OverlayUtil.ts +143 -0
  227. package/src/lib/editor/overlays/ShapeIndicatorOverlayUtil.ts +216 -0
  228. package/src/lib/editor/overlays/getOverlayDisplayValues.ts +51 -0
  229. package/src/lib/editor/shapes/BaseFrameLikeShapeUtil.tsx +128 -0
  230. package/src/lib/editor/shapes/ShapeUtil.ts +45 -26
  231. package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +40 -3
  232. package/src/lib/editor/types/event-types.ts +2 -0
  233. package/src/lib/exports/fetchCache.ts +2 -4
  234. package/src/lib/exports/getSvgJsx.test.ts +3 -1
  235. package/src/lib/exports/getSvgJsx.tsx +2 -1
  236. package/src/lib/hooks/EditorComponentsContext.tsx +0 -27
  237. package/src/lib/hooks/useCanvasEvents.ts +45 -3
  238. package/src/lib/hooks/useEditorComponents.tsx +0 -28
  239. package/src/lib/hooks/usePeerIds.ts +6 -55
  240. package/src/lib/hooks/useShapeCulling.tsx +3 -1
  241. package/src/lib/options.ts +7 -0
  242. package/src/lib/utils/reparenting.ts +22 -9
  243. package/src/lib/utils/sync/TLLocalSyncClient.ts +3 -0
  244. package/src/version.ts +4 -4
  245. package/dist-cjs/lib/components/GeometryDebuggingView.js +0 -115
  246. package/dist-cjs/lib/components/GeometryDebuggingView.js.map +0 -7
  247. package/dist-cjs/lib/components/LiveCollaborators.js +0 -151
  248. package/dist-cjs/lib/components/LiveCollaborators.js.map +0 -7
  249. package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js +0 -227
  250. package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js.map +0 -7
  251. package/dist-cjs/lib/components/default-components/DefaultBrush.js +0 -38
  252. package/dist-cjs/lib/components/default-components/DefaultBrush.js.map +0 -7
  253. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +0 -71
  254. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +0 -7
  255. package/dist-cjs/lib/components/default-components/DefaultCursor.js +0 -59
  256. package/dist-cjs/lib/components/default-components/DefaultCursor.js.map +0 -7
  257. package/dist-cjs/lib/components/default-components/DefaultHandle.js +0 -56
  258. package/dist-cjs/lib/components/default-components/DefaultHandle.js.map +0 -7
  259. package/dist-cjs/lib/components/default-components/DefaultHandles.js +0 -28
  260. package/dist-cjs/lib/components/default-components/DefaultHandles.js.map +0 -7
  261. package/dist-cjs/lib/components/default-components/DefaultScribble.js +0 -51
  262. package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +0 -7
  263. package/dist-cjs/lib/components/default-components/DefaultSelectionForeground.js +0 -69
  264. package/dist-cjs/lib/components/default-components/DefaultSelectionForeground.js.map +0 -7
  265. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +0 -107
  266. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +0 -7
  267. package/dist-cjs/lib/components/default-components/DefaultShapeIndicatorErrorFallback.js +0 -28
  268. package/dist-cjs/lib/components/default-components/DefaultShapeIndicatorErrorFallback.js.map +0 -7
  269. package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js +0 -101
  270. package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js.map +0 -7
  271. package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js +0 -170
  272. package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js.map +0 -7
  273. package/dist-cjs/lib/hooks/useHandleEvents.js +0 -100
  274. package/dist-cjs/lib/hooks/useHandleEvents.js.map +0 -7
  275. package/dist-cjs/lib/hooks/useSelectionEvents.js +0 -98
  276. package/dist-cjs/lib/hooks/useSelectionEvents.js.map +0 -7
  277. package/dist-esm/lib/components/GeometryDebuggingView.mjs +0 -95
  278. package/dist-esm/lib/components/GeometryDebuggingView.mjs.map +0 -7
  279. package/dist-esm/lib/components/LiveCollaborators.mjs +0 -134
  280. package/dist-esm/lib/components/LiveCollaborators.mjs.map +0 -7
  281. package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs +0 -207
  282. package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs.map +0 -7
  283. package/dist-esm/lib/components/default-components/DefaultBrush.mjs +0 -18
  284. package/dist-esm/lib/components/default-components/DefaultBrush.mjs.map +0 -7
  285. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +0 -41
  286. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +0 -7
  287. package/dist-esm/lib/components/default-components/DefaultCursor.mjs +0 -29
  288. package/dist-esm/lib/components/default-components/DefaultCursor.mjs.map +0 -7
  289. package/dist-esm/lib/components/default-components/DefaultHandle.mjs +0 -26
  290. package/dist-esm/lib/components/default-components/DefaultHandle.mjs.map +0 -7
  291. package/dist-esm/lib/components/default-components/DefaultHandles.mjs +0 -8
  292. package/dist-esm/lib/components/default-components/DefaultHandles.mjs.map +0 -7
  293. package/dist-esm/lib/components/default-components/DefaultScribble.mjs +0 -21
  294. package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +0 -7
  295. package/dist-esm/lib/components/default-components/DefaultSelectionForeground.mjs +0 -39
  296. package/dist-esm/lib/components/default-components/DefaultSelectionForeground.mjs.map +0 -7
  297. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +0 -77
  298. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +0 -7
  299. package/dist-esm/lib/components/default-components/DefaultShapeIndicatorErrorFallback.mjs +0 -8
  300. package/dist-esm/lib/components/default-components/DefaultShapeIndicatorErrorFallback.mjs.map +0 -7
  301. package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs +0 -81
  302. package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs.map +0 -7
  303. package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs +0 -142
  304. package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs.map +0 -7
  305. package/dist-esm/lib/hooks/useHandleEvents.mjs +0 -70
  306. package/dist-esm/lib/hooks/useHandleEvents.mjs.map +0 -7
  307. package/dist-esm/lib/hooks/useSelectionEvents.mjs +0 -78
  308. package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +0 -7
  309. package/src/lib/components/GeometryDebuggingView.tsx +0 -108
  310. package/src/lib/components/LiveCollaborators.tsx +0 -174
  311. package/src/lib/components/default-components/CanvasShapeIndicators.tsx +0 -289
  312. package/src/lib/components/default-components/DefaultBrush.tsx +0 -35
  313. package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +0 -52
  314. package/src/lib/components/default-components/DefaultCursor.tsx +0 -59
  315. package/src/lib/components/default-components/DefaultHandle.tsx +0 -42
  316. package/src/lib/components/default-components/DefaultHandles.tsx +0 -15
  317. package/src/lib/components/default-components/DefaultScribble.tsx +0 -31
  318. package/src/lib/components/default-components/DefaultSelectionForeground.tsx +0 -50
  319. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +0 -104
  320. package/src/lib/components/default-components/DefaultShapeIndicatorErrorFallback.tsx +0 -9
  321. package/src/lib/components/default-components/DefaultShapeIndicators.tsx +0 -116
  322. package/src/lib/components/default-components/DefaultSnapIndictor.tsx +0 -174
  323. package/src/lib/hooks/useHandleEvents.ts +0 -88
  324. package/src/lib/hooks/useSelectionEvents.ts +0 -97
@@ -1,7 +1,7 @@
1
1
  import { react } from '@tldraw/state'
2
2
  import { useQuickReactor, useValue } from '@tldraw/state-react'
3
- import { TLHandle, TLShapeId } from '@tldraw/tlschema'
4
- import { dedupe, modulate, objectMapValues } from '@tldraw/utils'
3
+ import { TLShapeId } from '@tldraw/tlschema'
4
+ import { modulate, objectMapValues } from '@tldraw/utils'
5
5
  import classNames from 'classnames'
6
6
  import { Fragment, JSX, useEffect, useRef, useState } from 'react'
7
7
  import { tlenv } from '../../globals/environment'
@@ -13,21 +13,15 @@ import { useDocumentEvents } from '../../hooks/useDocumentEvents'
13
13
  import { useEditor } from '../../hooks/useEditor'
14
14
  import { useFixSafariDoubleTapZoomPencilEvents } from '../../hooks/useFixSafariDoubleTapZoomPencilEvents'
15
15
  import { useGestureEvents } from '../../hooks/useGestureEvents'
16
- import { useHandleEvents } from '../../hooks/useHandleEvents'
17
- import { useSharedSafeId } from '../../hooks/useSafeId'
18
16
  import { useScreenBounds } from '../../hooks/useScreenBounds'
19
17
  import { ShapeCullingProvider, useShapeCulling } from '../../hooks/useShapeCulling'
20
18
  import { Box } from '../../primitives/Box'
21
- import { Mat } from '../../primitives/Mat'
22
19
  import { toDomPrecision } from '../../primitives/utils'
23
- import { Vec } from '../../primitives/Vec'
24
20
  import { debugFlags } from '../../utils/debug-flags'
25
21
  import { setStyleProperty } from '../../utils/dom'
26
- import { GeometryDebuggingView } from '../GeometryDebuggingView'
27
- import { LiveCollaborators } from '../LiveCollaborators'
28
22
  import { MenuClickCapture } from '../MenuClickCapture'
29
23
  import { Shape } from '../Shape'
30
- import { CanvasShapeIndicators } from './CanvasShapeIndicators'
24
+ import { CanvasOverlays } from './CanvasOverlays'
31
25
 
32
26
  /** @public */
33
27
  export interface TLCanvasComponentProps {
@@ -38,11 +32,10 @@ export interface TLCanvasComponentProps {
38
32
  export function DefaultCanvas({ className }: TLCanvasComponentProps) {
39
33
  const editor = useEditor()
40
34
 
41
- const { SelectionBackground, Background, SvgDefs, ShapeIndicators } = useEditorComponents()
35
+ const { SelectionBackground, Background, SvgDefs } = useEditorComponents()
42
36
 
43
37
  const rCanvas = useRef<HTMLDivElement>(null)
44
38
  const rHtmlLayer = useRef<HTMLDivElement>(null)
45
- const rHtmlLayer2 = useRef<HTMLDivElement>(null)
46
39
  const container = useContainer()
47
40
 
48
41
  useScreenBounds(rCanvas)
@@ -52,6 +45,24 @@ export function DefaultCanvas({ className }: TLCanvasComponentProps) {
52
45
  useGestureEvents(rCanvas)
53
46
  useFixSafariDoubleTapZoomPencilEvents(rCanvas)
54
47
 
48
+ useQuickReactor(
49
+ 'update canvas state data attributes',
50
+ () => {
51
+ const canvas = rCanvas.current
52
+ if (!canvas) return
53
+
54
+ canvas.setAttribute(
55
+ 'data-iseditinganything',
56
+ editor.getEditingShapeId() === null ? 'false' : 'true'
57
+ )
58
+ canvas.setAttribute(
59
+ 'data-isselectinganything',
60
+ editor.getSelectedShapeIds().length === 0 ? 'false' : 'true'
61
+ )
62
+ },
63
+ [editor]
64
+ )
65
+
55
66
  const rMemoizedStuff = useRef({ lodDisableTextOutline: false, allowTextOutline: true })
56
67
 
57
68
  useQuickReactor(
@@ -90,7 +101,6 @@ export function DefaultCanvas({ className }: TLCanvasComponentProps) {
90
101
  )}px,${toDomPrecision(y + offset)}px)`
91
102
 
92
103
  setStyleProperty(rHtmlLayer.current, 'transform', transform)
93
- setStyleProperty(rHtmlLayer2.current, 'transform', transform)
94
104
  },
95
105
  [editor, container]
96
106
  )
@@ -115,27 +125,15 @@ export function DefaultCanvas({ className }: TLCanvasComponentProps) {
115
125
  )
116
126
 
117
127
  const hideShapes = useValue('debug_shapes', () => debugFlags.hideShapes.get(), [debugFlags])
118
- const debugGeometry = useValue('debug_geometry', () => debugFlags.debugGeometry.get(), [
119
- debugFlags,
120
- ])
121
- const isEditingAnything = useValue(
122
- 'isEditingAnything',
123
- () => editor.getEditingShapeId() !== null,
124
- [editor]
125
- )
126
- const isSelectingAnything = useValue(
127
- 'isSelectingAnything',
128
- () => !!editor.getSelectedShapeIds().length,
129
- [editor]
130
- )
128
+
129
+ const isGridMode = useValue('isGridMode', () => editor.getInstanceState().isGridMode, [editor])
130
+ const { Grid } = useEditorComponents()
131
131
 
132
132
  return (
133
133
  <>
134
134
  <div
135
135
  ref={rCanvas}
136
136
  draggable={false}
137
- data-iseditinganything={isEditingAnything}
138
- data-isselectinganything={isSelectingAnything}
139
137
  className={classNames('tl-canvas', className)}
140
138
  data-testid="canvas"
141
139
  {...events}
@@ -143,8 +141,6 @@ export function DefaultCanvas({ className }: TLCanvasComponentProps) {
143
141
  <svg className="tl-svg-context" aria-hidden="true">
144
142
  <defs>
145
143
  {shapeSvgDefs}
146
- <CursorDef />
147
- <CollaboratorHintDef />
148
144
  {SvgDefs && <SvgDefs />}
149
145
  </defs>
150
146
  </svg>
@@ -153,249 +149,50 @@ export function DefaultCanvas({ className }: TLCanvasComponentProps) {
153
149
  <Background />
154
150
  </div>
155
151
  )}
156
- <GridWrapper />
152
+ {isGridMode && Grid && <GridWrapper />}
157
153
  <div ref={rHtmlLayer} className="tl-html-layer tl-shapes" draggable={false}>
158
154
  <OnTheCanvasWrapper />
159
155
  {SelectionBackground && <SelectionBackgroundWrapper />}
160
- {hideShapes ? null : <ShapesLayer />}
161
- </div>
162
- <div className="tl-overlays">
163
- <CanvasShapeIndicators />
164
- <div ref={rHtmlLayer2} className="tl-html-layer">
165
- {debugGeometry ? <GeometryDebuggingView /> : null}
166
- <BrushWrapper />
167
- <ScribbleWrapper />
168
- <ZoomBrushWrapper />
169
- {ShapeIndicators && <ShapeIndicators />}
170
- <HintedShapeIndicator />
171
- <SnapIndicatorWrapper />
172
- <SelectionForegroundWrapper />
173
- <HandlesWrapper />
174
- <OverlaysWrapper />
175
- <LiveCollaborators />
176
- </div>
156
+ {hideShapes ? null : <ShapesLayer canvasRef={rCanvas} />}
177
157
  </div>
158
+ <CanvasOverlays />
178
159
  <MovingCameraHitTestBlocker />
179
160
  </div>
180
- <div
181
- className="tl-canvas__in-front"
182
- onPointerDown={editor.markEventAsHandled}
183
- onPointerUp={editor.markEventAsHandled}
184
- onTouchStart={editor.markEventAsHandled}
185
- onTouchEnd={editor.markEventAsHandled}
186
- >
187
- <InFrontOfTheCanvasWrapper />
188
- </div>
161
+ <InFrontOfTheCanvasWrapper />
189
162
  <MenuClickCapture />
190
163
  </>
191
164
  )
192
165
  }
193
166
 
194
167
  function InFrontOfTheCanvasWrapper() {
168
+ const editor = useEditor()
195
169
  const { InFrontOfTheCanvas } = useEditorComponents()
196
170
  if (!InFrontOfTheCanvas) return null
197
- return <InFrontOfTheCanvas />
171
+ return (
172
+ <div
173
+ className="tl-canvas__in-front"
174
+ onPointerDown={editor.markEventAsHandled}
175
+ onPointerUp={editor.markEventAsHandled}
176
+ onTouchStart={editor.markEventAsHandled}
177
+ onTouchEnd={editor.markEventAsHandled}
178
+ >
179
+ <InFrontOfTheCanvas />
180
+ </div>
181
+ )
198
182
  }
199
183
 
200
184
  function GridWrapper() {
201
185
  const editor = useEditor()
202
186
  const gridSize = useValue('gridSize', () => editor.getDocumentSettings().gridSize, [editor])
203
187
  const { x, y, z } = useValue('camera', () => editor.getCamera(), [editor])
204
- const isGridMode = useValue('isGridMode', () => editor.getInstanceState().isGridMode, [editor])
205
188
  const { Grid } = useEditorComponents()
206
189
 
207
- if (!(Grid && isGridMode)) return null
190
+ if (!Grid) return null
208
191
 
209
192
  return <Grid x={x} y={y} z={z} size={gridSize} />
210
193
  }
211
194
 
212
- function ScribbleWrapper() {
213
- const editor = useEditor()
214
- const scribbles = useValue('scribbles', () => editor.getInstanceState().scribbles, [editor])
215
- const zoomLevel = useValue('zoomLevel', () => editor.getEfficientZoomLevel(), [editor])
216
- const { Scribble } = useEditorComponents()
217
-
218
- if (!(Scribble && scribbles.length)) return null
219
-
220
- return scribbles.map((scribble) => (
221
- <Scribble key={scribble.id} className="tl-user-scribble" scribble={scribble} zoom={zoomLevel} />
222
- ))
223
- }
224
-
225
- function BrushWrapper() {
226
- const editor = useEditor()
227
- const brush = useValue('brush', () => editor.getInstanceState().brush, [editor])
228
- const { Brush } = useEditorComponents()
229
-
230
- if (!(Brush && brush)) return null
231
-
232
- return <Brush className="tl-user-brush" brush={brush} />
233
- }
234
-
235
- function ZoomBrushWrapper() {
236
- const editor = useEditor()
237
- const zoomBrush = useValue('zoomBrush', () => editor.getInstanceState().zoomBrush, [editor])
238
- const { ZoomBrush } = useEditorComponents()
239
-
240
- if (!(ZoomBrush && zoomBrush)) return null
241
-
242
- return <ZoomBrush className="tl-user-brush tl-zoom-brush" brush={zoomBrush} />
243
- }
244
-
245
- function SnapIndicatorWrapper() {
246
- const editor = useEditor()
247
- const lines = useValue('snapLines', () => editor.snaps.getIndicators(), [editor])
248
- const zoomLevel = useValue('zoomLevel', () => editor.getEfficientZoomLevel(), [editor])
249
- const { SnapIndicator } = useEditorComponents()
250
-
251
- if (!(SnapIndicator && lines.length > 0)) return null
252
-
253
- return lines.map((line) => (
254
- <SnapIndicator key={line.id} className="tl-user-snapline" line={line} zoom={zoomLevel} />
255
- ))
256
- }
257
-
258
- function HandlesWrapper() {
259
- const editor = useEditor()
260
-
261
- // We don't want this to update every time the shape changes
262
- const shapeIdWithHandles = useValue(
263
- 'handles shapeIdWithHandles',
264
- () => {
265
- const { isReadonly, isChangingStyle } = editor.getInstanceState()
266
- if (isReadonly || isChangingStyle) return false
267
-
268
- const onlySelectedShape = editor.getOnlySelectedShape()
269
- if (!onlySelectedShape) return false
270
-
271
- // slightly redundant but saves us from updating the handles every time the shape changes
272
- const handles = editor.getShapeHandles(onlySelectedShape)
273
- if (!handles) return false
274
-
275
- return onlySelectedShape.id
276
- },
277
- [editor]
278
- )
279
-
280
- if (!shapeIdWithHandles) return null
281
-
282
- return <HandlesWrapperInner shapeId={shapeIdWithHandles} />
283
- }
284
-
285
- function HandlesWrapperInner({ shapeId }: { shapeId: TLShapeId }) {
286
- const editor = useEditor()
287
- const { Handles } = useEditorComponents()
288
-
289
- const zoomLevel = useValue('zoomLevel', () => editor.getEfficientZoomLevel(), [editor])
290
-
291
- const isCoarse = useValue('coarse pointer', () => editor.getInstanceState().isCoarsePointer, [
292
- editor,
293
- ])
294
-
295
- const transform = useValue('handles transform', () => editor.getShapePageTransform(shapeId), [
296
- editor,
297
- shapeId,
298
- ])
299
-
300
- const handles = useValue(
301
- 'handles',
302
- () => {
303
- const handles = editor.getShapeHandles(shapeId)
304
- if (!handles) return null
305
-
306
- const minDistBetweenVirtualHandlesAndRegularHandles =
307
- ((isCoarse ? editor.options.coarseHandleRadius : editor.options.handleRadius) / zoomLevel) *
308
- 2
309
-
310
- return (
311
- handles
312
- .filter(
313
- (handle) =>
314
- // if the handle isn't a virtual handle, we'll display it
315
- handle.type !== 'virtual' ||
316
- // but for virtual handles, we'll only display them if they're far enough away from vertex handles
317
- !handles.some(
318
- (h) =>
319
- // skip the handle we're checking against
320
- h !== handle &&
321
- // only check against vertex handles
322
- h.type === 'vertex' &&
323
- // and check that their distance isn't below the minimum distance
324
- Vec.Dist(handle, h) < minDistBetweenVirtualHandlesAndRegularHandles
325
- )
326
- )
327
- // We want vertex handles in front of all other handles
328
- .sort((a) => (a.type === 'vertex' ? 1 : -1))
329
- )
330
- },
331
- [editor, zoomLevel, isCoarse, shapeId]
332
- )
333
-
334
- const isHidden = useValue('isHidden', () => editor.isShapeHidden(shapeId), [editor, shapeId])
335
-
336
- if (!Handles || !handles || !transform || isHidden) {
337
- return null
338
- }
339
-
340
- return (
341
- <Handles>
342
- <g transform={Mat.toCssString(transform)}>
343
- {handles.map((handle) => {
344
- return (
345
- <HandleWrapper
346
- key={handle.id}
347
- shapeId={shapeId}
348
- handle={handle}
349
- zoom={zoomLevel}
350
- isCoarse={isCoarse}
351
- />
352
- )
353
- })}
354
- </g>
355
- </Handles>
356
- )
357
- }
358
-
359
- function HandleWrapper({
360
- shapeId,
361
- handle,
362
- zoom,
363
- isCoarse,
364
- }: {
365
- shapeId: TLShapeId
366
- handle: TLHandle
367
- zoom: number
368
- isCoarse: boolean
369
- }) {
370
- const events = useHandleEvents(shapeId, handle.id)
371
- const { Handle } = useEditorComponents()
372
-
373
- if (!Handle) return null
374
-
375
- return (
376
- <g
377
- role="button"
378
- // TODO(mime): handle.label needs to be required in the future.
379
- aria-label={handle.label || 'handle'}
380
- transform={`translate(${handle.x}, ${handle.y})`}
381
- {...events}
382
- >
383
- <Handle shapeId={shapeId} handle={handle} zoom={zoom} isCoarse={isCoarse} />
384
- </g>
385
- )
386
- }
387
-
388
- function OverlaysWrapper() {
389
- const { Overlays } = useEditorComponents()
390
- if (!Overlays) return null
391
- return (
392
- <div className="tl-custom-overlays tl-overlays__item">
393
- <Overlays />
394
- </div>
395
- )
396
- }
397
-
398
- function ShapesLayer() {
195
+ function ShapesLayer({ canvasRef }: { canvasRef: { readonly current: HTMLDivElement | null } }) {
399
196
  const editor = useEditor()
400
197
  const debugSvg = useValue('debug svg', () => debugFlags.debugSvg.get(), [debugFlags])
401
198
  const renderingShapes = useValue('rendering shapes', () => editor.getRenderingShapes(), [editor])
@@ -413,11 +210,11 @@ function ShapesLayer() {
413
210
  )
414
211
  )}
415
212
  <CullingController />
416
- {tlenv.isSafari && <ReflowIfNeeded />}
213
+ {tlenv.isSafari && <ReflowIfNeeded canvasRef={canvasRef} />}
417
214
  </ShapeCullingProvider>
418
215
  )
419
216
  }
420
- function ReflowIfNeeded() {
217
+ function ReflowIfNeeded({ canvasRef }: { canvasRef: { readonly current: HTMLDivElement | null } }) {
421
218
  const editor = useEditor()
422
219
  const culledShapesRef = useRef<Set<TLShapeId>>(new Set())
423
220
  useQuickReactor(
@@ -427,13 +224,13 @@ function ReflowIfNeeded() {
427
224
  if (culledShapesRef.current === culledShapes) return
428
225
 
429
226
  culledShapesRef.current = culledShapes
430
- const canvas = editor.getContainerDocument().getElementsByClassName('tl-canvas')
431
- if (canvas.length === 0) return
227
+ const canvas = canvasRef.current
228
+ if (!canvas) return
432
229
  // This causes a reflow
433
230
  // https://gist.github.com/paulirish/5d52fb081b3570c81e3a
434
- const _height = (canvas[0] as HTMLDivElement).offsetHeight
231
+ const _height = canvas.offsetHeight
435
232
  },
436
- [editor]
233
+ [editor, canvasRef]
437
234
  )
438
235
  return null
439
236
  }
@@ -458,56 +255,6 @@ function CullingController() {
458
255
  return null
459
256
  }
460
257
 
461
- function HintedShapeIndicator() {
462
- const editor = useEditor()
463
- const { ShapeIndicator } = useEditorComponents()
464
-
465
- const ids = useValue(
466
- 'hinting shape ids without canvas indicator',
467
- () => {
468
- // Filter to only shapes that use legacy SVG indicators
469
- return dedupe(editor.getHintingShapeIds()).filter((id) => {
470
- const shape = editor.getShape(id)
471
- if (!shape) return false
472
- const util = editor.getShapeUtil(shape)
473
- return util.useLegacyIndicator()
474
- })
475
- },
476
- [editor]
477
- )
478
-
479
- if (!ids.length) return null
480
- if (!ShapeIndicator) return null
481
-
482
- return ids.map((id) => (
483
- <ShapeIndicator className="tl-user-indicator__hint" shapeId={id} key={id + '_hinting'} />
484
- ))
485
- }
486
-
487
- function CursorDef() {
488
- return (
489
- <g id={useSharedSafeId('cursor')}>
490
- <g fill="rgba(0,0,0,.2)" transform="translate(-11,-11)">
491
- <path d="m12 24.4219v-16.015l11.591 11.619h-6.781l-.411.124z" />
492
- <path d="m21.0845 25.0962-3.605 1.535-4.682-11.089 3.686-1.553z" />
493
- </g>
494
- <g fill="white" transform="translate(-12,-12)">
495
- <path d="m12 24.4219v-16.015l11.591 11.619h-6.781l-.411.124z" />
496
- <path d="m21.0845 25.0962-3.605 1.535-4.682-11.089 3.686-1.553z" />
497
- </g>
498
- <g fill="currentColor" transform="translate(-12,-12)">
499
- <path d="m19.751 24.4155-1.844.774-3.1-7.374 1.841-.775z" />
500
- <path d="m13 10.814v11.188l2.969-2.866.428-.139h4.768z" />
501
- </g>
502
- </g>
503
- )
504
- }
505
-
506
- function CollaboratorHintDef() {
507
- const cursorHintId = useSharedSafeId('cursor_hint')
508
- return <path id={cursorHintId} fill="currentColor" d="M -2,-5 2,0 -2,5 Z" />
509
- }
510
-
511
258
  function DebugSvgCopy({ id, mode }: { id: TLShapeId; mode: 'img' | 'iframe' }) {
512
259
  const editor = useEditor()
513
260
 
@@ -530,7 +277,8 @@ function DebugSvgCopy({ id, mode }: { id: TLShapeId; mode: 'img' | 'iframe' }) {
530
277
  const renderId = Math.random()
531
278
  latest = renderId
532
279
 
533
- const isSingleFrame = editor.isShapeOfType(id, 'frame')
280
+ const shape = editor.getShape(id)
281
+ const isSingleFrame = !!shape && editor.isShapeFrameLike(shape)
534
282
  const padding = isSingleFrame ? 0 : 10
535
283
  let bounds = editor.getShapePageBounds(id)
536
284
  if (!bounds) return
@@ -589,25 +337,6 @@ function DebugSvgCopy({ id, mode }: { id: TLShapeId; mode: 'img' | 'iframe' }) {
589
337
  )
590
338
  }
591
339
 
592
- function SelectionForegroundWrapper() {
593
- const editor = useEditor()
594
- const selectionRotation = useValue(
595
- 'selection rotation',
596
- function getSelectionRotation() {
597
- return editor.getSelectionRotation()
598
- },
599
- [editor]
600
- )
601
- const selectionBounds = useValue(
602
- 'selection bounds',
603
- () => editor.getSelectionRotatedPageBounds(),
604
- [editor]
605
- )
606
- const { SelectionForeground } = useEditorComponents()
607
- if (!selectionBounds || !SelectionForeground) return null
608
- return <SelectionForeground bounds={selectionBounds} rotation={selectionRotation} />
609
- }
610
-
611
340
  function SelectionBackgroundWrapper() {
612
341
  const editor = useEditor()
613
342
  const selectionRotation = useValue('selection rotation', () => editor.getSelectionRotation(), [
@@ -46,7 +46,9 @@ class CustomShape extends ShapeUtil<ICustomShape> {
46
46
  isFilled: shape.props.isFilled,
47
47
  })
48
48
  }
49
- indicator() {}
49
+ getIndicatorPath() {
50
+ return undefined
51
+ }
50
52
  component() {}
51
53
  }
52
54