@tldraw/editor 4.6.0-next.30b99cd52fc8 → 4.6.0-next.35cf541abcf9

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 (284) hide show
  1. package/dist-cjs/index.d.ts +758 -96
  2. package/dist-cjs/index.js +18 -3
  3. package/dist-cjs/index.js.map +3 -3
  4. package/dist-cjs/lib/TldrawEditor.js +55 -12
  5. package/dist-cjs/lib/TldrawEditor.js.map +3 -3
  6. package/dist-cjs/lib/components/LiveCollaborators.js +1 -0
  7. package/dist-cjs/lib/components/LiveCollaborators.js.map +2 -2
  8. package/dist-cjs/lib/components/MenuClickCapture.js +99 -38
  9. package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
  10. package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js +10 -3
  11. package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js.map +3 -3
  12. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +5 -2
  13. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  14. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +1 -1
  15. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  16. package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js +1 -0
  17. package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js.map +2 -2
  18. package/dist-cjs/lib/config/createTLStore.js +7 -0
  19. package/dist-cjs/lib/config/createTLStore.js.map +2 -2
  20. package/dist-cjs/lib/config/defaultAssets.js +36 -0
  21. package/dist-cjs/lib/config/defaultAssets.js.map +7 -0
  22. package/dist-cjs/lib/editor/Editor.js +279 -10
  23. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  24. package/dist-cjs/lib/editor/assets/AssetUtil.js +67 -0
  25. package/dist-cjs/lib/editor/assets/AssetUtil.js.map +7 -0
  26. package/dist-cjs/lib/editor/bindings/BindingUtil.js +1 -0
  27. package/dist-cjs/lib/editor/bindings/BindingUtil.js.map +1 -1
  28. package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js +1 -0
  29. package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js.map +1 -1
  30. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +1 -0
  31. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +1 -1
  32. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js +1 -0
  33. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js.map +1 -1
  34. package/dist-cjs/lib/editor/managers/FontManager/FontManager.js +2 -0
  35. package/dist-cjs/lib/editor/managers/FontManager/FontManager.js.map +2 -2
  36. package/dist-cjs/lib/editor/managers/HistoryManager/HistoryManager.js +2 -0
  37. package/dist-cjs/lib/editor/managers/HistoryManager/HistoryManager.js.map +1 -1
  38. package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js +12 -0
  39. package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js.map +2 -2
  40. package/dist-cjs/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.js +80 -0
  41. package/dist-cjs/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.js.map +7 -0
  42. package/dist-cjs/lib/editor/managers/PerformanceManager/PerformanceManager.js +466 -0
  43. package/dist-cjs/lib/editor/managers/PerformanceManager/PerformanceManager.js.map +7 -0
  44. package/dist-cjs/lib/editor/managers/PerformanceManager/perf-types.js +17 -0
  45. package/dist-cjs/lib/editor/managers/PerformanceManager/perf-types.js.map +7 -0
  46. package/dist-cjs/lib/editor/managers/ScribbleManager/ScribbleManager.js +1 -0
  47. package/dist-cjs/lib/editor/managers/ScribbleManager/ScribbleManager.js.map +1 -1
  48. package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js +1 -0
  49. package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js.map +1 -1
  50. package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js +1 -0
  51. package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js.map +1 -1
  52. package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js +2 -1
  53. package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js.map +2 -2
  54. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js +1 -0
  55. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js.map +1 -1
  56. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +1 -0
  57. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +1 -1
  58. package/dist-cjs/lib/editor/managers/ThemeManager/ThemeManager.js +107 -0
  59. package/dist-cjs/lib/editor/managers/ThemeManager/ThemeManager.js.map +7 -0
  60. package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js +586 -0
  61. package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js.map +7 -0
  62. package/dist-cjs/lib/editor/managers/TickManager/TickManager.js +1 -0
  63. package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +1 -1
  64. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +8 -4
  65. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  66. package/dist-cjs/lib/editor/shapes/BaseFrameLikeShapeUtil.js +76 -0
  67. package/dist-cjs/lib/editor/shapes/BaseFrameLikeShapeUtil.js.map +7 -0
  68. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +22 -2
  69. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  70. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +1 -1
  71. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +2 -2
  72. package/dist-cjs/lib/editor/shapes/shared/getPerfectDashProps.js +6 -0
  73. package/dist-cjs/lib/editor/shapes/shared/getPerfectDashProps.js.map +2 -2
  74. package/dist-cjs/lib/editor/tools/StateNode.js +15 -17
  75. package/dist-cjs/lib/editor/tools/StateNode.js.map +2 -2
  76. package/dist-cjs/lib/editor/types/SvgExportContext.js.map +2 -2
  77. package/dist-cjs/lib/editor/types/external-content.js.map +1 -1
  78. package/dist-cjs/lib/exports/ExportDelay.js +1 -0
  79. package/dist-cjs/lib/exports/ExportDelay.js.map +1 -1
  80. package/dist-cjs/lib/exports/StyleEmbedder.js +1 -0
  81. package/dist-cjs/lib/exports/StyleEmbedder.js.map +1 -1
  82. package/dist-cjs/lib/exports/getSvgJsx.js +14 -8
  83. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  84. package/dist-cjs/lib/globals/environment.js +18 -1
  85. package/dist-cjs/lib/globals/environment.js.map +2 -2
  86. package/dist-cjs/lib/hooks/useCanvasEvents.js +25 -4
  87. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  88. package/dist-cjs/lib/hooks/{useIsDarkMode.js → useColorMode.js} +14 -10
  89. package/dist-cjs/lib/hooks/useColorMode.js.map +7 -0
  90. package/dist-cjs/lib/hooks/useCursor.js +3 -7
  91. package/dist-cjs/lib/hooks/useCursor.js.map +2 -2
  92. package/dist-cjs/lib/hooks/useDarkMode.js +4 -4
  93. package/dist-cjs/lib/hooks/useDarkMode.js.map +2 -2
  94. package/dist-cjs/lib/options.js +2 -0
  95. package/dist-cjs/lib/options.js.map +2 -2
  96. package/dist-cjs/lib/primitives/Vec.js +3 -0
  97. package/dist-cjs/lib/primitives/Vec.js.map +1 -1
  98. package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -0
  99. package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +1 -1
  100. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +1 -0
  101. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +1 -1
  102. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +2 -0
  103. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +1 -1
  104. package/dist-cjs/lib/primitives/geometry/Stadium2d.js +1 -0
  105. package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +1 -1
  106. package/dist-cjs/lib/utils/EditorAtom.js +2 -0
  107. package/dist-cjs/lib/utils/EditorAtom.js.map +1 -1
  108. package/dist-cjs/lib/utils/reparenting.js +2 -1
  109. package/dist-cjs/lib/utils/reparenting.js.map +2 -2
  110. package/dist-cjs/lib/utils/richText.js.map +2 -2
  111. package/dist-cjs/lib/utils/runtime.js +2 -1
  112. package/dist-cjs/lib/utils/runtime.js.map +2 -2
  113. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +2 -0
  114. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +1 -1
  115. package/dist-cjs/lib/utils/sync/hardReset.js +0 -8
  116. package/dist-cjs/lib/utils/sync/hardReset.js.map +2 -2
  117. package/dist-cjs/version.js +3 -3
  118. package/dist-cjs/version.js.map +1 -1
  119. package/dist-esm/index.d.mts +758 -96
  120. package/dist-esm/index.mjs +19 -6
  121. package/dist-esm/index.mjs.map +2 -2
  122. package/dist-esm/lib/TldrawEditor.mjs +58 -12
  123. package/dist-esm/lib/TldrawEditor.mjs.map +3 -3
  124. package/dist-esm/lib/components/LiveCollaborators.mjs +1 -0
  125. package/dist-esm/lib/components/LiveCollaborators.mjs.map +2 -2
  126. package/dist-esm/lib/components/MenuClickCapture.mjs +100 -39
  127. package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
  128. package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs +10 -3
  129. package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs.map +3 -3
  130. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +5 -2
  131. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  132. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +1 -1
  133. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  134. package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs +1 -0
  135. package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs.map +2 -2
  136. package/dist-esm/lib/config/createTLStore.mjs +10 -1
  137. package/dist-esm/lib/config/createTLStore.mjs.map +2 -2
  138. package/dist-esm/lib/config/defaultAssets.mjs +16 -0
  139. package/dist-esm/lib/config/defaultAssets.mjs.map +7 -0
  140. package/dist-esm/lib/editor/Editor.mjs +279 -10
  141. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  142. package/dist-esm/lib/editor/assets/AssetUtil.mjs +47 -0
  143. package/dist-esm/lib/editor/assets/AssetUtil.mjs.map +7 -0
  144. package/dist-esm/lib/editor/bindings/BindingUtil.mjs +1 -0
  145. package/dist-esm/lib/editor/bindings/BindingUtil.mjs.map +1 -1
  146. package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs +1 -0
  147. package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs.map +1 -1
  148. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +1 -0
  149. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +1 -1
  150. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs +1 -0
  151. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +1 -1
  152. package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs +2 -0
  153. package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs.map +2 -2
  154. package/dist-esm/lib/editor/managers/HistoryManager/HistoryManager.mjs +2 -0
  155. package/dist-esm/lib/editor/managers/HistoryManager/HistoryManager.mjs.map +1 -1
  156. package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs +12 -0
  157. package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs.map +2 -2
  158. package/dist-esm/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.mjs +60 -0
  159. package/dist-esm/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.mjs.map +7 -0
  160. package/dist-esm/lib/editor/managers/PerformanceManager/PerformanceManager.mjs +438 -0
  161. package/dist-esm/lib/editor/managers/PerformanceManager/PerformanceManager.mjs.map +7 -0
  162. package/dist-esm/lib/editor/managers/PerformanceManager/perf-types.mjs +1 -0
  163. package/dist-esm/lib/editor/managers/PerformanceManager/perf-types.mjs.map +7 -0
  164. package/dist-esm/lib/editor/managers/ScribbleManager/ScribbleManager.mjs +1 -0
  165. package/dist-esm/lib/editor/managers/ScribbleManager/ScribbleManager.mjs.map +1 -1
  166. package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs +1 -0
  167. package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs.map +1 -1
  168. package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs +1 -0
  169. package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs.map +1 -1
  170. package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs +2 -1
  171. package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs.map +2 -2
  172. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs +1 -0
  173. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs.map +1 -1
  174. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +1 -0
  175. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +1 -1
  176. package/dist-esm/lib/editor/managers/ThemeManager/ThemeManager.mjs +89 -0
  177. package/dist-esm/lib/editor/managers/ThemeManager/ThemeManager.mjs.map +7 -0
  178. package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs +568 -0
  179. package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs.map +7 -0
  180. package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs +1 -0
  181. package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +1 -1
  182. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +8 -4
  183. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  184. package/dist-esm/lib/editor/shapes/BaseFrameLikeShapeUtil.mjs +56 -0
  185. package/dist-esm/lib/editor/shapes/BaseFrameLikeShapeUtil.mjs.map +7 -0
  186. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +22 -2
  187. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  188. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +1 -1
  189. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +2 -2
  190. package/dist-esm/lib/editor/shapes/shared/getPerfectDashProps.mjs +6 -0
  191. package/dist-esm/lib/editor/shapes/shared/getPerfectDashProps.mjs.map +2 -2
  192. package/dist-esm/lib/editor/tools/StateNode.mjs +15 -17
  193. package/dist-esm/lib/editor/tools/StateNode.mjs.map +2 -2
  194. package/dist-esm/lib/editor/types/SvgExportContext.mjs.map +2 -2
  195. package/dist-esm/lib/exports/ExportDelay.mjs +1 -0
  196. package/dist-esm/lib/exports/ExportDelay.mjs.map +1 -1
  197. package/dist-esm/lib/exports/StyleEmbedder.mjs +1 -0
  198. package/dist-esm/lib/exports/StyleEmbedder.mjs.map +1 -1
  199. package/dist-esm/lib/exports/getSvgJsx.mjs +14 -11
  200. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  201. package/dist-esm/lib/globals/environment.mjs +18 -1
  202. package/dist-esm/lib/globals/environment.mjs.map +2 -2
  203. package/dist-esm/lib/hooks/useCanvasEvents.mjs +25 -4
  204. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  205. package/dist-esm/lib/hooks/useColorMode.mjs +19 -0
  206. package/dist-esm/lib/hooks/useColorMode.mjs.map +7 -0
  207. package/dist-esm/lib/hooks/useCursor.mjs +3 -7
  208. package/dist-esm/lib/hooks/useCursor.mjs.map +2 -2
  209. package/dist-esm/lib/hooks/useDarkMode.mjs +4 -4
  210. package/dist-esm/lib/hooks/useDarkMode.mjs.map +2 -2
  211. package/dist-esm/lib/options.mjs +2 -0
  212. package/dist-esm/lib/options.mjs.map +2 -2
  213. package/dist-esm/lib/primitives/Vec.mjs +3 -0
  214. package/dist-esm/lib/primitives/Vec.mjs.map +1 -1
  215. package/dist-esm/lib/primitives/geometry/Circle2d.mjs +1 -0
  216. package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +1 -1
  217. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +1 -0
  218. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +1 -1
  219. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +2 -0
  220. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +1 -1
  221. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs +1 -0
  222. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +1 -1
  223. package/dist-esm/lib/utils/EditorAtom.mjs +2 -0
  224. package/dist-esm/lib/utils/EditorAtom.mjs.map +1 -1
  225. package/dist-esm/lib/utils/reparenting.mjs +2 -1
  226. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  227. package/dist-esm/lib/utils/richText.mjs.map +2 -2
  228. package/dist-esm/lib/utils/runtime.mjs +2 -1
  229. package/dist-esm/lib/utils/runtime.mjs.map +2 -2
  230. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +2 -0
  231. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +1 -1
  232. package/dist-esm/lib/utils/sync/hardReset.mjs +0 -8
  233. package/dist-esm/lib/utils/sync/hardReset.mjs.map +2 -2
  234. package/dist-esm/version.mjs +3 -3
  235. package/dist-esm/version.mjs.map +1 -1
  236. package/editor.css +0 -37
  237. package/package.json +7 -7
  238. package/src/index.ts +24 -6
  239. package/src/lib/TldrawEditor.tsx +90 -13
  240. package/src/lib/components/LiveCollaborators.tsx +8 -2
  241. package/src/lib/components/MenuClickCapture.tsx +129 -49
  242. package/src/lib/components/default-components/CanvasShapeIndicators.tsx +14 -3
  243. package/src/lib/components/default-components/DefaultCanvas.tsx +6 -2
  244. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +2 -2
  245. package/src/lib/components/default-components/DefaultShapeIndicators.tsx +2 -0
  246. package/src/lib/config/createTLStore.ts +22 -1
  247. package/src/lib/config/defaultAssets.ts +19 -0
  248. package/src/lib/editor/Editor.ts +387 -40
  249. package/src/lib/editor/assets/AssetUtil.ts +85 -0
  250. package/src/lib/editor/managers/FontManager/FontManager.test.ts +9 -2
  251. package/src/lib/editor/managers/FontManager/FontManager.ts +1 -67
  252. package/src/lib/editor/managers/InputsManager/InputsManager.ts +12 -0
  253. package/src/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.ts +82 -0
  254. package/src/lib/editor/managers/PerformanceManager/PerformanceManager.test.ts +522 -0
  255. package/src/lib/editor/managers/PerformanceManager/PerformanceManager.ts +583 -0
  256. package/src/lib/editor/managers/PerformanceManager/perf-types.ts +196 -0
  257. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +13 -2
  258. package/src/lib/editor/managers/SnapManager/SnapManager.ts +1 -1
  259. package/src/lib/editor/managers/ThemeManager/ThemeManager.ts +116 -0
  260. package/src/lib/editor/managers/ThemeManager/defaultThemes.ts +605 -0
  261. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +23 -29
  262. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +5 -3
  263. package/src/lib/editor/shapes/BaseFrameLikeShapeUtil.tsx +121 -0
  264. package/src/lib/editor/shapes/ShapeUtil.ts +39 -3
  265. package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +1 -1
  266. package/src/lib/editor/shapes/shared/getPerfectDashProps.ts +7 -0
  267. package/src/lib/editor/tools/StateNode.ts +16 -18
  268. package/src/lib/editor/types/SvgExportContext.tsx +5 -0
  269. package/src/lib/editor/types/external-content.ts +1 -0
  270. package/src/lib/exports/getSvgJsx.tsx +23 -16
  271. package/src/lib/globals/environment.ts +18 -0
  272. package/src/lib/hooks/useCanvasEvents.ts +40 -3
  273. package/src/lib/hooks/{useIsDarkMode.ts → useColorMode.ts} +9 -5
  274. package/src/lib/hooks/useCursor.ts +3 -7
  275. package/src/lib/hooks/useDarkMode.ts +4 -4
  276. package/src/lib/options.ts +14 -0
  277. package/src/lib/utils/reparenting.ts +6 -2
  278. package/src/lib/utils/richText.ts +1 -1
  279. package/src/lib/utils/runtime.ts +3 -1
  280. package/src/lib/utils/sync/hardReset.ts +0 -8
  281. package/src/version.ts +3 -3
  282. package/dist-cjs/lib/hooks/useIsDarkMode.js.map +0 -7
  283. package/dist-esm/lib/hooks/useIsDarkMode.mjs +0 -15
  284. package/dist-esm/lib/hooks/useIsDarkMode.mjs.map +0 -7
@@ -45,6 +45,7 @@ var import_tlschema = require("@tldraw/tlschema");
45
45
  var import_utils = require("@tldraw/utils");
46
46
  var import_eventemitter3 = __toESM(require("eventemitter3"), 1);
47
47
  var import_createTLCurrentUser = require("../config/createTLCurrentUser");
48
+ var import_defaultAssets = require("../config/defaultAssets");
48
49
  var import_defaultBindings = require("../config/defaultBindings");
49
50
  var import_defaultShapes = require("../config/defaultShapes");
50
51
  var import_TLEditorSnapshot = require("../config/TLEditorSnapshot");
@@ -81,10 +82,12 @@ var import_FocusManager = require("./managers/FocusManager/FocusManager");
81
82
  var import_FontManager = require("./managers/FontManager/FontManager");
82
83
  var import_HistoryManager = require("./managers/HistoryManager/HistoryManager");
83
84
  var import_InputsManager = require("./managers/InputsManager/InputsManager");
85
+ var import_PerformanceManager = require("./managers/PerformanceManager/PerformanceManager");
84
86
  var import_ScribbleManager = require("./managers/ScribbleManager/ScribbleManager");
85
87
  var import_SnapManager = require("./managers/SnapManager/SnapManager");
86
88
  var import_SpatialIndexManager = require("./managers/SpatialIndexManager/SpatialIndexManager");
87
89
  var import_TextManager = require("./managers/TextManager/TextManager");
90
+ var import_ThemeManager = require("./managers/ThemeManager/ThemeManager");
88
91
  var import_TickManager = require("./managers/TickManager/TickManager");
89
92
  var import_UserPreferencesManager = require("./managers/UserPreferencesManager/UserPreferencesManager");
90
93
  var import_RootState = require("./tools/RootState");
@@ -95,6 +98,7 @@ class Editor extends import_eventemitter3.default {
95
98
  user,
96
99
  shapeUtils,
97
100
  bindingUtils,
101
+ assetUtils: assetUtilConstructors,
98
102
  tools,
99
103
  getContainer,
100
104
  // needs to be here for backwards compatibility with TldrawEditor
@@ -102,13 +106,15 @@ class Editor extends import_eventemitter3.default {
102
106
  cameraOptions,
103
107
  initialState,
104
108
  autoFocus,
105
- inferDarkMode,
106
109
  options: _options,
107
110
  // needs to be here for backwards compatibility with TldrawEditor
108
111
  // eslint-disable-next-line @typescript-eslint/no-deprecated
109
112
  textOptions: _textOptions,
110
113
  getShapeVisibility,
111
- fontAssetUrls
114
+ colorScheme,
115
+ fontAssetUrls,
116
+ themes,
117
+ initialTheme
112
118
  }) {
113
119
  super();
114
120
  this._getShapeVisibility = getShapeVisibility;
@@ -131,19 +137,27 @@ class Editor extends import_eventemitter3.default {
131
137
  ...cameraOptions,
132
138
  ...options?.camera
133
139
  });
140
+ this.getContainer = getContainer;
134
141
  this._textOptions = (0, import_state.atom)("text options", options?.text ?? null);
135
- this.user = new import_UserPreferencesManager.UserPreferencesManager(user ?? (0, import_createTLCurrentUser.createTLCurrentUser)(), inferDarkMode ?? false);
142
+ this.user = new import_UserPreferencesManager.UserPreferencesManager(user ?? (0, import_createTLCurrentUser.createTLCurrentUser)(), colorScheme ?? "light");
136
143
  this.disposables.add(() => this.user.dispose());
137
- this.getContainer = getContainer;
138
144
  this.textMeasure = new import_TextManager.TextManager(this);
139
145
  this.disposables.add(() => this.textMeasure.dispose());
140
- this.fonts = new import_FontManager.FontManager(this, fontAssetUrls);
146
+ this._themeManager = new import_ThemeManager.ThemeManager(this, {
147
+ themes: (0, import_ThemeManager.resolveThemes)(themes),
148
+ initial: initialTheme ?? "default"
149
+ });
150
+ this.disposables.add(() => this._themeManager.dispose());
141
151
  this._tickManager = new import_TickManager.TickManager(this);
152
+ this.disposables.add(() => this._tickManager.dispose());
142
153
  this.disposables.add(() => {
143
154
  this.off("tick", this._decayCameraStateTimeout);
144
155
  this._setCameraState("idle");
145
156
  });
157
+ this.fonts = new import_FontManager.FontManager(this, fontAssetUrls);
146
158
  this.inputs = new import_InputsManager.InputsManager(this);
159
+ this.performance = new import_PerformanceManager.PerformanceManager(this);
160
+ this.disposables.add(() => this.performance.dispose());
147
161
  class NewRoot extends import_RootState.RootState {
148
162
  static initial = initialState ?? "";
149
163
  }
@@ -171,6 +185,16 @@ class Editor extends import_eventemitter3.default {
171
185
  }
172
186
  this.shapeUtils = _shapeUtils;
173
187
  this.styleProps = _styleProps;
188
+ const _shapeUtilsByAssetType = {};
189
+ for (const Util of allShapeUtils) {
190
+ const assetTypes = Util.handledAssetTypes;
191
+ if (assetTypes) {
192
+ for (const assetType of assetTypes) {
193
+ _shapeUtilsByAssetType[assetType] = _shapeUtils[Util.type];
194
+ }
195
+ }
196
+ }
197
+ this._shapeUtilsByAssetType = _shapeUtilsByAssetType;
174
198
  const allBindingUtils = (0, import_defaultBindings.checkBindings)(bindingUtils);
175
199
  const _bindingUtils = {};
176
200
  for (const Util of allBindingUtils) {
@@ -178,6 +202,15 @@ class Editor extends import_eventemitter3.default {
178
202
  _bindingUtils[Util.type] = util;
179
203
  }
180
204
  this.bindingUtils = _bindingUtils;
205
+ if (assetUtilConstructors) {
206
+ const allAssetUtils = (0, import_defaultAssets.checkAssets)(assetUtilConstructors);
207
+ const _assetUtils = {};
208
+ for (const Util of allAssetUtils) {
209
+ const util = new Util(this);
210
+ _assetUtils[Util.type] = util;
211
+ }
212
+ this.assetUtils = _assetUtils;
213
+ }
181
214
  for (const Tool of [...tools]) {
182
215
  if ((0, import_utils.hasOwnProperty)(this.root.children, Tool.id)) {
183
216
  throw Error(`Can't override tool with id "${Tool.id}"`);
@@ -618,6 +651,17 @@ class Editor extends import_eventemitter3.default {
618
651
  * @public
619
652
  */
620
653
  snaps;
654
+ /**
655
+ * A manager for performance measurement hooks.
656
+ *
657
+ * @public
658
+ */
659
+ performance;
660
+ /**
661
+ * A manager for the spatial index, tracking where shapes exist on the canvas.
662
+ *
663
+ * @internal
664
+ */
621
665
  _spatialIndex;
622
666
  /**
623
667
  * A manager for the any asynchronous events and making sure they're
@@ -632,6 +676,12 @@ class Editor extends import_eventemitter3.default {
632
676
  * @public
633
677
  */
634
678
  user;
679
+ /**
680
+ * A manager for the editor's themes.
681
+ *
682
+ * @internal
683
+ */
684
+ _themeManager;
635
685
  /**
636
686
  * A helper for measuring text.
637
687
  *
@@ -703,12 +753,117 @@ class Editor extends import_eventemitter3.default {
703
753
  * @public
704
754
  */
705
755
  dispose() {
756
+ this.stopCameraAnimation();
757
+ if (this.getInstanceState().followingUserId) {
758
+ this.stopFollowingUser();
759
+ }
706
760
  this.disposables.forEach((dispose) => dispose());
707
761
  this.disposables.clear();
762
+ this.menus.clearOpenMenus();
708
763
  this.store.dispose();
709
764
  this.isDisposed = true;
710
765
  this.emit("dispose");
711
766
  }
767
+ /* ------------------ Themes (shadowing the theme manager) ------------------ */
768
+ /**
769
+ * Get the current color mode (`'light'` or `'dark'`), based on the user's dark mode preference.
770
+ *
771
+ * @public
772
+ */
773
+ getColorMode() {
774
+ return this._themeManager.getColorMode();
775
+ }
776
+ /**
777
+ * Set the color mode. Note that this is a convenience method that passes the mode to
778
+ * `user.updateUserPreferences`, which is the source of truth for the user's color mode preference.
779
+ *
780
+ * @public
781
+ */
782
+ setColorMode(mode) {
783
+ this.user.updateUserPreferences({ colorScheme: mode });
784
+ return this;
785
+ }
786
+ /**
787
+ * Get the id of the current theme.
788
+ *
789
+ * @public
790
+ */
791
+ getCurrentThemeId() {
792
+ return this._themeManager.getCurrentThemeId();
793
+ }
794
+ /**
795
+ * Get the current theme definition.
796
+ *
797
+ * @public
798
+ */
799
+ getCurrentTheme() {
800
+ return this._themeManager.getCurrentTheme();
801
+ }
802
+ /**
803
+ * Set the current theme by id.
804
+ *
805
+ * @public
806
+ */
807
+ setCurrentTheme(id) {
808
+ this._themeManager.setCurrentTheme(id);
809
+ return this;
810
+ }
811
+ /**
812
+ * Get all registered theme definitions.
813
+ *
814
+ * @public
815
+ */
816
+ getThemes() {
817
+ return this._themeManager.getThemes();
818
+ }
819
+ /**
820
+ * Get a single theme definition by id.
821
+ *
822
+ * @public
823
+ */
824
+ getTheme(id) {
825
+ return this._themeManager.getTheme(id);
826
+ }
827
+ /**
828
+ * Replace all theme definitions, or update them via a callback that receives a deep copy.
829
+ * The `'default'` theme must always be present in the result.
830
+ *
831
+ * @example
832
+ * ```ts
833
+ * // Replace all themes
834
+ * editor.updateThemes({ default: myDefaultTheme, ocean: myOceanTheme })
835
+ *
836
+ * // Update via callback
837
+ * editor.updateThemes((themes) => {
838
+ * delete themes.ocean
839
+ * return themes
840
+ * })
841
+ * ```
842
+ *
843
+ * @public
844
+ */
845
+ updateThemes(themes) {
846
+ this._themeManager.updateThemes(themes);
847
+ return this;
848
+ }
849
+ /**
850
+ * Register or update a single theme definition. The theme is keyed by its `id` property.
851
+ *
852
+ * @example
853
+ * ```ts
854
+ * // Override a property on the default theme
855
+ * editor.updateTheme({ ...editor.getTheme('default')!, fontSize: 24 })
856
+ *
857
+ * // Register a new theme
858
+ * editor.updateTheme({ id: 'ocean', ...myOceanTheme })
859
+ * ```
860
+ *
861
+ * @public
862
+ */
863
+ updateTheme(theme) {
864
+ this._themeManager.updateTheme(theme);
865
+ return this;
866
+ }
712
867
  /* ------------------- Shape Utils ------------------ */
713
868
  /**
714
869
  * A map of shape utility classes (TLShapeUtils) by shape type.
@@ -716,6 +871,8 @@ class Editor extends import_eventemitter3.default {
716
871
  * @public
717
872
  */
718
873
  shapeUtils;
874
+ /** @internal */
875
+ _shapeUtilsByAssetType = {};
719
876
  styleProps;
720
877
  getShapeUtil(arg) {
721
878
  const type = typeof arg === "string" ? arg : arg.type;
@@ -727,6 +884,17 @@ class Editor extends import_eventemitter3.default {
727
884
  const type = typeof arg === "string" ? arg : arg.type;
728
885
  return (0, import_utils.hasOwnProperty)(this.shapeUtils, type);
729
886
  }
887
+ /**
888
+ * Get the shape util that handles the given asset type.
889
+ * Returns the shape util whose {@link ShapeUtil.handledAssetTypes} includes
890
+ * the given asset type, or undefined if none matches.
891
+ *
892
+ * @param assetType - The asset type string.
893
+ * @public
894
+ */
895
+ getShapeUtilForAssetType(assetType) {
896
+ return (0, import_utils.getOwnProperty)(this._shapeUtilsByAssetType, assetType);
897
+ }
730
898
  /* ------------------- Binding Utils ------------------ */
731
899
  /**
732
900
  * A map of shape utility classes (TLShapeUtils) by shape type.
@@ -740,6 +908,42 @@ class Editor extends import_eventemitter3.default {
740
908
  (0, import_utils.assert)(bindingUtil, `No binding util found for type "${type}"`);
741
909
  return bindingUtil;
742
910
  }
911
+ /* ------------------- Asset Utils ------------------ */
912
+ /**
913
+ * A map of asset utility classes by asset type.
914
+ *
915
+ * @public
916
+ */
917
+ assetUtils = {};
918
+ getAssetUtil(arg) {
919
+ const type = typeof arg === "string" ? arg : arg.type;
920
+ const assetUtil = (0, import_utils.getOwnProperty)(this.assetUtils, type);
921
+ (0, import_utils.assert)(assetUtil, `No asset util found for type "${type}"`);
922
+ return assetUtil;
923
+ }
924
+ /**
925
+ * Returns true if the editor has an asset util for the given asset type.
926
+ *
927
+ * @public
928
+ */
929
+ hasAssetUtil(arg) {
930
+ const type = typeof arg === "string" ? arg : arg.type;
931
+ return (0, import_utils.hasOwnProperty)(this.assetUtils, type);
932
+ }
933
+ /**
934
+ * Get the asset util that accepts the given MIME type.
935
+ * Returns null if no registered asset util accepts the MIME type.
936
+ *
937
+ * @public
938
+ */
939
+ getAssetUtilForMimeType(mimeType) {
940
+ for (const util of Object.values(this.assetUtils)) {
941
+ if (util && util.acceptsMimeType(mimeType)) {
942
+ return util;
943
+ }
944
+ }
945
+ return null;
946
+ }
743
947
  /* --------------------- History -------------------- */
744
948
  /**
745
949
  * A manager for the editor's history.
@@ -761,6 +965,7 @@ class Editor extends import_eventemitter3.default {
761
965
  this._flushEventsForTick(0);
762
966
  this.complete();
763
967
  this.history.undo();
968
+ this.performance._notifyUndoRedo("undo", this.history.getNumUndos(), this.history.getNumRedos());
764
969
  return this;
765
970
  }
766
971
  canUndo() {
@@ -783,6 +988,7 @@ class Editor extends import_eventemitter3.default {
783
988
  this._flushEventsForTick(0);
784
989
  this.complete();
785
990
  this.history.redo();
991
+ this.performance._notifyUndoRedo("redo", this.history.getNumUndos(), this.history.getNumRedos());
786
992
  return this;
787
993
  }
788
994
  canRedo() {
@@ -3937,7 +4143,7 @@ class Editor extends import_eventemitter3.default {
3937
4143
  const searchMargin = Math.max(innerMargin, outerMargin, this.options.hitTestMargin / zoomLevel);
3938
4144
  const candidateIds = this._spatialIndex.getShapeIdsAtPoint(point, searchMargin);
3939
4145
  const shapesToCheck = (opts.renderingOnly ? this.getCurrentPageRenderingShapesSorted() : this.getCurrentPageShapesSorted()).filter((shape) => {
3940
- if (!candidateIds.has(shape.id) && !this.isShapeOfType(shape, "frame")) return false;
4146
+ if (!candidateIds.has(shape.id) && !this.isShapeFrameLike(shape)) return false;
3941
4147
  if (shape.isLocked && !hitLocked || this.isShapeHidden(shape) || this.isShapeOfType(shape, "group"))
3942
4148
  return false;
3943
4149
  const pageMask = this.getShapeMask(shape);
@@ -3950,14 +4156,16 @@ class Editor extends import_eventemitter3.default {
3950
4156
  const geometry = this.getShapeGeometry(shape);
3951
4157
  const isGroup = geometry instanceof import_Group2d.Group2d;
3952
4158
  const pointInShapeSpace = this.getPointInShapeSpace(shape, point);
3953
- 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()) {
4159
+ const shapeUtil = this.getShapeUtil(shape);
4160
+ const isShapeFrameLike = this.isShapeFrameLike(shape);
4161
+ if (isShapeFrameLike || (this.isShapeOfType(shape, "note") || this.isShapeOfType(shape, "arrow") || this.isShapeOfType(shape, "geo") && shape.props.fill === "none") && shapeUtil.getText(shape)?.trim()) {
3954
4162
  for (const childGeometry of geometry.children) {
3955
4163
  if (childGeometry.isLabel && childGeometry.isPointInBounds(pointInShapeSpace)) {
3956
4164
  return shape;
3957
4165
  }
3958
4166
  }
3959
4167
  }
3960
- if (this.isShapeOfType(shape, "frame")) {
4168
+ if (isShapeFrameLike) {
3961
4169
  const distance2 = geometry.distanceToPoint(pointInShapeSpace, hitFrameInside);
3962
4170
  if (hitFrameInside ? distance2 > 0 && distance2 <= outerMargin || distance2 <= 0 && distance2 > -innerMargin : distance2 > 0 && distance2 <= outerMargin) {
3963
4171
  return inMarginClosestToEdgeHit || shape;
@@ -4051,7 +4259,7 @@ class Editor extends import_eventemitter3.default {
4051
4259
  const candidateIds = this._spatialIndex.getShapeIdsAtPoint(point, margin);
4052
4260
  return this.getCurrentPageShapesSorted().filter((shape) => {
4053
4261
  if (this.isShapeHidden(shape)) return false;
4054
- if (!candidateIds.has(shape.id) && !this.isShapeOfType(shape, "frame")) return false;
4262
+ if (!candidateIds.has(shape.id) && !this.isShapeFrameLike(shape)) return false;
4055
4263
  return this.isPointInShape(shape, point, opts);
4056
4264
  }).reverse();
4057
4265
  }
@@ -4164,6 +4372,24 @@ class Editor extends import_eventemitter3.default {
4164
4372
  if (!shape) return false;
4165
4373
  return shape.type === type;
4166
4374
  }
4375
+ /**
4376
+ * Get whether a shape behaves like a frame — a container that has child
4377
+ * shapes, requires full-brush selection, blocks erasure from inside, etc.
4378
+ *
4379
+ * @example
4380
+ * ```ts
4381
+ * const isFrameLike = editor.isShapeFrameLike(someShape)
4382
+ * ```
4383
+ *
4384
+ * @param shape - The shape (or shape id) to test.
4385
+ *
4386
+ * @public
4387
+ */
4388
+ isShapeFrameLike(shape) {
4389
+ const _shape = typeof shape === "string" ? this.getShape(shape) : shape;
4390
+ if (!_shape) return false;
4391
+ return this.getShapeUtil(_shape).isFrameLike(_shape);
4392
+ }
4167
4393
  /**
4168
4394
  * Get a shape by its id.
4169
4395
  *
@@ -7689,6 +7915,7 @@ class Editor extends import_eventemitter3.default {
7689
7915
  ),
7690
7916
  { immediate: true }
7691
7917
  );
7918
+ this.performance._notifyCameraOperation("zooming");
7692
7919
  this.emit("event", info);
7693
7920
  return;
7694
7921
  }
@@ -7750,6 +7977,7 @@ class Editor extends import_eventemitter3.default {
7750
7977
  immediate: true
7751
7978
  });
7752
7979
  this.maybeTrackPerformance("Zooming");
7980
+ this.performance._notifyCameraOperation("zooming");
7753
7981
  this.root.handleEvent(info);
7754
7982
  this.emit("event", info);
7755
7983
  return;
@@ -7759,6 +7987,7 @@ class Editor extends import_eventemitter3.default {
7759
7987
  immediate: true
7760
7988
  });
7761
7989
  this.maybeTrackPerformance("Panning");
7990
+ this.performance._notifyCameraOperation("panning");
7762
7991
  this.root.handleEvent(info);
7763
7992
  this.emit("event", info);
7764
7993
  return;
@@ -7805,6 +8034,10 @@ class Editor extends import_eventemitter3.default {
7805
8034
  }
7806
8035
  this.inputs.setIsPanning(true);
7807
8036
  clearTimeout(this._longPressTimeout);
8037
+ } else if (info.button === import_constants.RIGHT_MOUSE_BUTTON && this.options.rightClickPanning) {
8038
+ this.inputs.setIsRightPointing(true);
8039
+ clearTimeout(this._longPressTimeout);
8040
+ return this;
7808
8041
  }
7809
8042
  if (this.inputs.getIsPanning()) {
7810
8043
  this.stopCameraAnimation();
@@ -7816,6 +8049,22 @@ class Editor extends import_eventemitter3.default {
7816
8049
  case "pointer_move": {
7817
8050
  if (!isPen && isPenMode) return;
7818
8051
  const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
8052
+ if (this.inputs.getIsRightPointing() && !this.inputs.getIsPanning()) {
8053
+ const currentScreenPoint = this.inputs.getCurrentScreenPoint();
8054
+ const originScreenPoint = this.inputs.getOriginScreenPoint();
8055
+ if (import_Vec.Vec.Dist2(originScreenPoint, currentScreenPoint) > this.options.dragDistanceSquared) {
8056
+ this._prevCursor = this.getInstanceState().cursor.type;
8057
+ this.inputs.setIsPanning(true);
8058
+ this.setCursor({ type: "grabbing", rotation: 0 });
8059
+ this.stopCameraAnimation();
8060
+ const offset = import_Vec.Vec.Sub(currentScreenPoint, originScreenPoint);
8061
+ this.setCamera(new import_Vec.Vec(cx + offset.x / cz, cy + offset.y / cz, cz), {
8062
+ immediate: true
8063
+ });
8064
+ this.maybeTrackPerformance("Panning");
8065
+ }
8066
+ return;
8067
+ }
7819
8068
  if (this.inputs.getIsPanning() && this.inputs.getIsPointing()) {
7820
8069
  const currentScreenPoint = this.inputs.getCurrentScreenPoint();
7821
8070
  const previousScreenPoint = this.inputs.getPreviousScreenPoint();
@@ -7824,6 +8073,7 @@ class Editor extends import_eventemitter3.default {
7824
8073
  immediate: true
7825
8074
  });
7826
8075
  this.maybeTrackPerformance("Panning");
8076
+ this.performance._notifyCameraOperation("panning");
7827
8077
  return;
7828
8078
  }
7829
8079
  if (inputs.getIsPointing() && !inputs.getIsDragging() && import_Vec.Vec.Dist2(inputs.getOriginPagePoint(), inputs.getCurrentPagePoint()) * this.getZoomLevel() > (instanceState.isCoarsePointer ? this.options.coarseDragDistanceSquared : this.options.dragDistanceSquared) / cz) {
@@ -7838,6 +8088,12 @@ class Editor extends import_eventemitter3.default {
7838
8088
  clearTimeout(this._longPressTimeout);
7839
8089
  inputs.buttons.delete(info.button);
7840
8090
  if (instanceState.isPenMode && !isPen) return;
8091
+ if (this.inputs.getIsRightPointing() && !this.inputs.getIsPanning()) {
8092
+ this.inputs.setIsRightPointing(false);
8093
+ this._selectedShapeIdsAtPointerDown = [];
8094
+ break;
8095
+ }
8096
+ this.inputs.setIsRightPointing(false);
7841
8097
  if (this.capturedPointerId === info.pointerId) {
7842
8098
  this.capturedPointerId = null;
7843
8099
  info.button = 0;
@@ -7855,11 +8111,24 @@ class Editor extends import_eventemitter3.default {
7855
8111
  break;
7856
8112
  }
7857
8113
  case import_constants.MIDDLE_MOUSE_BUTTON: {
7858
- if (this.inputs.keys.has(" ")) {
8114
+ if (this.inputs.keys.has("Space")) {
8115
+ this.setCursor({ type: "grab", rotation: 0 });
8116
+ } else {
8117
+ this.setCursor({ type: this._prevCursor, rotation: 0 });
8118
+ }
8119
+ break;
8120
+ }
8121
+ case import_constants.RIGHT_MOUSE_BUTTON: {
8122
+ if (this.inputs.keys.has("Space")) {
7859
8123
  this.setCursor({ type: "grab", rotation: 0 });
7860
8124
  } else {
7861
8125
  this.setCursor({ type: this._prevCursor, rotation: 0 });
7862
8126
  }
8127
+ if (slideSpeed > 0) {
8128
+ this.slideCamera({ speed: slideSpeed, direction: slideDirection });
8129
+ }
8130
+ this._selectedShapeIdsAtPointerDown = [];
8131
+ return this;
7863
8132
  }
7864
8133
  }
7865
8134
  if (slideSpeed > 0) {