tldraw 3.16.0-canary.fa3749606e52 → 3.16.0-canary.ffc5da6dc09f

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 (466) hide show
  1. package/dist-cjs/index.d.ts +322 -105
  2. package/dist-cjs/index.js +45 -14
  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/canvas/TldrawScribble.js +1 -1
  7. package/dist-cjs/lib/canvas/TldrawScribble.js.map +2 -2
  8. package/dist-cjs/lib/defaultExternalContentHandlers.js +5 -4
  9. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  10. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +3 -3
  11. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  12. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +6 -0
  13. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +3 -3
  14. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
  15. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  16. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js +3 -3
  17. package/dist-cjs/lib/shapes/arrow/elbow/ElbowArrowDebug.js.map +1 -1
  18. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +3 -3
  19. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  20. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +1 -1
  21. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +1 -1
  22. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +18 -12
  23. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  24. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js +1 -1
  25. package/dist-cjs/lib/shapes/frame/components/FrameHeading.js.map +2 -2
  26. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +2 -2
  27. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  28. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js +2 -1
  29. package/dist-cjs/lib/shapes/geo/components/GeoShapeBody.js.map +2 -2
  30. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +5 -1
  31. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  32. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +6 -3
  33. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
  34. package/dist-cjs/lib/shapes/line/LineShapeUtil.js +5 -1
  35. package/dist-cjs/lib/shapes/line/LineShapeUtil.js.map +2 -2
  36. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +4 -4
  37. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  38. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -3
  39. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
  40. package/dist-cjs/lib/shapes/shared/ShapeFill.js +4 -4
  41. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  42. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  43. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js +0 -2
  44. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
  45. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +0 -2
  46. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
  47. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  48. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  49. package/dist-cjs/lib/shapes/text/TextShapeUtil.js +2 -2
  50. package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
  51. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +3 -3
  52. package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +1 -1
  53. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  54. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  55. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  56. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  57. package/dist-cjs/lib/ui/TldrawUi.js +27 -12
  58. package/dist-cjs/lib/ui/TldrawUi.js.map +3 -3
  59. package/dist-cjs/lib/ui/assetUrls.js +13 -10
  60. package/dist-cjs/lib/ui/assetUrls.js.map +2 -2
  61. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  62. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  63. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js +12 -3
  64. package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenu.js.map +2 -2
  65. package/dist-cjs/lib/ui/components/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
  66. package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
  67. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js +3 -2
  68. package/dist-cjs/lib/ui/components/DefaultMenuPanel.js.map +2 -2
  69. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +6 -6
  70. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +1 -1
  71. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -3
  72. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  73. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +4 -4
  74. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  75. package/dist-cjs/lib/ui/components/MobileStylePanel.js +5 -3
  76. package/dist-cjs/lib/ui/components/MobileStylePanel.js.map +2 -2
  77. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js +1 -1
  78. package/dist-cjs/lib/ui/components/NavigationPanel/DefaultNavigationPanel.js.map +2 -2
  79. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +2 -1
  80. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  81. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js +3 -2
  82. package/dist-cjs/lib/ui/components/SharePanel/PeopleMenuItem.js.map +2 -2
  83. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js +2 -2
  84. package/dist-cjs/lib/ui/components/SharePanel/UserPresenceColorPicker.js.map +2 -2
  85. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +11 -4
  86. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  87. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +249 -279
  88. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  89. package/dist-cjs/lib/ui/components/{primitives/TldrawUiButtonPicker.js → StylePanel/StylePanelButtonPicker.js} +52 -56
  90. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +7 -0
  91. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js +68 -0
  92. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js.map +7 -0
  93. package/dist-cjs/lib/ui/components/StylePanel/{DoubleDropdownPicker.js → StylePanelDoubleDropdownPicker.js} +26 -25
  94. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js.map +7 -0
  95. package/dist-cjs/lib/ui/components/StylePanel/{DropdownPicker.js → StylePanelDropdownPicker.js} +47 -43
  96. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js.map +7 -0
  97. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js +28 -0
  98. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js.map +7 -0
  99. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js +3 -2
  100. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
  101. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +39 -10
  102. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  103. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js +66 -21
  104. package/dist-cjs/lib/ui/components/Toolbar/DefaultToolbar.js.map +3 -3
  105. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js +15 -3
  106. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js.map +2 -2
  107. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js +3 -3
  108. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js.map +2 -2
  109. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +189 -80
  110. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +3 -3
  111. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +5 -4
  112. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  113. package/dist-cjs/lib/ui/components/menu-items.js +6 -0
  114. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  115. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +10 -1
  116. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  117. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +3 -2
  118. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +3 -3
  119. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +17 -4
  120. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  121. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +32 -7
  122. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  123. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +269 -0
  124. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  125. package/dist-cjs/lib/ui/components/primitives/layout.js +76 -0
  126. package/dist-cjs/lib/ui/components/primitives/layout.js.map +7 -0
  127. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuContext.js.map +2 -2
  128. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js +25 -12
  129. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuGroup.js.map +2 -2
  130. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +12 -26
  131. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  132. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  133. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  134. package/dist-cjs/lib/ui/context/actions.js +38 -10
  135. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  136. package/dist-cjs/lib/ui/context/components.js +2 -0
  137. package/dist-cjs/lib/ui/context/components.js.map +2 -2
  138. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  139. package/dist-cjs/lib/ui/hooks/useExportAs.js +3 -2
  140. package/dist-cjs/lib/ui/hooks/useExportAs.js.map +2 -2
  141. package/dist-cjs/lib/ui/hooks/useTools.js +22 -4
  142. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  143. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  144. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +5 -0
  145. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  146. package/dist-cjs/lib/ui/kbd-utils.js +9 -3
  147. package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
  148. package/dist-cjs/lib/ui/version.js +3 -3
  149. package/dist-cjs/lib/ui/version.js.map +1 -1
  150. package/dist-cjs/lib/utils/export/copyAs.js +1 -2
  151. package/dist-cjs/lib/utils/export/copyAs.js.map +2 -2
  152. package/dist-cjs/lib/utils/export/export.js +0 -20
  153. package/dist-cjs/lib/utils/export/export.js.map +2 -2
  154. package/dist-cjs/lib/utils/export/exportAs.js +1 -2
  155. package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
  156. package/dist-esm/index.d.mts +322 -105
  157. package/dist-esm/index.mjs +83 -29
  158. package/dist-esm/index.mjs.map +2 -2
  159. package/dist-esm/lib/Tldraw.mjs +14 -4
  160. package/dist-esm/lib/Tldraw.mjs.map +2 -2
  161. package/dist-esm/lib/canvas/TldrawScribble.mjs +1 -1
  162. package/dist-esm/lib/canvas/TldrawScribble.mjs.map +2 -2
  163. package/dist-esm/lib/defaultExternalContentHandlers.mjs +5 -4
  164. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  165. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +4 -3
  166. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  167. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +6 -0
  168. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +3 -3
  169. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
  170. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  171. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs +3 -3
  172. package/dist-esm/lib/shapes/arrow/elbow/ElbowArrowDebug.mjs.map +1 -1
  173. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +4 -3
  174. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  175. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +1 -1
  176. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +1 -1
  177. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +19 -12
  178. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  179. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs +1 -1
  180. package/dist-esm/lib/shapes/frame/components/FrameHeading.mjs.map +2 -2
  181. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +3 -2
  182. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  183. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs +2 -1
  184. package/dist-esm/lib/shapes/geo/components/GeoShapeBody.mjs.map +2 -2
  185. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +6 -1
  186. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  187. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +6 -3
  188. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
  189. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs +6 -1
  190. package/dist-esm/lib/shapes/line/LineShapeUtil.mjs.map +2 -2
  191. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +5 -4
  192. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  193. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +1 -3
  194. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  195. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +5 -4
  196. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  197. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  198. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs +0 -2
  199. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
  200. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +0 -2
  201. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
  202. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  203. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  204. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +3 -2
  205. package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
  206. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +3 -3
  207. package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +1 -1
  208. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  209. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  210. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  211. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  212. package/dist-esm/lib/ui/TldrawUi.mjs +29 -14
  213. package/dist-esm/lib/ui/TldrawUi.mjs.map +3 -3
  214. package/dist-esm/lib/ui/assetUrls.mjs +13 -10
  215. package/dist-esm/lib/ui/assetUrls.mjs.map +2 -2
  216. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  217. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  218. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs +12 -3
  219. package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenu.mjs.map +2 -2
  220. package/dist-esm/lib/ui/components/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
  221. package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
  222. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs +3 -2
  223. package/dist-esm/lib/ui/components/DefaultMenuPanel.mjs.map +2 -2
  224. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +6 -6
  225. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +1 -1
  226. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -5
  227. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  228. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +4 -4
  229. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  230. package/dist-esm/lib/ui/components/MobileStylePanel.mjs +6 -3
  231. package/dist-esm/lib/ui/components/MobileStylePanel.mjs.map +2 -2
  232. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs +1 -1
  233. package/dist-esm/lib/ui/components/NavigationPanel/DefaultNavigationPanel.mjs.map +2 -2
  234. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +2 -1
  235. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  236. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs +3 -2
  237. package/dist-esm/lib/ui/components/SharePanel/PeopleMenuItem.mjs.map +2 -2
  238. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs +2 -2
  239. package/dist-esm/lib/ui/components/SharePanel/UserPresenceColorPicker.mjs.map +2 -2
  240. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +16 -5
  241. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  242. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +251 -283
  243. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  244. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs +126 -0
  245. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +7 -0
  246. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs +48 -0
  247. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs.map +7 -0
  248. package/dist-esm/lib/ui/components/StylePanel/{DoubleDropdownPicker.mjs → StylePanelDoubleDropdownPicker.mjs} +23 -22
  249. package/dist-esm/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.mjs.map +7 -0
  250. package/dist-esm/lib/ui/components/StylePanel/{DropdownPicker.mjs → StylePanelDropdownPicker.mjs} +44 -40
  251. package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs.map +7 -0
  252. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs +8 -0
  253. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs.map +7 -0
  254. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs +3 -2
  255. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
  256. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +39 -10
  257. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  258. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs +56 -21
  259. package/dist-esm/lib/ui/components/Toolbar/DefaultToolbar.mjs.map +2 -2
  260. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs +15 -3
  261. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs.map +2 -2
  262. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs +3 -3
  263. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs.map +2 -2
  264. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +192 -81
  265. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +3 -3
  266. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +5 -4
  267. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  268. package/dist-esm/lib/ui/components/menu-items.mjs +6 -0
  269. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  270. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +10 -1
  271. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  272. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +3 -2
  273. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  274. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +17 -4
  275. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  276. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +32 -7
  277. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  278. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +246 -0
  279. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  280. package/dist-esm/lib/ui/components/primitives/layout.mjs +46 -0
  281. package/dist-esm/lib/ui/components/primitives/layout.mjs.map +7 -0
  282. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuContext.mjs.map +2 -2
  283. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs +25 -12
  284. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuGroup.mjs.map +2 -2
  285. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +12 -26
  286. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  287. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  288. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  289. package/dist-esm/lib/ui/context/actions.mjs +38 -10
  290. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  291. package/dist-esm/lib/ui/context/components.mjs +2 -0
  292. package/dist-esm/lib/ui/context/components.mjs.map +2 -2
  293. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  294. package/dist-esm/lib/ui/hooks/useExportAs.mjs +3 -2
  295. package/dist-esm/lib/ui/hooks/useExportAs.mjs.map +2 -2
  296. package/dist-esm/lib/ui/hooks/useTools.mjs +23 -4
  297. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  298. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +5 -0
  299. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  300. package/dist-esm/lib/ui/kbd-utils.mjs +9 -3
  301. package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
  302. package/dist-esm/lib/ui/version.mjs +3 -3
  303. package/dist-esm/lib/ui/version.mjs.map +1 -1
  304. package/dist-esm/lib/utils/export/copyAs.mjs +1 -2
  305. package/dist-esm/lib/utils/export/copyAs.mjs.map +2 -2
  306. package/dist-esm/lib/utils/export/export.mjs +0 -20
  307. package/dist-esm/lib/utils/export/export.mjs.map +2 -2
  308. package/dist-esm/lib/utils/export/exportAs.mjs +1 -2
  309. package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
  310. package/package.json +11 -34
  311. package/src/index.ts +62 -22
  312. package/src/lib/Tldraw.tsx +15 -2
  313. package/src/lib/canvas/TldrawScribble.tsx +1 -1
  314. package/src/lib/defaultExternalContentHandlers.ts +12 -4
  315. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +2 -1
  316. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +4 -3
  317. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +7 -6
  318. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +4 -3
  319. package/src/lib/shapes/arrow/arrowLabel.ts +8 -0
  320. package/src/lib/shapes/arrow/arrowTargetState.ts +2 -1
  321. package/src/lib/shapes/arrow/elbow/ElbowArrowDebug.tsx +3 -3
  322. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  323. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -3
  324. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  325. package/src/lib/shapes/frame/FrameShapeUtil.tsx +29 -14
  326. package/src/lib/shapes/frame/components/FrameHeading.tsx +1 -1
  327. package/src/lib/shapes/geo/GeoShapeUtil.tsx +3 -2
  328. package/src/lib/shapes/geo/components/GeoShapeBody.tsx +2 -2
  329. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +7 -1
  330. package/src/lib/shapes/image/ImageShapeUtil.tsx +6 -3
  331. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  332. package/src/lib/shapes/line/LineShapeUtil.tsx +6 -1
  333. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  334. package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -4
  335. package/src/lib/shapes/shared/PlainTextLabel.tsx +0 -6
  336. package/src/lib/shapes/shared/ShapeFill.tsx +5 -4
  337. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  338. package/src/lib/shapes/shared/useEditablePlainText.ts +0 -6
  339. package/src/lib/shapes/shared/useImageOrVideoAsset.ts +0 -7
  340. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  341. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  342. package/src/lib/shapes/text/TextShapeUtil.tsx +3 -2
  343. package/src/lib/shapes/video/VideoShapeUtil.tsx +3 -3
  344. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  345. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  346. package/src/lib/ui/TldrawUi.tsx +33 -12
  347. package/src/lib/ui/assetUrls.ts +13 -10
  348. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  349. package/src/lib/ui/components/ActionsMenu/DefaultActionsMenu.tsx +15 -3
  350. package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
  351. package/src/lib/ui/components/DefaultMenuPanel.tsx +4 -3
  352. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +6 -6
  353. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -4
  354. package/src/lib/ui/components/Minimap/MinimapManager.ts +4 -4
  355. package/src/lib/ui/components/MobileStylePanel.tsx +9 -6
  356. package/src/lib/ui/components/NavigationPanel/DefaultNavigationPanel.tsx +1 -1
  357. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +3 -2
  358. package/src/lib/ui/components/SharePanel/PeopleMenuItem.tsx +4 -3
  359. package/src/lib/ui/components/SharePanel/UserPresenceColorPicker.tsx +3 -3
  360. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +28 -12
  361. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +261 -343
  362. package/src/lib/ui/components/{primitives/TldrawUiButtonPicker.tsx → StylePanel/StylePanelButtonPicker.tsx} +66 -50
  363. package/src/lib/ui/components/StylePanel/StylePanelContext.tsx +63 -0
  364. package/src/lib/ui/components/StylePanel/{DoubleDropdownPicker.tsx → StylePanelDoubleDropdownPicker.tsx} +31 -22
  365. package/src/lib/ui/components/StylePanel/StylePanelDropdownPicker.tsx +119 -0
  366. package/src/lib/ui/components/StylePanel/StylePanelSubheading.tsx +9 -0
  367. package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +4 -3
  368. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +33 -16
  369. package/src/lib/ui/components/Toolbar/DefaultToolbar.tsx +55 -23
  370. package/src/lib/ui/components/Toolbar/DefaultVideoToolbarContent.tsx +12 -4
  371. package/src/lib/ui/components/Toolbar/LinkEditor.tsx +5 -5
  372. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +212 -61
  373. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +14 -11
  374. package/src/lib/ui/components/menu-items.tsx +8 -0
  375. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +6 -1
  376. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +4 -2
  377. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +50 -30
  378. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +54 -12
  379. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +335 -0
  380. package/src/lib/ui/components/primitives/layout.tsx +107 -0
  381. package/src/lib/ui/components/primitives/menus/TldrawUiMenuContext.tsx +0 -1
  382. package/src/lib/ui/components/primitives/menus/TldrawUiMenuGroup.tsx +29 -16
  383. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +18 -27
  384. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  385. package/src/lib/ui/context/actions.tsx +38 -10
  386. package/src/lib/ui/context/components.tsx +3 -0
  387. package/src/lib/ui/context/events.tsx +2 -1
  388. package/src/lib/ui/hooks/useExportAs.ts +3 -2
  389. package/src/lib/ui/hooks/useTools.tsx +26 -4
  390. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +5 -0
  391. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +5 -0
  392. package/src/lib/ui/kbd-utils.ts +10 -3
  393. package/src/lib/ui/version.ts +3 -3
  394. package/src/lib/ui.css +424 -293
  395. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +5 -5
  396. package/src/lib/utils/export/copyAs.ts +1 -24
  397. package/src/lib/utils/export/export.ts +0 -36
  398. package/src/lib/utils/export/exportAs.ts +1 -32
  399. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +4 -4
  400. package/src/test/A11y.test.tsx +3 -2
  401. package/src/test/ClickManager.test.ts +7 -6
  402. package/src/test/Editor.test.tsx +20 -19
  403. package/src/test/EraserTool.test.ts +184 -13
  404. package/src/test/HandTool.test.ts +10 -9
  405. package/src/test/HighlightShape.test.ts +2 -1
  406. package/src/test/SelectTool.test.ts +3 -2
  407. package/src/test/TLUserPreferences.test.ts +4 -3
  408. package/src/test/TestEditor.ts +13 -15
  409. package/src/test/TldrawEditor.test.tsx +11 -10
  410. package/src/test/ZoomTool.test.ts +7 -6
  411. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  412. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  413. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  414. package/src/test/arrows-megabus.test.tsx +17 -10
  415. package/src/test/bindings.test.tsx +24 -37
  416. package/src/test/bookmark-shapes.test.ts +1 -8
  417. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  418. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  419. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  420. package/src/test/commands/alignShapes.test.tsx +25 -24
  421. package/src/test/commands/animationSpeed.test.ts +2 -1
  422. package/src/test/commands/centerOnPoint.test.ts +3 -2
  423. package/src/test/commands/clipboard.test.ts +3 -2
  424. package/src/test/commands/createShapes.test.ts +2 -1
  425. package/src/test/commands/deleteShapes.test.ts +2 -1
  426. package/src/test/commands/distributeShapes.test.tsx +11 -10
  427. package/src/test/commands/getSvgString.test.ts +2 -1
  428. package/src/test/commands/packShapes.test.ts +5 -4
  429. package/src/test/commands/resizeShape.test.ts +2 -1
  430. package/src/test/commands/rotateShapes.test.ts +7 -6
  431. package/src/test/commands/setCamera.test.ts +4 -3
  432. package/src/test/commands/setCurrentPage.test.ts +3 -2
  433. package/src/test/commands/stackShapes.test.ts +11 -10
  434. package/src/test/commands/stretch.test.tsx +13 -12
  435. package/src/test/createDeepLink.test.tsx +2 -1
  436. package/src/test/cropping.test.ts +3 -2
  437. package/src/test/custom-clipping.test.ts +436 -0
  438. package/src/test/drawing.test.ts +2 -1
  439. package/src/test/flipShapes.test.ts +4 -3
  440. package/src/test/frames.test.ts +25 -24
  441. package/src/test/getCulledShapes.test.tsx +3 -2
  442. package/src/test/groups.test.tsx +1 -1
  443. package/src/test/handleDeepLink.test.tsx +2 -1
  444. package/src/test/inner-outer-margin.test.ts +315 -0
  445. package/src/test/maxShapes.test.ts +3 -2
  446. package/src/test/modifiers.test.ts +5 -4
  447. package/src/test/navigation.test.ts +12 -11
  448. package/src/test/panning.test.ts +2 -1
  449. package/src/test/perf/perf.test.ts +2 -1
  450. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  451. package/src/test/resizing.test.ts +39 -38
  452. package/src/test/select.test.tsx +4 -3
  453. package/src/test/selection-omnibus.test.ts +11 -10
  454. package/src/test/shapeutils.test.ts +4 -3
  455. package/src/test/translating.test.ts +9 -8
  456. package/tldraw.css +732 -583
  457. package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
  458. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +0 -7
  459. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +0 -7
  460. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +0 -7
  461. package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
  462. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +0 -7
  463. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +0 -7
  464. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs +0 -115
  465. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +0 -7
  466. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +0 -109
@@ -1,6 +1,6 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
- exports[`Matches a snapshot: Basic SVG 1`] = `
3
+ exports[`Matches a snapshot > Basic SVG 1`] = `
4
4
  <wrapper>
5
5
  <svg
6
6
  class="tl-container tl-theme__force-sRGB tl-theme__light"
@@ -64,6 +64,13 @@ exports[`Matches a snapshot: Basic SVG 1`] = `
64
64
  y="0"
65
65
  />
66
66
  </pattern>
67
+ <style>
68
+ @font-face {
69
+ font-family: "tldraw_draw";
70
+ font-weight: normal;
71
+ src: url("data:font/woff2;base64,") format(woff2);
72
+ }
73
+ </style>
67
74
  </defs>
68
75
  <g
69
76
  opacity="1"
@@ -83,14 +90,15 @@ exports[`Matches a snapshot: Basic SVG 1`] = `
83
90
  y="0"
84
91
  >
85
92
  <div
86
- style="display: flex; font-family: 'tldraw_draw', sans-serif; height: 100%; justify-content: center; align-items: center; padding: 16px 16px 16px 16px; visibility: visible;"
93
+ style="display: block; font-family: serif; height: 0px; justify-content: center; align-items: center; padding: 0px; position: static; width: 0px; margin: 0px; border: 0px; font-size: 16px; line-height: normal; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);"
87
94
  xmlns="http://www.w3.org/1999/xhtml"
88
95
  >
89
96
  <div
90
- style="font-size: 22px; color: rgb(29, 29, 29); line-height: 1.35; text-align: center; width: 100%; word-wrap: break-word; overflow-wrap: break-word; white-space: pre-wrap; text-shadow: var(--tl-text-outline);"
97
+ style="font-size: 22px; color: rgb(0, 0, 0); line-height: 1.35; text-align: center; width: 0px; word-wrap: break-word; overflow-wrap: break-word; white-space: pre-wrap; text-shadow: var(--tl-text-outline); position: static; height: 0px; margin: 0px; padding: 0px; border: 0px;"
91
98
  >
92
99
  <p
93
100
  dir="auto"
101
+ style="position: static; width: 0px; height: 0px; margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"
94
102
  >
95
103
  Hello world
96
104
  </p>
@@ -132,7 +140,7 @@ exports[`Matches a snapshot: Basic SVG 1`] = `
132
140
  </wrapper>
133
141
  `;
134
142
 
135
- exports[`Returns all shapes when no ids are provided: All shapes 1`] = `
143
+ exports[`Returns all shapes when no ids are provided > All shapes 1`] = `
136
144
  <wrapper>
137
145
  <svg
138
146
  class="tl-container tl-theme__force-sRGB tl-theme__light"
@@ -196,6 +204,13 @@ exports[`Returns all shapes when no ids are provided: All shapes 1`] = `
196
204
  y="0"
197
205
  />
198
206
  </pattern>
207
+ <style>
208
+ @font-face {
209
+ font-family: "tldraw_draw";
210
+ font-weight: normal;
211
+ src: url("data:font/woff2;base64,") format(woff2);
212
+ }
213
+ </style>
199
214
  </defs>
200
215
  <g
201
216
  opacity="1"
@@ -215,14 +230,15 @@ exports[`Returns all shapes when no ids are provided: All shapes 1`] = `
215
230
  y="0"
216
231
  >
217
232
  <div
218
- style="display: flex; font-family: 'tldraw_draw', sans-serif; height: 100%; justify-content: center; align-items: center; padding: 16px 16px 16px 16px; visibility: visible;"
233
+ style="display: block; font-family: serif; height: 0px; justify-content: center; align-items: center; padding: 0px; position: static; width: 0px; margin: 0px; border: 0px; font-size: 16px; line-height: normal; color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);"
219
234
  xmlns="http://www.w3.org/1999/xhtml"
220
235
  >
221
236
  <div
222
- style="font-size: 22px; color: rgb(29, 29, 29); line-height: 1.35; text-align: center; width: 100%; word-wrap: break-word; overflow-wrap: break-word; white-space: pre-wrap; text-shadow: var(--tl-text-outline);"
237
+ style="font-size: 22px; color: rgb(0, 0, 0); line-height: 1.35; text-align: center; width: 0px; word-wrap: break-word; overflow-wrap: break-word; white-space: pre-wrap; text-shadow: var(--tl-text-outline); position: static; height: 0px; margin: 0px; padding: 0px; border: 0px;"
223
238
  >
224
239
  <p
225
240
  dir="auto"
241
+ style="position: static; width: 0px; height: 0px; margin: 0px; padding: 0px; border: 0px; color: rgb(0, 0, 0);"
226
242
  >
227
243
  Hello world
228
244
  </p>
@@ -1,6 +1,6 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
- exports[`editor.packShapes packs rotated shapes: packed shapes 1`] = `
3
+ exports[`editor.packShapes > packs rotated shapes > packed shapes 1`] = `
4
4
  [
5
5
  {
6
6
  "id": "shape:boxA",
@@ -116,7 +116,7 @@ exports[`editor.packShapes packs rotated shapes: packed shapes 1`] = `
116
116
  ]
117
117
  `;
118
118
 
119
- exports[`editor.packShapes packs shapes using the adjacent shape margin option: packed shapes 1`] = `
119
+ exports[`editor.packShapes > packs shapes > packed shapes 1`] = `
120
120
  [
121
121
  {
122
122
  "id": "shape:boxA",
@@ -152,7 +152,7 @@ exports[`editor.packShapes packs shapes using the adjacent shape margin option:
152
152
  "rotation": 0,
153
153
  "type": "geo",
154
154
  "typeName": "shape",
155
- "x": 99,
155
+ "x": 84,
156
156
  "y": 200,
157
157
  },
158
158
  {
@@ -226,13 +226,13 @@ exports[`editor.packShapes packs shapes using the adjacent shape margin option:
226
226
  "rotation": 0,
227
227
  "type": "geo",
228
228
  "typeName": "shape",
229
- "x": 301,
229
+ "x": 316,
230
230
  "y": 200,
231
231
  },
232
232
  ]
233
233
  `;
234
234
 
235
- exports[`editor.packShapes packs shapes: packed shapes 1`] = `
235
+ exports[`editor.packShapes > packs shapes using the adjacent shape margin option > packed shapes 1`] = `
236
236
  [
237
237
  {
238
238
  "id": "shape:boxA",
@@ -268,7 +268,7 @@ exports[`editor.packShapes packs shapes: packed shapes 1`] = `
268
268
  "rotation": 0,
269
269
  "type": "geo",
270
270
  "typeName": "shape",
271
- "x": 84,
271
+ "x": 99,
272
272
  "y": 200,
273
273
  },
274
274
  {
@@ -342,7 +342,7 @@ exports[`editor.packShapes packs shapes: packed shapes 1`] = `
342
342
  "rotation": 0,
343
343
  "type": "geo",
344
344
  "typeName": "shape",
345
- "x": 316,
345
+ "x": 301,
346
346
  "y": 200,
347
347
  },
348
348
  ]
@@ -1,6 +1,6 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
1
+ // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
- exports[`converts correctly: Zoom to Fit Camera 1`] = `
3
+ exports[`converts correctly > Zoom to Fit Camera 1`] = `
4
4
  {
5
5
  "id": "static",
6
6
  "meta": {},
@@ -1,11 +1,12 @@
1
1
  import { Box, 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
  beforeEach(() => {
11
12
  editor = new TestEditor()
@@ -22,10 +23,10 @@ describe('when less than two shapes are selected', () => {
22
23
  it('does nothing', () => {
23
24
  editor.setSelectedShapes([ids.boxB])
24
25
 
25
- const fn = jest.fn()
26
+ const fn = vi.fn()
26
27
  editor.store.listen(fn)
27
28
  editor.alignShapes(editor.getSelectedShapeIds(), 'top')
28
- jest.advanceTimersByTime(1000)
29
+ vi.advanceTimersByTime(1000)
29
30
  expect(fn).not.toHaveBeenCalled()
30
31
  })
31
32
  })
@@ -34,7 +35,7 @@ describe('when multiple shapes are selected', () => {
34
35
  it('does, undoes and redoes command', () => {
35
36
  editor.markHistoryStoppingPoint('align')
36
37
  editor.alignShapes(editor.getSelectedShapeIds(), 'top')
37
- jest.advanceTimersByTime(1000)
38
+ vi.advanceTimersByTime(1000)
38
39
 
39
40
  editor.expectShapeToMatch({ id: ids.boxB, y: 0 })
40
41
  editor.undo()
@@ -45,7 +46,7 @@ describe('when multiple shapes are selected', () => {
45
46
 
46
47
  it('aligns top', () => {
47
48
  editor.alignShapes(editor.getSelectedShapeIds(), 'top')
48
- jest.advanceTimersByTime(1000)
49
+ vi.advanceTimersByTime(1000)
49
50
 
50
51
  editor.expectShapeToMatch(
51
52
  { id: ids.boxA, y: 0 },
@@ -56,7 +57,7 @@ describe('when multiple shapes are selected', () => {
56
57
 
57
58
  it('aligns right', () => {
58
59
  editor.alignShapes(editor.getSelectedShapeIds(), 'right')
59
- jest.advanceTimersByTime(1000)
60
+ vi.advanceTimersByTime(1000)
60
61
 
61
62
  editor.expectShapeToMatch(
62
63
  { id: ids.boxA, x: 400 },
@@ -67,7 +68,7 @@ describe('when multiple shapes are selected', () => {
67
68
 
68
69
  it('aligns bottom', () => {
69
70
  editor.alignShapes(editor.getSelectedShapeIds(), 'bottom')
70
- jest.advanceTimersByTime(1000)
71
+ vi.advanceTimersByTime(1000)
71
72
 
72
73
  editor.expectShapeToMatch(
73
74
  { id: ids.boxA, y: 400 },
@@ -78,7 +79,7 @@ describe('when multiple shapes are selected', () => {
78
79
 
79
80
  it('aligns left', () => {
80
81
  editor.alignShapes(editor.getSelectedShapeIds(), 'left')
81
- jest.advanceTimersByTime(1000)
82
+ vi.advanceTimersByTime(1000)
82
83
 
83
84
  editor.expectShapeToMatch(
84
85
  { id: ids.boxA, x: 0 },
@@ -89,7 +90,7 @@ describe('when multiple shapes are selected', () => {
89
90
 
90
91
  it('aligns center horizontal', () => {
91
92
  editor.alignShapes(editor.getSelectedShapeIds(), 'center-horizontal')
92
- jest.advanceTimersByTime(1000)
93
+ vi.advanceTimersByTime(1000)
93
94
 
94
95
  editor.expectShapeToMatch(
95
96
  { id: ids.boxA, x: 200 },
@@ -100,7 +101,7 @@ describe('when multiple shapes are selected', () => {
100
101
 
101
102
  it('aligns center vertical', () => {
102
103
  editor.alignShapes(editor.getSelectedShapeIds(), 'center-vertical')
103
- jest.advanceTimersByTime(1000)
104
+ vi.advanceTimersByTime(1000)
104
105
 
105
106
  editor.expectShapeToMatch(
106
107
  { id: ids.boxA, y: 200 },
@@ -129,9 +130,9 @@ describe('when multiple shapes are selected', () => {
129
130
  ])
130
131
 
131
132
  editor.alignShapes(editor.getSelectedShapeIds(), 'center-vertical')
132
- jest.advanceTimersByTime(1000)
133
+ vi.advanceTimersByTime(1000)
133
134
  editor.alignShapes(editor.getSelectedShapeIds(), 'center-horizontal')
134
- jest.advanceTimersByTime(1000)
135
+ vi.advanceTimersByTime(1000)
135
136
 
136
137
  const commonBounds = Box.Common([
137
138
  editor.getShapePageBounds(ids.boxA)!,
@@ -168,9 +169,9 @@ describe('when multiple shapes are selected', () => {
168
169
  ])
169
170
 
170
171
  editor.alignShapes(editor.getSelectedShapeIds(), 'top')
171
- jest.advanceTimersByTime(1000)
172
+ vi.advanceTimersByTime(1000)
172
173
  editor.alignShapes(editor.getSelectedShapeIds(), 'left')
173
- jest.advanceTimersByTime(1000)
174
+ vi.advanceTimersByTime(1000)
174
175
 
175
176
  const commonBounds = Box.Common([
176
177
  editor.getShapePageBounds(ids.boxA)!,
@@ -208,9 +209,9 @@ describe('when multiple shapes are selected', () => {
208
209
 
209
210
  editor.setSelectedShapes([ids.boxA, ids.boxB, ids.boxC])
210
211
  editor.alignShapes(editor.getSelectedShapeIds(), 'bottom')
211
- jest.advanceTimersByTime(1000)
212
+ vi.advanceTimersByTime(1000)
212
213
  editor.alignShapes(editor.getSelectedShapeIds(), 'right')
213
- jest.advanceTimersByTime(1000)
214
+ vi.advanceTimersByTime(1000)
214
215
 
215
216
  const commonBounds = Box.Common([
216
217
  editor.getShapePageBounds(ids.boxA)!,
@@ -251,9 +252,9 @@ describe('When shapes are parented to other shapes...', () => {
251
252
  ])
252
253
 
253
254
  editor.alignShapes(editor.getSelectedShapeIds(), 'top')
254
- jest.advanceTimersByTime(1000)
255
+ vi.advanceTimersByTime(1000)
255
256
  editor.alignShapes(editor.getSelectedShapeIds(), 'left')
256
- jest.advanceTimersByTime(1000)
257
+ vi.advanceTimersByTime(1000)
257
258
 
258
259
  const commonBoundsAfter = Box.Common([
259
260
  editor.getShapePageBounds(ids.boxC)!,
@@ -273,9 +274,9 @@ describe('When shapes are parented to other shapes...', () => {
273
274
  ])
274
275
 
275
276
  editor.alignShapes(editor.getSelectedShapeIds(), 'bottom')
276
- jest.advanceTimersByTime(1000)
277
+ vi.advanceTimersByTime(1000)
277
278
  editor.alignShapes(editor.getSelectedShapeIds(), 'right')
278
- jest.advanceTimersByTime(1000)
279
+ vi.advanceTimersByTime(1000)
279
280
 
280
281
  const commonBoundsAfter = Box.Common([
281
282
  editor.getShapePageBounds(ids.boxC)!,
@@ -339,9 +340,9 @@ describe('When shapes are parented to a rotated shape...', () => {
339
340
  ])
340
341
 
341
342
  editor.alignShapes(editor.getSelectedShapeIds(), 'top')
342
- jest.advanceTimersByTime(1000)
343
+ vi.advanceTimersByTime(1000)
343
344
  editor.alignShapes(editor.getSelectedShapeIds(), 'left')
344
- jest.advanceTimersByTime(1000)
345
+ vi.advanceTimersByTime(1000)
345
346
 
346
347
  const commonBoundsAfter = Box.Common([
347
348
  editor.getShapePageBounds(ids.boxC)!,
@@ -367,9 +368,9 @@ describe('When shapes are parented to a rotated shape...', () => {
367
368
  ])
368
369
 
369
370
  editor.alignShapes(editor.getSelectedShapeIds(), 'bottom')
370
- jest.advanceTimersByTime(1000)
371
+ vi.advanceTimersByTime(1000)
371
372
  editor.alignShapes(editor.getSelectedShapeIds(), 'right')
372
- jest.advanceTimersByTime(1000)
373
+ vi.advanceTimersByTime(1000)
373
374
 
374
375
  const commonBoundsAfter = Box.Common([
375
376
  editor.getShapePageBounds(ids.boxC)!,
@@ -1,3 +1,4 @@
1
+ import { vi } from 'vitest'
1
2
  import { TestEditor } from '../TestEditor'
2
3
 
3
4
  let editor: TestEditor
@@ -6,7 +7,7 @@ beforeEach(() => {
6
7
  editor = new TestEditor()
7
8
  })
8
9
 
9
- jest.useFakeTimers()
10
+ vi.useFakeTimers()
10
11
 
11
12
  it('zooms in gradually when duration is present and animtion speed is default', () => {
12
13
  expect(editor.getZoomLevel()).toBe(1)
@@ -1,3 +1,4 @@
1
+ import { vi } from 'vitest'
1
2
  import { TestEditor } from '../TestEditor'
2
3
 
3
4
  let editor: TestEditor
@@ -14,9 +15,9 @@ it('centers on the point', () => {
14
15
  it('centers on the point with animation', () => {
15
16
  editor.centerOnPoint({ x: 400, y: 400 }, { animation: { duration: 200 } })
16
17
  expect(editor.getViewportPageCenter()).not.toMatchObject({ x: 400, y: 400 })
17
- jest.advanceTimersByTime(100)
18
+ vi.advanceTimersByTime(100)
18
19
  expect(editor.getViewportPageCenter()).not.toMatchObject({ x: 400, y: 400 })
19
- jest.advanceTimersByTime(200)
20
+ vi.advanceTimersByTime(200)
20
21
  expect(editor.getViewportPageCenter()).toMatchObject({ x: 400, y: 400 })
21
22
  })
22
23
 
@@ -1,4 +1,5 @@
1
1
  import { createShapeId, TLArrowShape } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { getArrowBindings } from '../../lib/shapes/arrow/shared'
3
4
  import { TestEditor } from '../TestEditor'
4
5
 
@@ -27,13 +28,13 @@ const doMockClipboard = () => {
27
28
 
28
29
  Object.assign(window.navigator, {
29
30
  clipboard: {
30
- write: jest.fn((content: any) => {
31
+ write: vi.fn((content: any) => {
31
32
  context.current = content
32
33
  }),
33
34
  },
34
35
  })
35
36
 
36
- globalThis.ClipboardItem = jest.fn((payload: any) => payload) as any
37
+ globalThis.ClipboardItem = vi.fn((payload: any) => payload) as any
37
38
 
38
39
  return context
39
40
  }
@@ -1,4 +1,5 @@
1
1
  import { DefaultColorStyle, TLArrowShape, TLGeoShape, createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from '../TestEditor'
3
4
 
4
5
  let editor: TestEditor
@@ -126,7 +127,7 @@ it('Throws out all shapes if any shape is invalid', () => {
126
127
 
127
128
  expect(editor.getCurrentPageShapeIds().size).toBe(n + 1)
128
129
 
129
- console.error = jest.fn()
130
+ console.error = vi.fn()
130
131
 
131
132
  // But these will need to be thrown out
132
133
  expect(() => {
@@ -1,4 +1,5 @@
1
1
  import { createBindingId, createShapeId } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { getArrowBindings } from '../../lib/shapes/arrow/shared'
3
4
  import { TestEditor } from '../TestEditor'
4
5
 
@@ -12,7 +13,7 @@ const ids = {
12
13
  arrow1: createShapeId('arrow1'),
13
14
  }
14
15
 
15
- jest.useFakeTimers()
16
+ vi.useFakeTimers()
16
17
 
17
18
  beforeEach(() => {
18
19
  editor = new TestEditor()
@@ -1,8 +1,9 @@
1
1
  import { PI, 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
 
5
- jest.useFakeTimers()
6
+ vi.useFakeTimers()
6
7
 
7
8
  let editor: TestEditor
8
9
 
@@ -46,10 +47,10 @@ describe('distributeShapes command', () => {
46
47
  describe('when less than three shapes are selected', () => {
47
48
  it('does nothing', () => {
48
49
  editor.setSelectedShapes([ids.boxA, ids.boxB])
49
- const fn = jest.fn()
50
+ const fn = vi.fn()
50
51
  editor.store.listen(fn)
51
52
  editor.distributeShapes(editor.getSelectedShapeIds(), 'horizontal')
52
- jest.advanceTimersByTime(1000)
53
+ vi.advanceTimersByTime(1000)
53
54
  expect(fn).not.toHaveBeenCalled()
54
55
  })
55
56
  })
@@ -58,7 +59,7 @@ describe('distributeShapes command', () => {
58
59
  it('distributeShapes horizontally', () => {
59
60
  editor.selectAll()
60
61
  editor.distributeShapes(editor.getSelectedShapeIds(), 'horizontal')
61
- jest.advanceTimersByTime(1000)
62
+ vi.advanceTimersByTime(1000)
62
63
  editor.expectShapeToMatch(
63
64
  { id: ids.boxA, x: 0 },
64
65
  { id: ids.boxB, x: 200 },
@@ -70,7 +71,7 @@ describe('distributeShapes command', () => {
70
71
  editor.updateShapes([{ id: ids.boxC, type: 'geo', x: 25 }])
71
72
  editor.selectAll()
72
73
  editor.distributeShapes(editor.getSelectedShapeIds(), 'horizontal')
73
- jest.advanceTimersByTime(1000)
74
+ vi.advanceTimersByTime(1000)
74
75
  editor.expectShapeToMatch(
75
76
  { id: ids.boxA, x: 0 },
76
77
  { id: ids.boxB, x: 100 },
@@ -81,7 +82,7 @@ describe('distributeShapes command', () => {
81
82
  it('distributeShapes vertically', () => {
82
83
  editor.selectAll()
83
84
  editor.distributeShapes(editor.getSelectedShapeIds(), 'vertical')
84
- jest.advanceTimersByTime(1000)
85
+ vi.advanceTimersByTime(1000)
85
86
  editor.expectShapeToMatch(
86
87
  { id: ids.boxA, y: 0 },
87
88
  { id: ids.boxB, y: 200 },
@@ -93,7 +94,7 @@ describe('distributeShapes command', () => {
93
94
  editor.updateShapes([{ id: ids.boxC, type: 'geo', y: 25 }])
94
95
  editor.selectAll()
95
96
  editor.distributeShapes(editor.getSelectedShapeIds(), 'vertical')
96
- jest.advanceTimersByTime(1000)
97
+ vi.advanceTimersByTime(1000)
97
98
  editor.expectShapeToMatch(
98
99
  { id: ids.boxA, y: 0 },
99
100
  { id: ids.boxB, y: 100 },
@@ -135,7 +136,7 @@ describe('distributeShapes command', () => {
135
136
  editor.setSelectedShapes([ids.boxB, ids.boxC, ids.boxD])
136
137
 
137
138
  editor.distributeShapes(editor.getSelectedShapeIds(), 'horizontal')
138
- jest.advanceTimersByTime(1000)
139
+ vi.advanceTimersByTime(1000)
139
140
 
140
141
  editor.expectShapeToMatch(
141
142
  { id: ids.boxB, x: 100 },
@@ -177,7 +178,7 @@ describe('distributeShapes command', () => {
177
178
  editor.setSelectedShapes([ids.boxB, ids.boxC, ids.boxD])
178
179
 
179
180
  editor.distributeShapes(editor.getSelectedShapeIds(), 'horizontal')
180
- jest.advanceTimersByTime(1000)
181
+ vi.advanceTimersByTime(1000)
181
182
 
182
183
  editor.expectShapeToMatch(
183
184
  { id: ids.boxB, x: 100 },
@@ -222,7 +223,7 @@ describe('distributeShapes command', () => {
222
223
  editor.setSelectedShapes([ids.boxB, ids.boxC, ids.boxD])
223
224
 
224
225
  editor.distributeShapes(editor.getSelectedShapeIds(), 'horizontal')
225
- jest.advanceTimersByTime(1000)
226
+ vi.advanceTimersByTime(1000)
226
227
 
227
228
  editor.expectShapeToMatch(
228
229
  { id: ids.boxB, x: 100 },
@@ -1,4 +1,5 @@
1
1
  import { DefaultDashStyle, TLGeoShape, createShapeId, toRichText } from '@tldraw/editor'
2
+ import { vi } from 'vitest'
2
3
  import { TestEditor } from '../TestEditor'
3
4
 
4
5
  let editor: TestEditor
@@ -14,7 +15,7 @@ function parseSvg({ svg }: { svg: string } = { svg: '' }) {
14
15
  return parser.parseFromString(svg, 'image/svg+xml').firstElementChild as SVGSVGElement
15
16
  }
16
17
 
17
- jest.useRealTimers()
18
+ vi.useRealTimers()
18
19
 
19
20
  beforeEach(() => {
20
21
  editor = new TestEditor()
@@ -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
@@ -10,7 +11,7 @@ const ids = {
10
11
  boxD: createShapeId('boxD'),
11
12
  }
12
13
 
13
- jest.useFakeTimers()
14
+ vi.useFakeTimers()
14
15
 
15
16
  beforeEach(() => {
16
17
  editor = new TestEditor()
@@ -45,7 +46,7 @@ describe('editor.packShapes', () => {
45
46
  editor.selectAll()
46
47
  const centerBefore = editor.getSelectionRotatedPageBounds()!.center.clone()
47
48
  editor.packShapes(editor.getSelectedShapeIds())
48
- jest.advanceTimersByTime(1000)
49
+ vi.advanceTimersByTime(1000)
49
50
  expect(
50
51
  editor.getCurrentPageShapes().map((s) => ({ ...s, parentId: 'wahtever' }))
51
52
  ).toMatchSnapshot('packed shapes')
@@ -57,7 +58,7 @@ describe('editor.packShapes', () => {
57
58
  editor.selectAll()
58
59
  const centerBefore = editor.getSelectionRotatedPageBounds()!.center.clone()
59
60
  editor.packShapes(editor.getSelectedShapeIds(), 16)
60
- jest.advanceTimersByTime(1000)
61
+ vi.advanceTimersByTime(1000)
61
62
  expect(
62
63
  editor.getCurrentPageShapes().map((s) => ({ ...s, parentId: 'wahtever' }))
63
64
  ).toMatchSnapshot('packed shapes')
@@ -68,7 +69,7 @@ describe('editor.packShapes', () => {
68
69
  it('packs rotated shapes', () => {
69
70
  editor.updateShapes([{ id: ids.boxA, type: 'geo', rotation: Math.PI }])
70
71
  editor.selectAll().packShapes(editor.getSelectedShapeIds(), 16)
71
- jest.advanceTimersByTime(1000)
72
+ vi.advanceTimersByTime(1000)
72
73
  expect(
73
74
  editor.getCurrentPageShapes().map((s) => ({ ...s, parentId: 'wahtever' }))
74
75
  ).toMatchSnapshot('packed shapes')
@@ -1,9 +1,10 @@
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
5
6
 
6
- jest.useFakeTimers()
7
+ vi.useFakeTimers()
7
8
 
8
9
  const ids = {
9
10
  boxA: createShapeId('boxA'),
@@ -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"`)