@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
@@ -56,7 +56,6 @@ import {
56
56
  hasOwnProperty,
57
57
  last,
58
58
  lerp,
59
- maxBy,
60
59
  minBy,
61
60
  sortById,
62
61
  sortByIndex,
@@ -111,6 +110,7 @@ import { notVisibleShapes } from "./derivations/notVisibleShapes.mjs";
111
110
  import { parentsToChildren } from "./derivations/parentsToChildren.mjs";
112
111
  import { deriveShapeIdsInCurrentPage } from "./derivations/shapeIdsInCurrentPage.mjs";
113
112
  import { ClickManager } from "./managers/ClickManager/ClickManager.mjs";
113
+ import { CollaboratorsManager } from "./managers/CollaboratorsManager/CollaboratorsManager.mjs";
114
114
  import { EdgeScrollManager } from "./managers/EdgeScrollManager/EdgeScrollManager.mjs";
115
115
  import { FocusManager } from "./managers/FocusManager/FocusManager.mjs";
116
116
  import { FontManager } from "./managers/FontManager/FontManager.mjs";
@@ -121,9 +121,10 @@ import { ScribbleManager } from "./managers/ScribbleManager/ScribbleManager.mjs"
121
121
  import { SnapManager } from "./managers/SnapManager/SnapManager.mjs";
122
122
  import { SpatialIndexManager } from "./managers/SpatialIndexManager/SpatialIndexManager.mjs";
123
123
  import { TextManager } from "./managers/TextManager/TextManager.mjs";
124
- import { resolveThemes, ThemeManager } from "./managers/ThemeManager/ThemeManager.mjs";
124
+ import { ThemeManager, resolveThemes } from "./managers/ThemeManager/ThemeManager.mjs";
125
125
  import { TickManager } from "./managers/TickManager/TickManager.mjs";
126
126
  import { UserPreferencesManager } from "./managers/UserPreferencesManager/UserPreferencesManager.mjs";
127
+ import { OverlayManager } from "./overlays/OverlayManager.mjs";
127
128
  import { RootState } from "./tools/RootState.mjs";
128
129
  class Editor extends EventEmitter {
129
130
  id = uniqueId();
@@ -133,6 +134,7 @@ class Editor extends EventEmitter {
133
134
  shapeUtils,
134
135
  bindingUtils,
135
136
  assetUtils: assetUtilConstructors,
137
+ overlayUtils: overlayUtilConstructors,
136
138
  tools,
137
139
  getContainer,
138
140
  // needs to be here for backwards compatibility with TldrawEditor
@@ -192,6 +194,7 @@ class Editor extends EventEmitter {
192
194
  this.inputs = new InputsManager(this);
193
195
  this.performance = new PerformanceManager(this);
194
196
  this.disposables.add(() => this.performance.dispose());
197
+ this.collaborators = new CollaboratorsManager(this);
195
198
  class NewRoot extends RootState {
196
199
  static initial = initialState ?? "";
197
200
  }
@@ -252,6 +255,13 @@ class Editor extends EventEmitter {
252
255
  this.root.children[Tool.id] = new Tool(this, this.root);
253
256
  }
254
257
  this.scribbles = new ScribbleManager(this);
258
+ this.overlays = new OverlayManager(this);
259
+ if (overlayUtilConstructors) {
260
+ for (const Util of overlayUtilConstructors) {
261
+ const util = new Util(this);
262
+ this.overlays.registerUtil(util);
263
+ }
264
+ }
255
265
  const cleanupInstancePageState = (prevPageState, shapesNoLongerInPage) => {
256
266
  let nextPageState = null;
257
267
  const selectedShapeIds = prevPageState.selectedShapeIds.filter(
@@ -704,6 +714,12 @@ class Editor extends EventEmitter {
704
714
  * @public
705
715
  */
706
716
  timers = tltime.forContext(this.contextId);
717
+ /**
718
+ * A manager for remote peer collaborators connected to this editor.
719
+ *
720
+ * @public
721
+ */
722
+ collaborators;
707
723
  /**
708
724
  * A manager for the user and their preferences.
709
725
  *
@@ -734,6 +750,12 @@ class Editor extends EventEmitter {
734
750
  * @public
735
751
  */
736
752
  scribbles;
753
+ /**
754
+ * A manager for canvas overlay UI elements (selection handles, shape handles, etc.).
755
+ *
756
+ * @public
757
+ */
758
+ overlays;
737
759
  /**
738
760
  * A manager for side effects and correct state enforcement. See {@link @tldraw/store#StoreSideEffects} for details.
739
761
  *
@@ -1382,11 +1404,20 @@ class Editor extends EventEmitter {
1382
1404
  /**
1383
1405
  * Set the cursor.
1384
1406
  *
1407
+ * No-op when the partial wouldn't change the current cursor — `setCursor`
1408
+ * is called from pointer-move hot paths (see `updateHoveredOverlayId`,
1409
+ * various tool states) and skipping redundant writes avoids needlessly
1410
+ * dirtying instance state.
1411
+ *
1385
1412
  * @param cursor - The cursor to set.
1386
1413
  * @public
1387
1414
  */
1388
1415
  setCursor(cursor) {
1389
- this.updateInstanceState({ cursor: { ...this.getInstanceState().cursor, ...cursor } });
1416
+ const current = this.getInstanceState().cursor;
1417
+ if ((cursor.type === void 0 || cursor.type === current.type) && (cursor.rotation === void 0 || cursor.rotation === current.rotation)) {
1418
+ return this;
1419
+ }
1420
+ this.updateInstanceState({ cursor: { ...current, ...cursor } });
1390
1421
  return this;
1391
1422
  }
1392
1423
  getPageStates() {
@@ -3052,26 +3083,53 @@ class Editor extends EventEmitter {
3052
3083
  const { x: cx, y: cy, z: cz = 1 } = this.getCamera();
3053
3084
  return new Vec((point.x + cx) * cz, (point.y + cy) * cz, point.z ?? 0.5);
3054
3085
  }
3055
- _getCollaboratorsQuery() {
3056
- return this.store.query.records("instance_presence", () => ({
3057
- userId: { neq: this.user.getId() }
3058
- }));
3059
- }
3086
+ // Collaborators
3087
+ /**
3088
+ * Returns a list of presence records for all peer collaborators.
3089
+ * This will return the latest presence record for each connected user.
3090
+ *
3091
+ * Convenience wrapper for {@link CollaboratorsManager.getCollaborators}.
3092
+ *
3093
+ * @public
3094
+ */
3060
3095
  getCollaborators() {
3061
- const allPresenceRecords = this._getCollaboratorsQuery().get();
3062
- if (!allPresenceRecords.length) return EMPTY_ARRAY;
3063
- const userIds = [...new Set(allPresenceRecords.map((c) => c.userId))].sort();
3064
- return userIds.map((id) => {
3065
- const latestPresence = maxBy(
3066
- allPresenceRecords.filter((c) => c.userId === id),
3067
- (p) => p.lastActivityTimestamp ?? 0
3068
- );
3069
- return latestPresence;
3070
- });
3096
+ return this.collaborators.getCollaborators();
3071
3097
  }
3098
+ /**
3099
+ * Returns a list of presence records for all peer collaborators on the current page.
3100
+ * This will return the latest presence record for each connected user.
3101
+ *
3102
+ * Convenience wrapper for {@link CollaboratorsManager.getCollaboratorsOnCurrentPage}.
3103
+ *
3104
+ * @public
3105
+ */
3072
3106
  getCollaboratorsOnCurrentPage() {
3073
- const currentPageId = this.getCurrentPageId();
3074
- return this.getCollaborators().filter((c) => c.currentPageId === currentPageId);
3107
+ return this.collaborators.getCollaboratorsOnCurrentPage();
3108
+ }
3109
+ /**
3110
+ * Returns a list of presence records for peer collaborators who should currently be
3111
+ * shown in the UI. Filters {@link Editor.getCollaborators} by activity state
3112
+ * (active / idle / inactive) and visibility rules such as following and highlighted
3113
+ * users. Re-evaluates on the collaborator visibility clock, so callers don't need to
3114
+ * drive their own activity timer.
3115
+ *
3116
+ * Convenience wrapper for {@link CollaboratorsManager.getVisibleCollaborators}.
3117
+ *
3118
+ * @public
3119
+ */
3120
+ getVisibleCollaborators() {
3121
+ return this.collaborators.getVisibleCollaborators();
3122
+ }
3123
+ /**
3124
+ * Returns a list of presence records for peer collaborators who should currently be
3125
+ * shown in the UI, filtered to those on the current page.
3126
+ *
3127
+ * Convenience wrapper for {@link CollaboratorsManager.getVisibleCollaboratorsOnCurrentPage}.
3128
+ *
3129
+ * @public
3130
+ */
3131
+ getVisibleCollaboratorsOnCurrentPage() {
3132
+ return this.collaborators.getVisibleCollaboratorsOnCurrentPage();
3075
3133
  }
3076
3134
  // Attribution
3077
3135
  /**
@@ -3707,7 +3765,7 @@ class Editor extends EventEmitter {
3707
3765
  } = context;
3708
3766
  const zoomStepFunction = (zoom) => Math.pow(2, Math.ceil(Math.log2(zoom)));
3709
3767
  const steppedScreenScale = zoomStepFunction(screenScale);
3710
- const networkEffectiveType = "connection" in navigator ? navigator.connection.effectiveType : null;
3768
+ const networkEffectiveType = "connection" in navigator ? navigator.connection?.effectiveType ?? null : null;
3711
3769
  return await this.store.props.assets.resolve(asset, {
3712
3770
  screenScale: screenScale || 1,
3713
3771
  steppedScreenScale,
@@ -4177,7 +4235,7 @@ class Editor extends EventEmitter {
4177
4235
  const searchMargin = Math.max(innerMargin, outerMargin, this.options.hitTestMargin / zoomLevel);
4178
4236
  const candidateIds = this._spatialIndex.getShapeIdsAtPoint(point, searchMargin);
4179
4237
  const shapesToCheck = (opts.renderingOnly ? this.getCurrentPageRenderingShapesSorted() : this.getCurrentPageShapesSorted()).filter((shape) => {
4180
- if (!candidateIds.has(shape.id) && !this.isShapeOfType(shape, "frame")) return false;
4238
+ if (!candidateIds.has(shape.id) && !this.isShapeFrameLike(shape)) return false;
4181
4239
  if (shape.isLocked && !hitLocked || this.isShapeHidden(shape) || this.isShapeOfType(shape, "group"))
4182
4240
  return false;
4183
4241
  const pageMask = this.getShapeMask(shape);
@@ -4190,14 +4248,16 @@ class Editor extends EventEmitter {
4190
4248
  const geometry = this.getShapeGeometry(shape);
4191
4249
  const isGroup = geometry instanceof Group2d;
4192
4250
  const pointInShapeSpace = this.getPointInShapeSpace(shape, point);
4193
- if (this.isShapeOfType(shape, "frame") || (this.isShapeOfType(shape, "note") || this.isShapeOfType(shape, "arrow") || this.isShapeOfType(shape, "geo") && shape.props.fill === "none") && this.getShapeUtil(shape).getText(shape)?.trim()) {
4251
+ const shapeUtil = this.getShapeUtil(shape);
4252
+ const isShapeFrameLike = this.isShapeFrameLike(shape);
4253
+ if (isShapeFrameLike || (this.isShapeOfType(shape, "note") || this.isShapeOfType(shape, "arrow") || this.isShapeOfType(shape, "geo") && shape.props.fill === "none") && shapeUtil.getText(shape)?.trim()) {
4194
4254
  for (const childGeometry of geometry.children) {
4195
4255
  if (childGeometry.isLabel && childGeometry.isPointInBounds(pointInShapeSpace)) {
4196
4256
  return shape;
4197
4257
  }
4198
4258
  }
4199
4259
  }
4200
- if (this.isShapeOfType(shape, "frame")) {
4260
+ if (isShapeFrameLike) {
4201
4261
  const distance2 = geometry.distanceToPoint(pointInShapeSpace, hitFrameInside);
4202
4262
  if (hitFrameInside ? distance2 > 0 && distance2 <= outerMargin || distance2 <= 0 && distance2 > -innerMargin : distance2 > 0 && distance2 <= outerMargin) {
4203
4263
  return inMarginClosestToEdgeHit || shape;
@@ -4291,7 +4351,7 @@ class Editor extends EventEmitter {
4291
4351
  const candidateIds = this._spatialIndex.getShapeIdsAtPoint(point, margin);
4292
4352
  return this.getCurrentPageShapesSorted().filter((shape) => {
4293
4353
  if (this.isShapeHidden(shape)) return false;
4294
- if (!candidateIds.has(shape.id) && !this.isShapeOfType(shape, "frame")) return false;
4354
+ if (!candidateIds.has(shape.id) && !this.isShapeFrameLike(shape)) return false;
4295
4355
  return this.isPointInShape(shape, point, opts);
4296
4356
  }).reverse();
4297
4357
  }
@@ -4404,6 +4464,24 @@ class Editor extends EventEmitter {
4404
4464
  if (!shape) return false;
4405
4465
  return shape.type === type;
4406
4466
  }
4467
+ /**
4468
+ * Get whether a shape behaves like a frame — a container that has child
4469
+ * shapes, requires full-brush selection, blocks erasure from inside, etc.
4470
+ *
4471
+ * @example
4472
+ * ```ts
4473
+ * const isFrameLike = editor.isShapeFrameLike(someShape)
4474
+ * ```
4475
+ *
4476
+ * @param shape - The shape (or shape id) to test.
4477
+ *
4478
+ * @public
4479
+ */
4480
+ isShapeFrameLike(shape) {
4481
+ const _shape = typeof shape === "string" ? this.getShape(shape) : shape;
4482
+ if (!_shape) return false;
4483
+ return this.getShapeUtil(_shape).isFrameLike(_shape);
4484
+ }
4407
4485
  /**
4408
4486
  * Get a shape by its id.
4409
4487
  *
@@ -8048,6 +8126,10 @@ class Editor extends EventEmitter {
8048
8126
  }
8049
8127
  this.inputs.setIsPanning(true);
8050
8128
  clearTimeout(this._longPressTimeout);
8129
+ } else if (info.button === RIGHT_MOUSE_BUTTON && this.options.rightClickPanning) {
8130
+ this.inputs.setIsRightPointing(true);
8131
+ clearTimeout(this._longPressTimeout);
8132
+ return this;
8051
8133
  }
8052
8134
  if (this.inputs.getIsPanning()) {
8053
8135
  this.stopCameraAnimation();
@@ -8059,6 +8141,22 @@ class Editor extends EventEmitter {
8059
8141
  case "pointer_move": {
8060
8142
  if (!isPen && isPenMode) return;
8061
8143
  const { x: cx, y: cy, z: cz } = unsafe__withoutCapture(() => this.getCamera());
8144
+ if (this.inputs.getIsRightPointing() && !this.inputs.getIsPanning()) {
8145
+ const currentScreenPoint = this.inputs.getCurrentScreenPoint();
8146
+ const originScreenPoint = this.inputs.getOriginScreenPoint();
8147
+ if (Vec.Dist2(originScreenPoint, currentScreenPoint) > this.options.dragDistanceSquared) {
8148
+ this._prevCursor = this.getInstanceState().cursor.type;
8149
+ this.inputs.setIsPanning(true);
8150
+ this.setCursor({ type: "grabbing", rotation: 0 });
8151
+ this.stopCameraAnimation();
8152
+ const offset = Vec.Sub(currentScreenPoint, originScreenPoint);
8153
+ this.setCamera(new Vec(cx + offset.x / cz, cy + offset.y / cz, cz), {
8154
+ immediate: true
8155
+ });
8156
+ this.maybeTrackPerformance("Panning");
8157
+ }
8158
+ return;
8159
+ }
8062
8160
  if (this.inputs.getIsPanning() && this.inputs.getIsPointing()) {
8063
8161
  const currentScreenPoint = this.inputs.getCurrentScreenPoint();
8064
8162
  const previousScreenPoint = this.inputs.getPreviousScreenPoint();
@@ -8082,6 +8180,12 @@ class Editor extends EventEmitter {
8082
8180
  clearTimeout(this._longPressTimeout);
8083
8181
  inputs.buttons.delete(info.button);
8084
8182
  if (instanceState.isPenMode && !isPen) return;
8183
+ if (this.inputs.getIsRightPointing() && !this.inputs.getIsPanning()) {
8184
+ this.inputs.setIsRightPointing(false);
8185
+ this._selectedShapeIdsAtPointerDown = [];
8186
+ break;
8187
+ }
8188
+ this.inputs.setIsRightPointing(false);
8085
8189
  if (this.capturedPointerId === info.pointerId) {
8086
8190
  this.capturedPointerId = null;
8087
8191
  info.button = 0;
@@ -8099,11 +8203,24 @@ class Editor extends EventEmitter {
8099
8203
  break;
8100
8204
  }
8101
8205
  case MIDDLE_MOUSE_BUTTON: {
8102
- if (this.inputs.keys.has(" ")) {
8206
+ if (this.inputs.keys.has("Space")) {
8103
8207
  this.setCursor({ type: "grab", rotation: 0 });
8104
8208
  } else {
8105
8209
  this.setCursor({ type: this._prevCursor, rotation: 0 });
8106
8210
  }
8211
+ break;
8212
+ }
8213
+ case RIGHT_MOUSE_BUTTON: {
8214
+ if (this.inputs.keys.has("Space")) {
8215
+ this.setCursor({ type: "grab", rotation: 0 });
8216
+ } else {
8217
+ this.setCursor({ type: this._prevCursor, rotation: 0 });
8218
+ }
8219
+ if (slideSpeed > 0) {
8220
+ this.slideCamera({ speed: slideSpeed, direction: slideDirection });
8221
+ }
8222
+ this._selectedShapeIdsAtPointerDown = [];
8223
+ return this;
8107
8224
  }
8108
8225
  }
8109
8226
  if (slideSpeed > 0) {
@@ -8363,15 +8480,6 @@ __decorateClass([
8363
8480
  __decorateClass([
8364
8481
  computed
8365
8482
  ], Editor.prototype, "getViewportPageBounds", 1);
8366
- __decorateClass([
8367
- computed
8368
- ], Editor.prototype, "_getCollaboratorsQuery", 1);
8369
- __decorateClass([
8370
- computed
8371
- ], Editor.prototype, "getCollaborators", 1);
8372
- __decorateClass([
8373
- computed
8374
- ], Editor.prototype, "getCollaboratorsOnCurrentPage", 1);
8375
8483
  __decorateClass([
8376
8484
  computed
8377
8485
  ], Editor.prototype, "getRenderingShapes", 1);