tldraw 3.16.0-internal.a478398270c6 → 3.16.0-next.15f085081fd5

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 (534) hide show
  1. package/dist-cjs/index.d.ts +316 -23
  2. package/dist-cjs/index.js +34 -2
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/Tldraw.js +12 -2
  5. package/dist-cjs/lib/Tldraw.js.map +2 -2
  6. package/dist-cjs/lib/TldrawImage.js +5 -2
  7. package/dist-cjs/lib/TldrawImage.js.map +3 -3
  8. package/dist-cjs/lib/canvas/TldrawCropHandles.js +1 -1
  9. package/dist-cjs/lib/canvas/TldrawCropHandles.js.map +2 -2
  10. package/dist-cjs/lib/canvas/TldrawHandles.js +1 -1
  11. package/dist-cjs/lib/canvas/TldrawHandles.js.map +2 -2
  12. package/dist-cjs/lib/canvas/TldrawOverlays.js +1 -1
  13. package/dist-cjs/lib/canvas/TldrawOverlays.js.map +2 -2
  14. package/dist-cjs/lib/canvas/TldrawScribble.js +1 -1
  15. package/dist-cjs/lib/canvas/TldrawScribble.js.map +2 -2
  16. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +279 -271
  17. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +2 -2
  18. package/dist-cjs/lib/defaultExternalContentHandlers.js +6 -4
  19. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  20. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +27 -44
  21. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  22. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +16 -4
  23. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +2 -2
  24. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
  25. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  26. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js +3 -3
  27. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
  28. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +3 -0
  29. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
  30. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -6
  31. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  32. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
  33. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
  34. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +20 -17
  35. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  36. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
  37. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
  38. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +2 -2
  39. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  40. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
  41. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
  42. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -4
  43. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  44. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +6 -3
  45. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
  46. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +20 -5
  47. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  48. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +6 -5
  49. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  50. package/dist-cjs/lib/shapes/shared/PathBuilder.js +21 -3
  51. package/dist-cjs/lib/shapes/shared/PathBuilder.js.map +2 -2
  52. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -0
  53. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
  54. package/dist-cjs/lib/shapes/shared/RichTextLabel.js +5 -2
  55. package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +2 -2
  56. package/dist-cjs/lib/shapes/shared/ShapeFill.js +4 -4
  57. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  58. package/dist-cjs/lib/shapes/shared/SvgTextLabel.js +4 -3
  59. package/dist-cjs/lib/shapes/shared/SvgTextLabel.js.map +2 -2
  60. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  61. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  62. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  63. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +7 -13
  64. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  65. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  66. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  67. package/dist-cjs/lib/styles.js.map +2 -2
  68. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  69. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  70. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  71. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  72. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js +7 -1
  73. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js.map +2 -2
  74. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +43 -22
  75. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  76. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +2 -15
  77. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
  78. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +5 -0
  79. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
  80. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +8 -0
  81. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
  82. package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +8 -0
  83. package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +2 -2
  84. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +8 -0
  85. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
  86. package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
  87. package/dist-cjs/lib/ui/TldrawUi.js +27 -12
  88. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  89. package/dist-cjs/lib/ui/components/A11y.js +14 -12
  90. package/dist-cjs/lib/ui/components/A11y.js.map +2 -2
  91. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  92. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  93. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  94. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  95. package/dist-cjs/lib/ui/components/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
  96. package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
  97. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  98. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  99. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +57 -7
  100. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +2 -2
  101. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -2
  102. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  103. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
  104. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  105. package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
  106. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  107. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +4 -5
  108. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  109. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +2 -1
  110. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  111. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  112. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  113. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  114. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  115. package/dist-cjs/lib/ui/components/Spinner.js +2 -25
  116. package/dist-cjs/lib/ui/components/Spinner.js.map +2 -2
  117. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +2 -0
  118. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  119. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +171 -139
  120. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  121. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js +3 -3
  122. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +2 -2
  123. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js +26 -25
  124. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +3 -3
  125. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js +21 -7
  126. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js.map +3 -3
  127. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +1 -1
  128. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  129. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  130. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  131. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  132. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  133. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +5 -4
  134. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  135. package/dist-cjs/lib/ui/components/menu-items.js +22 -0
  136. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  137. package/dist-cjs/lib/ui/components/primitives/Button/TldrawUiButtonIcon.js.map +2 -2
  138. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js +7 -16
  139. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +3 -3
  140. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +1 -1
  141. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  142. package/dist-cjs/lib/ui/components/primitives/TldrawUiDialog.js +1 -1
  143. package/dist-cjs/lib/ui/components/primitives/TldrawUiDialog.js.map +2 -2
  144. package/dist-cjs/lib/ui/components/primitives/TldrawUiIcon.js +35 -1
  145. package/dist-cjs/lib/ui/components/primitives/TldrawUiIcon.js.map +2 -2
  146. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  147. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  148. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +6 -2
  149. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  150. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +31 -7
  151. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  152. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +262 -0
  153. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  154. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  155. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  156. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js.map +2 -2
  157. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  158. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  159. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  160. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +154 -22
  161. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  162. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  163. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  164. package/dist-cjs/lib/ui/context/actions.js +72 -9
  165. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  166. package/dist-cjs/lib/ui/context/components.js +2 -0
  167. package/dist-cjs/lib/ui/context/components.js.map +2 -2
  168. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  169. package/dist-cjs/lib/ui/hooks/menu-hooks.js.map +2 -2
  170. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +2 -2
  171. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +2 -2
  172. package/dist-cjs/lib/ui/hooks/useTools.js +94 -9
  173. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  174. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  175. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +12 -0
  176. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  177. package/dist-cjs/lib/ui/kbd-utils.js +11 -4
  178. package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
  179. package/dist-cjs/lib/ui/version.js +3 -3
  180. package/dist-cjs/lib/ui/version.js.map +1 -1
  181. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +1 -1
  182. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
  183. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +3 -2
  184. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
  185. package/dist-esm/index.d.mts +316 -23
  186. package/dist-esm/index.mjs +57 -5
  187. package/dist-esm/index.mjs.map +2 -2
  188. package/dist-esm/lib/Tldraw.mjs +14 -4
  189. package/dist-esm/lib/Tldraw.mjs.map +2 -2
  190. package/dist-esm/lib/TldrawImage.mjs +5 -2
  191. package/dist-esm/lib/TldrawImage.mjs.map +2 -2
  192. package/dist-esm/lib/canvas/TldrawCropHandles.mjs +1 -1
  193. package/dist-esm/lib/canvas/TldrawCropHandles.mjs.map +2 -2
  194. package/dist-esm/lib/canvas/TldrawHandles.mjs +1 -1
  195. package/dist-esm/lib/canvas/TldrawHandles.mjs.map +2 -2
  196. package/dist-esm/lib/canvas/TldrawOverlays.mjs +1 -1
  197. package/dist-esm/lib/canvas/TldrawOverlays.mjs.map +2 -2
  198. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  199. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  200. package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs +279 -271
  201. package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +2 -2
  202. package/dist-esm/lib/defaultExternalContentHandlers.mjs +6 -4
  203. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  204. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +30 -44
  205. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  206. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +19 -5
  207. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +2 -2
  208. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
  209. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  210. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  211. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  212. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +3 -0
  213. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
  214. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -6
  215. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  216. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  217. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  218. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +21 -17
  219. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  220. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  221. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  222. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +3 -2
  223. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  224. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  225. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  226. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -4
  227. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  228. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +6 -3
  229. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
  230. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +21 -5
  231. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  232. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +7 -5
  233. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  234. package/dist-esm/lib/shapes/shared/PathBuilder.mjs +22 -3
  235. package/dist-esm/lib/shapes/shared/PathBuilder.mjs.map +2 -2
  236. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +1 -0
  237. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  238. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +5 -2
  239. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
  240. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
  241. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  242. package/dist-esm/lib/shapes/shared/SvgTextLabel.mjs +4 -3
  243. package/dist-esm/lib/shapes/shared/SvgTextLabel.mjs.map +2 -2
  244. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  245. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  246. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  247. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +8 -13
  248. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  249. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  250. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  251. package/dist-esm/lib/styles.mjs.map +2 -2
  252. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  253. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  254. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  255. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  256. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs +7 -1
  257. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs.map +2 -2
  258. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +43 -22
  259. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  260. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +2 -15
  261. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
  262. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +5 -0
  263. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
  264. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +8 -0
  265. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
  266. package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +8 -0
  267. package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +2 -2
  268. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +8 -0
  269. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
  270. package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
  271. package/dist-esm/lib/ui/TldrawUi.mjs +29 -14
  272. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  273. package/dist-esm/lib/ui/components/A11y.mjs +14 -12
  274. package/dist-esm/lib/ui/components/A11y.mjs.map +2 -2
  275. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  276. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  277. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  278. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  279. package/dist-esm/lib/ui/components/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
  280. package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
  281. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  282. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  283. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +57 -7
  284. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +2 -2
  285. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -3
  286. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  287. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  288. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  289. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
  290. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  291. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +4 -5
  292. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  293. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +2 -1
  294. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  295. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  296. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  297. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  298. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  299. package/dist-esm/lib/ui/components/Spinner.mjs +3 -26
  300. package/dist-esm/lib/ui/components/Spinner.mjs.map +2 -2
  301. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +3 -1
  302. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  303. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +171 -139
  304. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  305. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs +3 -3
  306. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +2 -2
  307. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs +26 -25
  308. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +2 -2
  309. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs +23 -9
  310. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs.map +3 -3
  311. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +1 -1
  312. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  313. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  314. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  315. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  316. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  317. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +5 -4
  318. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  319. package/dist-esm/lib/ui/components/menu-items.mjs +22 -0
  320. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  321. package/dist-esm/lib/ui/components/primitives/Button/TldrawUiButtonIcon.mjs.map +2 -2
  322. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +8 -6
  323. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +2 -2
  324. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +1 -1
  325. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  326. package/dist-esm/lib/ui/components/primitives/TldrawUiDialog.mjs +1 -1
  327. package/dist-esm/lib/ui/components/primitives/TldrawUiDialog.mjs.map +2 -2
  328. package/dist-esm/lib/ui/components/primitives/TldrawUiIcon.mjs +36 -2
  329. package/dist-esm/lib/ui/components/primitives/TldrawUiIcon.mjs.map +2 -2
  330. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  331. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  332. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +6 -2
  333. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  334. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +31 -7
  335. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  336. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +239 -0
  337. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  338. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  339. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  340. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs.map +2 -2
  341. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  342. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  343. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  344. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +162 -24
  345. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  346. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  347. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  348. package/dist-esm/lib/ui/context/actions.mjs +72 -9
  349. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  350. package/dist-esm/lib/ui/context/components.mjs +2 -0
  351. package/dist-esm/lib/ui/context/components.mjs.map +2 -2
  352. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  353. package/dist-esm/lib/ui/hooks/menu-hooks.mjs.map +2 -2
  354. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +2 -2
  355. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +2 -2
  356. package/dist-esm/lib/ui/hooks/useTools.mjs +102 -10
  357. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  358. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +12 -0
  359. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  360. package/dist-esm/lib/ui/kbd-utils.mjs +11 -4
  361. package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
  362. package/dist-esm/lib/ui/version.mjs +3 -3
  363. package/dist-esm/lib/ui/version.mjs.map +1 -1
  364. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +1 -1
  365. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
  366. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +3 -2
  367. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
  368. package/package.json +12 -34
  369. package/src/index.ts +42 -3
  370. package/src/lib/Tldraw.tsx +15 -2
  371. package/src/lib/TldrawImage.tsx +6 -2
  372. package/src/lib/canvas/TldrawCropHandles.tsx +3 -1
  373. package/src/lib/canvas/TldrawHandles.tsx +5 -1
  374. package/src/lib/canvas/TldrawOverlays.tsx +1 -1
  375. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  376. package/src/lib/canvas/TldrawSelectionForeground.tsx +5 -1
  377. package/src/lib/defaultExternalContentHandlers.ts +14 -5
  378. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +2 -1
  379. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +4 -3
  380. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +12 -11
  381. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +30 -46
  382. package/src/lib/shapes/arrow/arrowLabel.ts +23 -3
  383. package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
  384. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  385. package/src/lib/shapes/arrow/toolStates/Pointing.tsx +3 -0
  386. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  387. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -7
  388. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  389. package/src/lib/shapes/frame/FrameShapeUtil.tsx +30 -21
  390. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  391. package/src/lib/shapes/geo/GeoShapeUtil.tsx +3 -2
  392. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  393. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -4
  394. package/src/lib/shapes/image/ImageShapeUtil.tsx +6 -3
  395. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  396. package/src/lib/shapes/line/LineShapeUtil.tsx +25 -6
  397. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  398. package/src/lib/shapes/note/NoteShapeUtil.tsx +10 -4
  399. package/src/lib/shapes/shared/PathBuilder.test.tsx +1 -1
  400. package/src/lib/shapes/shared/PathBuilder.tsx +35 -1
  401. package/src/lib/shapes/shared/PlainTextLabel.tsx +1 -0
  402. package/src/lib/shapes/shared/RichTextLabel.tsx +4 -0
  403. package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
  404. package/src/lib/shapes/shared/SvgTextLabel.tsx +4 -2
  405. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  406. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  407. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  408. package/src/lib/shapes/text/TextShapeUtil.tsx +8 -14
  409. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  410. package/src/lib/styles.tsx +3 -1
  411. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  412. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  413. package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.ts +8 -1
  414. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +54 -30
  415. package/src/lib/tools/SelectTool/childStates/Idle.ts +2 -24
  416. package/src/lib/tools/SelectTool/childStates/PointingShape.ts +7 -0
  417. package/src/lib/tools/SelectTool/childStates/Resizing.ts +12 -1
  418. package/src/lib/tools/SelectTool/childStates/Rotating.ts +11 -0
  419. package/src/lib/tools/SelectTool/childStates/Translating.ts +11 -1
  420. package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +1 -0
  421. package/src/lib/ui/TldrawUi.tsx +33 -12
  422. package/src/lib/ui/components/A11y.tsx +15 -13
  423. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  424. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  425. package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
  426. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  427. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +46 -6
  428. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -2
  429. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  430. package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
  431. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +4 -5
  432. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +3 -2
  433. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  434. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  435. package/src/lib/ui/components/Spinner.tsx +2 -24
  436. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +3 -1
  437. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +146 -106
  438. package/src/lib/ui/components/StylePanel/DoubleDropdownPicker.tsx +3 -3
  439. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +7 -6
  440. package/src/lib/ui/components/Toolbar/DefaultImageToolbar.tsx +25 -9
  441. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +1 -1
  442. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  443. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  444. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +17 -12
  445. package/src/lib/ui/components/menu-items.tsx +25 -0
  446. package/src/lib/ui/components/primitives/Button/TldrawUiButtonIcon.tsx +2 -2
  447. package/src/lib/ui/components/primitives/TldrawUiButtonPicker.tsx +40 -35
  448. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +1 -1
  449. package/src/lib/ui/components/primitives/TldrawUiDialog.tsx +1 -1
  450. package/src/lib/ui/components/primitives/TldrawUiIcon.tsx +41 -3
  451. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  452. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +6 -1
  453. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +56 -12
  454. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +325 -0
  455. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  456. package/src/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.tsx +2 -2
  457. package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
  458. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
  459. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +224 -23
  460. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  461. package/src/lib/ui/context/actions.tsx +74 -10
  462. package/src/lib/ui/context/components.tsx +3 -0
  463. package/src/lib/ui/context/events.tsx +6 -2
  464. package/src/lib/ui/hooks/menu-hooks.ts +1 -0
  465. package/src/lib/ui/hooks/useKeyboardShortcuts.ts +3 -2
  466. package/src/lib/ui/hooks/useTools.tsx +142 -11
  467. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +12 -0
  468. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +12 -0
  469. package/src/lib/ui/kbd-utils.ts +12 -4
  470. package/src/lib/ui/version.ts +3 -3
  471. package/src/lib/ui.css +417 -314
  472. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +21 -7
  473. package/src/lib/utils/excalidraw/putExcalidrawContent.ts +1 -1
  474. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +28 -7
  475. package/src/lib/utils/tldr/buildFromV1Document.ts +2 -1
  476. package/src/test/A11y.test.tsx +3 -2
  477. package/src/test/ClickManager.test.ts +7 -6
  478. package/src/test/Editor.test.tsx +21 -20
  479. package/src/test/EraserTool.test.ts +184 -13
  480. package/src/test/HandTool.test.ts +10 -9
  481. package/src/test/HighlightShape.test.ts +2 -1
  482. package/src/test/SelectTool.test.ts +40 -13
  483. package/src/test/TLUserPreferences.test.ts +4 -3
  484. package/src/test/TestEditor.ts +13 -15
  485. package/src/test/TldrawEditor.test.tsx +11 -10
  486. package/src/test/ZoomTool.test.ts +7 -6
  487. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  488. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  489. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  490. package/src/test/arrows-megabus.test.tsx +17 -10
  491. package/src/test/bindings.test.tsx +24 -37
  492. package/src/test/bookmark-shapes.test.ts +1 -8
  493. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  494. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  495. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  496. package/src/test/commands/alignShapes.test.tsx +25 -24
  497. package/src/test/commands/animationSpeed.test.ts +2 -1
  498. package/src/test/commands/centerOnPoint.test.ts +3 -2
  499. package/src/test/commands/clipboard.test.ts +3 -2
  500. package/src/test/commands/createShapes.test.ts +2 -1
  501. package/src/test/commands/deletePage.test.ts +84 -1
  502. package/src/test/commands/deleteShapes.test.ts +2 -1
  503. package/src/test/commands/distributeShapes.test.tsx +11 -10
  504. package/src/test/commands/getSvgString.test.ts +2 -1
  505. package/src/test/commands/packShapes.test.ts +5 -4
  506. package/src/test/commands/resizeShape.test.ts +2 -1
  507. package/src/test/commands/rotateShapes.test.ts +7 -6
  508. package/src/test/commands/setCamera.test.ts +4 -3
  509. package/src/test/commands/setCurrentPage.test.ts +3 -2
  510. package/src/test/commands/stackShapes.test.ts +11 -10
  511. package/src/test/commands/stretch.test.tsx +13 -12
  512. package/src/test/createDeepLink.test.tsx +2 -1
  513. package/src/test/cropping.test.ts +3 -2
  514. package/src/test/drawing.test.ts +2 -1
  515. package/src/test/flipShapes.test.ts +4 -3
  516. package/src/test/frames.test.ts +25 -24
  517. package/src/test/getCulledShapes.test.tsx +3 -2
  518. package/src/test/groups.test.tsx +2 -2
  519. package/src/test/handleDeepLink.test.tsx +2 -1
  520. package/src/test/inner-outer-margin.test.ts +315 -0
  521. package/src/test/maxShapes.test.ts +3 -2
  522. package/src/test/modifiers.test.ts +5 -4
  523. package/src/test/navigation.test.ts +264 -9
  524. package/src/test/panning.test.ts +2 -1
  525. package/src/test/perf/perf.test.ts +2 -1
  526. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  527. package/src/test/resizing.test.ts +39 -38
  528. package/src/test/select.test.tsx +4 -3
  529. package/src/test/selection-omnibus.test.ts +11 -10
  530. package/src/test/shapeutils.test.ts +398 -48
  531. package/src/test/translating.test.ts +10 -9
  532. package/tldraw.css +737 -627
  533. package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
  534. package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
@@ -1,4 +1,5 @@
1
1
  import { createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from '../TestEditor'
3
4
 
4
5
  let editor: TestEditor
@@ -40,20 +41,20 @@ beforeEach(() => {
40
41
  })
41
42
 
42
43
  describe('editor.rotateShapesBy', () => {
43
- let fnStart = jest.fn()
44
- let fnChange = jest.fn()
45
- let fnEnd = jest.fn()
44
+ let fnStart = vi.fn()
45
+ let fnChange = vi.fn()
46
+ let fnEnd = vi.fn()
46
47
 
47
48
  beforeEach(() => {
48
49
  // Set start / change / end events on only the geo shape
49
50
  const util = editor.getShapeUtil('geo')
50
51
 
51
52
  // Bad! who did this (did I do this)
52
- util.onRotateStart = fnStart = jest.fn()
53
+ util.onRotateStart = fnStart = vi.fn()
53
54
 
54
- util.onRotate = fnChange = jest.fn()
55
+ util.onRotate = fnChange = vi.fn()
55
56
 
56
- util.onRotateEnd = fnEnd = jest.fn()
57
+ util.onRotateEnd = fnEnd = vi.fn()
57
58
  })
58
59
  it('Rotates shapes and fires events', () => {
59
60
  // Select the shape...
@@ -1,4 +1,5 @@
1
1
  import { Box, DEFAULT_CAMERA_OPTIONS, Vec, createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from '../TestEditor'
3
4
 
4
5
  let editor: TestEditor
@@ -366,14 +367,14 @@ describe('CameraOptions.zoomSpeed', () => {
366
367
  editor.setCameraOptions({ ...DEFAULT_CAMERA_OPTIONS, zoomSpeed: 2 })
367
368
  expect(editor.getCamera()).toMatchObject({ x: 0, y: 0, z: 1 })
368
369
  editor.setCurrentTool('zoom').click()
369
- jest.advanceTimersByTime(300)
370
+ vi.advanceTimersByTime(300)
370
371
  expect(editor.getCamera()).toMatchObject({ x: 0, y: 0, z: 2 })
371
372
  })
372
373
  it('Does not affect zoom tool zooming (0.5x)', () => {
373
374
  editor.setCameraOptions({ ...DEFAULT_CAMERA_OPTIONS, zoomSpeed: 0.5 })
374
375
  expect(editor.getCamera()).toMatchObject({ x: 0, y: 0, z: 1 })
375
376
  editor.setCurrentTool('zoom').click()
376
- jest.advanceTimersByTime(300)
377
+ vi.advanceTimersByTime(300)
377
378
  expect(editor.getCamera()).toMatchObject({ x: 0, y: 0, z: 2 })
378
379
  })
379
380
  it('Does not affect editor zoom method (2x)', () => {
@@ -1028,7 +1029,7 @@ describe('Allows mixed values for x and y', () => {
1028
1029
 
1029
1030
  test('it animated towards the constrained viewport rather than the given viewport', () => {
1030
1031
  // @ts-expect-error
1031
- const mockAnimateToViewport = (editor._animateToViewport = jest.fn())
1032
+ const mockAnimateToViewport = (editor._animateToViewport = vi.fn())
1032
1033
  editor.setCameraOptions({
1033
1034
  ...DEFAULT_CAMERA_OPTIONS,
1034
1035
  constraints: {
@@ -1,4 +1,5 @@
1
1
  import { IndexKey, PageRecordType, TLPageId, createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from '../TestEditor'
3
4
 
4
5
  let editor: TestEditor
@@ -76,7 +77,7 @@ describe('setCurrentPage', () => {
76
77
  it('logs an error when trying to navigate to a page that does not exist', () => {
77
78
  const initialPageId = editor.getCurrentPageId()
78
79
  expect(editor.getCurrentPageId()).toBe(initialPageId)
79
- console.error = jest.fn()
80
+ console.error = vi.fn()
80
81
 
81
82
  expect(() => {
82
83
  editor.setCurrentPage('page:does-not-exist' as TLPageId)
@@ -105,7 +106,7 @@ describe('setCurrentPage', () => {
105
106
  })
106
107
 
107
108
  it('applies camera constraints', () => {
108
- const spy = jest.spyOn(editor, 'setCamera')
109
+ const spy = vi.spyOn(editor, 'setCamera')
109
110
 
110
111
  let currentPageId = editor.getCurrentPageId()
111
112
  expect(currentPageId).toMatchInlineSnapshot(`"page:page"`)
@@ -1,7 +1,8 @@
1
1
  import { createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from '../TestEditor'
3
4
 
4
- jest.useFakeTimers()
5
+ vi.useFakeTimers()
5
6
 
6
7
  let editor: TestEditor
7
8
 
@@ -51,10 +52,10 @@ describe('distributeShapes command', () => {
51
52
  describe('when less than three shapes are selected', () => {
52
53
  it('does nothing', () => {
53
54
  editor.setSelectedShapes([ids.boxA, ids.boxB])
54
- const fn = jest.fn()
55
+ const fn = vi.fn()
55
56
  editor.store.listen(fn)
56
57
  editor.stackShapes(editor.getSelectedShapeIds(), 'horizontal', 0)
57
- jest.advanceTimersByTime(1000)
58
+ vi.advanceTimersByTime(1000)
58
59
  expect(fn).not.toHaveBeenCalled()
59
60
  })
60
61
  })
@@ -65,7 +66,7 @@ describe('distributeShapes command', () => {
65
66
  // @ts-expect-error
66
67
  editor.options.adjacentShapeMargin = 1
67
68
  editor.stackShapes(editor.getSelectedShapeIds(), 'horizontal')
68
- jest.advanceTimersByTime(1000)
69
+ vi.advanceTimersByTime(1000)
69
70
  // 200 distance gap between c and d
70
71
  editor.expectShapeToMatch({
71
72
  id: ids.boxA,
@@ -92,7 +93,7 @@ describe('distributeShapes command', () => {
92
93
  it('stacks the shapes based on a given value', () => {
93
94
  editor.setSelectedShapes([ids.boxA, ids.boxB, ids.boxC, ids.boxD])
94
95
  editor.stackShapes(editor.getSelectedShapeIds(), 'horizontal', 10)
95
- jest.advanceTimersByTime(1000)
96
+ vi.advanceTimersByTime(1000)
96
97
  // 200 distance gap between c and d
97
98
  editor.expectShapeToMatch({
98
99
  id: ids.boxA,
@@ -119,7 +120,7 @@ describe('distributeShapes command', () => {
119
120
  it('stacks the shapes based on the most common gap', () => {
120
121
  editor.setSelectedShapes([ids.boxA, ids.boxB, ids.boxC, ids.boxD])
121
122
  editor.stackShapes(editor.getSelectedShapeIds(), 'horizontal', 0)
122
- jest.advanceTimersByTime(1000)
123
+ vi.advanceTimersByTime(1000)
123
124
  // 200 distance gap between c and d
124
125
  editor.expectShapeToMatch({
125
126
  id: ids.boxA,
@@ -147,7 +148,7 @@ describe('distributeShapes command', () => {
147
148
  editor.updateShapes([{ id: ids.boxD, type: 'geo', x: 540, y: 700 }])
148
149
  editor.setSelectedShapes([ids.boxA, ids.boxB, ids.boxC, ids.boxD])
149
150
  editor.stackShapes(editor.getSelectedShapeIds(), 'horizontal', 0)
150
- jest.advanceTimersByTime(1000)
151
+ vi.advanceTimersByTime(1000)
151
152
  editor.expectShapeToMatch({
152
153
  id: ids.boxA,
153
154
  x: 0,
@@ -175,7 +176,7 @@ describe('distributeShapes command', () => {
175
176
  it('stacks the shapes based on a given value', () => {
176
177
  editor.setSelectedShapes([ids.boxA, ids.boxB, ids.boxC, ids.boxD])
177
178
  editor.stackShapes(editor.getSelectedShapeIds(), 'vertical', 10)
178
- jest.advanceTimersByTime(1000)
179
+ vi.advanceTimersByTime(1000)
179
180
  // 200 distance gap between c and d
180
181
  editor.expectShapeToMatch({
181
182
  id: ids.boxA,
@@ -202,7 +203,7 @@ describe('distributeShapes command', () => {
202
203
  it('stacks the shapes based on the most common gap', () => {
203
204
  editor.setSelectedShapes([ids.boxA, ids.boxB, ids.boxC, ids.boxD])
204
205
  editor.stackShapes(editor.getSelectedShapeIds(), 'vertical', 0)
205
- jest.advanceTimersByTime(1000)
206
+ vi.advanceTimersByTime(1000)
206
207
  // 200 distance gap between c and d
207
208
  editor.expectShapeToMatch({
208
209
  id: ids.boxA,
@@ -230,7 +231,7 @@ describe('distributeShapes command', () => {
230
231
  editor.updateShapes([{ id: ids.boxD, type: 'geo', x: 700, y: 540 }])
231
232
  editor.setSelectedShapes([ids.boxA, ids.boxB, ids.boxC, ids.boxD])
232
233
  editor.stackShapes(editor.getSelectedShapeIds(), 'vertical', 0)
233
- jest.advanceTimersByTime(1000)
234
+ vi.advanceTimersByTime(1000)
234
235
  editor.expectShapeToMatch({
235
236
  id: ids.boxA,
236
237
  x: 0,
@@ -1,11 +1,12 @@
1
1
  import { PI, TLShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from '../TestEditor'
3
4
  import { TL } from '../test-jsx'
4
5
 
5
6
  let editor: TestEditor
6
7
  let ids: Record<string, TLShapeId>
7
8
 
8
- jest.useFakeTimers()
9
+ vi.useFakeTimers()
9
10
 
10
11
  function createVideoShape() {
11
12
  return editor.createShapesFromJsx(<TL.video ref="video1" x={0} y={0} w={160} h={90} />).video1
@@ -26,10 +27,10 @@ beforeEach(() => {
26
27
  describe('when less than two shapes are selected', () => {
27
28
  it('does nothing', () => {
28
29
  editor.setSelectedShapes([ids.boxB])
29
- const fn = jest.fn()
30
+ const fn = vi.fn()
30
31
  editor.store.listen(fn)
31
32
  editor.stretchShapes(editor.getSelectedShapeIds(), 'horizontal')
32
- jest.advanceTimersByTime(1000)
33
+ vi.advanceTimersByTime(1000)
33
34
 
34
35
  expect(fn).not.toHaveBeenCalled()
35
36
  })
@@ -39,7 +40,7 @@ describe('when multiple shapes are selected', () => {
39
40
  it('stretches horizontally', () => {
40
41
  editor.selectAll()
41
42
  editor.stretchShapes(editor.getSelectedShapeIds(), 'horizontal')
42
- jest.advanceTimersByTime(1000)
43
+ vi.advanceTimersByTime(1000)
43
44
  editor.expectShapeToMatch(
44
45
  { id: ids.boxA, x: 0, y: 0, props: { w: 500 } },
45
46
  { id: ids.boxB, x: 0, y: 100, props: { w: 500 } },
@@ -52,7 +53,7 @@ describe('when multiple shapes are selected', () => {
52
53
  editor.selectAll()
53
54
  expect(editor.getSelectedShapes().length).toBe(4)
54
55
  editor.stretchShapes(editor.getSelectedShapeIds(), 'horizontal')
55
- jest.advanceTimersByTime(1000)
56
+ vi.advanceTimersByTime(1000)
56
57
  const newHeight = (500 * 9) / 16
57
58
  editor.expectShapeToMatch(
58
59
  { id: ids.boxA, x: 0, y: 0, props: { w: 500 } },
@@ -65,7 +66,7 @@ describe('when multiple shapes are selected', () => {
65
66
  it('stretches vertically', () => {
66
67
  editor.selectAll()
67
68
  editor.stretchShapes(editor.getSelectedShapeIds(), 'vertical')
68
- jest.advanceTimersByTime(1000)
69
+ vi.advanceTimersByTime(1000)
69
70
  editor.expectShapeToMatch(
70
71
  { id: ids.boxA, x: 0, y: 0, props: { h: 500 } },
71
72
  { id: ids.boxB, x: 100, y: 0, props: { h: 500 } },
@@ -78,7 +79,7 @@ describe('when multiple shapes are selected', () => {
78
79
  editor.selectAll()
79
80
  expect(editor.getSelectedShapes().length).toBe(4)
80
81
  editor.stretchShapes(editor.getSelectedShapeIds(), 'vertical')
81
- jest.advanceTimersByTime(1000)
82
+ vi.advanceTimersByTime(1000)
82
83
  const newWidth = (500 * 16) / 9
83
84
  editor.expectShapeToMatch(
84
85
  { id: ids.boxA, x: 0, y: 0, props: { h: 500 } },
@@ -91,7 +92,7 @@ describe('when multiple shapes are selected', () => {
91
92
  it('does, undoes and redoes command', () => {
92
93
  editor.markHistoryStoppingPoint('stretch')
93
94
  editor.stretchShapes(editor.getSelectedShapeIds(), 'horizontal')
94
- jest.advanceTimersByTime(1000)
95
+ vi.advanceTimersByTime(1000)
95
96
 
96
97
  editor.expectShapeToMatch({ id: ids.boxB, x: 0, props: { w: 500 } })
97
98
  editor.undo()
@@ -106,7 +107,7 @@ describe('When shapes are the child of another shape.', () => {
106
107
  editor.reparentShapes([ids.boxB], ids.boxA)
107
108
  editor.select(ids.boxB, ids.boxC)
108
109
  editor.stretchShapes(editor.getSelectedShapeIds(), 'horizontal')
109
- jest.advanceTimersByTime(1000)
110
+ vi.advanceTimersByTime(1000)
110
111
  editor.expectShapeToMatch(
111
112
  { id: ids.boxB, x: 100, y: 100, props: { w: 400 } },
112
113
  { id: ids.boxC, x: 100, y: 400, props: { w: 400 } }
@@ -117,7 +118,7 @@ describe('When shapes are the child of another shape.', () => {
117
118
  editor.reparentShapes([ids.boxB], ids.boxA)
118
119
  editor.select(ids.boxB, ids.boxC)
119
120
  editor.stretchShapes(editor.getSelectedShapeIds(), 'vertical')
120
- jest.advanceTimersByTime(1000)
121
+ vi.advanceTimersByTime(1000)
121
122
  editor.expectShapeToMatch(
122
123
  { id: ids.boxB, x: 100, y: 100, props: { h: 400 } },
123
124
  { id: ids.boxC, x: 400, y: 100, props: { h: 400 } }
@@ -140,7 +141,7 @@ describe('When shapes are the child of a rotated shape.', () => {
140
141
 
141
142
  editor.select(ids.boxA, ids.boxC)
142
143
  editor.stretchShapes(editor.getSelectedShapeIds(), 'horizontal')
143
- jest.advanceTimersByTime(1000)
144
+ vi.advanceTimersByTime(1000)
144
145
  editor.expectShapeToMatch(
145
146
  {
146
147
  id: ids.boxA,
@@ -184,7 +185,7 @@ describe('When shapes are the child of a rotated shape.', () => {
184
185
  editor.selectAll()
185
186
 
186
187
  editor.stretchShapes(editor.getSelectedShapeIds(), 'vertical')
187
- jest.advanceTimersByTime(1000)
188
+ vi.advanceTimersByTime(1000)
188
189
  editor.expectShapeToMatch(
189
190
  {
190
191
  id: ids.boxA,
@@ -1,7 +1,8 @@
1
1
  import { PageRecordType, createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from './TestEditor'
3
4
 
4
- jest.useFakeTimers()
5
+ vi.useFakeTimers()
5
6
 
6
7
  let editor: TestEditor
7
8
 
@@ -1,8 +1,9 @@
1
1
  import { createShapeId, TLImageShape } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { MIN_CROP_SIZE } from '../lib/shapes/shared/crop'
3
4
  import { TestEditor } from './TestEditor'
4
5
 
5
- jest.useFakeTimers()
6
+ vi.useFakeTimers()
6
7
 
7
8
  let editor: TestEditor
8
9
 
@@ -495,7 +496,7 @@ describe('When in the select.crop.translating_crop state', () => {
495
496
  })
496
497
 
497
498
  editor.keyUp('Shift')
498
- jest.advanceTimersByTime(500)
499
+ vi.advanceTimersByTime(500)
499
500
 
500
501
  const afterShiftUp = editor.getShape<TLImageShape>(ids.imageB)!.props.crop!
501
502
 
@@ -1,8 +1,9 @@
1
1
  import { TLDrawShape, TLHighlightShape, last } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from './TestEditor'
3
4
  import { TEST_DRAW_SHAPE_SCREEN_POINTS } from './drawing.data'
4
5
 
5
- jest.useFakeTimers()
6
+ vi.useFakeTimers()
6
7
 
7
8
  let editor: TestEditor
8
9
 
@@ -10,12 +10,13 @@ import {
10
10
  createBindingId,
11
11
  createShapeId,
12
12
  } from '@tldraw/editor'
13
+ import { vi } from 'vitest'
13
14
  import { getArrowBindings } from '../lib/shapes/arrow/shared'
14
15
  import { TestEditor } from './TestEditor'
15
16
 
16
17
  let editor: TestEditor
17
18
 
18
- jest.useFakeTimers()
19
+ vi.useFakeTimers()
19
20
 
20
21
  const ids = {
21
22
  boxA: createShapeId('boxA'),
@@ -297,7 +298,7 @@ describe('When one shape is selected', () => {
297
298
  })
298
299
 
299
300
  it('Flips the direct child shape positions if the shape is a group', async () => {
300
- const fn = jest.fn()
301
+ const fn = vi.fn()
301
302
 
302
303
  editor.selectAll()
303
304
  editor.groupShapes(editor.getSelectedShapeIds()) // this will also select the new group
@@ -306,7 +307,7 @@ describe('When one shape is selected', () => {
306
307
  editor.flipShapes(editor.getSelectedShapeIds(), 'horizontal')
307
308
 
308
309
  // The change event should have been called
309
- jest.runOnlyPendingTimers()
310
+ vi.runOnlyPendingTimers()
310
311
  expect(fn).toHaveBeenCalled()
311
312
 
312
313
  editor.expectShapeToMatch(
@@ -8,13 +8,14 @@ import {
8
8
  createShapeId,
9
9
  toRichText,
10
10
  } from '@tldraw/editor'
11
+ import { vi } from 'vitest'
11
12
  import { getArrowBindings } from '../lib/shapes/arrow/shared'
12
13
  import { DEFAULT_FRAME_PADDING, fitFrameToContent, removeFrame } from '../lib/utils/frames/frames'
13
14
  import { TestEditor } from './TestEditor'
14
15
 
15
16
  let editor: TestEditor
16
17
 
17
- jest.useFakeTimers()
18
+ vi.useFakeTimers()
18
19
 
19
20
  beforeEach(() => {
20
21
  editor = new TestEditor()
@@ -335,7 +336,7 @@ describe('frame shapes', () => {
335
336
  // move to the center of the frame
336
337
  editor.pointerMove(100, 100)
337
338
 
338
- jest.advanceTimersByTime(300)
339
+ vi.advanceTimersByTime(300)
339
340
 
340
341
  // Expect the shape to be inside the frame
341
342
  expect(editor.getOnlySelectedShape()!.id).toBe(ids.boxA)
@@ -343,13 +344,13 @@ describe('frame shapes', () => {
343
344
 
344
345
  // Move out of the frame
345
346
  editor.pointerMove(275, 275)
346
- jest.advanceTimersByTime(250)
347
+ vi.advanceTimersByTime(250)
347
348
 
348
349
  expect(editor.getOnlySelectedShape()!.parentId).toBe(editor.getCurrentPageId())
349
350
 
350
351
  // Move back into the frame
351
352
  editor.pointerMove(150, 150)
352
- jest.advanceTimersByTime(250)
353
+ vi.advanceTimersByTime(250)
353
354
 
354
355
  // Expect the shape to be inside the frame again
355
356
  expect(editor.getOnlySelectedShape()!.parentId).toBe(frameId)
@@ -384,7 +385,7 @@ describe('frame shapes', () => {
384
385
 
385
386
  editor.setCurrentTool('select').select(box1.id).pointerDown(127, 127).pointerMove(132, 127)
386
387
 
387
- jest.advanceTimersByTime(250)
388
+ vi.advanceTimersByTime(250)
388
389
 
389
390
  expect(editor.getOnlySelectedShape()!.id).toBe(box1.id)
390
391
  if (editor.getShape(box1)?.parentId !== frame.id) {
@@ -403,14 +404,14 @@ describe('frame shapes', () => {
403
404
  editor.pointerMove(175, 175)
404
405
  expect(editor.getOnlySelectedShape()!.parentId).toBe(frame.id)
405
406
 
406
- jest.advanceTimersByTime(250)
407
+ vi.advanceTimersByTime(250)
407
408
  expect(editor.getOnlySelectedShape()!.parentId).toBe(frame.id)
408
409
 
409
410
  // Let's try that
410
411
  editor.pointerMove(1750, 1750)
411
- jest.advanceTimersByTime(200)
412
+ vi.advanceTimersByTime(200)
412
413
  editor.pointerMove(175, 175)
413
- jest.advanceTimersByTime(200)
414
+ vi.advanceTimersByTime(200)
414
415
 
415
416
  // yay
416
417
  expect(editor.getHintingShapeIds()).toHaveLength(1)
@@ -958,7 +959,7 @@ describe('When dragging a shape inside a group inside a frame', () => {
958
959
  editor.pointerMove(150, 150).pointerDown(150, 150).pointerMove(140, 140)
959
960
 
960
961
  expect(editor.getOnlySelectedShapeId()).toBe(ids.box1)
961
- jest.advanceTimersByTime(300)
962
+ vi.advanceTimersByTime(300)
962
963
 
963
964
  expect(editor.getShape(ids.box1)!.parentId).toBe(ids.group1)
964
965
  })
@@ -973,7 +974,7 @@ it('Drags into a frame', () => {
973
974
  editor.pointerDown(550, 550)
974
975
  editor.pointerMove(250, 250)
975
976
 
976
- jest.advanceTimersByTime(200)
977
+ vi.advanceTimersByTime(200)
977
978
 
978
979
  expect(editor.getShape(box1)!.parentId).toBe(frame.id)
979
980
  })
@@ -992,7 +993,7 @@ it('Allows dragging grouped shapes into frames if every shape in the group is in
992
993
  editor.pointerDown(1100, 1100)
993
994
  editor.pointerMove(250, 250)
994
995
 
995
- jest.advanceTimersByTime(250)
996
+ vi.advanceTimersByTime(250)
996
997
 
997
998
  expect(editor.getHintingShapeIds()).toMatchObject([frame.id])
998
999
 
@@ -1068,7 +1069,7 @@ describe('When dragging a shape', () => {
1068
1069
  editor.pointerMove(30, 50)
1069
1070
  editor.pointerUp(30, 50)
1070
1071
  const parent = editor.getShape(rectId)?.parentId
1071
- jest.advanceTimersByTime(200)
1072
+ vi.advanceTimersByTime(200)
1072
1073
  expect(parent).toBe(frameId)
1073
1074
  })
1074
1075
 
@@ -1185,7 +1186,7 @@ describe('Unparenting behavior', () => {
1185
1186
  // expect(editor.getShape(rect.id)!.parentId).toBe(frame.id)
1186
1187
  // editor.pointerDown(90, 50)
1187
1188
  // editor.pointerMove(110, 50)
1188
- // jest.advanceTimersByTime(200)
1189
+ // vi.advanceTimersByTime(200)
1189
1190
  // expect(editor.getShape(rect.id)!.parentId).toBe(editor.getCurrentPageId())
1190
1191
  // editor.pointerUp(110, 50)
1191
1192
  // expect(editor.getShape(rect.id)!.parentId).toBe(editor.getCurrentPageId())
@@ -1199,7 +1200,7 @@ describe('Unparenting behavior', () => {
1199
1200
  expect(editor.getShape(rect.id)!.parentId).toBe(frame.id)
1200
1201
  editor.pointerDown(90, 50)
1201
1202
  editor.pointerMove(110, 50)
1202
- jest.advanceTimersByTime(200)
1203
+ vi.advanceTimersByTime(200)
1203
1204
  expect(editor.getShape(rect.id)!.parentId).toBe(editor.getCurrentPageId())
1204
1205
  editor.pointerUp(110, 50)
1205
1206
  expect(editor.getShape(rect.id)!.parentId).toBe(editor.getCurrentPageId())
@@ -1299,7 +1300,7 @@ describe('Unparenting behavior', () => {
1299
1300
  expect(editor.getShape(triangle.id)!.parentId).toBe(frame.id)
1300
1301
 
1301
1302
  // But after a delay, the triangle is reparented because it's not overlapping
1302
- jest.advanceTimersByTime(200)
1303
+ vi.advanceTimersByTime(200)
1303
1304
  expect(editor.getShape(triangle.id)!.parentId).toBe(editor.getCurrentPageId())
1304
1305
 
1305
1306
  editor.pointerMove(50, 50)
@@ -1308,7 +1309,7 @@ describe('Unparenting behavior', () => {
1308
1309
  expect(editor.getShape(triangle.id)!.parentId).toBe(editor.getCurrentPageId())
1309
1310
 
1310
1311
  // But after a delay, the triangle is reparented because it's overlapping
1311
- jest.advanceTimersByTime(200)
1312
+ vi.advanceTimersByTime(200)
1312
1313
  expect(editor.getShape(triangle.id)!.parentId).toBe(frame.id)
1313
1314
  })
1314
1315
 
@@ -1348,12 +1349,12 @@ describe('Unparenting behavior', () => {
1348
1349
  expect(editor.isIn('select.translating')).toBe(true)
1349
1350
 
1350
1351
  // Wait for reparenting to happen
1351
- jest.advanceTimersByTime(250)
1352
+ vi.advanceTimersByTime(250)
1352
1353
  expect(editor.getShape(largeRect.id)!.parentId).toBe(frameId)
1353
1354
 
1354
1355
  // The large rectangle should now be reparented to the frame, even though the frame covers it
1355
1356
  editor.pointerUp(250, 250)
1356
- jest.advanceTimersByTime(250)
1357
+ vi.advanceTimersByTime(250)
1357
1358
  }
1358
1359
 
1359
1360
  // When the shape has no fill and an empty label, it should fall out of the frame
@@ -1503,7 +1504,7 @@ describe('When dragging groups or shapes within a group', () => {
1503
1504
  editor.pointerDown(1100, 1100)
1504
1505
  editor.pointerMove(250, 250)
1505
1506
 
1506
- jest.advanceTimersByTime(200)
1507
+ vi.advanceTimersByTime(200)
1507
1508
 
1508
1509
  expect(editor.getShape(group)!.parentId).toBe(frame.id)
1509
1510
  })
@@ -1526,14 +1527,14 @@ describe('When dragging groups or shapes within a group', () => {
1526
1527
  editor.select(rect1ID)
1527
1528
  editor.pointerDown(15, 15)
1528
1529
  editor.pointerMove(100, 100)
1529
- jest.advanceTimersByTime(200)
1530
+ vi.advanceTimersByTime(200)
1530
1531
 
1531
1532
  expect(editor.getShape(rect1ID)?.parentId).toBe(group.id)
1532
1533
  expect(editor.getShape(rect2ID)?.parentId).toBe(group.id)
1533
1534
  expect(group.parentId).toBe(frame.id)
1534
1535
 
1535
1536
  editor.pointerUp(100, 100)
1536
- jest.advanceTimersByTime(200)
1537
+ vi.advanceTimersByTime(200)
1537
1538
 
1538
1539
  expect(editor.getShape(rect1ID)?.parentId).toBe(group.id)
1539
1540
  expect(editor.getShape(rect2ID)?.parentId).toBe(group.id)
@@ -1558,7 +1559,7 @@ describe('When dragging groups or shapes within a group', () => {
1558
1559
  editor.pointerDown(15, 15)
1559
1560
  editor.pointerMove(200, 200)
1560
1561
 
1561
- jest.advanceTimersByTime(200)
1562
+ vi.advanceTimersByTime(200)
1562
1563
  expect(editor.getShape(rect1ID)?.parentId).toBe(group.id)
1563
1564
  expect(editor.getShape(rect2ID)?.parentId).toBe(group.id)
1564
1565
  expect(editor.getShape(group.id)?.parentId).toBe(editor.getCurrentPageId())
@@ -1587,7 +1588,7 @@ describe('When dragging groups or shapes within a group', () => {
1587
1588
  editor.pointerDown(15, 15)
1588
1589
  editor.pointerMove(200, 200)
1589
1590
 
1590
- jest.advanceTimersByTime(200)
1591
+ vi.advanceTimersByTime(200)
1591
1592
  expect(editor.getShape(rect1ID)?.parentId).toBe(group.id)
1592
1593
  expect(editor.getShape(rect2ID)?.parentId).toBe(group.id)
1593
1594
  expect(editor.getShape(group.id)?.parentId).toBe(editor.getCurrentPageId())
@@ -1638,7 +1639,7 @@ describe('When dragging groups or shapes within a group', () => {
1638
1639
  editor.pointerDown(215, 215)
1639
1640
  editor.pointerMove(15, 15)
1640
1641
 
1641
- jest.advanceTimersByTime(200)
1642
+ vi.advanceTimersByTime(200)
1642
1643
  expect(editor.getShape(rect1ID)?.parentId).toBe(group.id)
1643
1644
  expect(editor.getShape(rect2ID)?.parentId).toBe(group.id)
1644
1645
  expect(editor.getShape(group.id)?.parentId).toBe(frameID)
@@ -1,4 +1,5 @@
1
1
  import { Box, TLShapeId, createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from './TestEditor'
3
4
  import { TL } from './test-jsx'
4
5
 
@@ -28,13 +29,13 @@ it('lists shapes in viewport', () => {
28
29
 
29
30
  // Move the camera 201 pixels to the right and 201 pixels down
30
31
  editor.pan({ x: -201, y: -201 })
31
- jest.advanceTimersByTime(500)
32
+ vi.advanceTimersByTime(500)
32
33
 
33
34
  // A is now outside of the viewport, like D
34
35
  expect(editor.getCulledShapes()).toStrictEqual(new Set([ids.A, ids.D]))
35
36
 
36
37
  editor.pan({ x: -900, y: -900 })
37
- jest.advanceTimersByTime(500)
38
+ vi.advanceTimersByTime(500)
38
39
  // Now all shapes are outside of the viewport, except for D (which is clipped)
39
40
  expect(editor.getCulledShapes()).toStrictEqual(new Set([ids.A, ids.B, ids.C]))
40
41
 
@@ -1070,7 +1070,7 @@ describe('the select tool', () => {
1070
1070
  // that we're doing hit testing manually—we'll catch that it was inside a shape
1071
1071
 
1072
1072
  // editor.keyUp('Shift')
1073
- // jest.advanceTimersByTime(200)
1073
+ // vi.advanceTimersByTime(200)
1074
1074
 
1075
1075
  // expect(editor.selectedShapeIds.includes(ids.boxA)).toBe(false)
1076
1076
  // expect(editor.selectedShapeIds.includes(ids.boxB)).toBe(true)
@@ -1941,7 +1941,7 @@ describe('snapping', () => {
1941
1941
  expect(editor.snaps.getIndicators().length).toBe(0)
1942
1942
  })
1943
1943
 
1944
- it('does not happen between children and thier group', () => {
1944
+ it('does not happen between children and their group', () => {
1945
1945
  editor.select(ids.boxD)
1946
1946
  editor.pointerDown(65, 5, ids.boxD)
1947
1947
  editor.pointerMove(80, 105, ids.boxD, { ctrlKey: true })
@@ -1,8 +1,9 @@
1
1
  import { PageRecordType, TLDeepLink, createDeepLinkString, createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from './TestEditor'
3
4
  import { TL } from './test-jsx'
4
5
 
5
- jest.useFakeTimers()
6
+ vi.useFakeTimers()
6
7
 
7
8
  let editor: TestEditor
8
9