@tldraw/editor 4.6.0-next.fecc64eee134 → 5.0.1

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
@@ -77,6 +77,7 @@ var import_notVisibleShapes = require("./derivations/notVisibleShapes");
77
77
  var import_parentsToChildren = require("./derivations/parentsToChildren");
78
78
  var import_shapeIdsInCurrentPage = require("./derivations/shapeIdsInCurrentPage");
79
79
  var import_ClickManager = require("./managers/ClickManager/ClickManager");
80
+ var import_CollaboratorsManager = require("./managers/CollaboratorsManager/CollaboratorsManager");
80
81
  var import_EdgeScrollManager = require("./managers/EdgeScrollManager/EdgeScrollManager");
81
82
  var import_FocusManager = require("./managers/FocusManager/FocusManager");
82
83
  var import_FontManager = require("./managers/FontManager/FontManager");
@@ -90,6 +91,7 @@ var import_TextManager = require("./managers/TextManager/TextManager");
90
91
  var import_ThemeManager = require("./managers/ThemeManager/ThemeManager");
91
92
  var import_TickManager = require("./managers/TickManager/TickManager");
92
93
  var import_UserPreferencesManager = require("./managers/UserPreferencesManager/UserPreferencesManager");
94
+ var import_OverlayManager = require("./overlays/OverlayManager");
93
95
  var import_RootState = require("./tools/RootState");
94
96
  class Editor extends import_eventemitter3.default {
95
97
  id = (0, import_utils.uniqueId)();
@@ -99,6 +101,7 @@ class Editor extends import_eventemitter3.default {
99
101
  shapeUtils,
100
102
  bindingUtils,
101
103
  assetUtils: assetUtilConstructors,
104
+ overlayUtils: overlayUtilConstructors,
102
105
  tools,
103
106
  getContainer,
104
107
  // needs to be here for backwards compatibility with TldrawEditor
@@ -158,6 +161,7 @@ class Editor extends import_eventemitter3.default {
158
161
  this.inputs = new import_InputsManager.InputsManager(this);
159
162
  this.performance = new import_PerformanceManager.PerformanceManager(this);
160
163
  this.disposables.add(() => this.performance.dispose());
164
+ this.collaborators = new import_CollaboratorsManager.CollaboratorsManager(this);
161
165
  class NewRoot extends import_RootState.RootState {
162
166
  static initial = initialState ?? "";
163
167
  }
@@ -218,6 +222,13 @@ class Editor extends import_eventemitter3.default {
218
222
  this.root.children[Tool.id] = new Tool(this, this.root);
219
223
  }
220
224
  this.scribbles = new import_ScribbleManager.ScribbleManager(this);
225
+ this.overlays = new import_OverlayManager.OverlayManager(this);
226
+ if (overlayUtilConstructors) {
227
+ for (const Util of overlayUtilConstructors) {
228
+ const util = new Util(this);
229
+ this.overlays.registerUtil(util);
230
+ }
231
+ }
221
232
  const cleanupInstancePageState = (prevPageState, shapesNoLongerInPage) => {
222
233
  let nextPageState = null;
223
234
  const selectedShapeIds = prevPageState.selectedShapeIds.filter(
@@ -670,6 +681,12 @@ class Editor extends import_eventemitter3.default {
670
681
  * @public
671
682
  */
672
683
  timers = import_time.tltime.forContext(this.contextId);
684
+ /**
685
+ * A manager for remote peer collaborators connected to this editor.
686
+ *
687
+ * @public
688
+ */
689
+ collaborators;
673
690
  /**
674
691
  * A manager for the user and their preferences.
675
692
  *
@@ -700,6 +717,12 @@ class Editor extends import_eventemitter3.default {
700
717
  * @public
701
718
  */
702
719
  scribbles;
720
+ /**
721
+ * A manager for canvas overlay UI elements (selection handles, shape handles, etc.).
722
+ *
723
+ * @public
724
+ */
725
+ overlays;
703
726
  /**
704
727
  * A manager for side effects and correct state enforcement. See {@link @tldraw/store#StoreSideEffects} for details.
705
728
  *
@@ -1348,11 +1371,20 @@ class Editor extends import_eventemitter3.default {
1348
1371
  /**
1349
1372
  * Set the cursor.
1350
1373
  *
1374
+ * No-op when the partial wouldn't change the current cursor — `setCursor`
1375
+ * is called from pointer-move hot paths (see `updateHoveredOverlayId`,
1376
+ * various tool states) and skipping redundant writes avoids needlessly
1377
+ * dirtying instance state.
1378
+ *
1351
1379
  * @param cursor - The cursor to set.
1352
1380
  * @public
1353
1381
  */
1354
1382
  setCursor(cursor) {
1355
- this.updateInstanceState({ cursor: { ...this.getInstanceState().cursor, ...cursor } });
1383
+ const current = this.getInstanceState().cursor;
1384
+ if ((cursor.type === void 0 || cursor.type === current.type) && (cursor.rotation === void 0 || cursor.rotation === current.rotation)) {
1385
+ return this;
1386
+ }
1387
+ this.updateInstanceState({ cursor: { ...current, ...cursor } });
1356
1388
  return this;
1357
1389
  }
1358
1390
  getPageStates() {
@@ -3018,26 +3050,53 @@ class Editor extends import_eventemitter3.default {
3018
3050
  const { x: cx, y: cy, z: cz = 1 } = this.getCamera();
3019
3051
  return new import_Vec.Vec((point.x + cx) * cz, (point.y + cy) * cz, point.z ?? 0.5);
3020
3052
  }
3021
- _getCollaboratorsQuery() {
3022
- return this.store.query.records("instance_presence", () => ({
3023
- userId: { neq: this.user.getId() }
3024
- }));
3025
- }
3053
+ // Collaborators
3054
+ /**
3055
+ * Returns a list of presence records for all peer collaborators.
3056
+ * This will return the latest presence record for each connected user.
3057
+ *
3058
+ * Convenience wrapper for {@link CollaboratorsManager.getCollaborators}.
3059
+ *
3060
+ * @public
3061
+ */
3026
3062
  getCollaborators() {
3027
- const allPresenceRecords = this._getCollaboratorsQuery().get();
3028
- if (!allPresenceRecords.length) return import_state.EMPTY_ARRAY;
3029
- const userIds = [...new Set(allPresenceRecords.map((c) => c.userId))].sort();
3030
- return userIds.map((id) => {
3031
- const latestPresence = (0, import_utils.maxBy)(
3032
- allPresenceRecords.filter((c) => c.userId === id),
3033
- (p) => p.lastActivityTimestamp ?? 0
3034
- );
3035
- return latestPresence;
3036
- });
3063
+ return this.collaborators.getCollaborators();
3037
3064
  }
3065
+ /**
3066
+ * Returns a list of presence records for all peer collaborators on the current page.
3067
+ * This will return the latest presence record for each connected user.
3068
+ *
3069
+ * Convenience wrapper for {@link CollaboratorsManager.getCollaboratorsOnCurrentPage}.
3070
+ *
3071
+ * @public
3072
+ */
3038
3073
  getCollaboratorsOnCurrentPage() {
3039
- const currentPageId = this.getCurrentPageId();
3040
- return this.getCollaborators().filter((c) => c.currentPageId === currentPageId);
3074
+ return this.collaborators.getCollaboratorsOnCurrentPage();
3075
+ }
3076
+ /**
3077
+ * Returns a list of presence records for peer collaborators who should currently be
3078
+ * shown in the UI. Filters {@link Editor.getCollaborators} by activity state
3079
+ * (active / idle / inactive) and visibility rules such as following and highlighted
3080
+ * users. Re-evaluates on the collaborator visibility clock, so callers don't need to
3081
+ * drive their own activity timer.
3082
+ *
3083
+ * Convenience wrapper for {@link CollaboratorsManager.getVisibleCollaborators}.
3084
+ *
3085
+ * @public
3086
+ */
3087
+ getVisibleCollaborators() {
3088
+ return this.collaborators.getVisibleCollaborators();
3089
+ }
3090
+ /**
3091
+ * Returns a list of presence records for peer collaborators who should currently be
3092
+ * shown in the UI, filtered to those on the current page.
3093
+ *
3094
+ * Convenience wrapper for {@link CollaboratorsManager.getVisibleCollaboratorsOnCurrentPage}.
3095
+ *
3096
+ * @public
3097
+ */
3098
+ getVisibleCollaboratorsOnCurrentPage() {
3099
+ return this.collaborators.getVisibleCollaboratorsOnCurrentPage();
3041
3100
  }
3042
3101
  // Attribution
3043
3102
  /**
@@ -3673,7 +3732,7 @@ class Editor extends import_eventemitter3.default {
3673
3732
  } = context;
3674
3733
  const zoomStepFunction = (zoom) => Math.pow(2, Math.ceil(Math.log2(zoom)));
3675
3734
  const steppedScreenScale = zoomStepFunction(screenScale);
3676
- const networkEffectiveType = "connection" in navigator ? navigator.connection.effectiveType : null;
3735
+ const networkEffectiveType = "connection" in navigator ? navigator.connection?.effectiveType ?? null : null;
3677
3736
  return await this.store.props.assets.resolve(asset, {
3678
3737
  screenScale: screenScale || 1,
3679
3738
  steppedScreenScale,
@@ -4143,7 +4202,7 @@ class Editor extends import_eventemitter3.default {
4143
4202
  const searchMargin = Math.max(innerMargin, outerMargin, this.options.hitTestMargin / zoomLevel);
4144
4203
  const candidateIds = this._spatialIndex.getShapeIdsAtPoint(point, searchMargin);
4145
4204
  const shapesToCheck = (opts.renderingOnly ? this.getCurrentPageRenderingShapesSorted() : this.getCurrentPageShapesSorted()).filter((shape) => {
4146
- if (!candidateIds.has(shape.id) && !this.isShapeOfType(shape, "frame")) return false;
4205
+ if (!candidateIds.has(shape.id) && !this.isShapeFrameLike(shape)) return false;
4147
4206
  if (shape.isLocked && !hitLocked || this.isShapeHidden(shape) || this.isShapeOfType(shape, "group"))
4148
4207
  return false;
4149
4208
  const pageMask = this.getShapeMask(shape);
@@ -4156,14 +4215,16 @@ class Editor extends import_eventemitter3.default {
4156
4215
  const geometry = this.getShapeGeometry(shape);
4157
4216
  const isGroup = geometry instanceof import_Group2d.Group2d;
4158
4217
  const pointInShapeSpace = this.getPointInShapeSpace(shape, point);
4159
- 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()) {
4218
+ const shapeUtil = this.getShapeUtil(shape);
4219
+ const isShapeFrameLike = this.isShapeFrameLike(shape);
4220
+ if (isShapeFrameLike || (this.isShapeOfType(shape, "note") || this.isShapeOfType(shape, "arrow") || this.isShapeOfType(shape, "geo") && shape.props.fill === "none") && shapeUtil.getText(shape)?.trim()) {
4160
4221
  for (const childGeometry of geometry.children) {
4161
4222
  if (childGeometry.isLabel && childGeometry.isPointInBounds(pointInShapeSpace)) {
4162
4223
  return shape;
4163
4224
  }
4164
4225
  }
4165
4226
  }
4166
- if (this.isShapeOfType(shape, "frame")) {
4227
+ if (isShapeFrameLike) {
4167
4228
  const distance2 = geometry.distanceToPoint(pointInShapeSpace, hitFrameInside);
4168
4229
  if (hitFrameInside ? distance2 > 0 && distance2 <= outerMargin || distance2 <= 0 && distance2 > -innerMargin : distance2 > 0 && distance2 <= outerMargin) {
4169
4230
  return inMarginClosestToEdgeHit || shape;
@@ -4257,7 +4318,7 @@ class Editor extends import_eventemitter3.default {
4257
4318
  const candidateIds = this._spatialIndex.getShapeIdsAtPoint(point, margin);
4258
4319
  return this.getCurrentPageShapesSorted().filter((shape) => {
4259
4320
  if (this.isShapeHidden(shape)) return false;
4260
- if (!candidateIds.has(shape.id) && !this.isShapeOfType(shape, "frame")) return false;
4321
+ if (!candidateIds.has(shape.id) && !this.isShapeFrameLike(shape)) return false;
4261
4322
  return this.isPointInShape(shape, point, opts);
4262
4323
  }).reverse();
4263
4324
  }
@@ -4370,6 +4431,24 @@ class Editor extends import_eventemitter3.default {
4370
4431
  if (!shape) return false;
4371
4432
  return shape.type === type;
4372
4433
  }
4434
+ /**
4435
+ * Get whether a shape behaves like a frame — a container that has child
4436
+ * shapes, requires full-brush selection, blocks erasure from inside, etc.
4437
+ *
4438
+ * @example
4439
+ * ```ts
4440
+ * const isFrameLike = editor.isShapeFrameLike(someShape)
4441
+ * ```
4442
+ *
4443
+ * @param shape - The shape (or shape id) to test.
4444
+ *
4445
+ * @public
4446
+ */
4447
+ isShapeFrameLike(shape) {
4448
+ const _shape = typeof shape === "string" ? this.getShape(shape) : shape;
4449
+ if (!_shape) return false;
4450
+ return this.getShapeUtil(_shape).isFrameLike(_shape);
4451
+ }
4373
4452
  /**
4374
4453
  * Get a shape by its id.
4375
4454
  *
@@ -8014,6 +8093,10 @@ class Editor extends import_eventemitter3.default {
8014
8093
  }
8015
8094
  this.inputs.setIsPanning(true);
8016
8095
  clearTimeout(this._longPressTimeout);
8096
+ } else if (info.button === import_constants.RIGHT_MOUSE_BUTTON && this.options.rightClickPanning) {
8097
+ this.inputs.setIsRightPointing(true);
8098
+ clearTimeout(this._longPressTimeout);
8099
+ return this;
8017
8100
  }
8018
8101
  if (this.inputs.getIsPanning()) {
8019
8102
  this.stopCameraAnimation();
@@ -8025,6 +8108,22 @@ class Editor extends import_eventemitter3.default {
8025
8108
  case "pointer_move": {
8026
8109
  if (!isPen && isPenMode) return;
8027
8110
  const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
8111
+ if (this.inputs.getIsRightPointing() && !this.inputs.getIsPanning()) {
8112
+ const currentScreenPoint = this.inputs.getCurrentScreenPoint();
8113
+ const originScreenPoint = this.inputs.getOriginScreenPoint();
8114
+ if (import_Vec.Vec.Dist2(originScreenPoint, currentScreenPoint) > this.options.dragDistanceSquared) {
8115
+ this._prevCursor = this.getInstanceState().cursor.type;
8116
+ this.inputs.setIsPanning(true);
8117
+ this.setCursor({ type: "grabbing", rotation: 0 });
8118
+ this.stopCameraAnimation();
8119
+ const offset = import_Vec.Vec.Sub(currentScreenPoint, originScreenPoint);
8120
+ this.setCamera(new import_Vec.Vec(cx + offset.x / cz, cy + offset.y / cz, cz), {
8121
+ immediate: true
8122
+ });
8123
+ this.maybeTrackPerformance("Panning");
8124
+ }
8125
+ return;
8126
+ }
8028
8127
  if (this.inputs.getIsPanning() && this.inputs.getIsPointing()) {
8029
8128
  const currentScreenPoint = this.inputs.getCurrentScreenPoint();
8030
8129
  const previousScreenPoint = this.inputs.getPreviousScreenPoint();
@@ -8048,6 +8147,12 @@ class Editor extends import_eventemitter3.default {
8048
8147
  clearTimeout(this._longPressTimeout);
8049
8148
  inputs.buttons.delete(info.button);
8050
8149
  if (instanceState.isPenMode && !isPen) return;
8150
+ if (this.inputs.getIsRightPointing() && !this.inputs.getIsPanning()) {
8151
+ this.inputs.setIsRightPointing(false);
8152
+ this._selectedShapeIdsAtPointerDown = [];
8153
+ break;
8154
+ }
8155
+ this.inputs.setIsRightPointing(false);
8051
8156
  if (this.capturedPointerId === info.pointerId) {
8052
8157
  this.capturedPointerId = null;
8053
8158
  info.button = 0;
@@ -8065,11 +8170,24 @@ class Editor extends import_eventemitter3.default {
8065
8170
  break;
8066
8171
  }
8067
8172
  case import_constants.MIDDLE_MOUSE_BUTTON: {
8068
- if (this.inputs.keys.has(" ")) {
8173
+ if (this.inputs.keys.has("Space")) {
8069
8174
  this.setCursor({ type: "grab", rotation: 0 });
8070
8175
  } else {
8071
8176
  this.setCursor({ type: this._prevCursor, rotation: 0 });
8072
8177
  }
8178
+ break;
8179
+ }
8180
+ case import_constants.RIGHT_MOUSE_BUTTON: {
8181
+ if (this.inputs.keys.has("Space")) {
8182
+ this.setCursor({ type: "grab", rotation: 0 });
8183
+ } else {
8184
+ this.setCursor({ type: this._prevCursor, rotation: 0 });
8185
+ }
8186
+ if (slideSpeed > 0) {
8187
+ this.slideCamera({ speed: slideSpeed, direction: slideDirection });
8188
+ }
8189
+ this._selectedShapeIdsAtPointerDown = [];
8190
+ return this;
8073
8191
  }
8074
8192
  }
8075
8193
  if (slideSpeed > 0) {
@@ -8329,15 +8447,6 @@ __decorateClass([
8329
8447
  __decorateClass([
8330
8448
  import_state.computed
8331
8449
  ], Editor.prototype, "getViewportPageBounds", 1);
8332
- __decorateClass([
8333
- import_state.computed
8334
- ], Editor.prototype, "_getCollaboratorsQuery", 1);
8335
- __decorateClass([
8336
- import_state.computed
8337
- ], Editor.prototype, "getCollaborators", 1);
8338
- __decorateClass([
8339
- import_state.computed
8340
- ], Editor.prototype, "getCollaboratorsOnCurrentPage", 1);
8341
8450
  __decorateClass([
8342
8451
  import_state.computed
8343
8452
  ], Editor.prototype, "getRenderingShapes", 1);