tldraw 5.2.0-next.ee0fa4d6244f → 5.2.0

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 (474) hide show
  1. package/DOCS.md +20294 -0
  2. package/README.md +13 -1
  3. package/RELEASE_NOTES.md +2908 -0
  4. package/dist-cjs/index.d.ts +110 -25
  5. package/dist-cjs/index.js +3 -3
  6. package/dist-cjs/index.js.map +2 -2
  7. package/dist-cjs/lib/TldrawImage.js +0 -1
  8. package/dist-cjs/lib/TldrawImage.js.map +2 -2
  9. package/dist-cjs/lib/bindings/arrow/ArrowBindingUtil.js +2 -1
  10. package/dist-cjs/lib/bindings/arrow/ArrowBindingUtil.js.map +2 -2
  11. package/dist-cjs/lib/defaultEmbedDefinitions.js +3 -2
  12. package/dist-cjs/lib/defaultEmbedDefinitions.js.map +2 -2
  13. package/dist-cjs/lib/defaultOverlayUtils.js +11 -11
  14. package/dist-cjs/lib/defaultOverlayUtils.js.map +2 -2
  15. package/dist-cjs/lib/overlays/SelectionForegroundOverlayUtil.js +76 -64
  16. package/dist-cjs/lib/overlays/SelectionForegroundOverlayUtil.js.map +2 -2
  17. package/dist-cjs/lib/overlays/ShapeHandleOverlayUtil.js +1 -1
  18. package/dist-cjs/lib/overlays/ShapeHandleOverlayUtil.js.map +2 -2
  19. package/dist-cjs/lib/overlays/ShapeIndicatorOverlayUtil.js +107 -0
  20. package/dist-cjs/lib/overlays/ShapeIndicatorOverlayUtil.js.map +7 -0
  21. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +3 -0
  22. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
  23. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +12 -3
  24. package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
  25. package/dist-cjs/lib/shapes/bookmark/bookmarks.js +54 -6
  26. package/dist-cjs/lib/shapes/bookmark/bookmarks.js.map +2 -2
  27. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +2 -1
  28. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  29. package/dist-cjs/lib/shapes/draw/getPath.js +1 -1
  30. package/dist-cjs/lib/shapes/draw/getPath.js.map +2 -2
  31. package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js +45 -47
  32. package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +2 -2
  33. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +2 -1
  34. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +2 -2
  35. package/dist-cjs/lib/shapes/frame/FrameShapeTool.js +23 -18
  36. package/dist-cjs/lib/shapes/frame/FrameShapeTool.js.map +2 -2
  37. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +1 -1
  38. package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
  39. package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js +3 -0
  40. package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js.map +2 -2
  41. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +11 -7
  42. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  43. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js +3 -11
  44. package/dist-cjs/lib/shapes/image/ImageShapeUtil.js.map +2 -2
  45. package/dist-cjs/lib/shapes/line/toolStates/Pointing.js +5 -1
  46. package/dist-cjs/lib/shapes/line/toolStates/Pointing.js.map +2 -2
  47. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +31 -41
  48. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  49. package/dist-cjs/lib/shapes/note/noteHelpers.js +1 -1
  50. package/dist-cjs/lib/shapes/note/noteHelpers.js.map +2 -2
  51. package/dist-cjs/lib/shapes/note/toolStates/Pointing.js +28 -6
  52. package/dist-cjs/lib/shapes/note/toolStates/Pointing.js.map +2 -2
  53. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +3 -2
  54. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
  55. package/dist-cjs/lib/shapes/shared/RichTextLabel.js +3 -3
  56. package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +2 -2
  57. package/dist-cjs/lib/shapes/shared/defaultStyleDefs.js +17 -3
  58. package/dist-cjs/lib/shapes/shared/defaultStyleDefs.js.map +2 -2
  59. package/dist-cjs/lib/shapes/shared/freehand/core.js +424 -0
  60. package/dist-cjs/lib/shapes/shared/freehand/core.js.map +7 -0
  61. package/dist-cjs/lib/shapes/shared/freehand/fmt.js +106 -0
  62. package/dist-cjs/lib/shapes/shared/freehand/fmt.js.map +7 -0
  63. package/dist-cjs/lib/shapes/shared/freehand/getStroke.js +6 -6
  64. package/dist-cjs/lib/shapes/shared/freehand/getStroke.js.map +2 -2
  65. package/dist-cjs/lib/shapes/shared/freehand/getStrokeOutlinePoints.js +320 -86
  66. package/dist-cjs/lib/shapes/shared/freehand/getStrokeOutlinePoints.js.map +3 -3
  67. package/dist-cjs/lib/shapes/shared/freehand/getStrokePoints.js +20 -96
  68. package/dist-cjs/lib/shapes/shared/freehand/getStrokePoints.js.map +3 -3
  69. package/dist-cjs/lib/shapes/shared/freehand/svg.js +55 -19
  70. package/dist-cjs/lib/shapes/shared/freehand/svg.js.map +2 -2
  71. package/dist-cjs/lib/shapes/shared/freehand/svgInk.js +189 -97
  72. package/dist-cjs/lib/shapes/shared/freehand/svgInk.js.map +3 -3
  73. package/dist-cjs/lib/shapes/shared/freehand/types.js.map +1 -1
  74. package/dist-cjs/lib/shapes/shared/interpolate-props.js +6 -2
  75. package/dist-cjs/lib/shapes/shared/interpolate-props.js.map +2 -2
  76. package/dist-cjs/lib/shapes/text/toolStates/Pointing.js +3 -0
  77. package/dist-cjs/lib/shapes/text/toolStates/Pointing.js.map +2 -2
  78. package/dist-cjs/lib/tools/HandTool/HandTool.js +14 -25
  79. package/dist-cjs/lib/tools/HandTool/HandTool.js.map +2 -2
  80. package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js +10 -1
  81. package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js.map +2 -2
  82. package/dist-cjs/lib/tools/HandTool/childStates/OneFingerZooming.js +84 -0
  83. package/dist-cjs/lib/tools/HandTool/childStates/OneFingerZooming.js.map +7 -0
  84. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/Crop.js +3 -1
  85. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/Crop.js.map +2 -2
  86. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js +1 -1
  87. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js.map +2 -2
  88. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js +7 -0
  89. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js.map +2 -2
  90. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js +7 -0
  91. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js.map +2 -2
  92. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +13 -1
  93. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
  94. package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js +7 -0
  95. package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js.map +2 -2
  96. package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js +7 -0
  97. package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js.map +2 -2
  98. package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js +7 -0
  99. package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js.map +2 -2
  100. package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js +7 -0
  101. package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js.map +2 -2
  102. package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js +4 -1
  103. package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js.map +2 -2
  104. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +14 -1
  105. package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
  106. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +107 -46
  107. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
  108. package/dist-cjs/lib/ui/TldrawUi.js +4 -3
  109. package/dist-cjs/lib/ui/TldrawUi.js.map +2 -2
  110. package/dist-cjs/lib/ui/components/A11y.js +2 -0
  111. package/dist-cjs/lib/ui/components/A11y.js.map +2 -2
  112. package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js +14 -1
  113. package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js.map +2 -2
  114. package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenuContent.js +0 -6
  115. package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenuContent.js.map +2 -2
  116. package/dist-cjs/lib/ui/components/DefaultFollowingIndicator.js.map +2 -2
  117. package/dist-cjs/lib/ui/components/Dialogs.js +17 -37
  118. package/dist-cjs/lib/ui/components/Dialogs.js.map +2 -2
  119. package/dist-cjs/lib/ui/components/HelperButtons/BackToContent.js +19 -4
  120. package/dist-cjs/lib/ui/components/HelperButtons/BackToContent.js.map +2 -2
  121. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js +12 -2
  122. package/dist-cjs/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.js.map +2 -2
  123. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +47 -70
  124. package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js.map +2 -2
  125. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js +25 -46
  126. package/dist-cjs/lib/ui/components/Minimap/MinimapManager.js.map +2 -2
  127. package/dist-cjs/lib/ui/components/SharePanel/DefaultPeopleMenuAvatar.js.map +2 -2
  128. package/dist-cjs/lib/ui/components/SharePanel/DefaultPeopleMenuContent.js.map +2 -2
  129. package/dist-cjs/lib/ui/components/SharePanel/DefaultPeopleMenuFacePile.js.map +2 -2
  130. package/dist-cjs/lib/ui/components/SharePanel/DefaultPeopleMenuItem.js +1 -1
  131. package/dist-cjs/lib/ui/components/SharePanel/DefaultPeopleMenuItem.js.map +2 -2
  132. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js +1 -0
  133. package/dist-cjs/lib/ui/components/StylePanel/StylePanelButtonPicker.js.map +2 -2
  134. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js +2 -1
  135. package/dist-cjs/lib/ui/components/StylePanel/StylePanelDropdownPicker.js.map +2 -2
  136. package/dist-cjs/lib/ui/components/menu-items.js +7 -0
  137. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  138. package/dist-cjs/lib/ui/components/primitives/TldrawUiDropdownMenu.js +2 -1
  139. package/dist-cjs/lib/ui/components/primitives/TldrawUiDropdownMenu.js.map +2 -2
  140. package/dist-cjs/lib/ui/components/primitives/TldrawUiIcon.js +14 -3
  141. package/dist-cjs/lib/ui/components/primitives/TldrawUiIcon.js.map +2 -2
  142. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js +2 -0
  143. package/dist-cjs/lib/ui/components/primitives/TldrawUiInput.js.map +2 -2
  144. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js +2 -0
  145. package/dist-cjs/lib/ui/components/primitives/TldrawUiPopover.js.map +2 -2
  146. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js +0 -2
  147. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.js.map +2 -2
  148. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuSubmenu.js +1 -2
  149. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuSubmenu.js.map +2 -2
  150. package/dist-cjs/lib/ui/context/actions.js +70 -1
  151. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  152. package/dist-cjs/lib/ui/context/asset-urls.js +5 -8
  153. package/dist-cjs/lib/ui/context/asset-urls.js.map +2 -2
  154. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  155. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +13 -0
  156. package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +2 -2
  157. package/dist-cjs/lib/ui/hooks/useTools.js +1 -1
  158. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  159. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  160. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +2 -0
  161. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  162. package/dist-cjs/lib/ui/version.js +3 -3
  163. package/dist-cjs/lib/ui/version.js.map +1 -1
  164. package/dist-cjs/lib/utils/embeds/embeds.js +4 -4
  165. package/dist-cjs/lib/utils/embeds/embeds.js.map +2 -2
  166. package/dist-cjs/lib/utils/test-helpers.js +2 -2
  167. package/dist-cjs/lib/utils/test-helpers.js.map +2 -2
  168. package/dist-cjs/lib/utils/text/richText.js +3 -1
  169. package/dist-cjs/lib/utils/text/richText.js.map +2 -2
  170. package/dist-esm/index.d.mts +110 -25
  171. package/dist-esm/index.mjs +5 -3
  172. package/dist-esm/index.mjs.map +2 -2
  173. package/dist-esm/lib/TldrawImage.mjs +0 -1
  174. package/dist-esm/lib/TldrawImage.mjs.map +2 -2
  175. package/dist-esm/lib/bindings/arrow/ArrowBindingUtil.mjs +2 -1
  176. package/dist-esm/lib/bindings/arrow/ArrowBindingUtil.mjs.map +2 -2
  177. package/dist-esm/lib/defaultEmbedDefinitions.mjs +3 -2
  178. package/dist-esm/lib/defaultEmbedDefinitions.mjs.map +2 -2
  179. package/dist-esm/lib/defaultOverlayUtils.mjs +11 -11
  180. package/dist-esm/lib/defaultOverlayUtils.mjs.map +2 -2
  181. package/dist-esm/lib/overlays/SelectionForegroundOverlayUtil.mjs +77 -65
  182. package/dist-esm/lib/overlays/SelectionForegroundOverlayUtil.mjs.map +2 -2
  183. package/dist-esm/lib/overlays/ShapeHandleOverlayUtil.mjs +1 -1
  184. package/dist-esm/lib/overlays/ShapeHandleOverlayUtil.mjs.map +2 -2
  185. package/dist-esm/lib/overlays/ShapeIndicatorOverlayUtil.mjs +87 -0
  186. package/dist-esm/lib/overlays/ShapeIndicatorOverlayUtil.mjs.map +7 -0
  187. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +9 -1
  188. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
  189. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +15 -3
  190. package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
  191. package/dist-esm/lib/shapes/bookmark/bookmarks.mjs +54 -6
  192. package/dist-esm/lib/shapes/bookmark/bookmarks.mjs.map +2 -2
  193. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +3 -1
  194. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  195. package/dist-esm/lib/shapes/draw/getPath.mjs +1 -1
  196. package/dist-esm/lib/shapes/draw/getPath.mjs.map +2 -2
  197. package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs +46 -47
  198. package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +2 -2
  199. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +2 -1
  200. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +2 -2
  201. package/dist-esm/lib/shapes/frame/FrameShapeTool.mjs +23 -18
  202. package/dist-esm/lib/shapes/frame/FrameShapeTool.mjs.map +2 -2
  203. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +2 -1
  204. package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
  205. package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs +4 -0
  206. package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs.map +2 -2
  207. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +12 -7
  208. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  209. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs +3 -11
  210. package/dist-esm/lib/shapes/image/ImageShapeUtil.mjs.map +2 -2
  211. package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs +6 -1
  212. package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs.map +2 -2
  213. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +32 -42
  214. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  215. package/dist-esm/lib/shapes/note/noteHelpers.mjs +1 -1
  216. package/dist-esm/lib/shapes/note/noteHelpers.mjs.map +2 -2
  217. package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs +29 -6
  218. package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs.map +2 -2
  219. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +3 -2
  220. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  221. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +4 -3
  222. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
  223. package/dist-esm/lib/shapes/shared/defaultStyleDefs.mjs +17 -3
  224. package/dist-esm/lib/shapes/shared/defaultStyleDefs.mjs.map +2 -2
  225. package/dist-esm/lib/shapes/shared/freehand/core.mjs +404 -0
  226. package/dist-esm/lib/shapes/shared/freehand/core.mjs.map +7 -0
  227. package/dist-esm/lib/shapes/shared/freehand/fmt.mjs +86 -0
  228. package/dist-esm/lib/shapes/shared/freehand/fmt.mjs.map +7 -0
  229. package/dist-esm/lib/shapes/shared/freehand/getStroke.mjs +7 -7
  230. package/dist-esm/lib/shapes/shared/freehand/getStroke.mjs.map +2 -2
  231. package/dist-esm/lib/shapes/shared/freehand/getStrokeOutlinePoints.mjs +332 -86
  232. package/dist-esm/lib/shapes/shared/freehand/getStrokeOutlinePoints.mjs.map +3 -3
  233. package/dist-esm/lib/shapes/shared/freehand/getStrokePoints.mjs +31 -96
  234. package/dist-esm/lib/shapes/shared/freehand/getStrokePoints.mjs.map +3 -3
  235. package/dist-esm/lib/shapes/shared/freehand/svg.mjs +55 -19
  236. package/dist-esm/lib/shapes/shared/freehand/svg.mjs.map +2 -2
  237. package/dist-esm/lib/shapes/shared/freehand/svgInk.mjs +214 -99
  238. package/dist-esm/lib/shapes/shared/freehand/svgInk.mjs.map +3 -3
  239. package/dist-esm/lib/shapes/shared/interpolate-props.mjs +6 -2
  240. package/dist-esm/lib/shapes/shared/interpolate-props.mjs.map +2 -2
  241. package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs +4 -0
  242. package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs.map +2 -2
  243. package/dist-esm/lib/tools/HandTool/HandTool.mjs +14 -25
  244. package/dist-esm/lib/tools/HandTool/HandTool.mjs.map +2 -2
  245. package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs +10 -1
  246. package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs.map +2 -2
  247. package/dist-esm/lib/tools/HandTool/childStates/OneFingerZooming.mjs +64 -0
  248. package/dist-esm/lib/tools/HandTool/childStates/OneFingerZooming.mjs.map +7 -0
  249. package/dist-esm/lib/tools/SelectTool/childStates/Crop/Crop.mjs +3 -1
  250. package/dist-esm/lib/tools/SelectTool/childStates/Crop/Crop.mjs.map +2 -2
  251. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs +1 -1
  252. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs.map +2 -2
  253. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs +7 -0
  254. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs.map +2 -2
  255. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs +7 -0
  256. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs.map +2 -2
  257. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +13 -1
  258. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
  259. package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs +7 -0
  260. package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs.map +2 -2
  261. package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs +11 -1
  262. package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs.map +2 -2
  263. package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs +10 -1
  264. package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs.map +2 -2
  265. package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs +7 -0
  266. package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs.map +2 -2
  267. package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs +4 -1
  268. package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs.map +2 -2
  269. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +14 -1
  270. package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
  271. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +108 -46
  272. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
  273. package/dist-esm/lib/ui/TldrawUi.mjs +4 -3
  274. package/dist-esm/lib/ui/TldrawUi.mjs.map +2 -2
  275. package/dist-esm/lib/ui/components/A11y.mjs +2 -0
  276. package/dist-esm/lib/ui/components/A11y.mjs.map +2 -2
  277. package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs +21 -2
  278. package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs.map +2 -2
  279. package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenuContent.mjs +0 -6
  280. package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenuContent.mjs.map +2 -2
  281. package/dist-esm/lib/ui/components/DefaultFollowingIndicator.mjs.map +2 -2
  282. package/dist-esm/lib/ui/components/Dialogs.mjs +19 -39
  283. package/dist-esm/lib/ui/components/Dialogs.mjs.map +2 -2
  284. package/dist-esm/lib/ui/components/HelperButtons/BackToContent.mjs +20 -5
  285. package/dist-esm/lib/ui/components/HelperButtons/BackToContent.mjs.map +2 -2
  286. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs +12 -2
  287. package/dist-esm/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.mjs.map +2 -2
  288. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs +47 -70
  289. package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs.map +2 -2
  290. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs +25 -46
  291. package/dist-esm/lib/ui/components/Minimap/MinimapManager.mjs.map +2 -2
  292. package/dist-esm/lib/ui/components/SharePanel/DefaultPeopleMenuAvatar.mjs.map +2 -2
  293. package/dist-esm/lib/ui/components/SharePanel/DefaultPeopleMenuContent.mjs.map +2 -2
  294. package/dist-esm/lib/ui/components/SharePanel/DefaultPeopleMenuFacePile.mjs.map +2 -2
  295. package/dist-esm/lib/ui/components/SharePanel/DefaultPeopleMenuItem.mjs +1 -1
  296. package/dist-esm/lib/ui/components/SharePanel/DefaultPeopleMenuItem.mjs.map +2 -2
  297. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs +1 -0
  298. package/dist-esm/lib/ui/components/StylePanel/StylePanelButtonPicker.mjs.map +2 -2
  299. package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs +2 -1
  300. package/dist-esm/lib/ui/components/StylePanel/StylePanelDropdownPicker.mjs.map +2 -2
  301. package/dist-esm/lib/ui/components/menu-items.mjs +7 -0
  302. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  303. package/dist-esm/lib/ui/components/primitives/TldrawUiDropdownMenu.mjs +2 -1
  304. package/dist-esm/lib/ui/components/primitives/TldrawUiDropdownMenu.mjs.map +2 -2
  305. package/dist-esm/lib/ui/components/primitives/TldrawUiIcon.mjs +14 -3
  306. package/dist-esm/lib/ui/components/primitives/TldrawUiIcon.mjs.map +2 -2
  307. package/dist-esm/lib/ui/components/primitives/TldrawUiInput.mjs +2 -0
  308. package/dist-esm/lib/ui/components/primitives/TldrawUiInput.mjs.map +2 -2
  309. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs +2 -0
  310. package/dist-esm/lib/ui/components/primitives/TldrawUiPopover.mjs.map +2 -2
  311. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs +0 -2
  312. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.mjs.map +2 -2
  313. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuSubmenu.mjs +1 -2
  314. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuSubmenu.mjs.map +2 -2
  315. package/dist-esm/lib/ui/context/actions.mjs +71 -1
  316. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  317. package/dist-esm/lib/ui/context/asset-urls.mjs +5 -8
  318. package/dist-esm/lib/ui/context/asset-urls.mjs.map +2 -2
  319. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  320. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +13 -0
  321. package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +2 -2
  322. package/dist-esm/lib/ui/hooks/useTools.mjs +1 -1
  323. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  324. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +2 -0
  325. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  326. package/dist-esm/lib/ui/version.mjs +3 -3
  327. package/dist-esm/lib/ui/version.mjs.map +1 -1
  328. package/dist-esm/lib/utils/embeds/embeds.mjs +4 -4
  329. package/dist-esm/lib/utils/embeds/embeds.mjs.map +2 -2
  330. package/dist-esm/lib/utils/test-helpers.mjs +2 -2
  331. package/dist-esm/lib/utils/test-helpers.mjs.map +2 -2
  332. package/dist-esm/lib/utils/text/richText.mjs +3 -1
  333. package/dist-esm/lib/utils/text/richText.mjs.map +2 -2
  334. package/package.json +11 -6
  335. package/src/index.ts +6 -1
  336. package/src/lib/TldrawImage.tsx +2 -2
  337. package/src/lib/bindings/arrow/ArrowBindingUtil.ts +5 -1
  338. package/src/lib/defaultEmbedDefinitions.ts +28 -6
  339. package/src/lib/defaultOverlayUtils.ts +11 -11
  340. package/src/lib/overlays/SelectionForegroundOverlayUtil.ts +91 -72
  341. package/src/lib/overlays/ShapeHandleOverlayUtil.ts +3 -1
  342. package/src/lib/overlays/ShapeIndicatorOverlayUtil.ts +133 -0
  343. package/src/lib/shapes/arrow/toolStates/Pointing.tsx +11 -1
  344. package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +16 -3
  345. package/src/lib/shapes/bookmark/bookmarks.ts +105 -15
  346. package/src/lib/shapes/draw/DrawShapeUtil.tsx +7 -5
  347. package/src/lib/shapes/draw/getPath.ts +1 -1
  348. package/src/lib/shapes/draw/toolStates/Drawing.ts +55 -48
  349. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +14 -4
  350. package/src/lib/shapes/frame/FrameShapeTool.ts +35 -24
  351. package/src/lib/shapes/geo/GeoShapeUtil.test.tsx +46 -0
  352. package/src/lib/shapes/geo/GeoShapeUtil.tsx +2 -1
  353. package/src/lib/shapes/geo/toolStates/Pointing.ts +5 -0
  354. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +14 -11
  355. package/src/lib/shapes/image/ImageShapeUtil.tsx +7 -11
  356. package/src/lib/shapes/line/LineShapeTool.test.ts +41 -0
  357. package/src/lib/shapes/line/toolStates/Pointing.ts +12 -2
  358. package/src/lib/shapes/note/NoteShapeUtil.tsx +36 -51
  359. package/src/lib/shapes/note/noteCloning.test.ts +5 -5
  360. package/src/lib/shapes/note/noteHelpers.ts +1 -1
  361. package/src/lib/shapes/note/toolStates/Pointing.ts +40 -7
  362. package/src/lib/shapes/shared/PlainTextLabel.tsx +3 -3
  363. package/src/lib/shapes/shared/RichTextLabel.tsx +4 -3
  364. package/src/lib/shapes/shared/defaultStyleDefs.tsx +25 -3
  365. package/src/lib/shapes/shared/freehand/core.ts +547 -0
  366. package/src/lib/shapes/shared/freehand/fmt.ts +106 -0
  367. package/src/lib/shapes/shared/freehand/getStroke.ts +7 -7
  368. package/src/lib/shapes/shared/freehand/getStrokeOutlinePoints.ts +451 -139
  369. package/src/lib/shapes/shared/freehand/getStrokePoints.ts +33 -153
  370. package/src/lib/shapes/shared/freehand/svg.ts +72 -23
  371. package/src/lib/shapes/shared/freehand/svgInk.ts +281 -136
  372. package/src/lib/shapes/shared/freehand/types.ts +0 -1
  373. package/src/lib/shapes/shared/interpolate-props.ts +6 -2
  374. package/src/lib/shapes/text/toolStates/Pointing.ts +5 -0
  375. package/src/lib/tools/HandTool/HandTool.ts +17 -28
  376. package/src/lib/tools/HandTool/childStates/Dragging.ts +17 -1
  377. package/src/lib/tools/HandTool/childStates/OneFingerZooming.ts +79 -0
  378. package/src/lib/tools/SelectTool/childStates/Crop/Crop.ts +3 -1
  379. package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +2 -2
  380. package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.ts +15 -1
  381. package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.ts +15 -1
  382. package/src/lib/tools/SelectTool/childStates/Idle.ts +17 -3
  383. package/src/lib/tools/SelectTool/childStates/PointingCanvas.ts +15 -1
  384. package/src/lib/tools/SelectTool/childStates/PointingHandle.ts +23 -1
  385. package/src/lib/tools/SelectTool/childStates/PointingResizeHandle.ts +21 -1
  386. package/src/lib/tools/SelectTool/childStates/PointingRotateHandle.ts +15 -1
  387. package/src/lib/tools/SelectTool/childStates/PointingSelection.ts +11 -2
  388. package/src/lib/tools/SelectTool/childStates/PointingShape.ts +26 -2
  389. package/src/lib/tools/SelectTool/childStates/Resizing.ts +137 -49
  390. package/src/lib/ui/TldrawUi.tsx +3 -3
  391. package/src/lib/ui/components/A11y.tsx +2 -0
  392. package/src/lib/ui/components/ContextMenu/DefaultContextMenu.tsx +32 -2
  393. package/src/lib/ui/components/ContextMenu/DefaultContextMenuContent.tsx +5 -6
  394. package/src/lib/ui/components/DefaultFollowingIndicator.tsx +2 -2
  395. package/src/lib/ui/components/Dialogs.tsx +20 -23
  396. package/src/lib/ui/components/HelperButtons/BackToContent.tsx +32 -4
  397. package/src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx +10 -0
  398. package/src/lib/ui/components/Minimap/DefaultMinimap.tsx +60 -74
  399. package/src/lib/ui/components/Minimap/MinimapManager.ts +35 -57
  400. package/src/lib/ui/components/SharePanel/DefaultPeopleMenuAvatar.tsx +2 -2
  401. package/src/lib/ui/components/SharePanel/DefaultPeopleMenuContent.tsx +2 -1
  402. package/src/lib/ui/components/SharePanel/DefaultPeopleMenuFacePile.tsx +2 -1
  403. package/src/lib/ui/components/SharePanel/DefaultPeopleMenuItem.tsx +3 -3
  404. package/src/lib/ui/components/StylePanel/StylePanelButtonPicker.tsx +5 -0
  405. package/src/lib/ui/components/StylePanel/StylePanelDropdownPicker.tsx +8 -1
  406. package/src/lib/ui/components/menu-items.tsx +9 -0
  407. package/src/lib/ui/components/primitives/TldrawUiDropdownMenu.tsx +3 -1
  408. package/src/lib/ui/components/primitives/TldrawUiIcon.tsx +15 -3
  409. package/src/lib/ui/components/primitives/TldrawUiInput.tsx +4 -0
  410. package/src/lib/ui/components/primitives/TldrawUiPopover.tsx +7 -0
  411. package/src/lib/ui/components/primitives/menus/TldrawUiMenuCheckboxItem.tsx +0 -2
  412. package/src/lib/ui/components/primitives/menus/TldrawUiMenuSubmenu.tsx +0 -1
  413. package/src/lib/ui/context/actions.tsx +88 -1
  414. package/src/lib/ui/context/asset-urls.tsx +9 -8
  415. package/src/lib/ui/context/events.tsx +2 -0
  416. package/src/lib/ui/hooks/useKeyboardShortcuts.ts +45 -7
  417. package/src/lib/ui/hooks/useTools.tsx +7 -1
  418. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +2 -0
  419. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +2 -0
  420. package/src/lib/ui/version.ts +3 -3
  421. package/src/lib/ui.css +20 -9
  422. package/src/lib/utils/embeds/embeds.test.ts +14 -12
  423. package/src/lib/utils/embeds/embeds.ts +10 -4
  424. package/src/lib/utils/test-helpers.ts +3 -3
  425. package/src/lib/utils/text/richText.test.ts +36 -0
  426. package/src/lib/utils/text/richText.ts +9 -1
  427. package/src/test/ClickManager.test.ts +33 -28
  428. package/src/test/HandTool.test.ts +98 -34
  429. package/src/test/ImageShapeUtil.test.ts +88 -0
  430. package/src/test/SelectTool.test.ts +102 -1
  431. package/src/test/__snapshots__/drawing.test.ts.snap +2 -1
  432. package/src/test/attribution.test.ts +40 -29
  433. package/src/test/bookmark-shapes.test.ts +256 -28
  434. package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +4 -6
  435. package/src/test/commands/clipboardCallbacks.test.ts +3 -1
  436. package/src/test/commands/getSvgString.test.ts +30 -0
  437. package/src/test/commands/penmode.test.ts +97 -1
  438. package/src/test/commands/setCamera.test.ts +109 -1
  439. package/src/test/cropping.test.ts +7 -0
  440. package/src/test/dragFromToolbar.test.ts +67 -0
  441. package/src/test/drawing.test.ts +48 -7
  442. package/src/test/frames.test.ts +72 -0
  443. package/src/test/freehand/corpus/presets.ts +71 -0
  444. package/src/test/freehand/corpus/real.ts +370 -0
  445. package/src/test/freehand/corpus/strokes.ts +50 -0
  446. package/src/test/freehand/svg.test.ts +20 -0
  447. package/src/test/freehand/wellformed.test.ts +30 -0
  448. package/src/test/long-press-create.test.ts +102 -0
  449. package/src/test/overlays/CollaboratorBrushOverlayUtil.test.ts +4 -4
  450. package/src/test/overlays/CollaboratorCursorOverlayUtil.test.ts +18 -18
  451. package/src/test/overlays/CollaboratorHintOverlayUtil.test.ts +7 -7
  452. package/src/test/overlays/CollaboratorScribbleOverlayUtil.test.ts +3 -3
  453. package/src/test/overlays/OverlayManager.test.ts +1 -1
  454. package/src/test/overlays/SelectionForegroundOverlayUtil.test.ts +58 -0
  455. package/src/test/overlays/ShapeHandleOverlayUtil.test.ts +2 -2
  456. package/src/test/overlays/ShapeIndicatorOverlayUtil.test.ts +36 -0
  457. package/src/test/pinch-dom.test.tsx +170 -0
  458. package/src/test/pinch.test.ts +139 -0
  459. package/src/test/resizing.test.ts +250 -0
  460. package/src/test/right-click-context-menu.test.ts +90 -0
  461. package/src/test/rightClickPanning.test.ts +11 -0
  462. package/src/test/selection-omnibus.test.ts +19 -6
  463. package/src/test/spatialIndex.test.ts +132 -0
  464. package/src/test/translating.test.ts +0 -6
  465. package/src/test/ui/ContextMenu.test.tsx +146 -3
  466. package/src/test/ui/Dialogs.test.tsx +256 -0
  467. package/src/test/ui/copyHoveredStyles.test.tsx +154 -0
  468. package/src/test/ui/keyboardShortcuts.test.tsx +266 -0
  469. package/tldraw.css +35 -12
  470. package/dist-cjs/lib/shapes/shared/freehand/setStrokePointRadii.js +0 -100
  471. package/dist-cjs/lib/shapes/shared/freehand/setStrokePointRadii.js.map +0 -7
  472. package/dist-esm/lib/shapes/shared/freehand/setStrokePointRadii.mjs +0 -80
  473. package/dist-esm/lib/shapes/shared/freehand/setStrokePointRadii.mjs.map +0 -7
  474. package/src/lib/shapes/shared/freehand/setStrokePointRadii.ts +0 -127
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/ContextMenu/DefaultContextMenu.tsx"],
4
- "sourcesContent": ["import { preventDefault, useContainer, useEditor, useEditorComponents } from '@tldraw/editor'\nimport { ContextMenu as _ContextMenu } from 'radix-ui'\nimport { ReactNode, memo, useCallback, useEffect, useRef } from 'react'\nimport { useMenuIsOpen } from '../../hooks/useMenuIsOpen'\nimport { useDirection, useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiMenuContextProvider } from '../primitives/menus/TldrawUiMenuContext'\nimport { DefaultContextMenuContent } from './DefaultContextMenuContent'\n\n/** @public */\nexport interface TLUiContextMenuProps {\n\tchildren?: ReactNode\n\tdisabled?: boolean\n}\n\n/** @public @react */\nexport const DefaultContextMenu = memo(function DefaultContextMenu({\n\tchildren,\n\tdisabled = false,\n}: TLUiContextMenuProps) {\n\tconst editor = useEditor()\n\tconst msg = useTranslation()\n\n\tconst { Canvas } = useEditorComponents()\n\n\t// When hitting `Escape` while the context menu is open, we want to prevent\n\t// the default behavior of losing focus on the shape. Otherwise,\n\t// it's pretty annoying from an accessibility perspective.\n\tconst preventEscapeFromLosingShapeFocus = useCallback(\n\t\t(e: KeyboardEvent) => {\n\t\t\tif (e.key === 'Escape') {\n\t\t\t\te.stopPropagation()\n\t\t\t\teditor.getContainer().focus()\n\t\t\t}\n\t\t},\n\t\t[editor]\n\t)\n\n\tuseEffect(() => {\n\t\tconst body = editor.getContainerDocument().body\n\t\treturn () => {\n\t\t\tbody.removeEventListener('keydown', preventEscapeFromLosingShapeFocus, {\n\t\t\t\tcapture: true,\n\t\t\t})\n\t\t}\n\t}, [editor, preventEscapeFromLosingShapeFocus])\n\n\t// On touch devices, the same touch that triggers Radix's long-press open is still\n\t// down when the menu mounts. The release fires events the dismissable layer treats\n\t// as an outside interaction and closes the menu. We swallow dismissals during a\n\t// short grace window after open so the menu stays put until the user actually\n\t// interacts again.\n\tconst suppressDismissUntilRef = useRef(0)\n\n\tconst cb = useCallback(\n\t\t(isOpen: boolean) => {\n\t\t\tconst body = editor.getContainerDocument().body\n\t\t\tif (!isOpen) {\n\t\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\n\t\t\t\tif (onlySelectedShape && editor.isShapeOrAncestorLocked(onlySelectedShape)) {\n\t\t\t\t\teditor.setSelectedShapes([])\n\t\t\t\t}\n\n\t\t\t\teditor.timers.requestAnimationFrame(() => {\n\t\t\t\t\tbody.removeEventListener('keydown', preventEscapeFromLosingShapeFocus, {\n\t\t\t\t\t\tcapture: true,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tbody.addEventListener('keydown', preventEscapeFromLosingShapeFocus, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t})\n\n\t\t\t\tif (editor.getInstanceState().isCoarsePointer) {\n\t\t\t\t\tsuppressDismissUntilRef.current = Date.now() + 500\n\n\t\t\t\t\t// Weird route: selecting locked shapes on long press\n\t\t\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\t\t\t\t\tconst currentPagePoint = editor.inputs.getCurrentPagePoint()\n\n\t\t\t\t\t// get all of the shapes under the current pointer\n\t\t\t\t\tconst shapesAtPoint = editor.getShapesAtPoint(currentPagePoint)\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t// if there are no selected shapes\n\t\t\t\t\t\t!editor.getSelectedShapes().length ||\n\t\t\t\t\t\t// OR if none of the shapes at the point include the selected shape\n\t\t\t\t\t\t!shapesAtPoint.some((s) => selectedShapes.includes(s))\n\t\t\t\t\t) {\n\t\t\t\t\t\t// then are there any locked shapes under the current pointer?\n\t\t\t\t\t\tconst lockedShapes = shapesAtPoint.filter((s) => editor.isShapeOrAncestorLocked(s))\n\n\t\t\t\t\t\tif (lockedShapes.length) {\n\t\t\t\t\t\t\t// nice, let's select them\n\t\t\t\t\t\t\teditor.select(...lockedShapes.map((s) => s.id))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[editor, preventEscapeFromLosingShapeFocus]\n\t)\n\n\tconst container = useContainer()\n\tconst dir = useDirection()\n\tconst [isOpen, handleOpenChange] = useMenuIsOpen('context menu', cb)\n\n\t// Get the context menu content, either the default component or the user's\n\t// override. If there's no menu content, then the user has set it to null,\n\t// so skip rendering the menu.\n\tconst content = children ?? <DefaultContextMenuContent />\n\n\treturn (\n\t\t<_ContextMenu.Root dir={dir} onOpenChange={handleOpenChange} modal={false}>\n\t\t\t<_ContextMenu.Trigger onContextMenu={undefined} dir=\"ltr\" disabled={disabled}>\n\t\t\t\t{Canvas ? <Canvas /> : null}\n\t\t\t</_ContextMenu.Trigger>\n\t\t\t{isOpen && (\n\t\t\t\t<_ContextMenu.Portal container={container}>\n\t\t\t\t\t<_ContextMenu.Content\n\t\t\t\t\t\tclassName=\"tlui-menu tlui-scrollable\"\n\t\t\t\t\t\tdata-testid=\"context-menu\"\n\t\t\t\t\t\taria-label={msg('context-menu.title')}\n\t\t\t\t\t\talignOffset={-4}\n\t\t\t\t\t\tcollisionPadding={4}\n\t\t\t\t\t\tonContextMenu={preventDefault}\n\t\t\t\t\t\tonPointerDownOutside={(e) => {\n\t\t\t\t\t\t\tif (Date.now() < suppressDismissUntilRef.current) e.preventDefault()\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonInteractOutside={(e) => {\n\t\t\t\t\t\t\tif (Date.now() < suppressDismissUntilRef.current) e.preventDefault()\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonFocusOutside={(e) => {\n\t\t\t\t\t\t\tif (Date.now() < suppressDismissUntilRef.current) e.preventDefault()\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<TldrawUiMenuContextProvider type=\"context-menu\" sourceId=\"context-menu\">\n\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t</TldrawUiMenuContextProvider>\n\t\t\t\t\t</_ContextMenu.Content>\n\t\t\t\t</_ContextMenu.Portal>\n\t\t\t)}\n\t\t</_ContextMenu.Root>\n\t)\n})\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n\tpreventDefault,\n\tuseContainer,\n\tuseEditor,\n\tuseEditorComponents,\n\tuseValue,\n} from '@tldraw/editor'\nimport { ContextMenu as _ContextMenu } from 'radix-ui'\nimport { ReactNode, memo, useCallback, useEffect, useRef } from 'react'\nimport { useMenuIsOpen } from '../../hooks/useMenuIsOpen'\nimport { useDirection, useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiMenuContextProvider } from '../primitives/menus/TldrawUiMenuContext'\nimport { DefaultContextMenuContent } from './DefaultContextMenuContent'\n\n/** @public */\nexport interface TLUiContextMenuProps {\n\tchildren?: ReactNode\n\tdisabled?: boolean\n}\n\n/** @public @react */\nexport const DefaultContextMenu = memo(function DefaultContextMenu({\n\tchildren,\n\tdisabled = false,\n}: TLUiContextMenuProps) {\n\tconst editor = useEditor()\n\tconst msg = useTranslation()\n\n\tconst { Canvas } = useEditorComponents()\n\n\t// The context menu opens from a right-click in any tool, and from a touch\n\t// long-press only in the select tool (where it acts on the selection). A\n\t// right-click (fine pointer) is routed through the select tool by the editor; a\n\t// long-press in any other tool belongs to that tool's gesture (creating, erasing,\n\t// drawing, panning), so it opens nothing.\n\t//\n\t// The right-click case keys off the pointer type, not the tool, on purpose: a\n\t// right-click switches to select synchronously within the same gesture, so gating\n\t// it on the tool would race the React render and wrongly suppress the menu. The\n\t// select-tool long-press case is safe to gate on the tool \u2014 a long-press never\n\t// switches tools, so there is nothing to race.\n\tconst menuCanOpen = useValue(\n\t\t'context menu can open',\n\t\t() => !editor.getInstanceState().isCoarsePointer || editor.isIn('select'),\n\t\t[editor]\n\t)\n\n\t// When hitting `Escape` while the context menu is open, we want to prevent\n\t// the default behavior of losing focus on the shape. Otherwise,\n\t// it's pretty annoying from an accessibility perspective.\n\tconst preventEscapeFromLosingShapeFocus = useCallback(\n\t\t(e: KeyboardEvent) => {\n\t\t\tif (e.key === 'Escape') {\n\t\t\t\te.stopPropagation()\n\t\t\t\teditor.getContainer().focus()\n\t\t\t}\n\t\t},\n\t\t[editor]\n\t)\n\n\tuseEffect(() => {\n\t\tconst body = editor.getContainerDocument().body\n\t\treturn () => {\n\t\t\tbody.removeEventListener('keydown', preventEscapeFromLosingShapeFocus, {\n\t\t\t\tcapture: true,\n\t\t\t})\n\t\t}\n\t}, [editor, preventEscapeFromLosingShapeFocus])\n\n\t// On touch devices, the same touch that triggers Radix's long-press open is still\n\t// down when the menu mounts. The release fires events the dismissable layer treats\n\t// as an outside interaction and closes the menu. We swallow dismissals during a\n\t// short grace window after open so the menu stays put until the user actually\n\t// interacts again.\n\tconst suppressDismissUntilRef = useRef(0)\n\n\tconst cb = useCallback(\n\t\t(isOpen: boolean) => {\n\t\t\tconst body = editor.getContainerDocument().body\n\t\t\tif (!isOpen) {\n\t\t\t\tconst onlySelectedShape = editor.getOnlySelectedShape()\n\n\t\t\t\tif (onlySelectedShape && editor.isShapeOrAncestorLocked(onlySelectedShape)) {\n\t\t\t\t\teditor.setSelectedShapes([])\n\t\t\t\t}\n\n\t\t\t\teditor.timers.requestAnimationFrame(() => {\n\t\t\t\t\tbody.removeEventListener('keydown', preventEscapeFromLosingShapeFocus, {\n\t\t\t\t\t\tcapture: true,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tbody.addEventListener('keydown', preventEscapeFromLosingShapeFocus, {\n\t\t\t\t\tcapture: true,\n\t\t\t\t})\n\n\t\t\t\tif (editor.getInstanceState().isCoarsePointer) {\n\t\t\t\t\tsuppressDismissUntilRef.current = Date.now() + 500\n\n\t\t\t\t\t// Weird route: selecting locked shapes on long press\n\t\t\t\t\tconst selectedShapes = editor.getSelectedShapes()\n\t\t\t\t\tconst currentPagePoint = editor.inputs.getCurrentPagePoint()\n\n\t\t\t\t\t// get all of the shapes under the current pointer\n\t\t\t\t\tconst shapesAtPoint = editor.getShapesAtPoint(currentPagePoint)\n\n\t\t\t\t\tif (\n\t\t\t\t\t\t// if there are no selected shapes\n\t\t\t\t\t\t!editor.getSelectedShapes().length ||\n\t\t\t\t\t\t// OR if none of the shapes at the point include the selected shape\n\t\t\t\t\t\t!shapesAtPoint.some((s) => selectedShapes.includes(s))\n\t\t\t\t\t) {\n\t\t\t\t\t\t// then are there any locked shapes under the current pointer?\n\t\t\t\t\t\tconst lockedShapes = shapesAtPoint.filter((s) => editor.isShapeOrAncestorLocked(s))\n\n\t\t\t\t\t\tif (lockedShapes.length) {\n\t\t\t\t\t\t\t// nice, let's select them\n\t\t\t\t\t\t\teditor.select(...lockedShapes.map((s) => s.id))\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[editor, preventEscapeFromLosingShapeFocus]\n\t)\n\n\tconst container = useContainer()\n\tconst dir = useDirection()\n\tconst [isOpen, handleOpenChange] = useMenuIsOpen('context menu', cb)\n\n\t// Get the context menu content, either the default component or the user's\n\t// override. If there's no menu content, then the user has set it to null,\n\t// so skip rendering the menu.\n\tconst content = children ?? <DefaultContextMenuContent />\n\n\treturn (\n\t\t<_ContextMenu.Root dir={dir} onOpenChange={handleOpenChange} modal={false}>\n\t\t\t<_ContextMenu.Trigger\n\t\t\t\t// When suppressed, disabling the trigger stops Radix from opening the\n\t\t\t\t// menu, but it also stops Radix from preventing the native contextmenu \u2014\n\t\t\t\t// so prevent the browser's own menu ourselves in that case.\n\t\t\t\tonContextMenu={menuCanOpen ? undefined : preventDefault}\n\t\t\t\tdir=\"ltr\"\n\t\t\t\tdisabled={disabled || !menuCanOpen}\n\t\t\t>\n\t\t\t\t{Canvas ? <Canvas /> : null}\n\t\t\t</_ContextMenu.Trigger>\n\t\t\t{isOpen && (\n\t\t\t\t<_ContextMenu.Portal container={container}>\n\t\t\t\t\t<_ContextMenu.Content\n\t\t\t\t\t\tclassName=\"tlui-menu tlui-scrollable\"\n\t\t\t\t\t\tdata-testid=\"context-menu\"\n\t\t\t\t\t\taria-label={msg('context-menu.title')}\n\t\t\t\t\t\talignOffset={-4}\n\t\t\t\t\t\tcollisionPadding={4}\n\t\t\t\t\t\tonContextMenu={preventDefault}\n\t\t\t\t\t\tonPointerDownOutside={(e) => {\n\t\t\t\t\t\t\tif (Date.now() < suppressDismissUntilRef.current) e.preventDefault()\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonInteractOutside={(e) => {\n\t\t\t\t\t\t\tif (Date.now() < suppressDismissUntilRef.current) e.preventDefault()\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tonFocusOutside={(e) => {\n\t\t\t\t\t\t\tif (Date.now() < suppressDismissUntilRef.current) e.preventDefault()\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<TldrawUiMenuContextProvider type=\"context-menu\" sourceId=\"context-menu\">\n\t\t\t\t\t\t\t{content}\n\t\t\t\t\t\t</TldrawUiMenuContextProvider>\n\t\t\t\t\t</_ContextMenu.Content>\n\t\t\t\t</_ContextMenu.Portal>\n\t\t\t)}\n\t\t</_ContextMenu.Root>\n\t)\n})\n"],
5
+ "mappings": "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",
6
6
  "names": ["DefaultContextMenu", "isOpen"]
7
7
  }
@@ -15,15 +15,9 @@ import { TldrawUiMenuGroup } from "../primitives/menus/TldrawUiMenuGroup.mjs";
15
15
  function DefaultContextMenuContent() {
16
16
  const editor = useEditor();
17
17
  const showCollaborationUi = useShowCollaborationUi();
18
- const selectToolActive = useValue(
19
- "isSelectToolActive",
20
- () => editor.getCurrentToolId() === "select",
21
- [editor]
22
- );
23
18
  const isSinglePageMode = useValue("isSinglePageMode", () => editor.options.maxPages <= 1, [
24
19
  editor
25
20
  ]);
26
- if (!selectToolActive) return null;
27
21
  return /* @__PURE__ */ jsxs(Fragment, { children: [
28
22
  showCollaborationUi && /* @__PURE__ */ jsx(CursorChatItem, {}),
29
23
  /* @__PURE__ */ jsxs(TldrawUiMenuGroup, { id: "modify", children: [
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/ContextMenu/DefaultContextMenuContent.tsx"],
4
- "sourcesContent": ["import { useEditor, useValue } from '@tldraw/editor'\nimport { useShowCollaborationUi } from '../../hooks/useCollaborationStatus'\nimport {\n\tArrangeMenuSubmenu,\n\tClipboardMenuGroup,\n\tConversionsMenuGroup,\n\tCursorChatItem,\n\tEditMenuSubmenu,\n\tMoveToPageMenu,\n\tReorderMenuSubmenu,\n\tSelectAllMenuItem,\n} from '../menu-items'\nimport { TldrawUiMenuGroup } from '../primitives/menus/TldrawUiMenuGroup'\n\n/** @public @react */\nexport function DefaultContextMenuContent() {\n\tconst editor = useEditor()\n\tconst showCollaborationUi = useShowCollaborationUi()\n\n\tconst selectToolActive = useValue(\n\t\t'isSelectToolActive',\n\t\t() => editor.getCurrentToolId() === 'select',\n\t\t[editor]\n\t)\n\tconst isSinglePageMode = useValue('isSinglePageMode', () => editor.options.maxPages <= 1, [\n\t\teditor,\n\t])\n\n\tif (!selectToolActive) return null\n\n\treturn (\n\t\t<>\n\t\t\t{showCollaborationUi && <CursorChatItem />}\n\t\t\t<TldrawUiMenuGroup id=\"modify\">\n\t\t\t\t<EditMenuSubmenu />\n\t\t\t\t<ArrangeMenuSubmenu />\n\t\t\t\t<ReorderMenuSubmenu />\n\t\t\t\t{!isSinglePageMode && <MoveToPageMenu />}\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<ClipboardMenuGroup />\n\t\t\t<ConversionsMenuGroup />\n\t\t\t<TldrawUiMenuGroup id=\"select-all\">\n\t\t\t\t<SelectAllMenuItem />\n\t\t\t</TldrawUiMenuGroup>\n\t\t</>\n\t)\n}\n"],
5
- "mappings": "AA+BE,mBACyB,KACxB,YAFD;AA/BF,SAAS,WAAW,gBAAgB;AACpC,SAAS,8BAA8B;AACvC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,yBAAyB;AAG3B,SAAS,4BAA4B;AAC3C,QAAM,SAAS,UAAU;AACzB,QAAM,sBAAsB,uBAAuB;AAEnD,QAAM,mBAAmB;AAAA,IACxB;AAAA,IACA,MAAM,OAAO,iBAAiB,MAAM;AAAA,IACpC,CAAC,MAAM;AAAA,EACR;AACA,QAAM,mBAAmB,SAAS,oBAAoB,MAAM,OAAO,QAAQ,YAAY,GAAG;AAAA,IACzF;AAAA,EACD,CAAC;AAED,MAAI,CAAC,iBAAkB,QAAO;AAE9B,SACC,iCACE;AAAA,2BAAuB,oBAAC,kBAAe;AAAA,IACxC,qBAAC,qBAAkB,IAAG,UACrB;AAAA,0BAAC,mBAAgB;AAAA,MACjB,oBAAC,sBAAmB;AAAA,MACpB,oBAAC,sBAAmB;AAAA,MACnB,CAAC,oBAAoB,oBAAC,kBAAe;AAAA,OACvC;AAAA,IACA,oBAAC,sBAAmB;AAAA,IACpB,oBAAC,wBAAqB;AAAA,IACtB,oBAAC,qBAAkB,IAAG,cACrB,8BAAC,qBAAkB,GACpB;AAAA,KACD;AAEF;",
4
+ "sourcesContent": ["import { useEditor, useValue } from '@tldraw/editor'\nimport { useShowCollaborationUi } from '../../hooks/useCollaborationStatus'\nimport {\n\tArrangeMenuSubmenu,\n\tClipboardMenuGroup,\n\tConversionsMenuGroup,\n\tCursorChatItem,\n\tEditMenuSubmenu,\n\tMoveToPageMenu,\n\tReorderMenuSubmenu,\n\tSelectAllMenuItem,\n} from '../menu-items'\nimport { TldrawUiMenuGroup } from '../primitives/menus/TldrawUiMenuGroup'\n\n/** @public @react */\nexport function DefaultContextMenuContent() {\n\tconst editor = useEditor()\n\tconst showCollaborationUi = useShowCollaborationUi()\n\n\tconst isSinglePageMode = useValue('isSinglePageMode', () => editor.options.maxPages <= 1, [\n\t\teditor,\n\t])\n\n\t// Note: we intentionally don't bail out for non-select tools. Each submenu\n\t// below self-hides when it has nothing to offer (no selection, no shapes,\n\t// readonly), so the menu carries the right items in any tool \u2014 e.g. Paste\n\t// and Select all after a touch long-press while a shape tool is active.\n\t// (Closes #8828.)\n\n\treturn (\n\t\t<>\n\t\t\t{showCollaborationUi && <CursorChatItem />}\n\t\t\t<TldrawUiMenuGroup id=\"modify\">\n\t\t\t\t<EditMenuSubmenu />\n\t\t\t\t<ArrangeMenuSubmenu />\n\t\t\t\t<ReorderMenuSubmenu />\n\t\t\t\t{!isSinglePageMode && <MoveToPageMenu />}\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<ClipboardMenuGroup />\n\t\t\t<ConversionsMenuGroup />\n\t\t\t<TldrawUiMenuGroup id=\"select-all\">\n\t\t\t\t<SelectAllMenuItem />\n\t\t\t</TldrawUiMenuGroup>\n\t\t</>\n\t)\n}\n"],
5
+ "mappings": "AA8BE,mBACyB,KACxB,YAFD;AA9BF,SAAS,WAAW,gBAAgB;AACpC,SAAS,8BAA8B;AACvC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAAS,yBAAyB;AAG3B,SAAS,4BAA4B;AAC3C,QAAM,SAAS,UAAU;AACzB,QAAM,sBAAsB,uBAAuB;AAEnD,QAAM,mBAAmB,SAAS,oBAAoB,MAAM,OAAO,QAAQ,YAAY,GAAG;AAAA,IACzF;AAAA,EACD,CAAC;AAQD,SACC,iCACE;AAAA,2BAAuB,oBAAC,kBAAe;AAAA,IACxC,qBAAC,qBAAkB,IAAG,UACrB;AAAA,0BAAC,mBAAgB;AAAA,MACjB,oBAAC,sBAAmB;AAAA,MACpB,oBAAC,sBAAmB;AAAA,MACnB,CAAC,oBAAoB,oBAAC,kBAAe;AAAA,OACvC;AAAA,IACA,oBAAC,sBAAmB;AAAA,IACpB,oBAAC,wBAAqB;AAAA,IACtB,oBAAC,qBAAkB,IAAG,cACrB,8BAAC,qBAAkB,GACpB;AAAA,KACD;AAEF;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/ui/components/DefaultFollowingIndicator.tsx"],
4
- "sourcesContent": ["import { useEditor, usePresence, useValue } from '@tldraw/editor'\n\n/** @public @react */\nexport function DefaultFollowingIndicator() {\n\tconst editor = useEditor()\n\tconst followingUserId = useValue('follow', () => editor.getInstanceState().followingUserId, [\n\t\teditor,\n\t])\n\tif (!followingUserId) return null\n\treturn <FollowingIndicatorInner userId={followingUserId} />\n}\n\nfunction FollowingIndicatorInner({ userId }: { userId: string }) {\n\tconst presence = usePresence(userId)\n\tif (!presence) return null\n\treturn <div className=\"tlui-following-indicator\" style={{ borderColor: presence.color }} />\n}\n"],
5
- "mappings": "AASQ;AATR,SAAS,WAAW,aAAa,gBAAgB;AAG1C,SAAS,4BAA4B;AAC3C,QAAM,SAAS,UAAU;AACzB,QAAM,kBAAkB,SAAS,UAAU,MAAM,OAAO,iBAAiB,EAAE,iBAAiB;AAAA,IAC3F;AAAA,EACD,CAAC;AACD,MAAI,CAAC,gBAAiB,QAAO;AAC7B,SAAO,oBAAC,2BAAwB,QAAQ,iBAAiB;AAC1D;AAEA,SAAS,wBAAwB,EAAE,OAAO,GAAuB;AAChE,QAAM,WAAW,YAAY,MAAM;AACnC,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,oBAAC,SAAI,WAAU,4BAA2B,OAAO,EAAE,aAAa,SAAS,MAAM,GAAG;AAC1F;",
4
+ "sourcesContent": ["import { TLUserId, useEditor, usePresence, useValue } from '@tldraw/editor'\n\n/** @public @react */\nexport function DefaultFollowingIndicator() {\n\tconst editor = useEditor()\n\tconst followingUserId = useValue('follow', () => editor.getInstanceState().followingUserId, [\n\t\teditor,\n\t])\n\tif (!followingUserId) return null\n\treturn <FollowingIndicatorInner userId={followingUserId} />\n}\n\nfunction FollowingIndicatorInner({ userId }: { userId: TLUserId }) {\n\tconst presence = usePresence(userId)\n\tif (!presence) return null\n\treturn <div className=\"tlui-following-indicator\" style={{ borderColor: presence.color }} />\n}\n"],
5
+ "mappings": "AASQ;AATR,SAAmB,WAAW,aAAa,gBAAgB;AAGpD,SAAS,4BAA4B;AAC3C,QAAM,SAAS,UAAU;AACzB,QAAM,kBAAkB,SAAS,UAAU,MAAM,OAAO,iBAAiB,EAAE,iBAAiB;AAAA,IAC3F;AAAA,EACD,CAAC;AACD,MAAI,CAAC,gBAAiB,QAAO;AAC7B,SAAO,oBAAC,2BAAwB,QAAQ,iBAAiB;AAC1D;AAEA,SAAS,wBAAwB,EAAE,OAAO,GAAyB;AAClE,QAAM,WAAW,YAAY,MAAM;AACnC,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO,oBAAC,SAAI,WAAU,4BAA2B,OAAO,EAAE,aAAa,SAAS,MAAM,GAAG;AAC1F;",
6
6
  "names": []
7
7
  }
@@ -1,12 +1,11 @@
1
- import { jsx } from "react/jsx-runtime";
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { useContainer, useValue } from "@tldraw/editor";
3
3
  import { Dialog as _Dialog } from "radix-ui";
4
- import { memo, useCallback, useRef } from "react";
4
+ import { memo, useCallback } from "react";
5
5
  import { useDialogs } from "../context/dialogs.mjs";
6
6
  import { useDirection } from "../hooks/useTranslation/useTranslation.mjs";
7
7
  const TldrawUiDialog = ({ id, component: ModalContent, preventBackgroundClose }) => {
8
8
  const { removeDialog } = useDialogs();
9
- const mouseDownInsideContentRef = useRef(false);
10
9
  const container = useContainer();
11
10
  const dir = useDirection();
12
11
  const handleOpenChange = useCallback(
@@ -17,42 +16,23 @@ const TldrawUiDialog = ({ id, component: ModalContent, preventBackgroundClose })
17
16
  },
18
17
  [id, removeDialog]
19
18
  );
20
- return /* @__PURE__ */ jsx(_Dialog.Root, { onOpenChange: handleOpenChange, defaultOpen: true, children: /* @__PURE__ */ jsx(_Dialog.Portal, { container, children: /* @__PURE__ */ jsx(
21
- _Dialog.Overlay,
22
- {
23
- dir,
24
- className: "tlui-dialog__overlay",
25
- onClick: (e) => {
26
- if (mouseDownInsideContentRef.current) return;
27
- if (!preventBackgroundClose && e.target === e.currentTarget) handleOpenChange(false);
28
- },
29
- children: /* @__PURE__ */ jsx(
30
- _Dialog.Content,
31
- {
32
- dir,
33
- className: "tlui-dialog__content",
34
- "aria-describedby": void 0,
35
- onMouseDown: () => mouseDownInsideContentRef.current = true,
36
- onMouseUp: () => mouseDownInsideContentRef.current = false,
37
- onInteractOutside: (e) => {
38
- mouseDownInsideContentRef.current = false;
39
- if (preventBackgroundClose) {
40
- e.preventDefault();
41
- }
42
- },
43
- children: /* @__PURE__ */ jsx(
44
- ModalContent,
45
- {
46
- onClose: () => {
47
- mouseDownInsideContentRef.current = false;
48
- handleOpenChange(false);
49
- }
50
- }
51
- )
52
- }
53
- )
54
- }
55
- ) }) });
19
+ return /* @__PURE__ */ jsx(_Dialog.Root, { onOpenChange: handleOpenChange, defaultOpen: true, children: /* @__PURE__ */ jsxs(_Dialog.Portal, { container, children: [
20
+ /* @__PURE__ */ jsx(_Dialog.Overlay, { dir, className: "tlui-dialog__overlay" }),
21
+ /* @__PURE__ */ jsx("div", { dir, className: "tlui-dialog__positioner", children: /* @__PURE__ */ jsx(
22
+ _Dialog.Content,
23
+ {
24
+ dir,
25
+ className: "tlui-dialog__content",
26
+ "aria-describedby": void 0,
27
+ onInteractOutside: (e) => {
28
+ if (preventBackgroundClose) {
29
+ e.preventDefault();
30
+ }
31
+ },
32
+ children: /* @__PURE__ */ jsx(ModalContent, { onClose: () => handleOpenChange(false) })
33
+ }
34
+ ) })
35
+ ] }) });
56
36
  };
57
37
  const DefaultDialogs = memo(function DefaultDialogs2() {
58
38
  const { dialogs } = useDialogs();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/ui/components/Dialogs.tsx"],
4
- "sourcesContent": ["import { useContainer, useValue } from '@tldraw/editor'\nimport { Dialog as _Dialog } from 'radix-ui'\nimport { memo, useCallback, useRef } from 'react'\nimport { TLUiDialog, useDialogs } from '../context/dialogs'\nimport { useDirection } from '../hooks/useTranslation/useTranslation'\n\n/** @internal */\nconst TldrawUiDialog = ({ id, component: ModalContent, preventBackgroundClose }: TLUiDialog) => {\n\tconst { removeDialog } = useDialogs()\n\tconst mouseDownInsideContentRef = useRef(false)\n\n\tconst container = useContainer()\n\tconst dir = useDirection()\n\n\tconst handleOpenChange = useCallback(\n\t\t(isOpen: boolean) => {\n\t\t\tif (!isOpen) {\n\t\t\t\tremoveDialog(id)\n\t\t\t}\n\t\t},\n\t\t[id, removeDialog]\n\t)\n\n\treturn (\n\t\t<_Dialog.Root onOpenChange={handleOpenChange} defaultOpen>\n\t\t\t<_Dialog.Portal container={container}>\n\t\t\t\t<_Dialog.Overlay\n\t\t\t\t\tdir={dir}\n\t\t\t\t\tclassName=\"tlui-dialog__overlay\"\n\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\t// We pressed mouse down inside the content of the dialog then moved the mouse\n\t\t\t\t\t\t// outside it and let go of the mouse button. This should not close the dialog.\n\t\t\t\t\t\tif (mouseDownInsideContentRef.current) return\n\t\t\t\t\t\t// only close if the click is on the overlay itself, ignore bubbling clicks\n\t\t\t\t\t\tif (!preventBackgroundClose && e.target === e.currentTarget) handleOpenChange(false)\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<_Dialog.Content\n\t\t\t\t\t\tdir={dir}\n\t\t\t\t\t\tclassName=\"tlui-dialog__content\"\n\t\t\t\t\t\taria-describedby={undefined}\n\t\t\t\t\t\tonMouseDown={() => (mouseDownInsideContentRef.current = true)}\n\t\t\t\t\t\tonMouseUp={() => (mouseDownInsideContentRef.current = false)}\n\t\t\t\t\t\tonInteractOutside={(e) => {\n\t\t\t\t\t\t\tmouseDownInsideContentRef.current = false\n\t\t\t\t\t\t\tif (preventBackgroundClose) {\n\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ModalContent\n\t\t\t\t\t\t\tonClose={() => {\n\t\t\t\t\t\t\t\tmouseDownInsideContentRef.current = false\n\t\t\t\t\t\t\t\thandleOpenChange(false)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</_Dialog.Content>\n\t\t\t\t</_Dialog.Overlay>\n\t\t\t</_Dialog.Portal>\n\t\t</_Dialog.Root>\n\t)\n}\n\n/** @public @react */\nexport const DefaultDialogs = memo(function DefaultDialogs() {\n\tconst { dialogs } = useDialogs()\n\tconst dialogsArray = useValue('dialogs', () => dialogs.get(), [dialogs])\n\treturn dialogsArray.map((dialog) => <TldrawUiDialog key={dialog.id} {...dialog} />)\n})\n"],
5
- "mappings": "AAkDM;AAlDN,SAAS,cAAc,gBAAgB;AACvC,SAAS,UAAU,eAAe;AAClC,SAAS,MAAM,aAAa,cAAc;AAC1C,SAAqB,kBAAkB;AACvC,SAAS,oBAAoB;AAG7B,MAAM,iBAAiB,CAAC,EAAE,IAAI,WAAW,cAAc,uBAAuB,MAAkB;AAC/F,QAAM,EAAE,aAAa,IAAI,WAAW;AACpC,QAAM,4BAA4B,OAAO,KAAK;AAE9C,QAAM,YAAY,aAAa;AAC/B,QAAM,MAAM,aAAa;AAEzB,QAAM,mBAAmB;AAAA,IACxB,CAAC,WAAoB;AACpB,UAAI,CAAC,QAAQ;AACZ,qBAAa,EAAE;AAAA,MAChB;AAAA,IACD;AAAA,IACA,CAAC,IAAI,YAAY;AAAA,EAClB;AAEA,SACC,oBAAC,QAAQ,MAAR,EAAa,cAAc,kBAAkB,aAAW,MACxD,8BAAC,QAAQ,QAAR,EAAe,WACf;AAAA,IAAC,QAAQ;AAAA,IAAR;AAAA,MACA;AAAA,MACA,WAAU;AAAA,MACV,SAAS,CAAC,MAAM;AAGf,YAAI,0BAA0B,QAAS;AAEvC,YAAI,CAAC,0BAA0B,EAAE,WAAW,EAAE,cAAe,kBAAiB,KAAK;AAAA,MACpF;AAAA,MAEA;AAAA,QAAC,QAAQ;AAAA,QAAR;AAAA,UACA;AAAA,UACA,WAAU;AAAA,UACV,oBAAkB;AAAA,UAClB,aAAa,MAAO,0BAA0B,UAAU;AAAA,UACxD,WAAW,MAAO,0BAA0B,UAAU;AAAA,UACtD,mBAAmB,CAAC,MAAM;AACzB,sCAA0B,UAAU;AACpC,gBAAI,wBAAwB;AAC3B,gBAAE,eAAe;AAAA,YAClB;AAAA,UACD;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACA,SAAS,MAAM;AACd,0CAA0B,UAAU;AACpC,iCAAiB,KAAK;AAAA,cACvB;AAAA;AAAA,UACD;AAAA;AAAA,MACD;AAAA;AAAA,EACD,GACD,GACD;AAEF;AAGO,MAAM,iBAAiB,KAAK,SAASA,kBAAiB;AAC5D,QAAM,EAAE,QAAQ,IAAI,WAAW;AAC/B,QAAM,eAAe,SAAS,WAAW,MAAM,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC;AACvE,SAAO,aAAa,IAAI,CAAC,WAAW,oBAAC,kBAAgC,GAAG,UAAf,OAAO,EAAgB,CAAE;AACnF,CAAC;",
4
+ "sourcesContent": ["import { useContainer, useValue } from '@tldraw/editor'\nimport { Dialog as _Dialog } from 'radix-ui'\nimport { memo, useCallback } from 'react'\nimport { TLUiDialog, useDialogs } from '../context/dialogs'\nimport { useDirection } from '../hooks/useTranslation/useTranslation'\n\n/** @internal */\nconst TldrawUiDialog = ({ id, component: ModalContent, preventBackgroundClose }: TLUiDialog) => {\n\tconst { removeDialog } = useDialogs()\n\n\tconst container = useContainer()\n\tconst dir = useDirection()\n\n\tconst handleOpenChange = useCallback(\n\t\t(isOpen: boolean) => {\n\t\t\tif (!isOpen) {\n\t\t\t\tremoveDialog(id)\n\t\t\t}\n\t\t},\n\t\t[id, removeDialog]\n\t)\n\n\treturn (\n\t\t<_Dialog.Root onOpenChange={handleOpenChange} defaultOpen>\n\t\t\t<_Dialog.Portal container={container}>\n\t\t\t\t{/* Radix renders the scrim and content as siblings. The positioner sits on\n\t\t\t\t top of the scrim and centers the content, scrolling and padding it when\n\t\t\t\t it's taller than the viewport. */}\n\t\t\t\t<_Dialog.Overlay dir={dir} className=\"tlui-dialog__overlay\" />\n\t\t\t\t<div dir={dir} className=\"tlui-dialog__positioner\">\n\t\t\t\t\t<_Dialog.Content\n\t\t\t\t\t\tdir={dir}\n\t\t\t\t\t\tclassName=\"tlui-dialog__content\"\n\t\t\t\t\t\taria-describedby={undefined}\n\t\t\t\t\t\tonInteractOutside={(e) => {\n\t\t\t\t\t\t\t// Radix's dismissable layers are layer-aware: an interaction outside the\n\t\t\t\t\t\t\t// topmost layer dismisses only that layer \u2014 an open select, or a dialog\n\t\t\t\t\t\t\t// stacked on top \u2014 leaving lower layers open. onInteractOutside fires for\n\t\t\t\t\t\t\t// both a pointer press and a focus shift outside the dialog; opt out of both\n\t\t\t\t\t\t\t// when the dialog asks to stay open on background interactions (escape still\n\t\t\t\t\t\t\t// closes it).\n\t\t\t\t\t\t\tif (preventBackgroundClose) {\n\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<ModalContent onClose={() => handleOpenChange(false)} />\n\t\t\t\t\t</_Dialog.Content>\n\t\t\t\t</div>\n\t\t\t</_Dialog.Portal>\n\t\t</_Dialog.Root>\n\t)\n}\n\n/** @public @react */\nexport const DefaultDialogs = memo(function DefaultDialogs() {\n\tconst { dialogs } = useDialogs()\n\tconst dialogsArray = useValue('dialogs', () => dialogs.get(), [dialogs])\n\t// Every stacked dialog stays modal (Radix's default). That's what keeps dismiss\n\t// layer-aware: a background press or escape closes only the topmost layer, because\n\t// Radix's focus-scope stack pauses lower dialogs rather than dismissing them. Don't\n\t// make a lower dialog non-modal to work around anything \u2014 without a focus scope it\n\t// dismisses on the focus shift when a nested dialog or select opens, collapsing the\n\t// whole stack.\n\treturn dialogsArray.map((dialog) => <TldrawUiDialog key={dialog.id} {...dialog} />)\n})\n"],
5
+ "mappings": "AAwBG,SAIC,KAJD;AAxBH,SAAS,cAAc,gBAAgB;AACvC,SAAS,UAAU,eAAe;AAClC,SAAS,MAAM,mBAAmB;AAClC,SAAqB,kBAAkB;AACvC,SAAS,oBAAoB;AAG7B,MAAM,iBAAiB,CAAC,EAAE,IAAI,WAAW,cAAc,uBAAuB,MAAkB;AAC/F,QAAM,EAAE,aAAa,IAAI,WAAW;AAEpC,QAAM,YAAY,aAAa;AAC/B,QAAM,MAAM,aAAa;AAEzB,QAAM,mBAAmB;AAAA,IACxB,CAAC,WAAoB;AACpB,UAAI,CAAC,QAAQ;AACZ,qBAAa,EAAE;AAAA,MAChB;AAAA,IACD;AAAA,IACA,CAAC,IAAI,YAAY;AAAA,EAClB;AAEA,SACC,oBAAC,QAAQ,MAAR,EAAa,cAAc,kBAAkB,aAAW,MACxD,+BAAC,QAAQ,QAAR,EAAe,WAIf;AAAA,wBAAC,QAAQ,SAAR,EAAgB,KAAU,WAAU,wBAAuB;AAAA,IAC5D,oBAAC,SAAI,KAAU,WAAU,2BACxB;AAAA,MAAC,QAAQ;AAAA,MAAR;AAAA,QACA;AAAA,QACA,WAAU;AAAA,QACV,oBAAkB;AAAA,QAClB,mBAAmB,CAAC,MAAM;AAOzB,cAAI,wBAAwB;AAC3B,cAAE,eAAe;AAAA,UAClB;AAAA,QACD;AAAA,QAEA,8BAAC,gBAAa,SAAS,MAAM,iBAAiB,KAAK,GAAG;AAAA;AAAA,IACvD,GACD;AAAA,KACD,GACD;AAEF;AAGO,MAAM,iBAAiB,KAAK,SAASA,kBAAiB;AAC5D,QAAM,EAAE,QAAQ,IAAI,WAAW;AAC/B,QAAM,eAAe,SAAS,WAAW,MAAM,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC;AAOvE,SAAO,aAAa,IAAI,CAAC,WAAW,oBAAC,kBAAgC,GAAG,UAAf,OAAO,EAAgB,CAAE;AACnF,CAAC;",
6
6
  "names": ["DefaultDialogs"]
7
7
  }
@@ -1,8 +1,20 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { useEditor, useQuickReactor } from "@tldraw/editor";
2
+ import { EditorAtom, useEditor, useQuickReactor } from "@tldraw/editor";
3
3
  import { useRef, useState } from "react";
4
4
  import { useActions } from "../../context/actions.mjs";
5
5
  import { TldrawUiMenuActionItem } from "../primitives/menus/TldrawUiMenuActionItem.mjs";
6
+ const backToContentSuppressed = new EditorAtom("backToContentSuppressed", () => false);
7
+ const suppressTimeout = new EditorAtom("backToContentSuppressTimeout", () => null);
8
+ function suppressBackToContent(editor, durationMs) {
9
+ backToContentSuppressed.set(editor, true);
10
+ const pending = suppressTimeout.get(editor);
11
+ if (pending !== null) clearTimeout(pending);
12
+ const id = editor.timers.setTimeout(() => {
13
+ backToContentSuppressed.set(editor, false);
14
+ suppressTimeout.set(editor, null);
15
+ }, durationMs);
16
+ suppressTimeout.set(editor, id);
17
+ }
6
18
  function BackToContent() {
7
19
  const editor = useEditor();
8
20
  const actions = useActions();
@@ -12,10 +24,12 @@ function BackToContent() {
12
24
  "toggle showback to content",
13
25
  () => {
14
26
  const showBackToContentPrev = rIsShowing.current;
15
- const shapeIds = editor.getCurrentPageShapeIds();
16
27
  let showBackToContentNow = false;
17
- if (shapeIds.size) {
18
- showBackToContentNow = shapeIds.size === editor.getNotVisibleShapes().size;
28
+ if (!backToContentSuppressed.get(editor)) {
29
+ const shapeIds = editor.getCurrentPageShapeIds();
30
+ if (shapeIds.size) {
31
+ showBackToContentNow = shapeIds.size === editor.getNotVisibleShapes().size;
32
+ }
19
33
  }
20
34
  if (showBackToContentPrev !== showBackToContentNow) {
21
35
  setShowBackToContent(showBackToContentNow);
@@ -37,6 +51,7 @@ function BackToContent() {
37
51
  );
38
52
  }
39
53
  export {
40
- BackToContent
54
+ BackToContent,
55
+ suppressBackToContent
41
56
  };
42
57
  //# sourceMappingURL=BackToContent.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/HelperButtons/BackToContent.tsx"],
4
- "sourcesContent": ["import { useEditor, useQuickReactor } from '@tldraw/editor'\nimport { useRef, useState } from 'react'\nimport { useActions } from '../../context/actions'\nimport { TldrawUiMenuActionItem } from '../primitives/menus/TldrawUiMenuActionItem'\n\nexport function BackToContent() {\n\tconst editor = useEditor()\n\n\tconst actions = useActions()\n\n\tconst [showBackToContent, setShowBackToContent] = useState(false)\n\tconst rIsShowing = useRef(false)\n\n\tuseQuickReactor(\n\t\t'toggle showback to content',\n\t\t() => {\n\t\t\tconst showBackToContentPrev = rIsShowing.current\n\t\t\tconst shapeIds = editor.getCurrentPageShapeIds()\n\t\t\tlet showBackToContentNow = false\n\t\t\tif (shapeIds.size) {\n\t\t\t\tshowBackToContentNow = shapeIds.size === editor.getNotVisibleShapes().size\n\t\t\t}\n\n\t\t\tif (showBackToContentPrev !== showBackToContentNow) {\n\t\t\t\tsetShowBackToContent(showBackToContentNow)\n\t\t\t\trIsShowing.current = showBackToContentNow\n\t\t\t}\n\t\t},\n\t\t[editor]\n\t)\n\n\tif (!showBackToContent) return null\n\n\treturn (\n\t\t<TldrawUiMenuActionItem\n\t\t\tactionId=\"back-to-content\"\n\t\t\tonSelect={() => {\n\t\t\t\tactions['back-to-content'].onSelect('helper-buttons')\n\t\t\t\tsetShowBackToContent(false)\n\t\t\t}}\n\t\t/>\n\t)\n}\n"],
5
- "mappings": "AAkCE;AAlCF,SAAS,WAAW,uBAAuB;AAC3C,SAAS,QAAQ,gBAAgB;AACjC,SAAS,kBAAkB;AAC3B,SAAS,8BAA8B;AAEhC,SAAS,gBAAgB;AAC/B,QAAM,SAAS,UAAU;AAEzB,QAAM,UAAU,WAAW;AAE3B,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAS,KAAK;AAChE,QAAM,aAAa,OAAO,KAAK;AAE/B;AAAA,IACC;AAAA,IACA,MAAM;AACL,YAAM,wBAAwB,WAAW;AACzC,YAAM,WAAW,OAAO,uBAAuB;AAC/C,UAAI,uBAAuB;AAC3B,UAAI,SAAS,MAAM;AAClB,+BAAuB,SAAS,SAAS,OAAO,oBAAoB,EAAE;AAAA,MACvE;AAEA,UAAI,0BAA0B,sBAAsB;AACnD,6BAAqB,oBAAoB;AACzC,mBAAW,UAAU;AAAA,MACtB;AAAA,IACD;AAAA,IACA,CAAC,MAAM;AAAA,EACR;AAEA,MAAI,CAAC,kBAAmB,QAAO;AAE/B,SACC;AAAA,IAAC;AAAA;AAAA,MACA,UAAS;AAAA,MACT,UAAU,MAAM;AACf,gBAAQ,iBAAiB,EAAE,SAAS,gBAAgB;AACpD,6BAAqB,KAAK;AAAA,MAC3B;AAAA;AAAA,EACD;AAEF;",
4
+ "sourcesContent": ["import { Editor, EditorAtom, useEditor, useQuickReactor } from '@tldraw/editor'\nimport { useRef, useState } from 'react'\nimport { useActions } from '../../context/actions'\nimport { TldrawUiMenuActionItem } from '../primitives/menus/TldrawUiMenuActionItem'\n\nconst backToContentSuppressed = new EditorAtom('backToContentSuppressed', () => false)\nconst suppressTimeout = new EditorAtom<number | null>('backToContentSuppressTimeout', () => null)\n\n/**\n * Hide the \"back to content\" helper button right away, regardless of where the\n * camera currently is. This is used when the user has explicitly chosen to\n * navigate back to the content (e.g. via the \"move focus to canvas\" button): the\n * button should disappear on intent rather than waiting for the camera animation\n * to physically bring a shape back into the viewport. The button falls back to\n * its normal reactive logic after `durationMs`, by which point the camera has\n * arrived and the content is visible.\n * @internal\n */\nexport function suppressBackToContent(editor: Editor, durationMs: number) {\n\tbackToContentSuppressed.set(editor, true)\n\t// Cancel any pending timeout so an earlier (shorter) timer can't clear the\n\t// suppression while a newer camera animation is still running.\n\tconst pending = suppressTimeout.get(editor)\n\tif (pending !== null) clearTimeout(pending)\n\tconst id = editor.timers.setTimeout(() => {\n\t\tbackToContentSuppressed.set(editor, false)\n\t\tsuppressTimeout.set(editor, null)\n\t}, durationMs)\n\tsuppressTimeout.set(editor, id)\n}\n\nexport function BackToContent() {\n\tconst editor = useEditor()\n\n\tconst actions = useActions()\n\n\tconst [showBackToContent, setShowBackToContent] = useState(false)\n\tconst rIsShowing = useRef(false)\n\n\tuseQuickReactor(\n\t\t'toggle showback to content',\n\t\t() => {\n\t\t\tconst showBackToContentPrev = rIsShowing.current\n\t\t\tlet showBackToContentNow = false\n\t\t\tif (!backToContentSuppressed.get(editor)) {\n\t\t\t\tconst shapeIds = editor.getCurrentPageShapeIds()\n\t\t\t\tif (shapeIds.size) {\n\t\t\t\t\tshowBackToContentNow = shapeIds.size === editor.getNotVisibleShapes().size\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (showBackToContentPrev !== showBackToContentNow) {\n\t\t\t\tsetShowBackToContent(showBackToContentNow)\n\t\t\t\trIsShowing.current = showBackToContentNow\n\t\t\t}\n\t\t},\n\t\t[editor]\n\t)\n\n\tif (!showBackToContent) return null\n\n\treturn (\n\t\t<TldrawUiMenuActionItem\n\t\t\tactionId=\"back-to-content\"\n\t\t\tonSelect={() => {\n\t\t\t\tactions['back-to-content'].onSelect('helper-buttons')\n\t\t\t\tsetShowBackToContent(false)\n\t\t\t}}\n\t\t/>\n\t)\n}\n"],
5
+ "mappings": "AA8DE;AA9DF,SAAiB,YAAY,WAAW,uBAAuB;AAC/D,SAAS,QAAQ,gBAAgB;AACjC,SAAS,kBAAkB;AAC3B,SAAS,8BAA8B;AAEvC,MAAM,0BAA0B,IAAI,WAAW,2BAA2B,MAAM,KAAK;AACrF,MAAM,kBAAkB,IAAI,WAA0B,gCAAgC,MAAM,IAAI;AAYzF,SAAS,sBAAsB,QAAgB,YAAoB;AACzE,0BAAwB,IAAI,QAAQ,IAAI;AAGxC,QAAM,UAAU,gBAAgB,IAAI,MAAM;AAC1C,MAAI,YAAY,KAAM,cAAa,OAAO;AAC1C,QAAM,KAAK,OAAO,OAAO,WAAW,MAAM;AACzC,4BAAwB,IAAI,QAAQ,KAAK;AACzC,oBAAgB,IAAI,QAAQ,IAAI;AAAA,EACjC,GAAG,UAAU;AACb,kBAAgB,IAAI,QAAQ,EAAE;AAC/B;AAEO,SAAS,gBAAgB;AAC/B,QAAM,SAAS,UAAU;AAEzB,QAAM,UAAU,WAAW;AAE3B,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAS,KAAK;AAChE,QAAM,aAAa,OAAO,KAAK;AAE/B;AAAA,IACC;AAAA,IACA,MAAM;AACL,YAAM,wBAAwB,WAAW;AACzC,UAAI,uBAAuB;AAC3B,UAAI,CAAC,wBAAwB,IAAI,MAAM,GAAG;AACzC,cAAM,WAAW,OAAO,uBAAuB;AAC/C,YAAI,SAAS,MAAM;AAClB,iCAAuB,SAAS,SAAS,OAAO,oBAAoB,EAAE;AAAA,QACvE;AAAA,MACD;AAEA,UAAI,0BAA0B,sBAAsB;AACnD,6BAAqB,oBAAoB;AACzC,mBAAW,UAAU;AAAA,MACtB;AAAA,IACD;AAAA,IACA,CAAC,MAAM;AAAA,EACR;AAEA,MAAI,CAAC,kBAAmB,QAAO;AAE/B,SACC;AAAA,IAAC;AAAA;AAAA,MACA,UAAS;AAAA,MACT,UAAU,MAAM;AACf,gBAAQ,iBAAiB,EAAE,SAAS,gBAAgB;AACpD,6BAAqB,KAAK;AAAA,MAC3B;AAAA;AAAA,EACD;AAEF;",
6
6
  "names": []
7
7
  }
@@ -10,8 +10,10 @@ function DefaultKeyboardShortcutsDialogContent() {
10
10
  /* @__PURE__ */ jsxs(TldrawUiMenuGroup, { label: "shortcuts-dialog.tools", id: "tools", children: [
11
11
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "toggle-tool-lock" }),
12
12
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "insert-media" }),
13
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "insert-embed" }),
13
14
  /* @__PURE__ */ jsx(TldrawUiMenuToolItem, { toolId: "select" }),
14
15
  /* @__PURE__ */ jsx(TldrawUiMenuToolItem, { toolId: "draw" }),
16
+ /* @__PURE__ */ jsx(TldrawUiMenuToolItem, { toolId: "highlight" }),
15
17
  /* @__PURE__ */ jsx(TldrawUiMenuToolItem, { toolId: "eraser" }),
16
18
  /* @__PURE__ */ jsx(TldrawUiMenuToolItem, { toolId: "hand" }),
17
19
  /* @__PURE__ */ jsx(TldrawUiMenuToolItem, { toolId: "rectangle" }),
@@ -43,10 +45,13 @@ function DefaultKeyboardShortcutsDialogContent() {
43
45
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "redo" }),
44
46
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "cut" }),
45
47
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "copy" }),
48
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "copy-as-png" }),
49
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "copy-hovered-styles" }),
46
50
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "paste" }),
47
51
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "select-all" }),
48
52
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "delete" }),
49
- /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "duplicate" })
53
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "duplicate" }),
54
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "print" })
50
55
  ] }),
51
56
  /* @__PURE__ */ jsxs(TldrawUiMenuGroup, { label: "shortcuts-dialog.view", id: "view", children: [
52
57
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "select-zoom-tool" }),
@@ -73,6 +78,9 @@ function DefaultKeyboardShortcutsDialogContent() {
73
78
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "send-to-back" }),
74
79
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "group" }),
75
80
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "ungroup" }),
81
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "frame-selection" }),
82
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "flatten-to-image" }),
83
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "toggle-lock" }),
76
84
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "flip-horizontal" }),
77
85
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "flip-vertical" }),
78
86
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "align-top" }),
@@ -80,7 +88,9 @@ function DefaultKeyboardShortcutsDialogContent() {
80
88
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "align-bottom" }),
81
89
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "align-left" }),
82
90
  /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "align-center-horizontal" }),
83
- /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "align-right" })
91
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "align-right" }),
92
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "distribute-horizontal" }),
93
+ /* @__PURE__ */ jsx(TldrawUiMenuActionItem, { actionId: "distribute-vertical" })
84
94
  ] }),
85
95
  /* @__PURE__ */ jsxs(TldrawUiMenuGroup, { label: "shortcuts-dialog.text-formatting", id: "text", children: [
86
96
  /* @__PURE__ */ jsx(
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/components/KeyboardShortcutsDialog/DefaultKeyboardShortcutsDialogContent.tsx"],
4
- "sourcesContent": ["import { useShowCollaborationUi } from '../../hooks/useCollaborationStatus'\nimport { TldrawUiMenuActionItem } from '../primitives/menus/TldrawUiMenuActionItem'\nimport { TldrawUiMenuGroup } from '../primitives/menus/TldrawUiMenuGroup'\nimport { TldrawUiMenuItem } from '../primitives/menus/TldrawUiMenuItem'\nimport { TldrawUiMenuToolItem } from '../primitives/menus/TldrawUiMenuToolItem'\n\n/** @public @react */\nexport function DefaultKeyboardShortcutsDialogContent() {\n\tconst showCollaborationUi = useShowCollaborationUi()\n\treturn (\n\t\t<>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.tools\" id=\"tools\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"toggle-tool-lock\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"insert-media\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"select\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"draw\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"eraser\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"hand\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"rectangle\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"ellipse\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"arrow\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"line\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"text\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"frame\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"note\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"laser\" />\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"pointer-down\"\n\t\t\t\t\tlabel=\"tool.pointer-down\"\n\t\t\t\t\tkbd=\",\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.preferences\" id=\"preferences\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"toggle-dark-mode\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"toggle-focus-mode\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"toggle-grid\" />\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.edit\" id=\"edit\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"undo\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"redo\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"cut\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"copy\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"paste\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"select-all\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"delete\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"duplicate\" />\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.view\" id=\"view\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"select-zoom-tool\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"zoom-in\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"zoom-out\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"zoom-to-100\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"zoom-to-fit\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"zoom-to-selection\" />\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"zoom-quick\"\n\t\t\t\t\tlabel=\"action.zoom-quick\"\n\t\t\t\t\tkbd=\"shift+z\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.transform\" id=\"transform\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"bring-to-front\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"bring-forward\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"send-backward\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"send-to-back\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"group\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"ungroup\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"flip-horizontal\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"flip-vertical\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-top\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-center-vertical\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-bottom\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-left\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-center-horizontal\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-right\" />\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.text-formatting\" id=\"text\">\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-bold\"\n\t\t\t\t\tlabel=\"tool.rich-text-bold\"\n\t\t\t\t\tkbd=\"cmd+b\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-italic\"\n\t\t\t\t\tlabel=\"tool.rich-text-italic\"\n\t\t\t\t\tkbd=\"cmd+i\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-code\"\n\t\t\t\t\tlabel=\"tool.rich-text-code\"\n\t\t\t\t\tkbd=\"cmd+e\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-highlight\"\n\t\t\t\t\tlabel=\"tool.rich-text-highlight\"\n\t\t\t\t\tkbd=\"cmd+shift+h\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-strikethrough\"\n\t\t\t\t\tlabel=\"tool.rich-text-strikethrough\"\n\t\t\t\t\tkbd=\"cmd+shift+s\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-link\"\n\t\t\t\t\tlabel=\"tool.rich-text-link\"\n\t\t\t\t\tkbd=\"cmd+shift+k\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-header\"\n\t\t\t\t\tlabel=\"tool.rich-text-header\"\n\t\t\t\t\tkbd=\"cmd+alt+[[1-6]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-orderedList\"\n\t\t\t\t\tlabel=\"tool.rich-text-orderedList\"\n\t\t\t\t\tkbd=\"cmd+shift+7\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-bulletedlist\"\n\t\t\t\t\tlabel=\"tool.rich-text-bulletList\"\n\t\t\t\t\tkbd=\"cmd+shift+8\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.a11y\" id=\"a11y\">\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-select-next-shape\"\n\t\t\t\t\tlabel=\"a11y.select-shape\"\n\t\t\t\t\tkbd=\"[[Tab]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-select-next-shape-direction\"\n\t\t\t\t\tlabel=\"a11y.select-shape-direction\"\n\t\t\t\t\tkbd=\"cmd+[[\u2191\u2192\u2193\u2190]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-select-next-shape-container\"\n\t\t\t\t\tlabel=\"a11y.enter-leave-container\"\n\t\t\t\t\tkbd=\"cmd+shift+[[\u2191\u2193]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-pan-camera\"\n\t\t\t\t\tlabel=\"a11y.pan-camera\"\n\t\t\t\t\tkbd=\"[[Space]]+[[\u2191\u2192\u2193\u2190]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"adjust-shape-styles\"\n\t\t\t\t\tlabel=\"a11y.adjust-shape-styles\"\n\t\t\t\t\tkbd=\"cmd+[[Enter]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"open-context-menu\"\n\t\t\t\t\tlabel=\"a11y.open-context-menu\"\n\t\t\t\t\tkbd=\"cmd+shift+[[Enter]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-move-shape\"\n\t\t\t\t\tlabel=\"a11y.move-shape\"\n\t\t\t\t\tkbd=\"[[\u2191\u2192\u2193\u2190]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-move-shape-faster\"\n\t\t\t\t\tlabel=\"a11y.move-shape-faster\"\n\t\t\t\t\tkbd=\"shift+[[\u2191\u2192\u2193\u2190]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-rotate-shape-cw\"\n\t\t\t\t\tlabel=\"a11y.rotate-shape-cw\"\n\t\t\t\t\tkbd=\"shift+\uFE65\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-rotate-shape-cw-fine\"\n\t\t\t\t\tlabel=\"a11y.rotate-shape-cw-fine\"\n\t\t\t\t\tkbd=\"shift+alt+\uFE65\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-rotate-shape-ccw\"\n\t\t\t\t\tlabel=\"a11y.rotate-shape-ccw\"\n\t\t\t\t\tkbd=\"shift+\uFE64\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-rotate-shape-ccw-fine\"\n\t\t\t\t\tlabel=\"a11y.rotate-shape-ccw-fine\"\n\t\t\t\t\tkbd=\"shift+alt+\uFE64\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"enlarge-shapes\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"shrink-shapes\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"a11y-repeat-shape-announce\" />\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-open-keyboard-shortcuts\"\n\t\t\t\t\tlabel=\"a11y.open-keyboard-shortcuts\"\n\t\t\t\t\tkbd=\"cmd+alt+/\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t{showCollaborationUi && (\n\t\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.collaboration\" id=\"collaboration\">\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"open-cursor-chat\" />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t)}\n\t\t</>\n\t)\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useShowCollaborationUi } from '../../hooks/useCollaborationStatus'\nimport { TldrawUiMenuActionItem } from '../primitives/menus/TldrawUiMenuActionItem'\nimport { TldrawUiMenuGroup } from '../primitives/menus/TldrawUiMenuGroup'\nimport { TldrawUiMenuItem } from '../primitives/menus/TldrawUiMenuItem'\nimport { TldrawUiMenuToolItem } from '../primitives/menus/TldrawUiMenuToolItem'\n\n/** @public @react */\nexport function DefaultKeyboardShortcutsDialogContent() {\n\tconst showCollaborationUi = useShowCollaborationUi()\n\treturn (\n\t\t<>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.tools\" id=\"tools\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"toggle-tool-lock\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"insert-media\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"insert-embed\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"select\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"draw\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"highlight\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"eraser\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"hand\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"rectangle\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"ellipse\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"arrow\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"line\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"text\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"frame\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"note\" />\n\t\t\t\t<TldrawUiMenuToolItem toolId=\"laser\" />\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"pointer-down\"\n\t\t\t\t\tlabel=\"tool.pointer-down\"\n\t\t\t\t\tkbd=\",\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.preferences\" id=\"preferences\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"toggle-dark-mode\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"toggle-focus-mode\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"toggle-grid\" />\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.edit\" id=\"edit\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"undo\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"redo\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"cut\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"copy\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"copy-as-png\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"copy-hovered-styles\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"paste\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"select-all\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"delete\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"duplicate\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"print\" />\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.view\" id=\"view\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"select-zoom-tool\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"zoom-in\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"zoom-out\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"zoom-to-100\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"zoom-to-fit\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"zoom-to-selection\" />\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"zoom-quick\"\n\t\t\t\t\tlabel=\"action.zoom-quick\"\n\t\t\t\t\tkbd=\"shift+z\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.transform\" id=\"transform\">\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"bring-to-front\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"bring-forward\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"send-backward\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"send-to-back\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"group\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"ungroup\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"frame-selection\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"flatten-to-image\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"toggle-lock\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"flip-horizontal\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"flip-vertical\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-top\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-center-vertical\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-bottom\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-left\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-center-horizontal\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"align-right\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"distribute-horizontal\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"distribute-vertical\" />\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.text-formatting\" id=\"text\">\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-bold\"\n\t\t\t\t\tlabel=\"tool.rich-text-bold\"\n\t\t\t\t\tkbd=\"cmd+b\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-italic\"\n\t\t\t\t\tlabel=\"tool.rich-text-italic\"\n\t\t\t\t\tkbd=\"cmd+i\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-code\"\n\t\t\t\t\tlabel=\"tool.rich-text-code\"\n\t\t\t\t\tkbd=\"cmd+e\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-highlight\"\n\t\t\t\t\tlabel=\"tool.rich-text-highlight\"\n\t\t\t\t\tkbd=\"cmd+shift+h\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-strikethrough\"\n\t\t\t\t\tlabel=\"tool.rich-text-strikethrough\"\n\t\t\t\t\tkbd=\"cmd+shift+s\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-link\"\n\t\t\t\t\tlabel=\"tool.rich-text-link\"\n\t\t\t\t\tkbd=\"cmd+shift+k\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-header\"\n\t\t\t\t\tlabel=\"tool.rich-text-header\"\n\t\t\t\t\tkbd=\"cmd+alt+[[1-6]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-orderedList\"\n\t\t\t\t\tlabel=\"tool.rich-text-orderedList\"\n\t\t\t\t\tkbd=\"cmd+shift+7\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"text-bulletedlist\"\n\t\t\t\t\tlabel=\"tool.rich-text-bulletList\"\n\t\t\t\t\tkbd=\"cmd+shift+8\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.a11y\" id=\"a11y\">\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-select-next-shape\"\n\t\t\t\t\tlabel=\"a11y.select-shape\"\n\t\t\t\t\tkbd=\"[[Tab]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-select-next-shape-direction\"\n\t\t\t\t\tlabel=\"a11y.select-shape-direction\"\n\t\t\t\t\tkbd=\"cmd+[[\u2191\u2192\u2193\u2190]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-select-next-shape-container\"\n\t\t\t\t\tlabel=\"a11y.enter-leave-container\"\n\t\t\t\t\tkbd=\"cmd+shift+[[\u2191\u2193]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-pan-camera\"\n\t\t\t\t\tlabel=\"a11y.pan-camera\"\n\t\t\t\t\tkbd=\"[[Space]]+[[\u2191\u2192\u2193\u2190]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"adjust-shape-styles\"\n\t\t\t\t\tlabel=\"a11y.adjust-shape-styles\"\n\t\t\t\t\tkbd=\"cmd+[[Enter]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"open-context-menu\"\n\t\t\t\t\tlabel=\"a11y.open-context-menu\"\n\t\t\t\t\tkbd=\"cmd+shift+[[Enter]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-move-shape\"\n\t\t\t\t\tlabel=\"a11y.move-shape\"\n\t\t\t\t\tkbd=\"[[\u2191\u2192\u2193\u2190]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-move-shape-faster\"\n\t\t\t\t\tlabel=\"a11y.move-shape-faster\"\n\t\t\t\t\tkbd=\"shift+[[\u2191\u2192\u2193\u2190]]\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-rotate-shape-cw\"\n\t\t\t\t\tlabel=\"a11y.rotate-shape-cw\"\n\t\t\t\t\tkbd=\"shift+\uFE65\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-rotate-shape-cw-fine\"\n\t\t\t\t\tlabel=\"a11y.rotate-shape-cw-fine\"\n\t\t\t\t\tkbd=\"shift+alt+\uFE65\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-rotate-shape-ccw\"\n\t\t\t\t\tlabel=\"a11y.rotate-shape-ccw\"\n\t\t\t\t\tkbd=\"shift+\uFE64\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-rotate-shape-ccw-fine\"\n\t\t\t\t\tlabel=\"a11y.rotate-shape-ccw-fine\"\n\t\t\t\t\tkbd=\"shift+alt+\uFE64\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"enlarge-shapes\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"shrink-shapes\" />\n\t\t\t\t<TldrawUiMenuActionItem actionId=\"a11y-repeat-shape-announce\" />\n\t\t\t\t<TldrawUiMenuItem\n\t\t\t\t\tid=\"a11y-open-keyboard-shortcuts\"\n\t\t\t\t\tlabel=\"a11y.open-keyboard-shortcuts\"\n\t\t\t\t\tkbd=\"cmd+alt+/\"\n\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t/* do nothing */\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</TldrawUiMenuGroup>\n\t\t\t{showCollaborationUi && (\n\t\t\t\t<TldrawUiMenuGroup label=\"shortcuts-dialog.collaboration\" id=\"collaboration\">\n\t\t\t\t\t<TldrawUiMenuActionItem actionId=\"open-cursor-chat\" />\n\t\t\t\t</TldrawUiMenuGroup>\n\t\t\t)}\n\t\t</>\n\t)\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -14,6 +14,7 @@ import {
14
14
  import * as React from "react";
15
15
  import { useTranslation } from "../../hooks/useTranslation/useTranslation.mjs";
16
16
  import { MinimapManager } from "./MinimapManager.mjs";
17
+ const CLICK_JITTER_THRESHOLD_SQ = 4;
17
18
  function DefaultMinimap() {
18
19
  const editor = useEditor();
19
20
  const container = useContainer();
@@ -21,6 +22,7 @@ function DefaultMinimap() {
21
22
  const rCanvas = React.useRef(null);
22
23
  const rPointing = React.useRef(false);
23
24
  const rActivePointerId = React.useRef(null);
25
+ const rOriginScreenPoint = React.useRef(new Vec());
24
26
  const minimapRef = React.useRef(void 0);
25
27
  React.useEffect(() => {
26
28
  try {
@@ -41,111 +43,86 @@ function DefaultMinimap() {
41
43
  const onDoubleClick = React.useCallback(
42
44
  (e) => {
43
45
  if (!editor.getCurrentPageShapeIds().size) return;
44
- if (!minimapRef.current) return;
45
- const point = minimapRef.current.minimapScreenPointToPagePoint(
46
- e.clientX,
47
- e.clientY,
48
- false,
49
- false
50
- );
51
- const clampedPoint = minimapRef.current.minimapScreenPointToPagePoint(
52
- e.clientX,
53
- e.clientY,
54
- false,
55
- true
56
- );
57
- minimapRef.current.originPagePoint.setTo(clampedPoint);
58
- minimapRef.current.originPageCenter.setTo(editor.getViewportPageBounds().center);
46
+ const minimap = minimapRef.current;
47
+ if (!minimap) return;
48
+ const { clientX: x, clientY: y } = e;
49
+ const clampedPoint = minimap.minimapScreenPointToPagePoint(x, y, false, true);
50
+ minimap.originPagePoint.setTo(clampedPoint);
51
+ minimap.originPageCenter.setTo(editor.getViewportPageBounds().center);
52
+ const point = minimap.minimapScreenPointToPagePoint(x, y, false, false);
59
53
  editor.centerOnPoint(point, { animation: { duration: editor.options.animationMediumMs } });
60
54
  },
61
55
  [editor]
62
56
  );
63
57
  const onPointerDown = React.useCallback(
64
58
  (e) => {
65
- if (!minimapRef.current) return;
59
+ const minimap = minimapRef.current;
60
+ if (!minimap) return;
66
61
  if (e.button !== 0) return;
67
62
  const elm = e.currentTarget;
68
63
  setPointerCapture(elm, e);
69
64
  if (!editor.getCurrentPageShapeIds().size) return;
65
+ const { clientX: x, clientY: y } = e;
70
66
  rPointing.current = true;
71
67
  rActivePointerId.current = e.pointerId;
72
- minimapRef.current.isInViewport = false;
73
- const point = minimapRef.current.minimapScreenPointToPagePoint(
74
- e.clientX,
75
- e.clientY,
76
- false,
77
- false
78
- );
79
- const _vpPageBounds = editor.getViewportPageBounds();
80
- const commonBounds = minimapRef.current.getContentPageBounds();
68
+ rOriginScreenPoint.current = new Vec(x, y);
69
+ minimap.isInViewport = false;
70
+ const point = minimap.minimapScreenPointToPagePoint(x, y, false, false);
71
+ const vpPageBounds = editor.getViewportPageBounds();
72
+ const commonBounds = minimap.getContentPageBounds();
81
73
  const allowedBounds = new Box(
82
- commonBounds.x - _vpPageBounds.width / 2,
83
- commonBounds.y - _vpPageBounds.height / 2,
84
- commonBounds.width + _vpPageBounds.width,
85
- commonBounds.height + _vpPageBounds.height
74
+ commonBounds.x - vpPageBounds.width / 2,
75
+ commonBounds.y - vpPageBounds.height / 2,
76
+ commonBounds.width + vpPageBounds.width,
77
+ commonBounds.height + vpPageBounds.height
86
78
  );
87
- if (allowedBounds.containsPoint(point) && !_vpPageBounds.containsPoint(point)) {
88
- minimapRef.current.isInViewport = _vpPageBounds.containsPoint(point);
89
- const delta = Vec.Sub(_vpPageBounds.center, _vpPageBounds.point);
79
+ if (allowedBounds.containsPoint(point) && !vpPageBounds.containsPoint(point)) {
80
+ const delta = Vec.Sub(vpPageBounds.center, vpPageBounds.point);
90
81
  const pagePoint = Vec.Add(point, delta);
91
- minimapRef.current.originPagePoint.setTo(pagePoint);
92
- minimapRef.current.originPageCenter.setTo(point);
82
+ minimap.originPagePoint.setTo(pagePoint);
83
+ minimap.originPageCenter.setTo(point);
93
84
  editor.centerOnPoint(point, { animation: { duration: editor.options.animationMediumMs } });
94
85
  } else {
95
- const clampedPoint = minimapRef.current.minimapScreenPointToPagePoint(
96
- e.clientX,
97
- e.clientY,
98
- false,
99
- true
100
- );
101
- minimapRef.current.isInViewport = _vpPageBounds.containsPoint(clampedPoint);
102
- minimapRef.current.originPagePoint.setTo(clampedPoint);
103
- minimapRef.current.originPageCenter.setTo(_vpPageBounds.center);
86
+ const clampedPoint = minimap.minimapScreenPointToPagePoint(x, y, false, true);
87
+ minimap.isInViewport = vpPageBounds.containsPoint(clampedPoint);
88
+ minimap.originPagePoint.setTo(clampedPoint);
89
+ minimap.originPageCenter.setTo(vpPageBounds.center);
104
90
  }
91
+ const body = editor.getContainerDocument().body;
105
92
  function endDrag() {
106
93
  if (rActivePointerId.current !== null && elm.hasPointerCapture(rActivePointerId.current)) {
107
94
  elm.releasePointerCapture(rActivePointerId.current);
108
95
  }
109
96
  rPointing.current = false;
110
97
  rActivePointerId.current = null;
111
- body.removeEventListener("pointerup", onPointerUp);
112
- body.removeEventListener("pointercancel", onPointerCancel);
113
- body.removeEventListener("contextmenu", onContextMenu, true);
114
- }
115
- function onPointerUp() {
116
- endDrag();
117
- }
118
- function onPointerCancel() {
119
- endDrag();
120
- }
121
- function onContextMenu() {
122
- endDrag();
98
+ body.removeEventListener("pointerup", endDrag);
99
+ body.removeEventListener("pointercancel", endDrag);
100
+ body.removeEventListener("contextmenu", endDrag, true);
123
101
  }
124
- const body = editor.getContainerDocument().body;
125
- body.addEventListener("pointerup", onPointerUp);
126
- body.addEventListener("pointercancel", onPointerCancel);
127
- body.addEventListener("contextmenu", onContextMenu, true);
102
+ body.addEventListener("pointerup", endDrag);
103
+ body.addEventListener("pointercancel", endDrag);
104
+ body.addEventListener("contextmenu", endDrag, true);
128
105
  },
129
106
  [editor]
130
107
  );
131
108
  const onPointerMove = React.useCallback(
132
109
  (e) => {
133
- if (!minimapRef.current) return;
134
- const point = minimapRef.current.minimapScreenPointToPagePoint(
135
- e.clientX,
136
- e.clientY,
137
- e.shiftKey,
138
- true
139
- );
110
+ const minimap = minimapRef.current;
111
+ if (!minimap) return;
112
+ const { clientX: x, clientY: y } = e;
113
+ const point = minimap.minimapScreenPointToPagePoint(x, y, e.shiftKey, true);
140
114
  if (rPointing.current) {
141
- if (minimapRef.current.isInViewport) {
142
- const delta = minimapRef.current.originPagePoint.clone().sub(minimapRef.current.originPageCenter);
115
+ if (Vec.Dist2(rOriginScreenPoint.current, new Vec(x, y)) <= CLICK_JITTER_THRESHOLD_SQ) {
116
+ return;
117
+ }
118
+ if (minimap.isInViewport) {
119
+ const delta = minimap.originPagePoint.clone().sub(minimap.originPageCenter);
143
120
  editor.centerOnPoint(Vec.Sub(point, delta));
144
121
  return;
145
122
  }
146
123
  editor.centerOnPoint(point);
147
124
  }
148
- const pagePoint = minimapRef.current.getMinimapPagePoint(e.clientX, e.clientY);
125
+ const pagePoint = minimap.getMinimapPagePoint(x, y);
149
126
  const screenPoint = editor.pageToScreen(pagePoint);
150
127
  const info = {
151
128
  type: "pointer",
@@ -187,10 +164,10 @@ function DefaultMinimap() {
187
164
  return /* @__PURE__ */ jsx("div", { className: "tlui-minimap", children: /* @__PURE__ */ jsx(
188
165
  "canvas",
189
166
  {
167
+ ref: rCanvas,
190
168
  role: "img",
191
169
  "aria-label": msg("navigation-zone.minimap"),
192
170
  "data-testid": "minimap.canvas",
193
- ref: rCanvas,
194
171
  className: "tlui-minimap__canvas",
195
172
  onDoubleClick,
196
173
  onPointerMove,