tldraw 3.16.0-next.282b7be564ae → 3.16.0-next.2f9d39693e4c

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 (291) hide show
  1. package/dist-cjs/index.d.ts +224 -102
  2. package/dist-cjs/index.js +33 -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/defaultExternalContentHandlers.js +5 -4
  7. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  8. package/dist-cjs/lib/shapes/arrow/arrowLabel.js +6 -0
  9. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +3 -3
  10. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +6 -0
  11. package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
  12. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +3 -0
  13. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
  14. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +1 -3
  15. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
  16. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  17. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js +0 -2
  18. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
  19. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +0 -2
  20. package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
  21. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +25 -1
  22. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  23. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +12 -0
  24. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  25. package/dist-cjs/lib/ui/TldrawUi.js +13 -12
  26. package/dist-cjs/lib/ui/TldrawUi.js.map +2 -2
  27. package/dist-cjs/lib/ui/assetUrls.js +13 -10
  28. package/dist-cjs/lib/ui/assetUrls.js.map +2 -2
  29. package/dist-cjs/lib/ui/components/{FollowingIndicator.js → DefaultFollowingIndicator.js} +6 -6
  30. package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +7 -0
  31. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +6 -6
  32. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +1 -1
  33. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +9 -4
  34. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  35. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +255 -316
  36. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  37. package/dist-cjs/lib/ui/components/{primitives/TldrawUiButtonPicker.js → StylePanel/StylePanelButtonPicker.js} +52 -45
  38. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +7 -0
  39. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js +68 -0
  40. package/dist-cjs/lib/ui/components/StylePanel/StylePanelContext.js.map +7 -0
  41. package/dist-cjs/lib/ui/components/StylePanel/{DoubleDropdownPicker.js → StylePanelDoubleDropdownPicker.js} +23 -22
  42. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.js.map +7 -0
  43. package/dist-cjs/lib/ui/components/StylePanel/{DropdownPicker.js → StylePanelDropdownPicker.js} +24 -21
  44. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js.map +7 -0
  45. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js +28 -0
  46. package/dist-cjs/lib/ui/components/StylePanel/StylePanelSubheading.js.map +7 -0
  47. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js +3 -2
  48. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
  49. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js +38 -9
  50. package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbarContent.js.map +2 -2
  51. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js +15 -3
  52. package/dist-cjs/lib/ui/components/Toolbar/DefaultVideoToolbarContent.js.map +2 -2
  53. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js +3 -3
  54. package/dist-cjs/lib/ui/components/Toolbar/LinkEditor.js.map +2 -2
  55. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +10 -1
  56. package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
  57. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js +17 -4
  58. package/dist-cjs/lib/ui/components/primitives/TldrawUiSlider.js.map +2 -2
  59. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +2 -0
  60. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  61. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +37 -36
  62. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
  63. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +2 -1
  64. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  65. package/dist-cjs/lib/ui/context/actions.js +23 -10
  66. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  67. package/dist-cjs/lib/ui/context/components.js +2 -0
  68. package/dist-cjs/lib/ui/context/components.js.map +2 -2
  69. package/dist-cjs/lib/ui/context/events.js.map +1 -1
  70. package/dist-cjs/lib/ui/hooks/useExportAs.js +3 -2
  71. package/dist-cjs/lib/ui/hooks/useExportAs.js.map +2 -2
  72. package/dist-cjs/lib/ui/hooks/useTools.js +1 -1
  73. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  74. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  75. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +2 -0
  76. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  77. package/dist-cjs/lib/ui/kbd-utils.js +9 -3
  78. package/dist-cjs/lib/ui/kbd-utils.js.map +2 -2
  79. package/dist-cjs/lib/ui/version.js +3 -3
  80. package/dist-cjs/lib/ui/version.js.map +1 -1
  81. package/dist-cjs/lib/utils/export/copyAs.js +1 -2
  82. package/dist-cjs/lib/utils/export/copyAs.js.map +2 -2
  83. package/dist-cjs/lib/utils/export/export.js +0 -20
  84. package/dist-cjs/lib/utils/export/export.js.map +2 -2
  85. package/dist-cjs/lib/utils/export/exportAs.js +1 -2
  86. package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
  87. package/dist-esm/index.d.mts +224 -102
  88. package/dist-esm/index.mjs +61 -29
  89. package/dist-esm/index.mjs.map +2 -2
  90. package/dist-esm/lib/Tldraw.mjs +14 -4
  91. package/dist-esm/lib/Tldraw.mjs.map +2 -2
  92. package/dist-esm/lib/defaultExternalContentHandlers.mjs +5 -4
  93. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  94. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +6 -0
  95. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +3 -3
  96. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +6 -0
  97. package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
  98. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +3 -0
  99. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
  100. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +1 -3
  101. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  102. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  103. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs +0 -2
  104. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
  105. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +0 -2
  106. package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
  107. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +26 -1
  108. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  109. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +13 -0
  110. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  111. package/dist-esm/lib/ui/TldrawUi.mjs +13 -12
  112. package/dist-esm/lib/ui/TldrawUi.mjs.map +2 -2
  113. package/dist-esm/lib/ui/assetUrls.mjs +13 -10
  114. package/dist-esm/lib/ui/assetUrls.mjs.map +2 -2
  115. package/dist-esm/lib/ui/components/{FollowingIndicator.mjs → DefaultFollowingIndicator.mjs} +3 -3
  116. package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +7 -0
  117. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +6 -6
  118. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +1 -1
  119. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +14 -5
  120. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  121. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +257 -320
  122. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  123. package/dist-esm/lib/ui/components/{primitives/TldrawUiButtonPicker.mjs → StylePanel/StylePanelButtonPicker.mjs} +54 -43
  124. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +7 -0
  125. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs +48 -0
  126. package/dist-esm/lib/ui/components/StylePanel/StylePanelContext.mjs.map +7 -0
  127. package/dist-esm/lib/ui/components/StylePanel/{DoubleDropdownPicker.mjs → StylePanelDoubleDropdownPicker.mjs} +20 -19
  128. package/dist-esm/lib/ui/components/StylePanel/StylePanelDoubleDropdownPicker.mjs.map +7 -0
  129. package/dist-esm/lib/ui/components/StylePanel/{DropdownPicker.mjs → StylePanelDropdownPicker.mjs} +21 -18
  130. package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs.map +7 -0
  131. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs +8 -0
  132. package/dist-esm/lib/ui/components/StylePanel/StylePanelSubheading.mjs.map +7 -0
  133. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs +3 -2
  134. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
  135. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs +38 -9
  136. package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbarContent.mjs.map +2 -2
  137. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs +15 -3
  138. package/dist-esm/lib/ui/components/Toolbar/DefaultVideoToolbarContent.mjs.map +2 -2
  139. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs +3 -3
  140. package/dist-esm/lib/ui/components/Toolbar/LinkEditor.mjs.map +2 -2
  141. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +10 -1
  142. package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
  143. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs +17 -4
  144. package/dist-esm/lib/ui/components/primitives/TldrawUiSlider.mjs.map +2 -2
  145. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +2 -0
  146. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  147. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +37 -36
  148. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
  149. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +2 -1
  150. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  151. package/dist-esm/lib/ui/context/actions.mjs +23 -10
  152. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  153. package/dist-esm/lib/ui/context/components.mjs +2 -0
  154. package/dist-esm/lib/ui/context/components.mjs.map +2 -2
  155. package/dist-esm/lib/ui/context/events.mjs.map +1 -1
  156. package/dist-esm/lib/ui/hooks/useExportAs.mjs +3 -2
  157. package/dist-esm/lib/ui/hooks/useExportAs.mjs.map +2 -2
  158. package/dist-esm/lib/ui/hooks/useTools.mjs +1 -1
  159. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  160. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +2 -0
  161. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  162. package/dist-esm/lib/ui/kbd-utils.mjs +9 -3
  163. package/dist-esm/lib/ui/kbd-utils.mjs.map +2 -2
  164. package/dist-esm/lib/ui/version.mjs +3 -3
  165. package/dist-esm/lib/ui/version.mjs.map +1 -1
  166. package/dist-esm/lib/utils/export/copyAs.mjs +1 -2
  167. package/dist-esm/lib/utils/export/copyAs.mjs.map +2 -2
  168. package/dist-esm/lib/utils/export/export.mjs +0 -20
  169. package/dist-esm/lib/utils/export/export.mjs.map +2 -2
  170. package/dist-esm/lib/utils/export/exportAs.mjs +1 -2
  171. package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
  172. package/package.json +11 -34
  173. package/src/index.ts +44 -22
  174. package/src/lib/Tldraw.tsx +15 -2
  175. package/src/lib/defaultExternalContentHandlers.ts +12 -4
  176. package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +2 -1
  177. package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +4 -3
  178. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +7 -6
  179. package/src/lib/shapes/arrow/arrowLabel.ts +8 -0
  180. package/src/lib/shapes/draw/DrawShapeTool.test.ts +0 -5
  181. package/src/lib/shapes/frame/FrameShapeUtil.tsx +8 -0
  182. package/src/lib/shapes/image/ImageShapeUtil.tsx +3 -0
  183. package/src/lib/shapes/line/LineShapeUtil.test.tsx +4 -3
  184. package/src/lib/shapes/line/__snapshots__/LineShapeUtil.test.tsx.snap +2 -2
  185. package/src/lib/shapes/shared/PlainTextLabel.tsx +0 -6
  186. package/src/lib/shapes/shared/freehand/svg.ts +2 -0
  187. package/src/lib/shapes/shared/useEditablePlainText.ts +0 -6
  188. package/src/lib/shapes/shared/useImageOrVideoAsset.ts +0 -7
  189. package/src/lib/shapes/text/TextShapeTool.test.ts +6 -5
  190. package/src/lib/tools/EraserTool/childStates/Erasing.ts +34 -1
  191. package/src/lib/tools/EraserTool/childStates/Pointing.ts +20 -0
  192. package/src/lib/ui/TldrawUi.tsx +16 -10
  193. package/src/lib/ui/assetUrls.ts +13 -10
  194. package/src/lib/ui/components/{FollowingIndicator.tsx → DefaultFollowingIndicator.tsx} +2 -1
  195. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +6 -6
  196. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +27 -13
  197. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +260 -381
  198. package/src/lib/ui/components/{primitives/TldrawUiButtonPicker.tsx → StylePanel/StylePanelButtonPicker.tsx} +63 -50
  199. package/src/lib/ui/components/StylePanel/StylePanelContext.tsx +63 -0
  200. package/src/lib/ui/components/StylePanel/{DoubleDropdownPicker.tsx → StylePanelDoubleDropdownPicker.tsx} +28 -19
  201. package/src/lib/ui/components/StylePanel/StylePanelDropdownPicker.tsx +119 -0
  202. package/src/lib/ui/components/StylePanel/StylePanelSubheading.tsx +9 -0
  203. package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +4 -3
  204. package/src/lib/ui/components/Toolbar/DefaultImageToolbarContent.tsx +32 -15
  205. package/src/lib/ui/components/Toolbar/DefaultVideoToolbarContent.tsx +12 -4
  206. package/src/lib/ui/components/Toolbar/LinkEditor.tsx +5 -5
  207. package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +6 -1
  208. package/src/lib/ui/components/primitives/TldrawUiSlider.tsx +50 -30
  209. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +3 -0
  210. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +29 -21
  211. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +3 -2
  212. package/src/lib/ui/context/actions.tsx +23 -10
  213. package/src/lib/ui/context/components.tsx +3 -0
  214. package/src/lib/ui/context/events.tsx +1 -1
  215. package/src/lib/ui/hooks/useExportAs.ts +3 -2
  216. package/src/lib/ui/hooks/useTools.tsx +1 -1
  217. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +2 -0
  218. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +2 -0
  219. package/src/lib/ui/kbd-utils.ts +10 -3
  220. package/src/lib/ui/version.ts +3 -3
  221. package/src/lib/ui.css +19 -2
  222. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +5 -5
  223. package/src/lib/utils/export/copyAs.ts +1 -24
  224. package/src/lib/utils/export/export.ts +0 -36
  225. package/src/lib/utils/export/exportAs.ts +1 -32
  226. package/src/lib/utils/tldr/__snapshots__/buildFromV1Document.test.ts.snap +4 -4
  227. package/src/test/A11y.test.tsx +3 -2
  228. package/src/test/ClickManager.test.ts +7 -6
  229. package/src/test/Editor.test.tsx +20 -19
  230. package/src/test/EraserTool.test.ts +184 -13
  231. package/src/test/HandTool.test.ts +10 -9
  232. package/src/test/HighlightShape.test.ts +2 -1
  233. package/src/test/SelectTool.test.ts +3 -2
  234. package/src/test/TLUserPreferences.test.ts +4 -3
  235. package/src/test/TestEditor.ts +13 -15
  236. package/src/test/TldrawEditor.test.tsx +11 -10
  237. package/src/test/ZoomTool.test.ts +7 -6
  238. package/src/test/__snapshots__/drawing.test.ts.snap +2 -2
  239. package/src/test/__snapshots__/groups.test.tsx.snap +6 -6
  240. package/src/test/__snapshots__/resizing.test.ts.snap +2 -2
  241. package/src/test/arrows-megabus.test.tsx +5 -4
  242. package/src/test/bindings.test.tsx +24 -37
  243. package/src/test/bookmark-shapes.test.ts +1 -8
  244. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +23 -7
  245. package/src/test/commands/__snapshots__/packShapes.test.ts.snap +8 -8
  246. package/src/test/commands/__snapshots__/zoomToFit.test.ts.snap +2 -2
  247. package/src/test/commands/alignShapes.test.tsx +25 -24
  248. package/src/test/commands/animationSpeed.test.ts +2 -1
  249. package/src/test/commands/centerOnPoint.test.ts +3 -2
  250. package/src/test/commands/clipboard.test.ts +3 -2
  251. package/src/test/commands/createShapes.test.ts +2 -1
  252. package/src/test/commands/deleteShapes.test.ts +2 -1
  253. package/src/test/commands/distributeShapes.test.tsx +11 -10
  254. package/src/test/commands/getSvgString.test.ts +2 -1
  255. package/src/test/commands/packShapes.test.ts +5 -4
  256. package/src/test/commands/resizeShape.test.ts +2 -1
  257. package/src/test/commands/rotateShapes.test.ts +7 -6
  258. package/src/test/commands/setCamera.test.ts +4 -3
  259. package/src/test/commands/setCurrentPage.test.ts +3 -2
  260. package/src/test/commands/stackShapes.test.ts +11 -10
  261. package/src/test/commands/stretch.test.tsx +13 -12
  262. package/src/test/createDeepLink.test.tsx +2 -1
  263. package/src/test/cropping.test.ts +3 -2
  264. package/src/test/custom-clipping.test.ts +436 -0
  265. package/src/test/drawing.test.ts +2 -1
  266. package/src/test/flipShapes.test.ts +4 -3
  267. package/src/test/frames.test.ts +25 -24
  268. package/src/test/getCulledShapes.test.tsx +3 -2
  269. package/src/test/groups.test.tsx +1 -1
  270. package/src/test/handleDeepLink.test.tsx +2 -1
  271. package/src/test/maxShapes.test.ts +3 -2
  272. package/src/test/modifiers.test.ts +5 -4
  273. package/src/test/navigation.test.ts +12 -11
  274. package/src/test/panning.test.ts +2 -1
  275. package/src/test/perf/perf.test.ts +2 -1
  276. package/src/test/registerDeepLinkListener.test.tsx +10 -9
  277. package/src/test/resizing.test.ts +39 -38
  278. package/src/test/select.test.tsx +4 -3
  279. package/src/test/selection-omnibus.test.ts +11 -10
  280. package/src/test/shapeutils.test.ts +4 -3
  281. package/src/test/translating.test.ts +9 -8
  282. package/tldraw.css +27 -2
  283. package/dist-cjs/lib/ui/components/FollowingIndicator.js.map +0 -7
  284. package/dist-cjs/lib/ui/components/StylePanel/DoubleDropdownPicker.js.map +0 -7
  285. package/dist-cjs/lib/ui/components/StylePanel/DropdownPicker.js.map +0 -7
  286. package/dist-cjs/lib/ui/components/primitives/TldrawUiButtonPicker.js.map +0 -7
  287. package/dist-esm/lib/ui/components/FollowingIndicator.mjs.map +0 -7
  288. package/dist-esm/lib/ui/components/StylePanel/DoubleDropdownPicker.mjs.map +0 -7
  289. package/dist-esm/lib/ui/components/StylePanel/DropdownPicker.mjs.map +0 -7
  290. package/dist-esm/lib/ui/components/primitives/TldrawUiButtonPicker.mjs.map +0 -7
  291. package/src/lib/ui/components/StylePanel/DropdownPicker.tsx +0 -110
@@ -34,6 +34,7 @@ import {
34
34
  rotateSelectionHandle,
35
35
  tlenv,
36
36
  } from '@tldraw/editor'
37
+ import { vi } from 'vitest'
37
38
  import { defaultBindingUtils } from '../lib/defaultBindingUtils'
38
39
  import { defaultShapeTools } from '../lib/defaultShapeTools'
39
40
  import { defaultShapeUtils } from '../lib/defaultShapeUtils'
@@ -42,7 +43,14 @@ import { defaultTools } from '../lib/defaultTools'
42
43
  import { defaultAddFontsFromNode, tipTapDefaultExtensions } from '../lib/utils/text/richText'
43
44
  import { shapesFromJsx } from './test-jsx'
44
45
 
45
- jest.useFakeTimers()
46
+ declare module 'vitest' {
47
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
48
+ interface Matchers<T = any> {
49
+ toCloselyMatchObject(expected: any, roundToNearest?: number): void
50
+ }
51
+ }
52
+
53
+ vi.useFakeTimers()
46
54
 
47
55
  Object.assign(navigator, {
48
56
  clipboard: {
@@ -55,16 +63,6 @@ Object.assign(navigator, {
55
63
  // @ts-expect-error
56
64
  window.ClipboardItem = class {}
57
65
 
58
- declare global {
59
- // eslint-disable-next-line @typescript-eslint/no-namespace
60
- namespace jest {
61
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
62
- interface Matchers<R> {
63
- toCloselyMatchObject(value: any, precision?: number): void
64
- }
65
- }
66
- }
67
-
68
66
  export class TestEditor extends Editor {
69
67
  constructor(
70
68
  options: Partial<Omit<TLEditorOptions, 'store'>> = {},
@@ -82,8 +80,8 @@ export class TestEditor extends Editor {
82
80
  right: 1080,
83
81
  }
84
82
  // make the app full screen for the sake of the insets property
85
- jest.spyOn(document.body, 'scrollWidth', 'get').mockImplementation(() => bounds.width)
86
- jest.spyOn(document.body, 'scrollHeight', 'get').mockImplementation(() => bounds.height)
83
+ vi.spyOn(document.body, 'scrollWidth', 'get').mockImplementation(() => bounds.width)
84
+ vi.spyOn(document.body, 'scrollHeight', 'get').mockImplementation(() => bounds.height)
87
85
 
88
86
  elm.tabIndex = 0
89
87
  elm.getBoundingClientRect = () => bounds as DOMRect
@@ -272,12 +270,12 @@ export class TestEditor extends Editor {
272
270
  * methods, or call mockRestore() to restore the actual implementation (e.g.
273
271
  * _transformPointerDownSpy.mockRestore())
274
272
  */
275
- _transformPointerDownSpy = jest
273
+ _transformPointerDownSpy = vi
276
274
  .spyOn(this._clickManager, 'handlePointerEvent')
277
275
  .mockImplementation((info) => {
278
276
  return info
279
277
  })
280
- _transformPointerUpSpy = jest
278
+ _transformPointerUpSpy = vi
281
279
  .spyOn(this._clickManager, 'handlePointerEvent')
282
280
  .mockImplementation((info) => {
283
281
  return info
@@ -12,6 +12,7 @@ import {
12
12
  noop,
13
13
  } from '@tldraw/editor'
14
14
  import { StrictMode } from 'react'
15
+ import { vi } from 'vitest'
15
16
  import { defaultShapeUtils } from '../lib/defaultShapeUtils'
16
17
  import { defaultTools } from '../lib/defaultTools'
17
18
  import { GeoShapeUtil } from '../lib/shapes/geo/GeoShapeUtil'
@@ -89,7 +90,7 @@ describe('<TldrawEditor />', () => {
89
90
  })
90
91
 
91
92
  it('throws if the store has different shapes to the ones passed in', async () => {
92
- const spy = jest.spyOn(console, 'error').mockImplementation(noop)
93
+ const spy = vi.spyOn(console, 'error').mockImplementation(noop)
93
94
  // expect(() =>
94
95
  // render(
95
96
  // <TldrawEditor
@@ -129,7 +130,7 @@ describe('<TldrawEditor />', () => {
129
130
 
130
131
  it('Accepts fresh versions of store and calls `onMount` for each one', async () => {
131
132
  const initialStore = createTLStore({ shapeUtils: [], bindingUtils: [] })
132
- const onMount = jest.fn()
133
+ const onMount = vi.fn()
133
134
  const rendered = await renderTldrawComponent(
134
135
  <TldrawEditor
135
136
  initialState="select"
@@ -139,8 +140,8 @@ describe('<TldrawEditor />', () => {
139
140
  />,
140
141
  { waitForPatterns: false }
141
142
  )
142
- const initialEditor = onMount.mock.lastCall[0]
143
- jest.spyOn(initialEditor, 'dispose')
143
+ const initialEditor = onMount.mock.lastCall![0]
144
+ vi.spyOn(initialEditor, 'dispose')
144
145
  expect(initialEditor.store).toBe(initialStore)
145
146
  // re-render with the same store:
146
147
  rendered.rerender(
@@ -161,7 +162,7 @@ describe('<TldrawEditor />', () => {
161
162
  await rendered.findAllByTestId('canvas')
162
163
  expect(initialEditor.dispose).toHaveBeenCalledTimes(1)
163
164
  expect(onMount).toHaveBeenCalledTimes(2)
164
- expect(onMount.mock.lastCall[0].store).toBe(newStore)
165
+ expect(onMount.mock.lastCall![0].store).toBe(newStore)
165
166
  })
166
167
 
167
168
  it('Renders the canvas and shapes', async () => {
@@ -227,7 +228,7 @@ describe('<TldrawEditor />', () => {
227
228
 
228
229
  it('renders correctly in strict mode', async () => {
229
230
  const editorInstances = new Set<Editor>()
230
- const onMount = jest.fn((editor: Editor) => {
231
+ const onMount = vi.fn((editor: Editor) => {
231
232
  editorInstances.add(editor)
232
233
  })
233
234
  await renderTldrawComponent(
@@ -245,7 +246,7 @@ describe('<TldrawEditor />', () => {
245
246
 
246
247
  it('allows updating camera options without re-creating the editor', async () => {
247
248
  const editors: Editor[] = []
248
- const onMount = jest.fn((editor: Editor) => {
249
+ const onMount = vi.fn((editor: Editor) => {
249
250
  if (!editors.includes(editor)) editors.push(editor)
250
251
  })
251
252
 
@@ -361,7 +362,7 @@ describe('<TldrawEditor />', () => {
361
362
  })
362
363
 
363
364
  it('passes through the `assets` prop when creating its own in-memory store', async () => {
364
- const myUploadFn = jest.fn()
365
+ const myUploadFn = vi.fn()
365
366
  const assetStore: TLAssetStore = { upload: myUploadFn }
366
367
 
367
368
  const { editor } = await renderTldrawComponentWithEditor(
@@ -375,7 +376,7 @@ describe('<TldrawEditor />', () => {
375
376
  })
376
377
 
377
378
  it('passes through the `assets` prop when using `persistenceKey`', async () => {
378
- const myUploadFn = jest.fn()
379
+ const myUploadFn = vi.fn()
379
380
  const assetStore: TLAssetStore = { upload: myUploadFn }
380
381
 
381
382
  const { editor } = await renderTldrawComponentWithEditor(
@@ -394,7 +395,7 @@ describe('<TldrawEditor />', () => {
394
395
  })
395
396
 
396
397
  it('will not re-create the editor if re-rendered with identical options', async () => {
397
- const onMount = jest.fn()
398
+ const onMount = vi.fn()
398
399
 
399
400
  const renderer = await renderTldrawComponent(
400
401
  <TldrawEditor onMount={onMount} options={{ maxPages: 1 }} />,
@@ -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
@@ -7,7 +8,7 @@ const ids = {
7
8
  box1: createShapeId('box1'),
8
9
  }
9
10
 
10
- jest.useFakeTimers()
11
+ vi.useFakeTimers()
11
12
 
12
13
  beforeEach(() => {
13
14
  editor = new TestEditor()
@@ -44,7 +45,7 @@ describe('TLSelectTool.Zooming', () => {
44
45
  expect(editor.getViewportPageCenter()).toMatchObject({ x: 540, y: 360 })
45
46
  editor.click()
46
47
  editor.expectToBeIn('zoom.idle')
47
- jest.advanceTimersByTime(300)
48
+ vi.advanceTimersByTime(300)
48
49
  expect(editor.getZoomLevel()).toBe(2)
49
50
  })
50
51
 
@@ -55,7 +56,7 @@ describe('TLSelectTool.Zooming', () => {
55
56
  expect(editor.getViewportPageBounds()).toMatchObject({ x: -0, y: -0, w: 1080, h: 720 })
56
57
  expect(editor.getViewportPageCenter()).toMatchObject({ x: 540, y: 360 })
57
58
  editor.click()
58
- jest.advanceTimersByTime(300)
59
+ vi.advanceTimersByTime(300)
59
60
  expect(editor.getZoomLevel()).toBe(0.5)
60
61
  })
61
62
 
@@ -122,7 +123,7 @@ describe('TLSelectTool.Zooming', () => {
122
123
  editor.expectToBeIn('zoom.zoom_brushing')
123
124
  editor.pointerUp(change, change)
124
125
  editor.expectToBeIn('zoom.idle')
125
- jest.advanceTimersByTime(300)
126
+ vi.advanceTimersByTime(300)
126
127
  expect(editor.getZoomLevel()).toBe(2)
127
128
  expect(editor.getViewportPageBounds()).toMatchObject({
128
129
  x: change / 2,
@@ -156,7 +157,7 @@ describe('TLSelectTool.Zooming', () => {
156
157
  h: newBoundsHeight,
157
158
  })
158
159
  editor.pointerUp(newBoundsX + newBoundsWidth, newBoundsY + newBoundsHeight)
159
- jest.advanceTimersByTime(300)
160
+ vi.advanceTimersByTime(300)
160
161
  expect(editor.getZoomLevel()).toBeCloseTo(1.64)
161
162
  expect(editor.getViewportPageBounds()).toMatchInlineSnapshot(`
162
163
  Box {
@@ -195,7 +196,7 @@ describe('TLSelectTool.Zooming', () => {
195
196
  h: newBoundsHeight,
196
197
  })
197
198
  editor.pointerUp()
198
- jest.advanceTimersByTime(500)
199
+ vi.advanceTimersByTime(500)
199
200
  expect(editor.getZoomLevel()).toBeCloseTo(originalZoomLevel / 2)
200
201
  expect(editor.getViewportPageBounds()).toMatchObject({
201
202
  x: -440,
@@ -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[`Draws a bunch: draw shape 1`] = `
3
+ exports[`Draws a bunch > draw shape 1`] = `
4
4
  {
5
5
  "index": "a1",
6
6
  "isLocked": false,
@@ -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[`creating new shapes pencil lines will reisze the group appropriately if the new shape changes the group bounds: box shape after second resize 1`] = `
3
+ exports[`creating new shapes > pencil > lines > will reisze the group appropriately if the new shape changes the group bounds > box shape after second resize 1`] = `
4
4
  {
5
5
  "h": 40,
6
6
  "w": 40,
@@ -9,7 +9,7 @@ exports[`creating new shapes pencil lines will reisze the group appropriately if
9
9
  }
10
10
  `;
11
11
 
12
- exports[`creating new shapes pencil lines will reisze the group appropriately if the new shape changes the group bounds: group shape after second resize 1`] = `
12
+ exports[`creating new shapes > pencil > lines > will reisze the group appropriately if the new shape changes the group bounds > group shape after second resize 1`] = `
13
13
  {
14
14
  "h": 120,
15
15
  "w": 120,
@@ -18,7 +18,7 @@ exports[`creating new shapes pencil lines will reisze the group appropriately if
18
18
  }
19
19
  `;
20
20
 
21
- exports[`creating new shapes pencil lines will reisze the group appropriately if the new shape changes the group bounds: group with line shape 1`] = `
21
+ exports[`creating new shapes > pencil > lines > will reisze the group appropriately if the new shape changes the group bounds > group with line shape 1`] = `
22
22
  Box {
23
23
  "h": 110,
24
24
  "w": 110,
@@ -27,7 +27,7 @@ Box {
27
27
  }
28
28
  `;
29
29
 
30
- exports[`creating new shapes pencil lines works if the shape drawing begins outside of the current group bounds: box shape after resize 1`] = `
30
+ exports[`creating new shapes > pencil > lines > works if the shape drawing begins outside of the current group bounds > box shape after resize 1`] = `
31
31
  {
32
32
  "h": 50,
33
33
  "w": 50,
@@ -36,7 +36,7 @@ exports[`creating new shapes pencil lines works if the shape drawing begins outs
36
36
  }
37
37
  `;
38
38
 
39
- exports[`creating new shapes pencil lines works if the shape drawing begins outside of the current group bounds: group with line 1`] = `
39
+ exports[`creating new shapes > pencil > lines > works if the shape drawing begins outside of the current group bounds > group with line 1`] = `
40
40
  {
41
41
  "h": 200,
42
42
  "w": 200,
@@ -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[`When resizing a shape with children Resizes a rotated draw shape: draw shape after rotating 1`] = `
3
+ exports[`When resizing a shape with children > Resizes a rotated draw shape > draw shape after rotating 1`] = `
4
4
  {
5
5
  "id": "shape:lineA",
6
6
  "index": "a3",
@@ -1,4 +1,5 @@
1
1
  import { TLArrowShape, TLShapeId, Vec, 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
  import { TL } from './test-jsx'
@@ -208,7 +209,7 @@ describe('When binding an arrow to a shape', () => {
208
209
 
209
210
  editor.keyUp('Control')
210
211
  expect(bindings().end).toBeUndefined() // there's a short delay here, it should still be a point
211
- jest.advanceTimersByTime(1000) // once the timer runs out...
212
+ vi.advanceTimersByTime(1000) // once the timer runs out...
212
213
  expect(bindings().end).toBeDefined()
213
214
 
214
215
  editor.keyDown('Control') // no delay when pressing control again though
@@ -216,7 +217,7 @@ describe('When binding an arrow to a shape', () => {
216
217
 
217
218
  editor.keyUp('Control')
218
219
  editor.pointerUp()
219
- jest.advanceTimersByTime(1000) // once the timer runs out...
220
+ vi.advanceTimersByTime(1000) // once the timer runs out...
220
221
  expect(bindings().end).toBeUndefined() // still a point because interaction ended before timer ended
221
222
  })
222
223
 
@@ -237,7 +238,7 @@ describe('When binding an arrow to a shape', () => {
237
238
  // Releasing ctrl should restore binding (after timer)
238
239
  editor.keyUp('Control')
239
240
  expect(bindings().end).toBeUndefined() // Still no binding immediately
240
- jest.advanceTimersByTime(1000)
241
+ vi.advanceTimersByTime(1000)
241
242
  expect(bindings().end).toBeDefined()
242
243
  })
243
244
  })
@@ -409,7 +410,7 @@ describe('When starting an arrow inside of multiple shapes', () => {
409
410
  editor.pointerDown(20, 20) // upper left
410
411
  expect(editor.getCurrentPageShapes().length).toBe(1)
411
412
  expect(arrow()).toBe(null)
412
- jest.advanceTimersByTime(1000)
413
+ vi.advanceTimersByTime(1000)
413
414
  editor.pointerMove(25, 20)
414
415
  expect(editor.getCurrentPageShapes().length).toBe(2)
415
416
  expect(arrow()).toMatchObject({ x: 20, y: 20 })
@@ -11,6 +11,7 @@ import {
11
11
  createBindingId,
12
12
  createShapeId,
13
13
  } from '@tldraw/editor'
14
+ import { vi } from 'vitest'
14
15
  import { TestEditor } from './TestEditor'
15
16
  import { TL } from './test-jsx'
16
17
 
@@ -23,37 +24,19 @@ const ids = {
23
24
  box4: createShapeId('box4'),
24
25
  }
25
26
 
26
- const mockOnOperationComplete = jest.fn() as jest.Mock<void, []>
27
- const mockOnBeforeDelete = jest.fn() as jest.Mock<void, [BindingOnDeleteOptions<TLUnknownBinding>]>
28
- const mockOnAfterDelete = jest.fn() as jest.Mock<void, [BindingOnDeleteOptions<TLUnknownBinding>]>
29
- const mockOnBeforeFromShapeDelete = jest.fn() as jest.Mock<
30
- void,
31
- [BindingOnShapeDeleteOptions<TLUnknownBinding>]
32
- >
33
- const mockOnBeforeToShapeDelete = jest.fn() as jest.Mock<
34
- void,
35
- [BindingOnShapeDeleteOptions<TLUnknownBinding>]
36
- >
37
- const mockOnBeforeFromShapeIsolate = jest.fn() as jest.Mock<
38
- void,
39
- [BindingOnShapeIsolateOptions<TLUnknownBinding>]
40
- >
41
- const mockOnBeforeToShapeIsolate = jest.fn() as jest.Mock<
42
- void,
43
- [BindingOnShapeIsolateOptions<TLUnknownBinding>]
44
- >
45
- const mockOnBeforeCreate = jest.fn() as jest.Mock<void, [BindingOnCreateOptions<TLUnknownBinding>]>
46
- const mockOnAfterCreate = jest.fn() as jest.Mock<void, [BindingOnCreateOptions<TLUnknownBinding>]>
47
- const mockOnBeforeChange = jest.fn() as jest.Mock<void, [BindingOnChangeOptions<TLUnknownBinding>]>
48
- const mockOnAfterChange = jest.fn() as jest.Mock<void, [BindingOnChangeOptions<TLUnknownBinding>]>
49
- const mockOnAfterChangeFromShape = jest.fn() as jest.Mock<
50
- void,
51
- [BindingOnShapeChangeOptions<TLUnknownBinding>]
52
- >
53
- const mockOnAfterChangeToShape = jest.fn() as jest.Mock<
54
- void,
55
- [BindingOnShapeChangeOptions<TLUnknownBinding>]
56
- >
27
+ const mockOnOperationComplete = vi.fn()
28
+ const mockOnBeforeDelete = vi.fn()
29
+ const mockOnAfterDelete = vi.fn()
30
+ const mockOnBeforeFromShapeDelete = vi.fn()
31
+ const mockOnBeforeToShapeDelete = vi.fn()
32
+ const mockOnBeforeFromShapeIsolate = vi.fn()
33
+ const mockOnBeforeToShapeIsolate = vi.fn()
34
+ const mockOnBeforeCreate = vi.fn()
35
+ const mockOnAfterCreate = vi.fn()
36
+ const mockOnBeforeChange = vi.fn()
37
+ const mockOnAfterChange = vi.fn()
38
+ const mockOnAfterChangeFromShape = vi.fn()
39
+ const mockOnAfterChangeToShape = vi.fn()
57
40
 
58
41
  const calls: string[] = []
59
42
 
@@ -273,9 +256,11 @@ test('copying the to shape on its own does trigger the unbind operation', () =>
273
256
  })
274
257
 
275
258
  test('cascading deletes in beforeFromShapeDelete are handled correctly', () => {
276
- mockOnBeforeFromShapeDelete.mockImplementation((options) => {
277
- editor.deleteShape(options.binding.toId)
278
- })
259
+ mockOnBeforeFromShapeDelete.mockImplementation(
260
+ (options: BindingOnShapeDeleteOptions<TLUnknownBinding>) => {
261
+ editor.deleteShape(options.binding.toId)
262
+ }
263
+ )
279
264
 
280
265
  bindShapes(ids.box1, ids.box2)
281
266
  bindShapes(ids.box2, ids.box3)
@@ -316,9 +301,11 @@ test('cascading deletes in beforeFromShapeDelete are handled correctly', () => {
316
301
  })
317
302
 
318
303
  test('cascading deletes in beforeToShapeDelete are handled correctly', () => {
319
- mockOnBeforeToShapeDelete.mockImplementation((options) => {
320
- editor.deleteShape(options.binding.fromId)
321
- })
304
+ mockOnBeforeToShapeDelete.mockImplementation(
305
+ (options: BindingOnShapeDeleteOptions<TLUnknownBinding>) => {
306
+ editor.deleteShape(options.binding.fromId)
307
+ }
308
+ )
322
309
 
323
310
  bindShapes(ids.box1, ids.box2)
324
311
  bindShapes(ids.box2, ids.box3)
@@ -1,8 +1,5 @@
1
1
  import { TLBookmarkShape, createShapeId } from '@tldraw/editor'
2
- import {
3
- BookmarkShapeUtil,
4
- getHumanReadableAddress,
5
- } from '../lib/shapes/bookmark/BookmarkShapeUtil'
2
+ import { getHumanReadableAddress } from '../lib/shapes/bookmark/BookmarkShapeUtil'
6
3
  import { TestEditor } from './TestEditor'
7
4
 
8
5
  let editor: TestEditor
@@ -14,10 +11,6 @@ afterEach(() => {
14
11
  editor?.dispose()
15
12
  })
16
13
 
17
- describe(BookmarkShapeUtil, () => {
18
- return
19
- })
20
-
21
14
  describe('The URL formatter', () => {
22
15
  it('Formats URLs as human-readable', () => {
23
16
  const ids = {
@@ -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": {},