tldraw 4.2.0-next.f100cedfc45b → 4.3.0-canary.03ae87dcc44b

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 (268) hide show
  1. package/dist-cjs/index.d.ts +17 -7
  2. package/dist-cjs/index.js +1 -1
  3. package/dist-cjs/lib/bindings/arrow/ArrowBindingUtil.js.map +2 -2
  4. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +5 -2
  5. package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +2 -2
  6. package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
  7. package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
  8. package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +2 -2
  9. package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
  10. package/dist-cjs/lib/shapes/arrow/elbow/elbowArrowSnapLines.js.map +2 -2
  11. package/dist-cjs/lib/shapes/arrow/shared.js.map +2 -2
  12. package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
  13. package/dist-cjs/lib/shapes/bookmark/bookmarks.js.map +2 -2
  14. package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +2 -2
  15. package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +2 -2
  16. package/dist-cjs/lib/shapes/frame/FrameShapeTool.js.map +1 -1
  17. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js +63 -36
  18. package/dist-cjs/lib/shapes/frame/components/FrameLabelInput.js.map +2 -2
  19. package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js.map +2 -2
  20. package/dist-cjs/lib/shapes/line/toolStates/Pointing.js.map +2 -2
  21. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +3 -3
  22. package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
  23. package/dist-cjs/lib/shapes/note/noteHelpers.js.map +2 -2
  24. package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +2 -2
  25. package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +2 -2
  26. package/dist-cjs/lib/shapes/shared/ShapeFill.js +3 -0
  27. package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
  28. package/dist-cjs/lib/shapes/shared/crop.js +1 -0
  29. package/dist-cjs/lib/shapes/shared/crop.js.map +2 -2
  30. package/dist-cjs/lib/shapes/shared/useEditablePlainText.js.map +2 -2
  31. package/dist-cjs/lib/shapes/shared/useEditableRichText.js.map +2 -2
  32. package/dist-cjs/lib/shapes/text/toolStates/Pointing.js.map +2 -2
  33. package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
  34. package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
  35. package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js +1 -4
  36. package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js.map +2 -2
  37. package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js.map +2 -2
  38. package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js.map +2 -2
  39. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +15 -7
  40. package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
  41. package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js.map +2 -2
  42. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +2 -2
  43. package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
  44. package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js.map +2 -2
  45. package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js.map +2 -2
  46. package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js.map +2 -2
  47. package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
  48. package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js.map +2 -2
  49. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
  50. package/dist-cjs/lib/ui/components/Dialogs.js +2 -14
  51. package/dist-cjs/lib/ui/components/Dialogs.js.map +2 -2
  52. package/dist-cjs/lib/ui/components/EditLinkDialog.js +11 -1
  53. package/dist-cjs/lib/ui/components/EditLinkDialog.js.map +2 -2
  54. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js +5 -4
  55. package/dist-cjs/lib/ui/components/PageMenu/DefaultPageMenu.js.map +2 -2
  56. package/dist-cjs/lib/ui/components/Toolbar/AltTextEditor.js.map +2 -2
  57. package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbarContent.js +2 -1
  58. package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbarContent.js.map +2 -2
  59. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  60. package/dist-cjs/lib/ui/components/primitives/Button/TldrawUiButton.js +2 -2
  61. package/dist-cjs/lib/ui/components/primitives/Button/TldrawUiButton.js.map +2 -2
  62. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +2 -1
  63. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  64. package/dist-cjs/lib/ui/context/actions.js +17 -2
  65. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  66. package/dist-cjs/lib/ui/context/events.js.map +2 -2
  67. package/dist-cjs/lib/ui/hooks/menu-hooks.js.map +2 -2
  68. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +18 -16
  69. package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +3 -3
  70. package/dist-cjs/lib/ui/hooks/useFlatten.js.map +2 -2
  71. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  72. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  73. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +1 -0
  74. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  75. package/dist-cjs/lib/ui/hooks/useTranslation/useTranslation.js +1 -0
  76. package/dist-cjs/lib/ui/hooks/useTranslation/useTranslation.js.map +2 -2
  77. package/dist-cjs/lib/ui/version.js +3 -3
  78. package/dist-cjs/lib/ui/version.js.map +1 -1
  79. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +8 -0
  80. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
  81. package/dist-cjs/lib/utils/export/exportAs.js.map +2 -2
  82. package/dist-cjs/lib/utils/frames/frames.js.map +2 -2
  83. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
  84. package/dist-esm/index.d.mts +17 -7
  85. package/dist-esm/index.mjs +1 -1
  86. package/dist-esm/lib/bindings/arrow/ArrowBindingUtil.mjs.map +2 -2
  87. package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs +6 -2
  88. package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +2 -2
  89. package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
  90. package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
  91. package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +2 -2
  92. package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
  93. package/dist-esm/lib/shapes/arrow/elbow/elbowArrowSnapLines.mjs.map +2 -2
  94. package/dist-esm/lib/shapes/arrow/shared.mjs.map +2 -2
  95. package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
  96. package/dist-esm/lib/shapes/bookmark/bookmarks.mjs.map +2 -2
  97. package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +2 -2
  98. package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +2 -2
  99. package/dist-esm/lib/shapes/frame/FrameShapeTool.mjs.map +1 -1
  100. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs +65 -38
  101. package/dist-esm/lib/shapes/frame/components/FrameLabelInput.mjs.map +2 -2
  102. package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs.map +2 -2
  103. package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs.map +2 -2
  104. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +5 -5
  105. package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
  106. package/dist-esm/lib/shapes/note/noteHelpers.mjs.map +2 -2
  107. package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
  108. package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
  109. package/dist-esm/lib/shapes/shared/ShapeFill.mjs +3 -0
  110. package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
  111. package/dist-esm/lib/shapes/shared/crop.mjs +1 -0
  112. package/dist-esm/lib/shapes/shared/crop.mjs.map +2 -2
  113. package/dist-esm/lib/shapes/shared/useEditablePlainText.mjs.map +2 -2
  114. package/dist-esm/lib/shapes/shared/useEditableRichText.mjs.map +2 -2
  115. package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs.map +2 -2
  116. package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
  117. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +1 -4
  118. package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
  119. package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs +1 -4
  120. package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs.map +2 -2
  121. package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs.map +2 -2
  122. package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs.map +2 -2
  123. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +15 -7
  124. package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
  125. package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs.map +2 -2
  126. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +2 -2
  127. package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
  128. package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs.map +2 -2
  129. package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs +1 -4
  130. package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs.map +2 -2
  131. package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs.map +2 -2
  132. package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
  133. package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs.map +2 -2
  134. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
  135. package/dist-esm/lib/ui/components/Dialogs.mjs +2 -14
  136. package/dist-esm/lib/ui/components/Dialogs.mjs.map +2 -2
  137. package/dist-esm/lib/ui/components/EditLinkDialog.mjs +11 -1
  138. package/dist-esm/lib/ui/components/EditLinkDialog.mjs.map +2 -2
  139. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs +5 -5
  140. package/dist-esm/lib/ui/components/PageMenu/DefaultPageMenu.mjs.map +2 -2
  141. package/dist-esm/lib/ui/components/Toolbar/AltTextEditor.mjs.map +2 -2
  142. package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbarContent.mjs +2 -1
  143. package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbarContent.mjs.map +2 -2
  144. package/dist-esm/lib/ui/components/menu-items.mjs +1 -4
  145. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  146. package/dist-esm/lib/ui/components/primitives/Button/TldrawUiButton.mjs +2 -2
  147. package/dist-esm/lib/ui/components/primitives/Button/TldrawUiButton.mjs.map +2 -2
  148. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +2 -1
  149. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  150. package/dist-esm/lib/ui/context/actions.mjs +17 -2
  151. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  152. package/dist-esm/lib/ui/context/events.mjs.map +2 -2
  153. package/dist-esm/lib/ui/hooks/menu-hooks.mjs +1 -4
  154. package/dist-esm/lib/ui/hooks/menu-hooks.mjs.map +2 -2
  155. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +18 -16
  156. package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +3 -3
  157. package/dist-esm/lib/ui/hooks/useFlatten.mjs.map +2 -2
  158. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  159. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +1 -0
  160. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  161. package/dist-esm/lib/ui/hooks/useTranslation/useTranslation.mjs +1 -0
  162. package/dist-esm/lib/ui/hooks/useTranslation/useTranslation.mjs.map +2 -2
  163. package/dist-esm/lib/ui/version.mjs +3 -3
  164. package/dist-esm/lib/ui/version.mjs.map +1 -1
  165. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +8 -0
  166. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
  167. package/dist-esm/lib/utils/export/exportAs.mjs +1 -3
  168. package/dist-esm/lib/utils/export/exportAs.mjs.map +2 -2
  169. package/dist-esm/lib/utils/frames/frames.mjs.map +2 -2
  170. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
  171. package/package.json +10 -10
  172. package/src/lib/bindings/arrow/ArrowBindingUtil.ts +1 -1
  173. package/src/lib/canvas/TldrawSelectionForeground.tsx +18 -7
  174. package/src/lib/defaultExternalContentHandlers.ts +3 -4
  175. package/src/lib/shapes/arrow/ArrowShapeUtil.test.ts +2 -2
  176. package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +1 -1
  177. package/src/lib/shapes/arrow/arrowLabel.ts +1 -1
  178. package/src/lib/shapes/arrow/arrowTargetState.ts +1 -1
  179. package/src/lib/shapes/arrow/elbow/elbowArrowSnapLines.tsx +3 -3
  180. package/src/lib/shapes/arrow/shared.ts +4 -4
  181. package/src/lib/shapes/arrow/toolStates/Pointing.tsx +1 -1
  182. package/src/lib/shapes/bookmark/bookmarks.ts +3 -3
  183. package/src/lib/shapes/draw/toolStates/Drawing.ts +4 -4
  184. package/src/lib/shapes/embed/EmbedShapeUtil.tsx +1 -1
  185. package/src/lib/shapes/frame/FrameShapeTool.ts +1 -1
  186. package/src/lib/shapes/frame/components/FrameLabelInput.tsx +48 -24
  187. package/src/lib/shapes/geo/GeoShapeUtil.test.tsx +10 -2
  188. package/src/lib/shapes/geo/toolStates/Pointing.ts +3 -3
  189. package/src/lib/shapes/line/LineShapeTool.test.ts +6 -6
  190. package/src/lib/shapes/line/LineShapeUtil.test.tsx +5 -5
  191. package/src/lib/shapes/line/toolStates/Pointing.ts +1 -1
  192. package/src/lib/shapes/note/NoteShapeTool.test.ts +2 -1
  193. package/src/lib/shapes/note/NoteShapeUtil.tsx +6 -5
  194. package/src/lib/shapes/note/noteHelpers.ts +2 -2
  195. package/src/lib/shapes/shared/PlainTextLabel.tsx +2 -1
  196. package/src/lib/shapes/shared/RichTextLabel.tsx +2 -1
  197. package/src/lib/shapes/shared/ShapeFill.tsx +3 -0
  198. package/src/lib/shapes/shared/crop.ts +1 -0
  199. package/src/lib/shapes/shared/useEditablePlainText.ts +7 -3
  200. package/src/lib/shapes/shared/useEditableRichText.ts +7 -3
  201. package/src/lib/shapes/text/TextShapeTool.test.ts +4 -4
  202. package/src/lib/shapes/text/toolStates/Pointing.ts +1 -1
  203. package/src/lib/tools/EraserTool/childStates/Erasing.ts +3 -5
  204. package/src/lib/tools/EraserTool/childStates/Pointing.ts +3 -16
  205. package/src/lib/tools/SelectTool/DragAndDropManager.ts +2 -4
  206. package/src/lib/tools/SelectTool/childStates/Brushing.ts +2 -6
  207. package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +2 -3
  208. package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +23 -15
  209. package/src/lib/tools/SelectTool/childStates/EditingShape.ts +2 -4
  210. package/src/lib/tools/SelectTool/childStates/Idle.ts +8 -12
  211. package/src/lib/tools/SelectTool/childStates/PointingArrowLabel.ts +1 -1
  212. package/src/lib/tools/SelectTool/childStates/PointingHandle.ts +4 -12
  213. package/src/lib/tools/SelectTool/childStates/PointingSelection.ts +2 -2
  214. package/src/lib/tools/SelectTool/childStates/Resizing.ts +2 -4
  215. package/src/lib/tools/SelectTool/childStates/ScribbleBrushing.ts +2 -4
  216. package/src/lib/tools/SelectTool/childStates/Translating.ts +1 -3
  217. package/src/lib/ui/components/Dialogs.tsx +2 -14
  218. package/src/lib/ui/components/EditLinkDialog.tsx +16 -6
  219. package/src/lib/ui/components/PageMenu/DefaultPageMenu.tsx +6 -5
  220. package/src/lib/ui/components/Toolbar/AltTextEditor.tsx +2 -2
  221. package/src/lib/ui/components/Toolbar/DefaultRichTextToolbarContent.tsx +4 -1
  222. package/src/lib/ui/components/menu-items.tsx +6 -14
  223. package/src/lib/ui/components/primitives/Button/TldrawUiButton.tsx +3 -2
  224. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +1 -0
  225. package/src/lib/ui/context/actions.tsx +25 -13
  226. package/src/lib/ui/context/events.tsx +1 -0
  227. package/src/lib/ui/hooks/menu-hooks.ts +9 -19
  228. package/src/lib/ui/hooks/useClipboardEvents.ts +12 -9
  229. package/src/lib/ui/hooks/useFlatten.ts +1 -2
  230. package/src/lib/ui/hooks/useTools.tsx +1 -2
  231. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +1 -0
  232. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +1 -0
  233. package/src/lib/ui/hooks/useTranslation/useTranslation.tsx +2 -1
  234. package/src/lib/ui/version.ts +3 -3
  235. package/src/lib/ui.css +4 -6
  236. package/src/lib/utils/excalidraw/putExcalidrawContent.ts +8 -0
  237. package/src/lib/utils/export/exportAs.ts +2 -9
  238. package/src/lib/utils/frames/frames.ts +1 -1
  239. package/src/lib/utils/tldr/buildFromV1Document.ts +12 -17
  240. package/src/test/Editor.test.tsx +38 -12
  241. package/src/test/SelectTool.test.ts +11 -19
  242. package/src/test/TestEditor.ts +1 -4
  243. package/src/test/TldrawEditor.test.tsx +87 -40
  244. package/src/test/bindings.test.tsx +29 -25
  245. package/src/test/bindingsIndex.test.tsx +4 -4
  246. package/src/test/commands/createShape.test.ts +64 -0
  247. package/src/test/commands/createShapes.test.ts +15 -1
  248. package/src/test/commands/getSvgString.test.ts +2 -2
  249. package/src/test/commands/isShapeOfType.test.ts +44 -0
  250. package/src/test/commands/putContent.test.ts +1 -0
  251. package/src/test/commands/updateShape.test.ts +67 -0
  252. package/src/test/commands/updateShapes.test.ts +21 -5
  253. package/src/test/custom-clipping.test.ts +36 -35
  254. package/src/test/customSnapping.test.tsx +254 -54
  255. package/src/test/duplicate.test.ts +1 -1
  256. package/src/test/frames.test.ts +2 -2
  257. package/src/test/getCulledShapes.test.tsx +11 -3
  258. package/src/test/getShapeAtPoint.test.ts +2 -2
  259. package/src/test/groups.test.tsx +6 -3
  260. package/src/test/resizing.test.ts +9 -13
  261. package/src/test/selection-omnibus.test.ts +11 -11
  262. package/src/test/shapeutils.test.ts +1 -1
  263. package/src/test/styles2.test.tsx +1 -1
  264. package/src/test/styles3.test.ts +5 -5
  265. package/src/test/test-jsx.tsx +69 -57
  266. package/src/test/text.test.ts +15 -17
  267. package/src/test/translating.test.ts +6 -8
  268. package/tldraw.css +4 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/hooks/useTranslation/defaultTranslation.ts"],
4
- "sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\n/** @internal */\nexport const DEFAULT_TRANSLATION = {\n\t'action.toggle-auto-pan': 'Auto (trackpad)',\n\t'action.toggle-auto-zoom': 'Auto (mouse)',\n\t'action.toggle-auto-none': 'Auto',\n\t'action.toggle-mouse': 'Mouse',\n\t'action.toggle-trackpad': 'Trackpad',\n\t'action.convert-to-bookmark': 'Convert to bookmark',\n\t'action.convert-to-embed': 'Convert to embed',\n\t'action.open-embed-link': 'Open link',\n\t'action.align-bottom': 'Align bottom',\n\t'action.align-center-horizontal': 'Align horizontally',\n\t'action.align-center-vertical': 'Align vertically',\n\t'action.align-center-horizontal.short': 'Align H',\n\t'action.align-center-vertical.short': 'Align V',\n\t'action.align-left': 'Align left',\n\t'action.align-right': 'Align right',\n\t'action.align-top': 'Align top',\n\t'action.back-to-content': 'Back to content',\n\t'action.bring-forward': 'Bring forward',\n\t'action.bring-to-front': 'Bring to front',\n\t'action.copy-as-png.short': 'PNG',\n\t'action.copy-as-png': 'Copy as PNG',\n\t'action.copy-as-svg.short': 'SVG',\n\t'action.copy-as-svg': 'Copy as SVG',\n\t'action.copy': 'Copy',\n\t'action.cut': 'Cut',\n\t'action.delete': 'Delete',\n\t'action.unlock-all': 'Unlock all',\n\t'action.distribute-horizontal': 'Distribute horizontally',\n\t'action.distribute-vertical': 'Distribute vertically',\n\t'action.distribute-horizontal.short': 'Distribute H',\n\t'action.distribute-vertical.short': 'Distribute V',\n\t'action.download-original': 'Download original',\n\t'action.duplicate': 'Duplicate',\n\t'action.edit-link': 'Edit link',\n\t'action.exit-pen-mode': 'Exit pen mode',\n\t'action.export-as-png.short': 'PNG',\n\t'action.export-as-png': 'Export as PNG',\n\t'action.export-as-svg.short': 'SVG',\n\t'action.export-as-svg': 'Export as SVG',\n\t'action.export-all-as-png.short': 'PNG',\n\t'action.export-all-as-png': 'Export as PNG',\n\t'action.export-all-as-svg.short': 'SVG',\n\t'action.export-all-as-svg': 'Export as SVG',\n\t'action.fit-frame-to-content': 'Fit to content',\n\t'action.flip-horizontal': 'Flip horizontally',\n\t'action.flip-vertical': 'Flip vertically',\n\t'action.flip-horizontal.short': 'Flip H',\n\t'action.flip-vertical.short': 'Flip V',\n\t'action.fork-project': 'Fork this project',\n\t'action.fork-project-on-tldraw': 'Fork project on tldraw',\n\t'action.group': 'Group',\n\t'action.insert-embed': 'Insert embed',\n\t'action.insert-media': 'Upload media',\n\t'action.leave-shared-project': 'Leave shared project',\n\t'action.new-project': 'New project',\n\t'action.new-shared-project': 'New shared project',\n\t'action.open-cursor-chat': 'Cursor chat',\n\t'action.open-kbd-shortcuts': 'Open keyboard shortcuts',\n\t'action.open-file': 'Open file',\n\t'action.pack': 'Pack',\n\t'action.paste': 'Paste',\n\t'action.paste-error-title': 'Pasting failed',\n\t'action.paste-error-description':\n\t\t'Could not paste due to missing clipboard permissions. Please enable the permissions and try again.',\n\t'action.print': 'Print',\n\t'action.redo': 'Redo',\n\t'action.remove-frame': 'Remove frame',\n\t'action.rename': 'Rename',\n\t'action.rotate-ccw': 'Rotate counterclockwise',\n\t'action.rotate-cw': 'Rotate clockwise',\n\t'action.save-copy': 'Save a copy',\n\t'action.select-all': 'Select all',\n\t'action.select-none': 'Select none',\n\t'action.send-backward': 'Send backward',\n\t'action.send-to-back': 'Send to back',\n\t'action.share-project': 'Share this project',\n\t'action.stack-horizontal': 'Stack horizontally',\n\t'action.stack-vertical': 'Stack vertically',\n\t'action.stack-horizontal.short': 'Stack H',\n\t'action.stack-vertical.short': 'Stack V',\n\t'action.stop-following': 'Stop following',\n\t'action.stretch-horizontal': 'Stretch horizontally',\n\t'action.stretch-vertical': 'Stretch vertically',\n\t'action.stretch-horizontal.short': 'Stretch H',\n\t'action.stretch-vertical.short': 'Stretch V',\n\t'action.toggle-auto-size': 'Toggle auto size',\n\t'action.toggle-dark-mode.menu': 'Dark mode',\n\t'action.toggle-dark-mode': 'Toggle dark mode',\n\t'action.toggle-paste-at-cursor.menu': 'Paste at cursor',\n\t'action.toggle-paste-at-cursor': 'Toggle paste at cursor',\n\t'action.toggle-wrap-mode.menu': 'Select on wrap',\n\t'action.toggle-wrap-mode': 'Toggle select on wrap',\n\t'action.toggle-reduce-motion.menu': 'Reduce motion',\n\t'action.toggle-reduce-motion': 'Toggle reduce motion',\n\t'action.toggle-keyboard-shortcuts.menu': 'Enable keyboard shortcuts',\n\t'action.toggle-keyboard-shortcuts': 'Toggle keyboard shortcuts',\n\t'action.enhanced-a11y-mode.menu': 'Enhanced accessibility mode',\n\t'action.enhanced-a11y-mode': 'Toggle enhanced accessibility mode',\n\t'action.toggle-edge-scrolling.menu': 'Edge scrolling',\n\t'action.toggle-edge-scrolling': 'Toggle edge scrolling',\n\t'action.toggle-debug-mode.menu': 'Debug mode',\n\t'action.toggle-debug-mode': 'Toggle debug mode',\n\t'action.toggle-focus-mode.menu': 'Focus mode',\n\t'action.toggle-focus-mode': 'Toggle focus mode',\n\t'action.toggle-dynamic-size-mode.menu': 'Dynamic size',\n\t'action.toggle-dynamic-size-mode': 'Toggle dynamic size',\n\t'action.toggle-grid.menu': 'Show grid',\n\t'action.toggle-grid': 'Toggle grid',\n\t'action.toggle-lock': 'Toggle locked',\n\t'action.flatten-to-image': 'Flatten',\n\t'action.toggle-snap-mode.menu': 'Always snap',\n\t'action.toggle-snap-mode': 'Toggle always snap',\n\t'action.toggle-tool-lock.menu': 'Tool lock',\n\t'action.toggle-tool-lock': 'Toggle tool lock',\n\t'action.toggle-transparent.context-menu': 'Transparent',\n\t'action.toggle-transparent.menu': 'Transparent',\n\t'action.toggle-transparent': 'Toggle transparent background',\n\t'action.undo': 'Undo',\n\t'action.ungroup': 'Ungroup',\n\t'action.zoom-in': 'Zoom in',\n\t'action.zoom-out': 'Zoom out',\n\t'action.zoom-to-100': 'Zoom to 100%',\n\t'action.zoom-to-fit': 'Zoom to fit',\n\t'action.zoom-to-selection': 'Zoom to selection',\n\t'assets.files.size-too-big': 'File size is too big',\n\t'assets.files.maximum-size': 'Maximum file size is {size}',\n\t'assets.files.type-not-allowed': 'File type is not allowed',\n\t'assets.files.upload-failed': 'Upload failed',\n\t'assets.files.amount-too-many': 'Too many files',\n\t'assets.url.failed': 'Couldn\u2019t load URL preview',\n\t'theme.dark': 'Dark',\n\t'theme.light': 'Light',\n\t'theme.system': 'System',\n\t'color-style.white': 'White',\n\t'color-style.black': 'Black',\n\t'color-style.blue': 'Blue',\n\t'color-style.green': 'Green',\n\t'color-style.grey': 'Grey',\n\t'color-style.light-blue': 'Light blue',\n\t'color-style.light-green': 'Light green',\n\t'color-style.light-red': 'Light red',\n\t'color-style.light-violet': 'Light violet',\n\t'color-style.orange': 'Orange',\n\t'color-style.red': 'Red',\n\t'color-style.violet': 'Violet',\n\t'color-style.yellow': 'Yellow',\n\t'fill-style.none': 'None',\n\t'document.default-name': 'Untitled',\n\t'fill-style.semi': 'Semi',\n\t'fill-style.solid': 'Solid',\n\t'fill-style.pattern': 'Pattern',\n\t'fill-style.fill': 'Fill',\n\t'dash-style.dashed': 'Dashed',\n\t'dash-style.dotted': 'Dotted',\n\t'dash-style.draw': 'Draw',\n\t'dash-style.solid': 'Solid',\n\t'size-style.s': 'Small',\n\t'size-style.m': 'Medium',\n\t'size-style.l': 'Large',\n\t'size-style.xl': 'Extra large',\n\t'opacity-style.0.1': '10%',\n\t'opacity-style.0.25': '25%',\n\t'opacity-style.0.5': '50%',\n\t'opacity-style.0.75': '75%',\n\t'opacity-style.1': '100%',\n\t'font-style.draw': 'Draw',\n\t'font-style.sans': 'Sans',\n\t'font-style.serif': 'Serif',\n\t'font-style.mono': 'Mono',\n\t'align-style.start': 'Start',\n\t'align-style.middle': 'Middle',\n\t'align-style.end': 'End',\n\t'align-style.justify': 'Justify',\n\t'verticalAlign-style.start': 'Top',\n\t'verticalAlign-style.middle': 'Middle',\n\t'verticalAlign-style.end': 'Bottom',\n\t'geo-style.arrow-down': 'Arrow down',\n\t'geo-style.arrow-left': 'Arrow left',\n\t'geo-style.arrow-right': 'Arrow right',\n\t'geo-style.arrow-up': 'Arrow up',\n\t'geo-style.cloud': 'Cloud',\n\t'geo-style.diamond': 'Diamond',\n\t'geo-style.ellipse': 'Ellipse',\n\t'geo-style.heart': 'Heart',\n\t'geo-style.hexagon': 'Hexagon',\n\t'geo-style.octagon': 'Octagon',\n\t'geo-style.oval': 'Oval',\n\t'geo-style.pentagon': 'Pentagon',\n\t'geo-style.rectangle': 'Rectangle',\n\t'geo-style.rhombus': 'Rhombus',\n\t'geo-style.rhombus-2': 'Rhombus left',\n\t'geo-style.star': 'Star',\n\t'geo-style.trapezoid': 'Trapezoid',\n\t'geo-style.triangle': 'Triangle',\n\t'geo-style.x-box': 'X box',\n\t'geo-style.check-box': 'Check box',\n\t'arrowheadStart-style.none': 'None',\n\t'arrowheadStart-style.arrow': 'Arrow',\n\t'arrowheadStart-style.bar': 'Bar',\n\t'arrowheadStart-style.diamond': 'Diamond',\n\t'arrowheadStart-style.dot': 'Dot',\n\t'arrowheadStart-style.inverted': 'Inverted',\n\t'arrowheadStart-style.pipe': 'Pipe',\n\t'arrowheadStart-style.square': 'Square',\n\t'arrowheadStart-style.triangle': 'Triangle',\n\t'arrowheadEnd-style.none': 'None',\n\t'arrowheadEnd-style.arrow': 'Arrow',\n\t'arrowheadEnd-style.bar': 'Bar',\n\t'arrowheadEnd-style.diamond': 'Diamond',\n\t'arrowheadEnd-style.dot': 'Dot',\n\t'arrowheadEnd-style.inverted': 'Inverted',\n\t'arrowheadEnd-style.pipe': 'Pipe',\n\t'arrowheadEnd-style.square': 'Square',\n\t'arrowheadEnd-style.triangle': 'Triangle',\n\t'spline-style.line': 'Line',\n\t'spline-style.cubic': 'Cubic',\n\t'arrow-kind-style.arc': 'Arc',\n\t'arrow-kind-style.elbow': 'Elbow',\n\t'tool.select': 'Select',\n\t'tool.hand': 'Hand',\n\t'tool.draw': 'Draw',\n\t'tool.eraser': 'Eraser',\n\t'tool.arrow-down': 'Arrow down',\n\t'tool.arrow-left': 'Arrow left',\n\t'tool.arrow-right': 'Arrow right',\n\t'tool.arrow-up': 'Arrow up',\n\t'tool.arrow': 'Arrow',\n\t'tool.cloud': 'Cloud',\n\t'tool.diamond': 'Diamond',\n\t'tool.ellipse': 'Ellipse',\n\t'tool.heart': 'Heart',\n\t'tool.hexagon': 'Hexagon',\n\t'tool.highlight': 'Highlight',\n\t'tool.line': 'Line',\n\t'tool.octagon': 'Octagon',\n\t'tool.oval': 'Oval',\n\t'tool.pentagon': 'Pentagon',\n\t'tool.rectangle': 'Rectangle',\n\t'tool.rhombus': 'Rhombus',\n\t'tool.star': 'Star',\n\t'tool.trapezoid': 'Trapezoid',\n\t'tool.triangle': 'Triangle',\n\t'tool.x-box': 'X box',\n\t'tool.check-box': 'Check box',\n\t'tool.media': 'Media',\n\t'tool.frame': 'Frame',\n\t'tool.note': 'Note',\n\t'tool.laser': 'Laser',\n\t'tool.embed': 'Embed',\n\t'tool.text': 'Text',\n\t'tool.pointer-down': 'Pointer down',\n\t'tool.image-zoom': 'Zoom',\n\t'tool.replace-media': 'Replace media',\n\t'tool.flip-horz': 'Flip horizontally',\n\t'tool.flip-vert': 'Flip vertically',\n\t'tool.rotate-cw': 'Rotate',\n\t'tool.aspect-ratio': 'Aspect ratio',\n\t'tool.aspect-ratio.original': 'Original',\n\t'tool.aspect-ratio.square': 'Square (1:1)',\n\t'tool.aspect-ratio.circle': 'Circle (1:1)',\n\t'tool.aspect-ratio.landscape': 'Landscape (4:3)',\n\t'tool.aspect-ratio.portrait': 'Portrait (3:4)',\n\t'tool.aspect-ratio.wide': 'Wide (16:9)',\n\t'tool.image-toolbar-title': 'Image tools',\n\t'tool.image-crop': 'Crop image',\n\t'tool.image-crop-confirm': 'Confirm',\n\t'tool.media-alt-text': 'Alternative text',\n\t'tool.media-alt-text-desc': 'Give a description\u2026',\n\t'tool.media-alt-text-confirm': 'Confirm',\n\t'tool.rich-text-bold': 'Bold',\n\t'tool.rich-text-italic': 'Italic',\n\t'tool.rich-text-code': 'Code',\n\t'tool.rich-text-highlight': 'Highlight',\n\t'tool.rich-text-strikethrough': 'Strikethrough',\n\t'tool.rich-text-link': 'Link',\n\t'tool.rich-text-link-visit': 'Visit link',\n\t'tool.rich-text-link-remove': 'Remove link',\n\t'tool.rich-text-header': 'Header',\n\t'tool.rich-text-bulletList': 'Bulleted list',\n\t'tool.rich-text-toolbar-title': 'Text formatting',\n\t'tool.rich-text-orderedList': 'Ordered list',\n\t'tool.bookmark': 'Bookmark',\n\t'a11y.status': 'Status',\n\t'a11y.skip-to-main-content': 'Move focus to canvas',\n\t'a11y.shape-index': '{num} of {total}',\n\t'a11y.shape-image': 'Image',\n\t'a11y.shape-video': 'Video',\n\t'a11y.multiple-shapes': '{num} shapes selected',\n\t'a11y.select-shape': 'Select next shape',\n\t'a11y.select-shape-direction': 'Select shape in direction',\n\t'a11y.enter-leave-container': 'Enter/leave container',\n\t'a11y.repeat-shape': 'Repeat shape',\n\t'a11y.move-shape': 'Move shape',\n\t'a11y.move-shape-faster': 'Move shape faster',\n\t'a11y.rotate-shape-cw': 'Rotate shape clockwise',\n\t'a11y.rotate-shape-ccw': 'Rotate shape counterclockwise',\n\t'a11y.rotate-shape-cw-fine': 'Rotate shape clockwise (fine)',\n\t'a11y.rotate-shape-ccw-fine': 'Rotate shape counterclockwise (fine)',\n\t'a11y.enlarge-shape': 'Enlarge shape',\n\t'a11y.shrink-shape': 'Shrink shape',\n\t'a11y.pan-camera': 'Pan camera',\n\t'a11y.adjust-shape-styles': 'Adjust shape styles',\n\t'a11y.open-context-menu': 'Open context menu',\n\t'a11y.open-keyboard-shortcuts': 'Open keyboard shortcuts',\n\t'menu.title': 'Menu',\n\t'menu.theme': 'Theme',\n\t'menu.accessibility': 'Accessibility',\n\t'menu.copy-as': 'Copy as',\n\t'menu.edit': 'Edit',\n\t'menu.export-as': 'Export as',\n\t'menu.file': 'File',\n\t'menu.language': 'Language',\n\t'menu.preferences': 'Preferences',\n\t'menu.view': 'View',\n\t'menu.input-mode': 'Input mode',\n\t'context-menu.title': 'Context menu',\n\t'context-menu.edit': 'Edit',\n\t'context-menu.arrange': 'Arrange',\n\t'context-menu.copy-as': 'Copy as',\n\t'context-menu.export-as': 'Export as',\n\t'context-menu.export-all-as': 'Export',\n\t'context-menu.move-to-page': 'Move to page',\n\t'context-menu.reorder': 'Reorder',\n\t'page-menu.title': 'Pages',\n\t'page-menu.create-new-page': 'Create new page',\n\t'page-menu.max-page-count-reached': 'Max pages reached',\n\t'page-menu.new-page-initial-name': 'Page 1',\n\t'page-menu.edit-start': 'Edit',\n\t'page-menu.edit-done': 'Done',\n\t'page-menu.go-to-page': 'Go to page',\n\t'page-menu.submenu.rename': 'Rename',\n\t'page-menu.submenu.duplicate-page': 'Duplicate',\n\t'page-menu.submenu.title': 'Menu',\n\t'page-menu.submenu.move-down': 'Move down',\n\t'page-menu.submenu.move-up': 'Move up',\n\t'page-menu.submenu.delete': 'Delete',\n\t'share-menu.title': 'Share',\n\t'share-menu.save-note': 'Download this project to your computer as a .tldr file.',\n\t'share-menu.fork-note': 'Create a new shared project based on this snapshot.',\n\t'share-menu.share-project': 'Share this project',\n\t'share-menu.copy-link': 'Copy editor link',\n\t'share-menu.create-snapshot-link': 'Copy snapshot link',\n\t'share-menu.snapshot-link-note': 'Capture and share this project as a read-only snapshot link.',\n\t'share-menu.copy-readonly-link': 'Copy viewer link',\n\t'share-menu.offline-note': 'Create a new shared project based on your current project.',\n\t'share-menu.copy-link-note': 'Anyone with the link will be able to view and edit this project.',\n\t'share-menu.copy-readonly-link-note': 'Anyone with the link will be able to access this project.',\n\t'share-menu.project-too-large':\n\t\t'Sorry, this project can\u2019t be shared because it\u2019s too large. We\u2019re working on it!',\n\t'share-menu.upload-failed':\n\t\t'Sorry, we couldn\u2019t upload your project at the moment. Please try again or let us know if the problem persists.',\n\t'share-menu.creating-project': 'Creating the new project\u2026',\n\t'share-menu.copied': 'Copied link',\n\t'document-name-menu.copy-link': 'Copy link',\n\t'status.offline': 'Offline',\n\t'people-menu.title': 'People',\n\t'people-menu.change-name': 'Change name',\n\t'people-menu.avatar-color': 'Avatar color',\n\t'people-menu.change-color': 'Change color',\n\t'people-menu.follow': 'Following',\n\t'people-menu.following': 'Following',\n\t'people-menu.leading': 'Following you',\n\t'people-menu.user': '(You)',\n\t'people-menu.invite': 'Invite others',\n\t'people-menu.anonymous-user': 'New user',\n\t'help-menu.import-tldr-file': 'Import file\u2026',\n\t'help-menu.title': 'Help and resources',\n\t'help-menu.about': 'About tldraw',\n\t'help-menu.discord': 'Discord',\n\t'help-menu.github': 'GitHub',\n\t'help-menu.keyboard-shortcuts': 'Keyboard shortcuts',\n\t'help-menu.twitter': 'Twitter',\n\t'help-menu.terms': 'Terms of service',\n\t'help-menu.privacy': 'Privacy policy',\n\t'actions-menu.title': 'Actions',\n\t'edit-link-dialog.title': 'Edit link',\n\t'edit-link-dialog.invalid-url': 'A link must be a valid URL.',\n\t'edit-link-dialog.detail': 'Links will open in a new tab.',\n\t'edit-link-dialog.url': 'URL',\n\t'edit-link-dialog.clear': 'Clear',\n\t'edit-link-dialog.save': 'Continue',\n\t'edit-link-dialog.cancel': 'Cancel',\n\t'edit-link-dialog.external-link': 'External link',\n\t'embed-dialog.title': 'Insert embed',\n\t'embed-dialog.back': 'Back',\n\t'embed-dialog.create': 'Create',\n\t'embed-dialog.cancel': 'Cancel',\n\t'embed-dialog.url': 'URL',\n\t'embed-dialog.instruction': 'Paste in the site\u2019s URL to create the embed.',\n\t'embed-dialog.invalid-url': 'We could not create an embed from that URL.',\n\t'shortcuts-dialog.title': 'Keyboard shortcuts',\n\t'shortcuts-dialog.edit': 'Edit',\n\t'shortcuts-dialog.file': 'File',\n\t'shortcuts-dialog.preferences': 'Preferences',\n\t'shortcuts-dialog.tools': 'Tools',\n\t'shortcuts-dialog.transform': 'Transform',\n\t'shortcuts-dialog.view': 'View',\n\t'shortcuts-dialog.collaboration': 'Collaboration',\n\t'shortcuts-dialog.a11y': 'Accessibility',\n\t'shortcuts-dialog.text-formatting': 'Text formatting',\n\t'style-panel.title': 'Styles',\n\t'style-panel.align': 'Align',\n\t'style-panel.label-align': 'Label align',\n\t'style-panel.vertical-align': 'Vertical align',\n\t'style-panel.position': 'Position',\n\t'style-panel.arrowheads': 'Arrows',\n\t'style-panel.arrowhead-start': 'Start',\n\t'style-panel.arrowhead-end': 'End',\n\t'style-panel.arrow-kind': 'Line',\n\t'style-panel.color': 'Color',\n\t'style-panel.dash': 'Dash',\n\t'style-panel.fill': 'Fill',\n\t'style-panel.font': 'Font',\n\t'style-panel.geo': 'Shape',\n\t'style-panel.mixed': 'Mixed',\n\t'style-panel.opacity': 'Opacity',\n\t'style-panel.size': 'Size',\n\t'style-panel.spline': 'Spline',\n\t'style-panel.selected': 'selected',\n\t'tool-panel.title': 'Tools',\n\t'tool-panel.more': 'More',\n\t'navigation-zone.title': 'Navigation',\n\t'navigation-zone.minimap': 'Minimap',\n\t'navigation-zone.toggle-minimap': 'Toggle minimap',\n\t'navigation-zone.zoom': 'Zoom',\n\t'focus-mode.toggle-focus-mode': 'Toggle focus mode',\n\t'toast.close': 'Close',\n\t'toast.success': 'Success',\n\t'toast.error': 'Error',\n\t'toast.info': 'Info',\n\t'toast.warning': 'Warning',\n\t'file-system.file-open-error.title': 'Could not open file',\n\t'file-system.file-open-error.not-a-tldraw-file':\n\t\t'The file you tried to open doesn\u2019t look like a tldraw file.',\n\t'file-system.file-open-error.file-format-version-too-new':\n\t\t'The file you tried to open is from a newer version of tldraw. Please reload the page and try again.',\n\t'file-system.file-open-error.generic-corrupted-file': 'The file you tried to open is corrupted.',\n\t'file-system.confirm-open.title': 'Overwrite current project?',\n\t'file-system.confirm-open.description':\n\t\t'Opening a file will replace your current project and any unsaved changes will be lost. Are you sure you want to continue?',\n\t'file-system.confirm-open.cancel': 'Cancel',\n\t'file-system.confirm-open.open': 'Open file',\n\t'file-system.confirm-open.dont-show-again': 'Don\u2019t ask again',\n\t'file-system.confirm-clear.title': 'Clear current project?',\n\t'file-system.confirm-clear.description':\n\t\t'Creating a new project will clear your current project and any unsaved changes will be lost. Are you sure you want to continue?',\n\t'file-system.confirm-clear.cancel': 'Cancel',\n\t'file-system.confirm-clear.continue': 'Continue',\n\t'file-system.confirm-clear.dont-show-again': 'Don\u2019t ask again',\n\t'file-system.shared-document-file-open-error.title': 'Could not open file',\n\t'file-system.shared-document-file-open-error.description':\n\t\t'Opening files from shared projects is not supported.',\n\t'sharing.confirm-leave.title': 'Leave current project?',\n\t'sharing.confirm-leave.description':\n\t\t'Are you sure you want to leave this shared project? You can return to it by navigating to its URL.',\n\t'sharing.confirm-leave.cancel': 'Cancel',\n\t'sharing.confirm-leave.leave': 'Leave',\n\t'sharing.confirm-leave.dont-show-again': 'Don\u2019t ask again',\n\t'toast.error.export-fail.title': 'Failed export',\n\t'toast.error.export-fail.desc': 'Failed to export image',\n\t'toast.error.copy-fail.title': 'Failed copy',\n\t'toast.error.copy-fail.desc': 'Failed to copy image',\n\t'context.pages.new-page': 'New page',\n\t'vscode.file-open.desc':\n\t\t'We\u2019ve updated this document to work with the current version of tldraw. If you\u2019d like to keep the original version (which will work on old.tldraw.com), click below to create a backup.',\n\t'vscode.file-open.open': 'Continue',\n\t'vscode.file-open.backup': 'Backup',\n\t'vscode.file-open.backup-saved': 'Backup saved',\n\t'vscode.file-open.backup-failed': 'Backup failed: this is not a .tldr file.',\n\t'vscode.file-open.dont-show-again': 'Don\u2019t ask again',\n\t'cursor-chat.type-to-chat': 'Type to chat\u2026',\n\t'app.loading': 'Loading tldraw\u2026',\n\t'handle.resize-top': 'Resize top',\n\t'handle.resize-bottom': 'Resize bottom',\n\t'handle.resize-left': 'Resize left',\n\t'handle.resize-right': 'Resize right',\n\t'handle.resize-top-left': 'Resize top left',\n\t'handle.resize-top-right': 'Resize top right',\n\t'handle.resize-bottom-left': 'Resize bottom left',\n\t'handle.resize-bottom-right': 'Resize bottom right',\n\t'handle.rotate.top_left_rotate': 'Rotate top left',\n\t'handle.rotate.top_right_rotate': 'Rotate top right',\n\t'handle.rotate.bottom_left_rotate': 'Rotate bottom left',\n\t'handle.rotate.bottom_right_rotate': 'Rotate bottom right',\n\t'handle.rotate.mobile_rotate': 'Rotate',\n\t'handle.crop.top': 'Crop top',\n\t'handle.crop.bottom': 'Crop bottom',\n\t'handle.crop.left': 'Crop left',\n\t'handle.crop.right': 'Crop right',\n\t'handle.crop.top-left': 'Crop top left',\n\t'handle.crop.top-right': 'Crop top right',\n\t'handle.crop.bottom-left': 'Crop bottom left',\n\t'handle.crop.bottom-right': 'Crop bottom right',\n\t'ui.close': 'Close',\n\t'ui.checked': 'Checked',\n\t'ui.unchecked': 'Unchecked',\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\n/** @internal */\nexport const DEFAULT_TRANSLATION = {\n\t'action.toggle-auto-pan': 'Auto (trackpad)',\n\t'action.toggle-auto-zoom': 'Auto (mouse)',\n\t'action.toggle-auto-none': 'Auto',\n\t'action.toggle-mouse': 'Mouse',\n\t'action.toggle-trackpad': 'Trackpad',\n\t'action.convert-to-bookmark': 'Convert to bookmark',\n\t'action.convert-to-embed': 'Convert to embed',\n\t'action.open-embed-link': 'Open link',\n\t'action.align-bottom': 'Align bottom',\n\t'action.align-center-horizontal': 'Align horizontally',\n\t'action.align-center-vertical': 'Align vertically',\n\t'action.align-center-horizontal.short': 'Align H',\n\t'action.align-center-vertical.short': 'Align V',\n\t'action.align-left': 'Align left',\n\t'action.align-right': 'Align right',\n\t'action.align-top': 'Align top',\n\t'action.back-to-content': 'Back to content',\n\t'action.bring-forward': 'Bring forward',\n\t'action.bring-to-front': 'Bring to front',\n\t'action.copy-as-png.short': 'PNG',\n\t'action.copy-as-png': 'Copy as PNG',\n\t'action.copy-as-svg.short': 'SVG',\n\t'action.copy-as-svg': 'Copy as SVG',\n\t'action.copy': 'Copy',\n\t'action.cut': 'Cut',\n\t'action.delete': 'Delete',\n\t'action.unlock-all': 'Unlock all',\n\t'action.distribute-horizontal': 'Distribute horizontally',\n\t'action.distribute-vertical': 'Distribute vertically',\n\t'action.distribute-horizontal.short': 'Distribute H',\n\t'action.distribute-vertical.short': 'Distribute V',\n\t'action.download-original': 'Download original',\n\t'action.duplicate': 'Duplicate',\n\t'action.edit-link': 'Edit link',\n\t'action.exit-pen-mode': 'Exit pen mode',\n\t'action.export-as-png.short': 'PNG',\n\t'action.export-as-png': 'Export as PNG',\n\t'action.export-as-svg.short': 'SVG',\n\t'action.export-as-svg': 'Export as SVG',\n\t'action.export-all-as-png.short': 'PNG',\n\t'action.export-all-as-png': 'Export as PNG',\n\t'action.export-all-as-svg.short': 'SVG',\n\t'action.export-all-as-svg': 'Export as SVG',\n\t'action.fit-frame-to-content': 'Fit to content',\n\t'action.flip-horizontal': 'Flip horizontally',\n\t'action.flip-vertical': 'Flip vertically',\n\t'action.flip-horizontal.short': 'Flip H',\n\t'action.flip-vertical.short': 'Flip V',\n\t'action.fork-project': 'Fork this project',\n\t'action.fork-project-on-tldraw': 'Fork project on tldraw',\n\t'action.group': 'Group',\n\t'action.insert-embed': 'Insert embed',\n\t'action.insert-media': 'Upload media',\n\t'action.leave-shared-project': 'Leave shared project',\n\t'action.new-project': 'New project',\n\t'action.new-shared-project': 'New shared project',\n\t'action.open-cursor-chat': 'Cursor chat',\n\t'action.open-kbd-shortcuts': 'Open keyboard shortcuts',\n\t'action.open-file': 'Open file',\n\t'action.pack': 'Pack',\n\t'action.paste': 'Paste',\n\t'action.paste-error-title': 'Pasting failed',\n\t'action.paste-error-description':\n\t\t'Could not paste due to missing clipboard permissions. Please enable the permissions and try again.',\n\t'action.print': 'Print',\n\t'action.redo': 'Redo',\n\t'action.remove-frame': 'Remove frame',\n\t'action.rename': 'Rename',\n\t'action.rotate-ccw': 'Rotate counterclockwise',\n\t'action.rotate-cw': 'Rotate clockwise',\n\t'action.save-copy': 'Save a copy',\n\t'action.select-all': 'Select all',\n\t'action.select-none': 'Select none',\n\t'action.send-backward': 'Send backward',\n\t'action.send-to-back': 'Send to back',\n\t'action.share-project': 'Share this project',\n\t'action.stack-horizontal': 'Stack horizontally',\n\t'action.stack-vertical': 'Stack vertically',\n\t'action.stack-horizontal.short': 'Stack H',\n\t'action.stack-vertical.short': 'Stack V',\n\t'action.stop-following': 'Stop following',\n\t'action.stretch-horizontal': 'Stretch horizontally',\n\t'action.stretch-vertical': 'Stretch vertically',\n\t'action.stretch-horizontal.short': 'Stretch H',\n\t'action.stretch-vertical.short': 'Stretch V',\n\t'action.toggle-auto-size': 'Toggle auto size',\n\t'action.toggle-dark-mode.menu': 'Dark mode',\n\t'action.toggle-dark-mode': 'Toggle dark mode',\n\t'action.toggle-paste-at-cursor.menu': 'Paste at cursor',\n\t'action.toggle-paste-at-cursor': 'Toggle paste at cursor',\n\t'action.toggle-wrap-mode.menu': 'Select on wrap',\n\t'action.toggle-wrap-mode': 'Toggle select on wrap',\n\t'action.toggle-reduce-motion.menu': 'Reduce motion',\n\t'action.toggle-reduce-motion': 'Toggle reduce motion',\n\t'action.toggle-keyboard-shortcuts.menu': 'Enable keyboard shortcuts',\n\t'action.toggle-keyboard-shortcuts': 'Toggle keyboard shortcuts',\n\t'action.enhanced-a11y-mode.menu': 'Enhanced accessibility mode',\n\t'action.enhanced-a11y-mode': 'Toggle enhanced accessibility mode',\n\t'action.toggle-edge-scrolling.menu': 'Edge scrolling',\n\t'action.toggle-edge-scrolling': 'Toggle edge scrolling',\n\t'action.toggle-debug-mode.menu': 'Debug mode',\n\t'action.toggle-debug-mode': 'Toggle debug mode',\n\t'action.toggle-focus-mode.menu': 'Focus mode',\n\t'action.toggle-focus-mode': 'Toggle focus mode',\n\t'action.toggle-dynamic-size-mode.menu': 'Dynamic size',\n\t'action.toggle-dynamic-size-mode': 'Toggle dynamic size',\n\t'action.toggle-grid.menu': 'Show grid',\n\t'action.toggle-grid': 'Toggle grid',\n\t'action.toggle-lock': 'Toggle locked',\n\t'action.flatten-to-image': 'Flatten',\n\t'action.toggle-snap-mode.menu': 'Always snap',\n\t'action.toggle-snap-mode': 'Toggle always snap',\n\t'action.toggle-tool-lock.menu': 'Tool lock',\n\t'action.toggle-tool-lock': 'Toggle tool lock',\n\t'action.toggle-transparent.context-menu': 'Transparent',\n\t'action.toggle-transparent.menu': 'Transparent',\n\t'action.toggle-transparent': 'Toggle transparent background',\n\t'action.undo': 'Undo',\n\t'action.ungroup': 'Ungroup',\n\t'action.zoom-in': 'Zoom in',\n\t'action.zoom-out': 'Zoom out',\n\t'action.zoom-to-100': 'Zoom to 100%',\n\t'action.zoom-to-fit': 'Zoom to fit',\n\t'action.zoom-to-selection': 'Zoom to selection',\n\t'assets.files.size-too-big': 'File size is too big',\n\t'assets.files.maximum-size': 'Maximum file size is {size}',\n\t'assets.files.type-not-allowed': 'File type is not allowed',\n\t'assets.files.upload-failed': 'Upload failed',\n\t'assets.files.amount-too-many': 'Too many files',\n\t'assets.url.failed': 'Couldn\u2019t load URL preview',\n\t'theme.dark': 'Dark',\n\t'theme.light': 'Light',\n\t'theme.system': 'System',\n\t'color-style.white': 'White',\n\t'color-style.black': 'Black',\n\t'color-style.blue': 'Blue',\n\t'color-style.green': 'Green',\n\t'color-style.grey': 'Grey',\n\t'color-style.light-blue': 'Light blue',\n\t'color-style.light-green': 'Light green',\n\t'color-style.light-red': 'Light red',\n\t'color-style.light-violet': 'Light violet',\n\t'color-style.orange': 'Orange',\n\t'color-style.red': 'Red',\n\t'color-style.violet': 'Violet',\n\t'color-style.yellow': 'Yellow',\n\t'fill-style.none': 'None',\n\t'document.default-name': 'Untitled',\n\t'fill-style.semi': 'Semi',\n\t'fill-style.solid': 'Solid',\n\t'fill-style.pattern': 'Pattern',\n\t'fill-style.fill': 'Fill',\n\t'fill-style.lined-fill': 'Lined fill',\n\t'dash-style.dashed': 'Dashed',\n\t'dash-style.dotted': 'Dotted',\n\t'dash-style.draw': 'Draw',\n\t'dash-style.solid': 'Solid',\n\t'size-style.s': 'Small',\n\t'size-style.m': 'Medium',\n\t'size-style.l': 'Large',\n\t'size-style.xl': 'Extra large',\n\t'opacity-style.0.1': '10%',\n\t'opacity-style.0.25': '25%',\n\t'opacity-style.0.5': '50%',\n\t'opacity-style.0.75': '75%',\n\t'opacity-style.1': '100%',\n\t'font-style.draw': 'Draw',\n\t'font-style.sans': 'Sans',\n\t'font-style.serif': 'Serif',\n\t'font-style.mono': 'Mono',\n\t'align-style.start': 'Start',\n\t'align-style.middle': 'Middle',\n\t'align-style.end': 'End',\n\t'align-style.justify': 'Justify',\n\t'verticalAlign-style.start': 'Top',\n\t'verticalAlign-style.middle': 'Middle',\n\t'verticalAlign-style.end': 'Bottom',\n\t'geo-style.arrow-down': 'Arrow down',\n\t'geo-style.arrow-left': 'Arrow left',\n\t'geo-style.arrow-right': 'Arrow right',\n\t'geo-style.arrow-up': 'Arrow up',\n\t'geo-style.cloud': 'Cloud',\n\t'geo-style.diamond': 'Diamond',\n\t'geo-style.ellipse': 'Ellipse',\n\t'geo-style.heart': 'Heart',\n\t'geo-style.hexagon': 'Hexagon',\n\t'geo-style.octagon': 'Octagon',\n\t'geo-style.oval': 'Oval',\n\t'geo-style.pentagon': 'Pentagon',\n\t'geo-style.rectangle': 'Rectangle',\n\t'geo-style.rhombus': 'Rhombus',\n\t'geo-style.rhombus-2': 'Rhombus left',\n\t'geo-style.star': 'Star',\n\t'geo-style.trapezoid': 'Trapezoid',\n\t'geo-style.triangle': 'Triangle',\n\t'geo-style.x-box': 'X box',\n\t'geo-style.check-box': 'Check box',\n\t'arrowheadStart-style.none': 'None',\n\t'arrowheadStart-style.arrow': 'Arrow',\n\t'arrowheadStart-style.bar': 'Bar',\n\t'arrowheadStart-style.diamond': 'Diamond',\n\t'arrowheadStart-style.dot': 'Dot',\n\t'arrowheadStart-style.inverted': 'Inverted',\n\t'arrowheadStart-style.pipe': 'Pipe',\n\t'arrowheadStart-style.square': 'Square',\n\t'arrowheadStart-style.triangle': 'Triangle',\n\t'arrowheadEnd-style.none': 'None',\n\t'arrowheadEnd-style.arrow': 'Arrow',\n\t'arrowheadEnd-style.bar': 'Bar',\n\t'arrowheadEnd-style.diamond': 'Diamond',\n\t'arrowheadEnd-style.dot': 'Dot',\n\t'arrowheadEnd-style.inverted': 'Inverted',\n\t'arrowheadEnd-style.pipe': 'Pipe',\n\t'arrowheadEnd-style.square': 'Square',\n\t'arrowheadEnd-style.triangle': 'Triangle',\n\t'spline-style.line': 'Line',\n\t'spline-style.cubic': 'Cubic',\n\t'arrow-kind-style.arc': 'Arc',\n\t'arrow-kind-style.elbow': 'Elbow',\n\t'tool.select': 'Select',\n\t'tool.hand': 'Hand',\n\t'tool.draw': 'Draw',\n\t'tool.eraser': 'Eraser',\n\t'tool.arrow-down': 'Arrow down',\n\t'tool.arrow-left': 'Arrow left',\n\t'tool.arrow-right': 'Arrow right',\n\t'tool.arrow-up': 'Arrow up',\n\t'tool.arrow': 'Arrow',\n\t'tool.cloud': 'Cloud',\n\t'tool.diamond': 'Diamond',\n\t'tool.ellipse': 'Ellipse',\n\t'tool.heart': 'Heart',\n\t'tool.hexagon': 'Hexagon',\n\t'tool.highlight': 'Highlight',\n\t'tool.line': 'Line',\n\t'tool.octagon': 'Octagon',\n\t'tool.oval': 'Oval',\n\t'tool.pentagon': 'Pentagon',\n\t'tool.rectangle': 'Rectangle',\n\t'tool.rhombus': 'Rhombus',\n\t'tool.star': 'Star',\n\t'tool.trapezoid': 'Trapezoid',\n\t'tool.triangle': 'Triangle',\n\t'tool.x-box': 'X box',\n\t'tool.check-box': 'Check box',\n\t'tool.media': 'Media',\n\t'tool.frame': 'Frame',\n\t'tool.note': 'Note',\n\t'tool.laser': 'Laser',\n\t'tool.embed': 'Embed',\n\t'tool.text': 'Text',\n\t'tool.pointer-down': 'Pointer down',\n\t'tool.image-zoom': 'Zoom',\n\t'tool.replace-media': 'Replace media',\n\t'tool.flip-horz': 'Flip horizontally',\n\t'tool.flip-vert': 'Flip vertically',\n\t'tool.rotate-cw': 'Rotate',\n\t'tool.aspect-ratio': 'Aspect ratio',\n\t'tool.aspect-ratio.original': 'Original',\n\t'tool.aspect-ratio.square': 'Square (1:1)',\n\t'tool.aspect-ratio.circle': 'Circle (1:1)',\n\t'tool.aspect-ratio.landscape': 'Landscape (4:3)',\n\t'tool.aspect-ratio.portrait': 'Portrait (3:4)',\n\t'tool.aspect-ratio.wide': 'Wide (16:9)',\n\t'tool.image-toolbar-title': 'Image tools',\n\t'tool.image-crop': 'Crop image',\n\t'tool.image-crop-confirm': 'Confirm',\n\t'tool.media-alt-text': 'Alternative text',\n\t'tool.media-alt-text-desc': 'Give a description\u2026',\n\t'tool.media-alt-text-confirm': 'Confirm',\n\t'tool.rich-text-bold': 'Bold',\n\t'tool.rich-text-italic': 'Italic',\n\t'tool.rich-text-code': 'Code',\n\t'tool.rich-text-highlight': 'Highlight',\n\t'tool.rich-text-strikethrough': 'Strikethrough',\n\t'tool.rich-text-link': 'Link',\n\t'tool.rich-text-link-visit': 'Visit link',\n\t'tool.rich-text-link-remove': 'Remove link',\n\t'tool.rich-text-header': 'Header',\n\t'tool.rich-text-bulletList': 'Bulleted list',\n\t'tool.rich-text-toolbar-title': 'Text formatting',\n\t'tool.rich-text-orderedList': 'Ordered list',\n\t'tool.bookmark': 'Bookmark',\n\t'a11y.status': 'Status',\n\t'a11y.skip-to-main-content': 'Move focus to canvas',\n\t'a11y.shape-index': '{num} of {total}',\n\t'a11y.shape-image': 'Image',\n\t'a11y.shape-video': 'Video',\n\t'a11y.multiple-shapes': '{num} shapes selected',\n\t'a11y.select-shape': 'Select next shape',\n\t'a11y.select-shape-direction': 'Select shape in direction',\n\t'a11y.enter-leave-container': 'Enter/leave container',\n\t'a11y.repeat-shape': 'Repeat shape',\n\t'a11y.move-shape': 'Move shape',\n\t'a11y.move-shape-faster': 'Move shape faster',\n\t'a11y.rotate-shape-cw': 'Rotate shape clockwise',\n\t'a11y.rotate-shape-ccw': 'Rotate shape counterclockwise',\n\t'a11y.rotate-shape-cw-fine': 'Rotate shape clockwise (fine)',\n\t'a11y.rotate-shape-ccw-fine': 'Rotate shape counterclockwise (fine)',\n\t'a11y.enlarge-shape': 'Enlarge shape',\n\t'a11y.shrink-shape': 'Shrink shape',\n\t'a11y.pan-camera': 'Pan camera',\n\t'a11y.adjust-shape-styles': 'Adjust shape styles',\n\t'a11y.open-context-menu': 'Open context menu',\n\t'a11y.open-keyboard-shortcuts': 'Open keyboard shortcuts',\n\t'menu.title': 'Menu',\n\t'menu.theme': 'Theme',\n\t'menu.accessibility': 'Accessibility',\n\t'menu.copy-as': 'Copy as',\n\t'menu.edit': 'Edit',\n\t'menu.export-as': 'Export as',\n\t'menu.file': 'File',\n\t'menu.language': 'Language',\n\t'menu.preferences': 'Preferences',\n\t'menu.view': 'View',\n\t'menu.input-mode': 'Input mode',\n\t'context-menu.title': 'Context menu',\n\t'context-menu.edit': 'Edit',\n\t'context-menu.arrange': 'Arrange',\n\t'context-menu.copy-as': 'Copy as',\n\t'context-menu.export-as': 'Export as',\n\t'context-menu.export-all-as': 'Export',\n\t'context-menu.move-to-page': 'Move to page',\n\t'context-menu.reorder': 'Reorder',\n\t'page-menu.title': 'Pages',\n\t'page-menu.create-new-page': 'Create new page',\n\t'page-menu.max-page-count-reached': 'Max pages reached',\n\t'page-menu.new-page-initial-name': 'Page 1',\n\t'page-menu.edit-start': 'Edit',\n\t'page-menu.edit-done': 'Done',\n\t'page-menu.go-to-page': 'Go to page',\n\t'page-menu.submenu.rename': 'Rename',\n\t'page-menu.submenu.duplicate-page': 'Duplicate',\n\t'page-menu.submenu.title': 'Menu',\n\t'page-menu.submenu.move-down': 'Move down',\n\t'page-menu.submenu.move-up': 'Move up',\n\t'page-menu.submenu.delete': 'Delete',\n\t'share-menu.title': 'Share',\n\t'share-menu.save-note': 'Download this project to your computer as a .tldr file.',\n\t'share-menu.fork-note': 'Create a new shared project based on this snapshot.',\n\t'share-menu.share-project': 'Share this project',\n\t'share-menu.copy-link': 'Copy editor link',\n\t'share-menu.create-snapshot-link': 'Copy snapshot link',\n\t'share-menu.snapshot-link-note': 'Capture and share this project as a read-only snapshot link.',\n\t'share-menu.copy-readonly-link': 'Copy viewer link',\n\t'share-menu.offline-note': 'Create a new shared project based on your current project.',\n\t'share-menu.copy-link-note': 'Anyone with the link will be able to view and edit this project.',\n\t'share-menu.copy-readonly-link-note': 'Anyone with the link will be able to access this project.',\n\t'share-menu.project-too-large':\n\t\t'Sorry, this project can\u2019t be shared because it\u2019s too large. We\u2019re working on it!',\n\t'share-menu.upload-failed':\n\t\t'Sorry, we couldn\u2019t upload your project at the moment. Please try again or let us know if the problem persists.',\n\t'share-menu.creating-project': 'Creating the new project\u2026',\n\t'share-menu.copied': 'Copied link',\n\t'document-name-menu.copy-link': 'Copy link',\n\t'status.offline': 'Offline',\n\t'people-menu.title': 'People',\n\t'people-menu.change-name': 'Change name',\n\t'people-menu.avatar-color': 'Avatar color',\n\t'people-menu.change-color': 'Change color',\n\t'people-menu.follow': 'Following',\n\t'people-menu.following': 'Following',\n\t'people-menu.leading': 'Following you',\n\t'people-menu.user': '(You)',\n\t'people-menu.invite': 'Invite others',\n\t'people-menu.anonymous-user': 'New user',\n\t'help-menu.import-tldr-file': 'Import file\u2026',\n\t'help-menu.title': 'Help and resources',\n\t'help-menu.about': 'About tldraw',\n\t'help-menu.discord': 'Discord',\n\t'help-menu.github': 'GitHub',\n\t'help-menu.keyboard-shortcuts': 'Keyboard shortcuts',\n\t'help-menu.twitter': 'Twitter',\n\t'help-menu.terms': 'Terms of service',\n\t'help-menu.privacy': 'Privacy policy',\n\t'actions-menu.title': 'Actions',\n\t'edit-link-dialog.title': 'Edit link',\n\t'edit-link-dialog.invalid-url': 'A link must be a valid URL.',\n\t'edit-link-dialog.detail': 'Links will open in a new tab.',\n\t'edit-link-dialog.url': 'URL',\n\t'edit-link-dialog.clear': 'Clear',\n\t'edit-link-dialog.save': 'Continue',\n\t'edit-link-dialog.cancel': 'Cancel',\n\t'edit-link-dialog.external-link': 'External link',\n\t'embed-dialog.title': 'Insert embed',\n\t'embed-dialog.back': 'Back',\n\t'embed-dialog.create': 'Create',\n\t'embed-dialog.cancel': 'Cancel',\n\t'embed-dialog.url': 'URL',\n\t'embed-dialog.instruction': 'Paste in the site\u2019s URL to create the embed.',\n\t'embed-dialog.invalid-url': 'We could not create an embed from that URL.',\n\t'shortcuts-dialog.title': 'Keyboard shortcuts',\n\t'shortcuts-dialog.edit': 'Edit',\n\t'shortcuts-dialog.file': 'File',\n\t'shortcuts-dialog.preferences': 'Preferences',\n\t'shortcuts-dialog.tools': 'Tools',\n\t'shortcuts-dialog.transform': 'Transform',\n\t'shortcuts-dialog.view': 'View',\n\t'shortcuts-dialog.collaboration': 'Collaboration',\n\t'shortcuts-dialog.a11y': 'Accessibility',\n\t'shortcuts-dialog.text-formatting': 'Text formatting',\n\t'style-panel.title': 'Styles',\n\t'style-panel.align': 'Align',\n\t'style-panel.label-align': 'Label align',\n\t'style-panel.vertical-align': 'Vertical align',\n\t'style-panel.position': 'Position',\n\t'style-panel.arrowheads': 'Arrows',\n\t'style-panel.arrowhead-start': 'Start',\n\t'style-panel.arrowhead-end': 'End',\n\t'style-panel.arrow-kind': 'Line',\n\t'style-panel.color': 'Color',\n\t'style-panel.dash': 'Dash',\n\t'style-panel.fill': 'Fill',\n\t'style-panel.font': 'Font',\n\t'style-panel.geo': 'Shape',\n\t'style-panel.mixed': 'Mixed',\n\t'style-panel.opacity': 'Opacity',\n\t'style-panel.size': 'Size',\n\t'style-panel.spline': 'Spline',\n\t'style-panel.selected': 'selected',\n\t'tool-panel.title': 'Tools',\n\t'tool-panel.more': 'More',\n\t'navigation-zone.title': 'Navigation',\n\t'navigation-zone.minimap': 'Minimap',\n\t'navigation-zone.toggle-minimap': 'Toggle minimap',\n\t'navigation-zone.zoom': 'Zoom',\n\t'focus-mode.toggle-focus-mode': 'Toggle focus mode',\n\t'toast.close': 'Close',\n\t'toast.success': 'Success',\n\t'toast.error': 'Error',\n\t'toast.info': 'Info',\n\t'toast.warning': 'Warning',\n\t'file-system.file-open-error.title': 'Could not open file',\n\t'file-system.file-open-error.not-a-tldraw-file':\n\t\t'The file you tried to open doesn\u2019t look like a tldraw file.',\n\t'file-system.file-open-error.file-format-version-too-new':\n\t\t'The file you tried to open is from a newer version of tldraw. Please reload the page and try again.',\n\t'file-system.file-open-error.generic-corrupted-file': 'The file you tried to open is corrupted.',\n\t'file-system.confirm-open.title': 'Overwrite current project?',\n\t'file-system.confirm-open.description':\n\t\t'Opening a file will replace your current project and any unsaved changes will be lost. Are you sure you want to continue?',\n\t'file-system.confirm-open.cancel': 'Cancel',\n\t'file-system.confirm-open.open': 'Open file',\n\t'file-system.confirm-open.dont-show-again': 'Don\u2019t ask again',\n\t'file-system.confirm-clear.title': 'Clear current project?',\n\t'file-system.confirm-clear.description':\n\t\t'Creating a new project will clear your current project and any unsaved changes will be lost. Are you sure you want to continue?',\n\t'file-system.confirm-clear.cancel': 'Cancel',\n\t'file-system.confirm-clear.continue': 'Continue',\n\t'file-system.confirm-clear.dont-show-again': 'Don\u2019t ask again',\n\t'file-system.shared-document-file-open-error.title': 'Could not open file',\n\t'file-system.shared-document-file-open-error.description':\n\t\t'Opening files from shared projects is not supported.',\n\t'sharing.confirm-leave.title': 'Leave current project?',\n\t'sharing.confirm-leave.description':\n\t\t'Are you sure you want to leave this shared project? You can return to it by navigating to its URL.',\n\t'sharing.confirm-leave.cancel': 'Cancel',\n\t'sharing.confirm-leave.leave': 'Leave',\n\t'sharing.confirm-leave.dont-show-again': 'Don\u2019t ask again',\n\t'toast.error.export-fail.title': 'Failed export',\n\t'toast.error.export-fail.desc': 'Failed to export image',\n\t'toast.error.copy-fail.title': 'Failed copy',\n\t'toast.error.copy-fail.desc': 'Failed to copy image',\n\t'context.pages.new-page': 'New page',\n\t'vscode.file-open.desc':\n\t\t'We\u2019ve updated this document to work with the current version of tldraw. If you\u2019d like to keep the original version (which will work on old.tldraw.com), click below to create a backup.',\n\t'vscode.file-open.open': 'Continue',\n\t'vscode.file-open.backup': 'Backup',\n\t'vscode.file-open.backup-saved': 'Backup saved',\n\t'vscode.file-open.backup-failed': 'Backup failed: this is not a .tldr file.',\n\t'vscode.file-open.dont-show-again': 'Don\u2019t ask again',\n\t'cursor-chat.type-to-chat': 'Type to chat\u2026',\n\t'app.loading': 'Loading tldraw\u2026',\n\t'handle.resize-top': 'Resize top',\n\t'handle.resize-bottom': 'Resize bottom',\n\t'handle.resize-left': 'Resize left',\n\t'handle.resize-right': 'Resize right',\n\t'handle.resize-top-left': 'Resize top left',\n\t'handle.resize-top-right': 'Resize top right',\n\t'handle.resize-bottom-left': 'Resize bottom left',\n\t'handle.resize-bottom-right': 'Resize bottom right',\n\t'handle.rotate.top_left_rotate': 'Rotate top left',\n\t'handle.rotate.top_right_rotate': 'Rotate top right',\n\t'handle.rotate.bottom_left_rotate': 'Rotate bottom left',\n\t'handle.rotate.bottom_right_rotate': 'Rotate bottom right',\n\t'handle.rotate.mobile_rotate': 'Rotate',\n\t'handle.crop.top': 'Crop top',\n\t'handle.crop.bottom': 'Crop bottom',\n\t'handle.crop.left': 'Crop left',\n\t'handle.crop.right': 'Crop right',\n\t'handle.crop.top-left': 'Crop top left',\n\t'handle.crop.top-right': 'Crop top right',\n\t'handle.crop.bottom-left': 'Crop bottom left',\n\t'handle.crop.bottom-right': 'Crop bottom right',\n\t'ui.close': 'Close',\n\t'ui.checked': 'Checked',\n\t'ui.unchecked': 'Unchecked',\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -69,6 +69,7 @@ function untranslated(string) {
69
69
  }
70
70
  export {
71
71
  TldrawUiTranslationProvider,
72
+ TranslationsContext,
72
73
  untranslated,
73
74
  useCurrentTranslation,
74
75
  useTranslation
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/lib/ui/hooks/useTranslation/useTranslation.tsx"],
4
- "sourcesContent": ["import * as React from 'react'\nimport { useAssetUrls } from '../../context/asset-urls'\nimport { TLUiTranslationKey } from './TLUiTranslationKey'\nimport { DEFAULT_TRANSLATION } from './defaultTranslation'\nimport { TLUiTranslation, fetchTranslation } from './translations'\n\n/** @public */\nexport interface TLUiTranslationProviderProps {\n\tchildren: React.ReactNode\n\tlocale: string\n\t/**\n\t * A collection of overrides different locales.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * <TranslationProvider overrides={{ en: { 'style-panel.styles': 'Properties' } }} />\n\t * ```\n\t */\n\toverrides?: Record<string, Record<string, string>>\n}\n\n/** @public */\nexport type TLUiTranslationContextType = TLUiTranslation\n\nconst TranslationsContext = React.createContext<TLUiTranslationContextType | null>(null)\n\n/** @public */\nexport function useCurrentTranslation() {\n\tconst translations = React.useContext(TranslationsContext)\n\tif (!translations) {\n\t\tthrow new Error('useCurrentTranslation must be used inside of <TldrawUiContextProvider />')\n\t}\n\treturn translations\n}\n\n/**\n * Provides a translation context to the editor.\n *\n * @internal\n */\nexport function TldrawUiTranslationProvider({\n\toverrides,\n\tlocale,\n\tchildren,\n}: TLUiTranslationProviderProps) {\n\tconst getAssetUrl = useAssetUrls()\n\n\tconst [currentTranslation, setCurrentTranslation] = React.useState<TLUiTranslation>(() => {\n\t\tif (overrides && overrides['en']) {\n\t\t\treturn {\n\t\t\t\tlocale: 'en',\n\t\t\t\tlabel: 'English',\n\t\t\t\tdir: 'ltr',\n\t\t\t\tmessages: { ...DEFAULT_TRANSLATION, ...overrides['en'] },\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tlocale: 'en',\n\t\t\tlabel: 'English',\n\t\t\tdir: 'ltr',\n\t\t\tmessages: DEFAULT_TRANSLATION,\n\t\t}\n\t})\n\n\tReact.useEffect(() => {\n\t\tlet isCancelled = false\n\n\t\tasync function loadTranslation() {\n\t\t\tconst translation = await fetchTranslation(locale, getAssetUrl)\n\n\t\t\tif (translation && !isCancelled) {\n\t\t\t\tif (overrides && overrides[locale]) {\n\t\t\t\t\tsetCurrentTranslation({\n\t\t\t\t\t\t...translation,\n\t\t\t\t\t\tmessages: { ...translation.messages, ...overrides[locale] },\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tsetCurrentTranslation(translation)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tloadTranslation()\n\n\t\treturn () => {\n\t\t\tisCancelled = true\n\t\t}\n\t}, [getAssetUrl, locale, overrides])\n\n\treturn (\n\t\t<TranslationsContext.Provider value={currentTranslation}>\n\t\t\t{children}\n\t\t</TranslationsContext.Provider>\n\t)\n}\n\n/**\n * Returns a function to translate a translation key into a string based on the current translation.\n *\n * @example\n *\n * ```ts\n * const msg = useTranslation()\n * const label = msg('style-panel.styles')\n * ```\n *\n * @public\n */\nexport function useTranslation() {\n\tconst translation = useCurrentTranslation()\n\treturn React.useCallback(\n\t\tfunction msg(id?: Exclude<string, TLUiTranslationKey> | string) {\n\t\t\treturn translation.messages[id as TLUiTranslationKey] ?? id\n\t\t},\n\t\t[translation]\n\t)\n}\n\nexport function untranslated(string: string) {\n\treturn string as TLUiTranslationKey\n}\n"],
5
- "mappings": "AA4FE;AA5FF,YAAY,WAAW;AACvB,SAAS,oBAAoB;AAE7B,SAAS,2BAA2B;AACpC,SAA0B,wBAAwB;AAqBlD,MAAM,sBAAsB,MAAM,cAAiD,IAAI;AAGhF,SAAS,wBAAwB;AACvC,QAAM,eAAe,MAAM,WAAW,mBAAmB;AACzD,MAAI,CAAC,cAAc;AAClB,UAAM,IAAI,MAAM,0EAA0E;AAAA,EAC3F;AACA,SAAO;AACR;AAOO,SAAS,4BAA4B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACD,GAAiC;AAChC,QAAM,cAAc,aAAa;AAEjC,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,MAAM,SAA0B,MAAM;AACzF,QAAI,aAAa,UAAU,IAAI,GAAG;AACjC,aAAO;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,KAAK;AAAA,QACL,UAAU,EAAE,GAAG,qBAAqB,GAAG,UAAU,IAAI,EAAE;AAAA,MACxD;AAAA,IACD;AAEA,WAAO;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,KAAK;AAAA,MACL,UAAU;AAAA,IACX;AAAA,EACD,CAAC;AAED,QAAM,UAAU,MAAM;AACrB,QAAI,cAAc;AAElB,mBAAe,kBAAkB;AAChC,YAAM,cAAc,MAAM,iBAAiB,QAAQ,WAAW;AAE9D,UAAI,eAAe,CAAC,aAAa;AAChC,YAAI,aAAa,UAAU,MAAM,GAAG;AACnC,gCAAsB;AAAA,YACrB,GAAG;AAAA,YACH,UAAU,EAAE,GAAG,YAAY,UAAU,GAAG,UAAU,MAAM,EAAE;AAAA,UAC3D,CAAC;AAAA,QACF,OAAO;AACN,gCAAsB,WAAW;AAAA,QAClC;AAAA,MACD;AAAA,IACD;AAEA,oBAAgB;AAEhB,WAAO,MAAM;AACZ,oBAAc;AAAA,IACf;AAAA,EACD,GAAG,CAAC,aAAa,QAAQ,SAAS,CAAC;AAEnC,SACC,oBAAC,oBAAoB,UAApB,EAA6B,OAAO,oBACnC,UACF;AAEF;AAcO,SAAS,iBAAiB;AAChC,QAAM,cAAc,sBAAsB;AAC1C,SAAO,MAAM;AAAA,IACZ,SAAS,IAAI,IAAmD;AAC/D,aAAO,YAAY,SAAS,EAAwB,KAAK;AAAA,IAC1D;AAAA,IACA,CAAC,WAAW;AAAA,EACb;AACD;AAEO,SAAS,aAAa,QAAgB;AAC5C,SAAO;AACR;",
4
+ "sourcesContent": ["import * as React from 'react'\nimport { useAssetUrls } from '../../context/asset-urls'\nimport { TLUiTranslationKey } from './TLUiTranslationKey'\nimport { DEFAULT_TRANSLATION } from './defaultTranslation'\nimport { TLUiTranslation, fetchTranslation } from './translations'\n\n/** @public */\nexport interface TLUiTranslationProviderProps {\n\tchildren: React.ReactNode\n\tlocale: string\n\t/**\n\t * A collection of overrides different locales.\n\t *\n\t * @example\n\t *\n\t * ```ts\n\t * <TranslationProvider overrides={{ en: { 'style-panel.styles': 'Properties' } }} />\n\t * ```\n\t */\n\toverrides?: Record<string, Record<string, string>>\n}\n\n/** @public */\nexport type TLUiTranslationContextType = TLUiTranslation\n\n/** @internal */\nexport const TranslationsContext = React.createContext<TLUiTranslationContextType | null>(null)\n\n/** @public */\nexport function useCurrentTranslation() {\n\tconst translations = React.useContext(TranslationsContext)\n\tif (!translations) {\n\t\tthrow new Error('useCurrentTranslation must be used inside of <TldrawUiContextProvider />')\n\t}\n\treturn translations\n}\n\n/**\n * Provides a translation context to the editor.\n *\n * @internal\n */\nexport function TldrawUiTranslationProvider({\n\toverrides,\n\tlocale,\n\tchildren,\n}: TLUiTranslationProviderProps) {\n\tconst getAssetUrl = useAssetUrls()\n\n\tconst [currentTranslation, setCurrentTranslation] = React.useState<TLUiTranslation>(() => {\n\t\tif (overrides && overrides['en']) {\n\t\t\treturn {\n\t\t\t\tlocale: 'en',\n\t\t\t\tlabel: 'English',\n\t\t\t\tdir: 'ltr',\n\t\t\t\tmessages: { ...DEFAULT_TRANSLATION, ...overrides['en'] },\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tlocale: 'en',\n\t\t\tlabel: 'English',\n\t\t\tdir: 'ltr',\n\t\t\tmessages: DEFAULT_TRANSLATION,\n\t\t}\n\t})\n\n\tReact.useEffect(() => {\n\t\tlet isCancelled = false\n\n\t\tasync function loadTranslation() {\n\t\t\tconst translation = await fetchTranslation(locale, getAssetUrl)\n\n\t\t\tif (translation && !isCancelled) {\n\t\t\t\tif (overrides && overrides[locale]) {\n\t\t\t\t\tsetCurrentTranslation({\n\t\t\t\t\t\t...translation,\n\t\t\t\t\t\tmessages: { ...translation.messages, ...overrides[locale] },\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tsetCurrentTranslation(translation)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tloadTranslation()\n\n\t\treturn () => {\n\t\t\tisCancelled = true\n\t\t}\n\t}, [getAssetUrl, locale, overrides])\n\n\treturn (\n\t\t<TranslationsContext.Provider value={currentTranslation}>\n\t\t\t{children}\n\t\t</TranslationsContext.Provider>\n\t)\n}\n\n/**\n * Returns a function to translate a translation key into a string based on the current translation.\n *\n * @example\n *\n * ```ts\n * const msg = useTranslation()\n * const label = msg('style-panel.styles')\n * ```\n *\n * @public\n */\nexport function useTranslation() {\n\tconst translation = useCurrentTranslation()\n\treturn React.useCallback(\n\t\tfunction msg(id?: Exclude<string, TLUiTranslationKey> | string) {\n\t\t\treturn translation.messages[id as TLUiTranslationKey] ?? id\n\t\t},\n\t\t[translation]\n\t)\n}\n\nexport function untranslated(string: string) {\n\treturn string as TLUiTranslationKey\n}\n"],
5
+ "mappings": "AA6FE;AA7FF,YAAY,WAAW;AACvB,SAAS,oBAAoB;AAE7B,SAAS,2BAA2B;AACpC,SAA0B,wBAAwB;AAsB3C,MAAM,sBAAsB,MAAM,cAAiD,IAAI;AAGvF,SAAS,wBAAwB;AACvC,QAAM,eAAe,MAAM,WAAW,mBAAmB;AACzD,MAAI,CAAC,cAAc;AAClB,UAAM,IAAI,MAAM,0EAA0E;AAAA,EAC3F;AACA,SAAO;AACR;AAOO,SAAS,4BAA4B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACD,GAAiC;AAChC,QAAM,cAAc,aAAa;AAEjC,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,MAAM,SAA0B,MAAM;AACzF,QAAI,aAAa,UAAU,IAAI,GAAG;AACjC,aAAO;AAAA,QACN,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,KAAK;AAAA,QACL,UAAU,EAAE,GAAG,qBAAqB,GAAG,UAAU,IAAI,EAAE;AAAA,MACxD;AAAA,IACD;AAEA,WAAO;AAAA,MACN,QAAQ;AAAA,MACR,OAAO;AAAA,MACP,KAAK;AAAA,MACL,UAAU;AAAA,IACX;AAAA,EACD,CAAC;AAED,QAAM,UAAU,MAAM;AACrB,QAAI,cAAc;AAElB,mBAAe,kBAAkB;AAChC,YAAM,cAAc,MAAM,iBAAiB,QAAQ,WAAW;AAE9D,UAAI,eAAe,CAAC,aAAa;AAChC,YAAI,aAAa,UAAU,MAAM,GAAG;AACnC,gCAAsB;AAAA,YACrB,GAAG;AAAA,YACH,UAAU,EAAE,GAAG,YAAY,UAAU,GAAG,UAAU,MAAM,EAAE;AAAA,UAC3D,CAAC;AAAA,QACF,OAAO;AACN,gCAAsB,WAAW;AAAA,QAClC;AAAA,MACD;AAAA,IACD;AAEA,oBAAgB;AAEhB,WAAO,MAAM;AACZ,oBAAc;AAAA,IACf;AAAA,EACD,GAAG,CAAC,aAAa,QAAQ,SAAS,CAAC;AAEnC,SACC,oBAAC,oBAAoB,UAApB,EAA6B,OAAO,oBACnC,UACF;AAEF;AAcO,SAAS,iBAAiB;AAChC,QAAM,cAAc,sBAAsB;AAC1C,SAAO,MAAM;AAAA,IACZ,SAAS,IAAI,IAAmD;AAC/D,aAAO,YAAY,SAAS,EAAwB,KAAK;AAAA,IAC1D;AAAA,IACA,CAAC,WAAW;AAAA,EACb;AACD;AAEO,SAAS,aAAa,QAAgB;AAC5C,SAAO;AACR;",
6
6
  "names": []
7
7
  }
@@ -1,8 +1,8 @@
1
- const version = "4.2.0-next.f100cedfc45b";
1
+ const version = "4.3.0-canary.03ae87dcc44b";
2
2
  const publishDates = {
3
3
  major: "2025-09-18T14:39:22.803Z",
4
- minor: "2025-10-29T17:33:15.385Z",
5
- patch: "2025-10-29T17:33:15.385Z"
4
+ minor: "2025-11-25T07:20:55.099Z",
5
+ patch: "2025-11-25T07:20:55.099Z"
6
6
  };
7
7
  export {
8
8
  publishDates,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/ui/version.ts"],
4
- "sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\nexport const version = '4.2.0-next.f100cedfc45b'\nexport const publishDates = {\n\tmajor: '2025-09-18T14:39:22.803Z',\n\tminor: '2025-10-29T17:33:15.385Z',\n\tpatch: '2025-10-29T17:33:15.385Z',\n}\n"],
4
+ "sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\nexport const version = '4.3.0-canary.03ae87dcc44b'\nexport const publishDates = {\n\tmajor: '2025-09-18T14:39:22.803Z',\n\tminor: '2025-11-25T07:20:55.099Z',\n\tpatch: '2025-11-25T07:20:55.099Z',\n}\n"],
5
5
  "mappings": "AAGO,MAAM,UAAU;AAChB,MAAM,eAAe;AAAA,EAC3B,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACR;",
6
6
  "names": []
7
7
  }
@@ -88,6 +88,7 @@ async function putExcalidrawContent(editor, excalidrawClipboardContent, point) {
88
88
  ...base,
89
89
  type: "geo",
90
90
  props: {
91
+ ...editor.getShapeUtil("geo").getDefaultProps(),
91
92
  geo: element.type,
92
93
  url: element.link ?? "",
93
94
  w: element.width,
@@ -107,6 +108,7 @@ async function putExcalidrawContent(editor, excalidrawClipboardContent, point) {
107
108
  ...base,
108
109
  type: "draw",
109
110
  props: {
111
+ ...editor.getShapeUtil("draw").getDefaultProps(),
110
112
  dash: getDash(element),
111
113
  size: strokeWidthsToSizes[element.strokeWidth],
112
114
  color: colorsToColors[element.strokeColor] ?? "black",
@@ -134,6 +136,7 @@ async function putExcalidrawContent(editor, excalidrawClipboardContent, point) {
134
136
  ...base,
135
137
  type: "line",
136
138
  props: {
139
+ ...editor.getShapeUtil("line").getDefaultProps(),
137
140
  dash: getDash(element),
138
141
  size: strokeWidthsToSizes[element.strokeWidth],
139
142
  color: colorsToColors[element.strokeColor] ?? "black",
@@ -170,6 +173,7 @@ async function putExcalidrawContent(editor, excalidrawClipboardContent, point) {
170
173
  ...base,
171
174
  type: "arrow",
172
175
  props: {
176
+ ...editor.getShapeUtil("arrow").getDefaultProps(),
173
177
  richText: toRichText(text),
174
178
  kind: element.elbowed ? "elbow" : "arc",
175
179
  bend: getBend(element, start, end),
@@ -191,6 +195,7 @@ async function putExcalidrawContent(editor, excalidrawClipboardContent, point) {
191
195
  toId: startTargetId,
192
196
  props: {
193
197
  terminal: "start",
198
+ snap: "none",
194
199
  normalizedAnchor: { x: 0.5, y: 0.5 },
195
200
  isPrecise: false,
196
201
  isExact: false
@@ -207,6 +212,7 @@ async function putExcalidrawContent(editor, excalidrawClipboardContent, point) {
207
212
  toId: endTargetId,
208
213
  props: {
209
214
  terminal: "end",
215
+ snap: "none",
210
216
  normalizedAnchor: { x: 0.5, y: 0.5 },
211
217
  isPrecise: false,
212
218
  isExact: false
@@ -222,6 +228,7 @@ async function putExcalidrawContent(editor, excalidrawClipboardContent, point) {
222
228
  ...base,
223
229
  type: "text",
224
230
  props: {
231
+ ...editor.getShapeUtil("text").getDefaultProps(),
225
232
  size,
226
233
  scale,
227
234
  font: fontFamilyToFontType[element.fontFamily] ?? "draw",
@@ -255,6 +262,7 @@ async function putExcalidrawContent(editor, excalidrawClipboardContent, point) {
255
262
  ...base,
256
263
  type: "image",
257
264
  props: {
265
+ ...editor.getShapeUtil("image").getDefaultProps(),
258
266
  w: element.width,
259
267
  h: element.height,
260
268
  assetId
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/utils/excalidraw/putExcalidrawContent.ts"],
4
- "sourcesContent": ["import {\n\tAssetRecordType,\n\tBox,\n\tEditor,\n\tTLArrowShapeArrowheadStyle,\n\tTLAssetId,\n\tTLContent,\n\tTLDefaultColorStyle,\n\tTLDefaultDashStyle,\n\tTLDefaultFillStyle,\n\tTLDefaultFontStyle,\n\tTLDefaultHorizontalAlignStyle,\n\tTLDefaultSizeStyle,\n\tTLDefaultTextAlignStyle,\n\tTLOpacityType,\n\tTLShapeId,\n\tVec,\n\tVecLike,\n\tZERO_INDEX_KEY,\n\tcompact,\n\tcreateBindingId,\n\tcreateShapeId,\n\tgetIndexAbove,\n\tgetIndices,\n\tisShapeId,\n\ttoRichText,\n} from '@tldraw/editor'\n\n/**\n * Put excalidraw clipboard content onto the current page.\n *\n * @param editor - The editor instance.\n * @param excalidrawClipboardContent - The excalidraw clipboard model.\n * @param point - The point at which to put the excalidraw content.\n * @public\n */\nexport async function putExcalidrawContent(\n\teditor: Editor,\n\texcalidrawClipboardContent: any,\n\tpoint?: VecLike\n) {\n\tconst { elements, files } = excalidrawClipboardContent\n\n\tconst tldrawContent: TLContent = {\n\t\tshapes: [],\n\t\tbindings: [],\n\t\trootShapeIds: [],\n\t\tassets: [],\n\t\tschema: editor.store.schema.serialize(),\n\t}\n\n\tconst groupShapeIdToChildren = new Map<string, TLShapeId[]>()\n\tconst rotatedElements = new Map<TLShapeId, number>()\n\n\tconst currentPageId = editor.getCurrentPageId()\n\n\tconst excElementIdsToTldrawShapeIds = new Map<string, TLShapeId>()\n\tconst rootShapeIds: TLShapeId[] = []\n\n\tconst skipIds = new Set<string>()\n\n\telements.forEach((element: any) => {\n\t\texcElementIdsToTldrawShapeIds.set(element.id, createShapeId())\n\n\t\tif (element.boundElements !== null) {\n\t\t\tfor (const boundElement of element.boundElements) {\n\t\t\t\tif (boundElement.type === 'text') {\n\t\t\t\t\tskipIds.add(boundElement.id)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tlet index = ZERO_INDEX_KEY\n\n\tfor (const element of elements) {\n\t\tif (skipIds.has(element.id)) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst id = excElementIdsToTldrawShapeIds.get(element.id)!\n\n\t\tconst base = {\n\t\t\tid,\n\t\t\ttypeName: 'shape',\n\t\t\tparentId: currentPageId,\n\t\t\tindex,\n\t\t\tx: element.x,\n\t\t\ty: element.y,\n\t\t\trotation: 0,\n\t\t\tisLocked: element.locked,\n\t\t\topacity: getOpacity(element.opacity),\n\t\t\tmeta: {},\n\t\t} as const\n\n\t\tif (element.angle !== 0) {\n\t\t\trotatedElements.set(id, element.angle)\n\t\t}\n\n\t\tif (element.groupIds && element.groupIds.length > 0) {\n\t\t\tif (groupShapeIdToChildren.has(element.groupIds[0])) {\n\t\t\t\tgroupShapeIdToChildren.get(element.groupIds[0])?.push(id)\n\t\t\t} else {\n\t\t\t\tgroupShapeIdToChildren.set(element.groupIds[0], [id])\n\t\t\t}\n\t\t} else {\n\t\t\trootShapeIds.push(id)\n\t\t}\n\n\t\tswitch (element.type) {\n\t\t\tcase 'rectangle':\n\t\t\tcase 'ellipse':\n\t\t\tcase 'diamond': {\n\t\t\t\tlet text = ''\n\t\t\t\tlet align: TLDefaultHorizontalAlignStyle = 'middle'\n\n\t\t\t\tif (element.boundElements !== null) {\n\t\t\t\t\tfor (const boundElement of element.boundElements) {\n\t\t\t\t\t\tif (boundElement.type === 'text') {\n\t\t\t\t\t\t\tconst labelElement = elements.find((elm: any) => elm.id === boundElement.id)\n\t\t\t\t\t\t\tif (labelElement) {\n\t\t\t\t\t\t\t\ttext = labelElement.text\n\t\t\t\t\t\t\t\talign = textAlignToAlignTypes[labelElement.textAlign]\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}\n\n\t\t\t\tconst colorToUse =\n\t\t\t\t\telement.backgroundColor === 'transparent' ? element.strokeColor : element.backgroundColor\n\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'geo',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tgeo: element.type,\n\t\t\t\t\t\turl: element.link ?? '',\n\t\t\t\t\t\tw: element.width,\n\t\t\t\t\t\th: element.height,\n\t\t\t\t\t\tsize: strokeWidthsToSizes[element.strokeWidth] ?? 'draw',\n\t\t\t\t\t\tcolor: colorsToColors[colorToUse] ?? 'black',\n\t\t\t\t\t\trichText: toRichText(text),\n\t\t\t\t\t\talign,\n\t\t\t\t\t\tdash: getDash(element),\n\t\t\t\t\t\tfill: getFill(element),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'freedraw': {\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'draw',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdash: getDash(element),\n\t\t\t\t\t\tsize: strokeWidthsToSizes[element.strokeWidth],\n\t\t\t\t\t\tcolor: colorsToColors[element.strokeColor] ?? 'black',\n\t\t\t\t\t\tsegments: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'free',\n\t\t\t\t\t\t\t\tpoints: element.points.map(([x, y, z = 0.5]: number[]) => ({\n\t\t\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\t\tz,\n\t\t\t\t\t\t\t\t})),\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})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'line': {\n\t\t\t\tconst points = element.points.slice()\n\t\t\t\tif (points.length < 2) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tconst indices = getIndices(element.points.length)\n\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'line',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdash: getDash(element),\n\t\t\t\t\t\tsize: strokeWidthsToSizes[element.strokeWidth],\n\t\t\t\t\t\tcolor: colorsToColors[element.strokeColor] ?? 'black',\n\t\t\t\t\t\tspline: element.roundness ? 'cubic' : 'line',\n\t\t\t\t\t\tpoints: {\n\t\t\t\t\t\t\t...Object.fromEntries(\n\t\t\t\t\t\t\t\telement.points.map(([x, y]: number[], i: number) => {\n\t\t\t\t\t\t\t\t\tconst index = indices[i]\n\t\t\t\t\t\t\t\t\treturn [index, { id: index, index, x, y }]\n\t\t\t\t\t\t\t\t})\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})\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'arrow': {\n\t\t\t\tlet text = ''\n\n\t\t\t\tif (element.boundElements !== null) {\n\t\t\t\t\tfor (const boundElement of element.boundElements) {\n\t\t\t\t\t\tif (boundElement.type === 'text') {\n\t\t\t\t\t\t\tconst labelElement = elements.find((elm: any) => elm.id === boundElement.id)\n\t\t\t\t\t\t\tif (labelElement) {\n\t\t\t\t\t\t\t\ttext = labelElement.text\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}\n\n\t\t\t\tconst start = element.points[0]\n\t\t\t\tconst end = element.points[element.points.length - 1]\n\n\t\t\t\tconst startTargetId = excElementIdsToTldrawShapeIds.get(element.startBinding?.elementId)\n\t\t\t\tconst endTargetId = excElementIdsToTldrawShapeIds.get(element.endBinding?.elementId)\n\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'arrow',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\trichText: toRichText(text),\n\t\t\t\t\t\tkind: element.elbowed ? 'elbow' : 'arc',\n\t\t\t\t\t\tbend: getBend(element, start, end),\n\t\t\t\t\t\tdash: getDash(element),\n\t\t\t\t\t\tsize: strokeWidthsToSizes[element.strokeWidth] ?? 'm',\n\t\t\t\t\t\tcolor: colorsToColors[element.strokeColor] ?? 'black',\n\t\t\t\t\t\tstart: { x: start[0], y: start[1] },\n\t\t\t\t\t\tend: { x: end[0], y: end[1] },\n\t\t\t\t\t\tarrowheadEnd: arrowheadsToArrowheadTypes[element.endArrowhead] ?? 'none',\n\t\t\t\t\t\tarrowheadStart: arrowheadsToArrowheadTypes[element.startArrowhead] ?? 'none',\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\tif (startTargetId) {\n\t\t\t\t\ttldrawContent.bindings!.push({\n\t\t\t\t\t\tid: createBindingId(),\n\t\t\t\t\t\ttypeName: 'binding',\n\t\t\t\t\t\ttype: 'arrow',\n\t\t\t\t\t\tfromId: id,\n\t\t\t\t\t\ttoId: startTargetId,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tterminal: 'start',\n\t\t\t\t\t\t\tnormalizedAnchor: { x: 0.5, y: 0.5 },\n\t\t\t\t\t\t\tisPrecise: false,\n\t\t\t\t\t\t\tisExact: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmeta: {},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (endTargetId) {\n\t\t\t\t\ttldrawContent.bindings!.push({\n\t\t\t\t\t\tid: createBindingId(),\n\t\t\t\t\t\ttypeName: 'binding',\n\t\t\t\t\t\ttype: 'arrow',\n\t\t\t\t\t\tfromId: id,\n\t\t\t\t\t\ttoId: endTargetId,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tterminal: 'end',\n\t\t\t\t\t\t\tnormalizedAnchor: { x: 0.5, y: 0.5 },\n\t\t\t\t\t\t\tisPrecise: false,\n\t\t\t\t\t\t\tisExact: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmeta: {},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'text': {\n\t\t\t\tconst { size, scale } = getFontSizeAndScale(element.fontSize)\n\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tsize,\n\t\t\t\t\t\tscale,\n\t\t\t\t\t\tfont: fontFamilyToFontType[element.fontFamily] ?? 'draw',\n\t\t\t\t\t\tcolor: colorsToColors[element.strokeColor] ?? 'black',\n\t\t\t\t\t\trichText: toRichText(element.text),\n\t\t\t\t\t\ttextAlign: textAlignToTextAlignTypes[element.textAlign],\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'image': {\n\t\t\t\tconst file = files[element.fileId]\n\t\t\t\tif (!file) break\n\n\t\t\t\tconst assetId: TLAssetId = AssetRecordType.createId()\n\t\t\t\ttldrawContent.assets.push({\n\t\t\t\t\tid: assetId,\n\t\t\t\t\ttypeName: 'asset',\n\t\t\t\t\ttype: 'image',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tw: element.width,\n\t\t\t\t\t\th: element.height,\n\t\t\t\t\t\tfileSize: file.size,\n\t\t\t\t\t\tname: element.id ?? 'Untitled',\n\t\t\t\t\t\tisAnimated: false,\n\t\t\t\t\t\tmimeType: file.mimeType,\n\t\t\t\t\t\tsrc: file.dataURL,\n\t\t\t\t\t},\n\t\t\t\t\tmeta: {},\n\t\t\t\t})\n\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'image',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tw: element.width,\n\t\t\t\t\t\th: element.height,\n\t\t\t\t\t\tassetId,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tindex = getIndexAbove(index)\n\t}\n\n\tconst p = point ?? (editor.inputs.shiftKey ? editor.inputs.currentPagePoint : undefined)\n\n\teditor.putContentOntoCurrentPage(tldrawContent, {\n\t\tpoint: p,\n\t\tselect: false,\n\t\tpreserveIds: true,\n\t})\n\tfor (const groupedShapeIds of groupShapeIdToChildren.values()) {\n\t\tif (groupedShapeIds.length > 1) {\n\t\t\teditor.groupShapes(groupedShapeIds)\n\t\t\tconst groupShape = editor.getShape(groupedShapeIds[0])\n\t\t\tif (groupShape?.parentId && isShapeId(groupShape.parentId)) {\n\t\t\t\trootShapeIds.push(groupShape.parentId)\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const [id, angle] of rotatedElements) {\n\t\teditor.select(id)\n\t\teditor.rotateShapesBy([id], angle)\n\t}\n\n\tconst rootShapes = compact(rootShapeIds.map((id) => editor.getShape(id)))\n\tconst bounds = Box.Common(rootShapes.map((s) => editor.getShapePageBounds(s)!))\n\tconst viewPortCenter = editor.getViewportPageBounds().center\n\teditor.updateShapes(\n\t\trootShapes.map((s) => {\n\t\t\tconst delta = {\n\t\t\t\tx: (s.x ?? 0) - (bounds.x + bounds.w / 2),\n\t\t\t\ty: (s.y ?? 0) - (bounds.y + bounds.h / 2),\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: s.id,\n\t\t\t\ttype: s.type,\n\t\t\t\tx: viewPortCenter.x + delta.x,\n\t\t\t\ty: viewPortCenter.y + delta.y,\n\t\t\t}\n\t\t})\n\t)\n\teditor.setSelectedShapes(rootShapeIds)\n}\n\n/* --------------- Translating Helpers --------_------ */\n\nconst getOpacity = (opacity: number): TLOpacityType => {\n\tconst t = opacity / 100\n\tif (t < 0.2) {\n\t\treturn 0.1\n\t} else if (t < 0.4) {\n\t\treturn 0.25\n\t} else if (t < 0.6) {\n\t\treturn 0.5\n\t} else if (t < 0.8) {\n\t\treturn 0.75\n\t}\n\n\treturn 1\n}\n\nconst strokeWidthsToSizes: Record<number, TLDefaultSizeStyle> = {\n\t1: 's',\n\t2: 'm',\n\t3: 'l',\n\t4: 'xl',\n}\n\nconst fontSizesToSizes: Record<number, TLDefaultSizeStyle> = {\n\t16: 's',\n\t20: 'm',\n\t28: 'l',\n\t36: 'xl',\n}\n\nfunction getFontSizeAndScale(fontSize: number): { size: TLDefaultSizeStyle; scale: number } {\n\tconst size = fontSizesToSizes[fontSize]\n\tif (size) {\n\t\treturn { size, scale: 1 }\n\t}\n\tif (fontSize < 16) {\n\t\treturn { size: 's', scale: fontSize / 16 }\n\t}\n\tif (fontSize > 36) {\n\t\treturn { size: 'xl', scale: fontSize / 36 }\n\t}\n\treturn { size: 'm', scale: 1 }\n}\n\nconst fontFamilyToFontType: Record<number, TLDefaultFontStyle> = {\n\t1: 'draw',\n\t2: 'sans',\n\t3: 'mono',\n}\n\nconst oc = {\n\tgray: ['#f8f9fa', '#e9ecef', '#ced4da', '#868e96', '#343a40'],\n\tred: ['#fff5f5', '#ffc9c9', '#ff8787', '#fa5252', '#e03131'],\n\tpink: ['#fff0f6', '#fcc2d7', '#f783ac', '#e64980', '#c2255c'],\n\tgrape: ['#f8f0fc', '#eebefa', '#da77f2', '#be4bdb', '#9c36b5'],\n\tviolet: ['#f3f0ff', '#d0bfff', '#9775fa', '#7950f2', '#6741d9'],\n\tindigo: ['#edf2ff', '#bac8ff', '#748ffc', '#4c6ef5', '#3b5bdb'],\n\tblue: ['#e7f5ff', '#a5d8ff', '#4dabf7', '#228be6', '#1971c2'],\n\tcyan: ['#e3fafc', '#99e9f2', '#3bc9db', '#15aabf', '#0c8599'],\n\tteal: ['#e6fcf5', '#96f2d7', '#38d9a9', '#12b886', '#099268'],\n\tgreen: ['#ebfbee', '#b2f2bb', '#69db7c', '#40c057', '#2f9e44'],\n\tlime: ['#f4fce3', '#d8f5a2', '#a9e34b', '#82c91e', '#66a80f'],\n\tyellow: ['#fff9db', '#ffec99', '#ffd43b', '#fab005', '#f08c00'],\n\torange: ['#fff4e6', '#ffd8a8', '#ffa94d', '#fd7e14', '#e8590c'],\n}\n\nfunction mapExcalidrawColorToTldrawColors(\n\texcalidrawColor: keyof typeof oc,\n\tlight: TLDefaultColorStyle,\n\tdark: TLDefaultColorStyle\n) {\n\tconst colors = [0, 1, 2, 3, 4].map((index) => oc[excalidrawColor][index])\n\treturn Object.fromEntries(colors.map((c, i) => [c, i < 3 ? light : dark]))\n}\n\nconst colorsToColors: Record<string, TLDefaultColorStyle> = {\n\t...mapExcalidrawColorToTldrawColors('gray', 'grey', 'black'),\n\t...mapExcalidrawColorToTldrawColors('red', 'light-red', 'red'),\n\t...mapExcalidrawColorToTldrawColors('pink', 'light-red', 'red'),\n\t...mapExcalidrawColorToTldrawColors('grape', 'light-violet', 'violet'),\n\t...mapExcalidrawColorToTldrawColors('blue', 'light-blue', 'blue'),\n\t...mapExcalidrawColorToTldrawColors('cyan', 'light-blue', 'blue'),\n\t...mapExcalidrawColorToTldrawColors('teal', 'light-green', 'green'),\n\t...mapExcalidrawColorToTldrawColors('green', 'light-green', 'green'),\n\t...mapExcalidrawColorToTldrawColors('yellow', 'yellow', 'orange'),\n\t...mapExcalidrawColorToTldrawColors('orange', 'yellow', 'orange'),\n\t'#ffffff': 'white',\n\t'#000000': 'black',\n}\n\nconst strokeStylesToStrokeTypes: Record<string, TLDefaultDashStyle> = {\n\tsolid: 'draw',\n\tdashed: 'dashed',\n\tdotted: 'dotted',\n}\n\nconst fillStylesToFillType: Record<string, TLDefaultFillStyle> = {\n\t'cross-hatch': 'pattern',\n\thachure: 'pattern',\n\tsolid: 'solid',\n}\n\nconst textAlignToAlignTypes: Record<string, TLDefaultHorizontalAlignStyle> = {\n\tleft: 'start',\n\tcenter: 'middle',\n\tright: 'end',\n}\n\nconst textAlignToTextAlignTypes: Record<string, TLDefaultTextAlignStyle> = {\n\tleft: 'start',\n\tcenter: 'middle',\n\tright: 'end',\n}\n\nconst arrowheadsToArrowheadTypes: Record<string, TLArrowShapeArrowheadStyle> = {\n\tarrow: 'arrow',\n\tdot: 'dot',\n\ttriangle: 'triangle',\n\tbar: 'pipe',\n}\n\nfunction getBend(element: any, startPoint: any, endPoint: any) {\n\tlet bend = 0\n\tif (element.points.length > 2) {\n\t\tconst start = new Vec(startPoint[0], startPoint[1])\n\t\tconst end = new Vec(endPoint[0], endPoint[1])\n\t\tconst handle = new Vec(element.points[1][0], element.points[1][1])\n\t\tconst delta = Vec.Sub(end, start)\n\t\tconst v = Vec.Per(delta)\n\n\t\tconst med = Vec.Med(end, start)\n\t\tconst A = Vec.Sub(med, v)\n\t\tconst B = Vec.Add(med, v)\n\n\t\tconst point = Vec.NearestPointOnLineSegment(A, B, handle, false)\n\t\tbend = Vec.Dist(point, med)\n\t\tif (Vec.Clockwise(point, end, med)) bend *= -1\n\t}\n\treturn bend\n}\n\nconst getDash = (element: any): TLDefaultDashStyle => {\n\tlet dash: TLDefaultDashStyle = strokeStylesToStrokeTypes[element.strokeStyle] ?? 'draw'\n\tif (dash === 'draw' && element.roughness === 0) {\n\t\tdash = 'solid'\n\t}\n\treturn dash\n}\n\nconst getFill = (element: any): TLDefaultFillStyle => {\n\tif (element.backgroundColor === 'transparent') {\n\t\treturn 'none'\n\t}\n\treturn fillStylesToFillType[element.fillStyle] ?? 'solid'\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n\tAssetRecordType,\n\tBox,\n\tEditor,\n\tTLArrowShapeArrowheadStyle,\n\tTLAssetId,\n\tTLContent,\n\tTLDefaultColorStyle,\n\tTLDefaultDashStyle,\n\tTLDefaultFillStyle,\n\tTLDefaultFontStyle,\n\tTLDefaultHorizontalAlignStyle,\n\tTLDefaultSizeStyle,\n\tTLDefaultTextAlignStyle,\n\tTLOpacityType,\n\tTLShapeId,\n\tVec,\n\tVecLike,\n\tZERO_INDEX_KEY,\n\tcompact,\n\tcreateBindingId,\n\tcreateShapeId,\n\tgetIndexAbove,\n\tgetIndices,\n\tisShapeId,\n\ttoRichText,\n} from '@tldraw/editor'\n\n/**\n * Put excalidraw clipboard content onto the current page.\n *\n * @param editor - The editor instance.\n * @param excalidrawClipboardContent - The excalidraw clipboard model.\n * @param point - The point at which to put the excalidraw content.\n * @public\n */\nexport async function putExcalidrawContent(\n\teditor: Editor,\n\texcalidrawClipboardContent: any,\n\tpoint?: VecLike\n) {\n\tconst { elements, files } = excalidrawClipboardContent\n\n\tconst tldrawContent: TLContent = {\n\t\tshapes: [],\n\t\tbindings: [],\n\t\trootShapeIds: [],\n\t\tassets: [],\n\t\tschema: editor.store.schema.serialize(),\n\t}\n\n\tconst groupShapeIdToChildren = new Map<string, TLShapeId[]>()\n\tconst rotatedElements = new Map<TLShapeId, number>()\n\n\tconst currentPageId = editor.getCurrentPageId()\n\n\tconst excElementIdsToTldrawShapeIds = new Map<string, TLShapeId>()\n\tconst rootShapeIds: TLShapeId[] = []\n\n\tconst skipIds = new Set<string>()\n\n\telements.forEach((element: any) => {\n\t\texcElementIdsToTldrawShapeIds.set(element.id, createShapeId())\n\n\t\tif (element.boundElements !== null) {\n\t\t\tfor (const boundElement of element.boundElements) {\n\t\t\t\tif (boundElement.type === 'text') {\n\t\t\t\t\tskipIds.add(boundElement.id)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tlet index = ZERO_INDEX_KEY\n\n\tfor (const element of elements) {\n\t\tif (skipIds.has(element.id)) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst id = excElementIdsToTldrawShapeIds.get(element.id)!\n\n\t\tconst base = {\n\t\t\tid,\n\t\t\ttypeName: 'shape',\n\t\t\tparentId: currentPageId,\n\t\t\tindex,\n\t\t\tx: element.x,\n\t\t\ty: element.y,\n\t\t\trotation: 0,\n\t\t\tisLocked: element.locked,\n\t\t\topacity: getOpacity(element.opacity),\n\t\t\tmeta: {},\n\t\t} as const\n\n\t\tif (element.angle !== 0) {\n\t\t\trotatedElements.set(id, element.angle)\n\t\t}\n\n\t\tif (element.groupIds && element.groupIds.length > 0) {\n\t\t\tif (groupShapeIdToChildren.has(element.groupIds[0])) {\n\t\t\t\tgroupShapeIdToChildren.get(element.groupIds[0])?.push(id)\n\t\t\t} else {\n\t\t\t\tgroupShapeIdToChildren.set(element.groupIds[0], [id])\n\t\t\t}\n\t\t} else {\n\t\t\trootShapeIds.push(id)\n\t\t}\n\n\t\tswitch (element.type) {\n\t\t\tcase 'rectangle':\n\t\t\tcase 'ellipse':\n\t\t\tcase 'diamond': {\n\t\t\t\tlet text = ''\n\t\t\t\tlet align: TLDefaultHorizontalAlignStyle = 'middle'\n\n\t\t\t\tif (element.boundElements !== null) {\n\t\t\t\t\tfor (const boundElement of element.boundElements) {\n\t\t\t\t\t\tif (boundElement.type === 'text') {\n\t\t\t\t\t\t\tconst labelElement = elements.find((elm: any) => elm.id === boundElement.id)\n\t\t\t\t\t\t\tif (labelElement) {\n\t\t\t\t\t\t\t\ttext = labelElement.text\n\t\t\t\t\t\t\t\talign = textAlignToAlignTypes[labelElement.textAlign]\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}\n\n\t\t\t\tconst colorToUse =\n\t\t\t\t\telement.backgroundColor === 'transparent' ? element.strokeColor : element.backgroundColor\n\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'geo',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...editor.getShapeUtil('geo').getDefaultProps(),\n\t\t\t\t\t\tgeo: element.type,\n\t\t\t\t\t\turl: element.link ?? '',\n\t\t\t\t\t\tw: element.width,\n\t\t\t\t\t\th: element.height,\n\t\t\t\t\t\tsize: strokeWidthsToSizes[element.strokeWidth] ?? 'draw',\n\t\t\t\t\t\tcolor: colorsToColors[colorToUse] ?? 'black',\n\t\t\t\t\t\trichText: toRichText(text),\n\t\t\t\t\t\talign,\n\t\t\t\t\t\tdash: getDash(element),\n\t\t\t\t\t\tfill: getFill(element),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'freedraw': {\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'draw',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...editor.getShapeUtil('draw').getDefaultProps(),\n\t\t\t\t\t\tdash: getDash(element),\n\t\t\t\t\t\tsize: strokeWidthsToSizes[element.strokeWidth],\n\t\t\t\t\t\tcolor: colorsToColors[element.strokeColor] ?? 'black',\n\t\t\t\t\t\tsegments: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'free',\n\t\t\t\t\t\t\t\tpoints: element.points.map(([x, y, z = 0.5]: number[]) => ({\n\t\t\t\t\t\t\t\t\tx,\n\t\t\t\t\t\t\t\t\ty,\n\t\t\t\t\t\t\t\t\tz,\n\t\t\t\t\t\t\t\t})),\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})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'line': {\n\t\t\t\tconst points = element.points.slice()\n\t\t\t\tif (points.length < 2) {\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tconst indices = getIndices(element.points.length)\n\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'line',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...editor.getShapeUtil('line').getDefaultProps(),\n\t\t\t\t\t\tdash: getDash(element),\n\t\t\t\t\t\tsize: strokeWidthsToSizes[element.strokeWidth],\n\t\t\t\t\t\tcolor: colorsToColors[element.strokeColor] ?? 'black',\n\t\t\t\t\t\tspline: element.roundness ? 'cubic' : 'line',\n\t\t\t\t\t\tpoints: {\n\t\t\t\t\t\t\t...Object.fromEntries(\n\t\t\t\t\t\t\t\telement.points.map(([x, y]: number[], i: number) => {\n\t\t\t\t\t\t\t\t\tconst index = indices[i]\n\t\t\t\t\t\t\t\t\treturn [index, { id: index, index, x, y }]\n\t\t\t\t\t\t\t\t})\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})\n\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'arrow': {\n\t\t\t\tlet text = ''\n\n\t\t\t\tif (element.boundElements !== null) {\n\t\t\t\t\tfor (const boundElement of element.boundElements) {\n\t\t\t\t\t\tif (boundElement.type === 'text') {\n\t\t\t\t\t\t\tconst labelElement = elements.find((elm: any) => elm.id === boundElement.id)\n\t\t\t\t\t\t\tif (labelElement) {\n\t\t\t\t\t\t\t\ttext = labelElement.text\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}\n\n\t\t\t\tconst start = element.points[0]\n\t\t\t\tconst end = element.points[element.points.length - 1]\n\n\t\t\t\tconst startTargetId = excElementIdsToTldrawShapeIds.get(element.startBinding?.elementId)\n\t\t\t\tconst endTargetId = excElementIdsToTldrawShapeIds.get(element.endBinding?.elementId)\n\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'arrow',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...editor.getShapeUtil('arrow').getDefaultProps(),\n\t\t\t\t\t\trichText: toRichText(text),\n\t\t\t\t\t\tkind: element.elbowed ? 'elbow' : 'arc',\n\t\t\t\t\t\tbend: getBend(element, start, end),\n\t\t\t\t\t\tdash: getDash(element),\n\t\t\t\t\t\tsize: strokeWidthsToSizes[element.strokeWidth] ?? 'm',\n\t\t\t\t\t\tcolor: colorsToColors[element.strokeColor] ?? 'black',\n\t\t\t\t\t\tstart: { x: start[0], y: start[1] },\n\t\t\t\t\t\tend: { x: end[0], y: end[1] },\n\t\t\t\t\t\tarrowheadEnd: arrowheadsToArrowheadTypes[element.endArrowhead] ?? 'none',\n\t\t\t\t\t\tarrowheadStart: arrowheadsToArrowheadTypes[element.startArrowhead] ?? 'none',\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\tif (startTargetId) {\n\t\t\t\t\ttldrawContent.bindings!.push({\n\t\t\t\t\t\tid: createBindingId(),\n\t\t\t\t\t\ttypeName: 'binding',\n\t\t\t\t\t\ttype: 'arrow',\n\t\t\t\t\t\tfromId: id,\n\t\t\t\t\t\ttoId: startTargetId,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tterminal: 'start',\n\t\t\t\t\t\t\tsnap: 'none',\n\t\t\t\t\t\t\tnormalizedAnchor: { x: 0.5, y: 0.5 },\n\t\t\t\t\t\t\tisPrecise: false,\n\t\t\t\t\t\t\tisExact: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmeta: {},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (endTargetId) {\n\t\t\t\t\ttldrawContent.bindings!.push({\n\t\t\t\t\t\tid: createBindingId(),\n\t\t\t\t\t\ttypeName: 'binding',\n\t\t\t\t\t\ttype: 'arrow',\n\t\t\t\t\t\tfromId: id,\n\t\t\t\t\t\ttoId: endTargetId,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tterminal: 'end',\n\t\t\t\t\t\t\tsnap: 'none',\n\t\t\t\t\t\t\tnormalizedAnchor: { x: 0.5, y: 0.5 },\n\t\t\t\t\t\t\tisPrecise: false,\n\t\t\t\t\t\t\tisExact: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmeta: {},\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'text': {\n\t\t\t\tconst { size, scale } = getFontSizeAndScale(element.fontSize)\n\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...editor.getShapeUtil('text').getDefaultProps(),\n\t\t\t\t\t\tsize,\n\t\t\t\t\t\tscale,\n\t\t\t\t\t\tfont: fontFamilyToFontType[element.fontFamily] ?? 'draw',\n\t\t\t\t\t\tcolor: colorsToColors[element.strokeColor] ?? 'black',\n\t\t\t\t\t\trichText: toRichText(element.text),\n\t\t\t\t\t\ttextAlign: textAlignToTextAlignTypes[element.textAlign],\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'image': {\n\t\t\t\tconst file = files[element.fileId]\n\t\t\t\tif (!file) break\n\n\t\t\t\tconst assetId: TLAssetId = AssetRecordType.createId()\n\t\t\t\ttldrawContent.assets.push({\n\t\t\t\t\tid: assetId,\n\t\t\t\t\ttypeName: 'asset',\n\t\t\t\t\ttype: 'image',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tw: element.width,\n\t\t\t\t\t\th: element.height,\n\t\t\t\t\t\tfileSize: file.size,\n\t\t\t\t\t\tname: element.id ?? 'Untitled',\n\t\t\t\t\t\tisAnimated: false,\n\t\t\t\t\t\tmimeType: file.mimeType,\n\t\t\t\t\t\tsrc: file.dataURL,\n\t\t\t\t\t},\n\t\t\t\t\tmeta: {},\n\t\t\t\t})\n\n\t\t\t\ttldrawContent.shapes.push({\n\t\t\t\t\t...base,\n\t\t\t\t\ttype: 'image',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t...editor.getShapeUtil('image').getDefaultProps(),\n\t\t\t\t\t\tw: element.width,\n\t\t\t\t\t\th: element.height,\n\t\t\t\t\t\tassetId,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tindex = getIndexAbove(index)\n\t}\n\n\tconst p = point ?? (editor.inputs.shiftKey ? editor.inputs.currentPagePoint : undefined)\n\n\teditor.putContentOntoCurrentPage(tldrawContent, {\n\t\tpoint: p,\n\t\tselect: false,\n\t\tpreserveIds: true,\n\t})\n\tfor (const groupedShapeIds of groupShapeIdToChildren.values()) {\n\t\tif (groupedShapeIds.length > 1) {\n\t\t\teditor.groupShapes(groupedShapeIds)\n\t\t\tconst groupShape = editor.getShape(groupedShapeIds[0])\n\t\t\tif (groupShape?.parentId && isShapeId(groupShape.parentId)) {\n\t\t\t\trootShapeIds.push(groupShape.parentId)\n\t\t\t}\n\t\t}\n\t}\n\n\tfor (const [id, angle] of rotatedElements) {\n\t\teditor.select(id)\n\t\teditor.rotateShapesBy([id], angle)\n\t}\n\n\tconst rootShapes = compact(rootShapeIds.map((id) => editor.getShape(id)))\n\tconst bounds = Box.Common(rootShapes.map((s) => editor.getShapePageBounds(s)!))\n\tconst viewPortCenter = editor.getViewportPageBounds().center\n\teditor.updateShapes(\n\t\trootShapes.map((s) => {\n\t\t\tconst delta = {\n\t\t\t\tx: (s.x ?? 0) - (bounds.x + bounds.w / 2),\n\t\t\t\ty: (s.y ?? 0) - (bounds.y + bounds.h / 2),\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid: s.id,\n\t\t\t\ttype: s.type,\n\t\t\t\tx: viewPortCenter.x + delta.x,\n\t\t\t\ty: viewPortCenter.y + delta.y,\n\t\t\t}\n\t\t})\n\t)\n\teditor.setSelectedShapes(rootShapeIds)\n}\n\n/* --------------- Translating Helpers --------_------ */\n\nconst getOpacity = (opacity: number): TLOpacityType => {\n\tconst t = opacity / 100\n\tif (t < 0.2) {\n\t\treturn 0.1\n\t} else if (t < 0.4) {\n\t\treturn 0.25\n\t} else if (t < 0.6) {\n\t\treturn 0.5\n\t} else if (t < 0.8) {\n\t\treturn 0.75\n\t}\n\n\treturn 1\n}\n\nconst strokeWidthsToSizes: Record<number, TLDefaultSizeStyle> = {\n\t1: 's',\n\t2: 'm',\n\t3: 'l',\n\t4: 'xl',\n}\n\nconst fontSizesToSizes: Record<number, TLDefaultSizeStyle> = {\n\t16: 's',\n\t20: 'm',\n\t28: 'l',\n\t36: 'xl',\n}\n\nfunction getFontSizeAndScale(fontSize: number): { size: TLDefaultSizeStyle; scale: number } {\n\tconst size = fontSizesToSizes[fontSize]\n\tif (size) {\n\t\treturn { size, scale: 1 }\n\t}\n\tif (fontSize < 16) {\n\t\treturn { size: 's', scale: fontSize / 16 }\n\t}\n\tif (fontSize > 36) {\n\t\treturn { size: 'xl', scale: fontSize / 36 }\n\t}\n\treturn { size: 'm', scale: 1 }\n}\n\nconst fontFamilyToFontType: Record<number, TLDefaultFontStyle> = {\n\t1: 'draw',\n\t2: 'sans',\n\t3: 'mono',\n}\n\nconst oc = {\n\tgray: ['#f8f9fa', '#e9ecef', '#ced4da', '#868e96', '#343a40'],\n\tred: ['#fff5f5', '#ffc9c9', '#ff8787', '#fa5252', '#e03131'],\n\tpink: ['#fff0f6', '#fcc2d7', '#f783ac', '#e64980', '#c2255c'],\n\tgrape: ['#f8f0fc', '#eebefa', '#da77f2', '#be4bdb', '#9c36b5'],\n\tviolet: ['#f3f0ff', '#d0bfff', '#9775fa', '#7950f2', '#6741d9'],\n\tindigo: ['#edf2ff', '#bac8ff', '#748ffc', '#4c6ef5', '#3b5bdb'],\n\tblue: ['#e7f5ff', '#a5d8ff', '#4dabf7', '#228be6', '#1971c2'],\n\tcyan: ['#e3fafc', '#99e9f2', '#3bc9db', '#15aabf', '#0c8599'],\n\tteal: ['#e6fcf5', '#96f2d7', '#38d9a9', '#12b886', '#099268'],\n\tgreen: ['#ebfbee', '#b2f2bb', '#69db7c', '#40c057', '#2f9e44'],\n\tlime: ['#f4fce3', '#d8f5a2', '#a9e34b', '#82c91e', '#66a80f'],\n\tyellow: ['#fff9db', '#ffec99', '#ffd43b', '#fab005', '#f08c00'],\n\torange: ['#fff4e6', '#ffd8a8', '#ffa94d', '#fd7e14', '#e8590c'],\n}\n\nfunction mapExcalidrawColorToTldrawColors(\n\texcalidrawColor: keyof typeof oc,\n\tlight: TLDefaultColorStyle,\n\tdark: TLDefaultColorStyle\n) {\n\tconst colors = [0, 1, 2, 3, 4].map((index) => oc[excalidrawColor][index])\n\treturn Object.fromEntries(colors.map((c, i) => [c, i < 3 ? light : dark]))\n}\n\nconst colorsToColors: Record<string, TLDefaultColorStyle> = {\n\t...mapExcalidrawColorToTldrawColors('gray', 'grey', 'black'),\n\t...mapExcalidrawColorToTldrawColors('red', 'light-red', 'red'),\n\t...mapExcalidrawColorToTldrawColors('pink', 'light-red', 'red'),\n\t...mapExcalidrawColorToTldrawColors('grape', 'light-violet', 'violet'),\n\t...mapExcalidrawColorToTldrawColors('blue', 'light-blue', 'blue'),\n\t...mapExcalidrawColorToTldrawColors('cyan', 'light-blue', 'blue'),\n\t...mapExcalidrawColorToTldrawColors('teal', 'light-green', 'green'),\n\t...mapExcalidrawColorToTldrawColors('green', 'light-green', 'green'),\n\t...mapExcalidrawColorToTldrawColors('yellow', 'yellow', 'orange'),\n\t...mapExcalidrawColorToTldrawColors('orange', 'yellow', 'orange'),\n\t'#ffffff': 'white',\n\t'#000000': 'black',\n}\n\nconst strokeStylesToStrokeTypes: Record<string, TLDefaultDashStyle> = {\n\tsolid: 'draw',\n\tdashed: 'dashed',\n\tdotted: 'dotted',\n}\n\nconst fillStylesToFillType: Record<string, TLDefaultFillStyle> = {\n\t'cross-hatch': 'pattern',\n\thachure: 'pattern',\n\tsolid: 'solid',\n}\n\nconst textAlignToAlignTypes: Record<string, TLDefaultHorizontalAlignStyle> = {\n\tleft: 'start',\n\tcenter: 'middle',\n\tright: 'end',\n}\n\nconst textAlignToTextAlignTypes: Record<string, TLDefaultTextAlignStyle> = {\n\tleft: 'start',\n\tcenter: 'middle',\n\tright: 'end',\n}\n\nconst arrowheadsToArrowheadTypes: Record<string, TLArrowShapeArrowheadStyle> = {\n\tarrow: 'arrow',\n\tdot: 'dot',\n\ttriangle: 'triangle',\n\tbar: 'pipe',\n}\n\nfunction getBend(element: any, startPoint: any, endPoint: any) {\n\tlet bend = 0\n\tif (element.points.length > 2) {\n\t\tconst start = new Vec(startPoint[0], startPoint[1])\n\t\tconst end = new Vec(endPoint[0], endPoint[1])\n\t\tconst handle = new Vec(element.points[1][0], element.points[1][1])\n\t\tconst delta = Vec.Sub(end, start)\n\t\tconst v = Vec.Per(delta)\n\n\t\tconst med = Vec.Med(end, start)\n\t\tconst A = Vec.Sub(med, v)\n\t\tconst B = Vec.Add(med, v)\n\n\t\tconst point = Vec.NearestPointOnLineSegment(A, B, handle, false)\n\t\tbend = Vec.Dist(point, med)\n\t\tif (Vec.Clockwise(point, end, med)) bend *= -1\n\t}\n\treturn bend\n}\n\nconst getDash = (element: any): TLDefaultDashStyle => {\n\tlet dash: TLDefaultDashStyle = strokeStylesToStrokeTypes[element.strokeStyle] ?? 'draw'\n\tif (dash === 'draw' && element.roughness === 0) {\n\t\tdash = 'solid'\n\t}\n\treturn dash\n}\n\nconst getFill = (element: any): TLDefaultFillStyle => {\n\tif (element.backgroundColor === 'transparent') {\n\t\treturn 'none'\n\t}\n\treturn fillStylesToFillType[element.fillStyle] ?? 'solid'\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["index"]
7
7
  }
@@ -1,6 +1,4 @@
1
- import {
2
- sanitizeId
3
- } from "@tldraw/editor";
1
+ import { sanitizeId } from "@tldraw/editor";
4
2
  async function exportAs(editor, ids, opts) {
5
3
  let name = opts.name;
6
4
  if (!name) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/utils/export/exportAs.ts"],
4
- "sourcesContent": ["import {\n\tEditor,\n\tsanitizeId,\n\tTLExportType,\n\tTLFrameShape,\n\tTLImageExportOptions,\n\tTLShapeId,\n} from '@tldraw/editor'\n\n/** @public */\nexport interface ExportAsOptions extends TLImageExportOptions {\n\t/** {@inheritdoc @tldraw/editor#TLImageExportOptions.format} */\n\tformat: TLExportType\n\t/** Name of the exported file. If undefined a predefined name, based on the selection, will be used. */\n\tname?: string\n}\n\n/**\n * Export the given shapes as files.\n *\n * @param editor - The editor instance.\n * @param ids - The ids of the shapes to export.\n * @param opts - Options for the export.\n *\n * @public\n */\nexport async function exportAs(\n\teditor: Editor,\n\tids: TLShapeId[],\n\topts: ExportAsOptions\n): Promise<void> {\n\t// If we don't get name then use a predefined one\n\tlet name = opts.name\n\tif (!name) {\n\t\tname = `shapes at ${getTimestamp()}`\n\t\tif (ids.length === 1) {\n\t\t\tconst first = editor.getShape(ids[0])!\n\t\t\tif (editor.isShapeOfType<TLFrameShape>(first, 'frame')) {\n\t\t\t\tname = first.props.name || 'frame'\n\t\t\t} else {\n\t\t\t\tname = `${sanitizeId(first.id)} at ${getTimestamp()}`\n\t\t\t}\n\t\t}\n\t}\n\tname += `.${opts.format}`\n\n\tconst { blob } = await editor.toImage(ids, opts)\n\tconst file = new File([blob], name, { type: blob.type })\n\tdownloadFile(file)\n}\n\nfunction getTimestamp() {\n\tconst now = new Date()\n\n\tconst year = String(now.getFullYear()).slice(2)\n\tconst month = String(now.getMonth() + 1).padStart(2, '0')\n\tconst day = String(now.getDate()).padStart(2, '0')\n\tconst hours = String(now.getHours()).padStart(2, '0')\n\tconst minutes = String(now.getMinutes()).padStart(2, '0')\n\tconst seconds = String(now.getSeconds()).padStart(2, '0')\n\n\treturn `${year}-${month}-${day} ${hours}.${minutes}.${seconds}`\n}\n\n/** @internal */\nexport function downloadFile(file: File) {\n\tconst link = document.createElement('a')\n\tconst url = URL.createObjectURL(file)\n\tlink.href = url\n\tlink.download = file.name\n\tlink.click()\n\tURL.revokeObjectURL(url)\n}\n"],
5
- "mappings": "AAAA;AAAA,EAEC;AAAA,OAKM;AAmBP,eAAsB,SACrB,QACA,KACA,MACgB;AAEhB,MAAI,OAAO,KAAK;AAChB,MAAI,CAAC,MAAM;AACV,WAAO,aAAa,aAAa,CAAC;AAClC,QAAI,IAAI,WAAW,GAAG;AACrB,YAAM,QAAQ,OAAO,SAAS,IAAI,CAAC,CAAC;AACpC,UAAI,OAAO,cAA4B,OAAO,OAAO,GAAG;AACvD,eAAO,MAAM,MAAM,QAAQ;AAAA,MAC5B,OAAO;AACN,eAAO,GAAG,WAAW,MAAM,EAAE,CAAC,OAAO,aAAa,CAAC;AAAA,MACpD;AAAA,IACD;AAAA,EACD;AACA,UAAQ,IAAI,KAAK,MAAM;AAEvB,QAAM,EAAE,KAAK,IAAI,MAAM,OAAO,QAAQ,KAAK,IAAI;AAC/C,QAAM,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC;AACvD,eAAa,IAAI;AAClB;AAEA,SAAS,eAAe;AACvB,QAAM,MAAM,oBAAI,KAAK;AAErB,QAAM,OAAO,OAAO,IAAI,YAAY,CAAC,EAAE,MAAM,CAAC;AAC9C,QAAM,QAAQ,OAAO,IAAI,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACxD,QAAM,MAAM,OAAO,IAAI,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AACjD,QAAM,QAAQ,OAAO,IAAI,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AACpD,QAAM,UAAU,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACxD,QAAM,UAAU,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AAExD,SAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO;AAC9D;AAGO,SAAS,aAAa,MAAY;AACxC,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,QAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,OAAK,OAAO;AACZ,OAAK,WAAW,KAAK;AACrB,OAAK,MAAM;AACX,MAAI,gBAAgB,GAAG;AACxB;",
4
+ "sourcesContent": ["import { Editor, sanitizeId, TLExportType, TLImageExportOptions, TLShapeId } from '@tldraw/editor'\n\n/** @public */\nexport interface ExportAsOptions extends TLImageExportOptions {\n\t/** {@inheritdoc @tldraw/editor#TLImageExportOptions.format} */\n\tformat: TLExportType\n\t/** Name of the exported file. If undefined a predefined name, based on the selection, will be used. */\n\tname?: string\n}\n\n/**\n * Export the given shapes as files.\n *\n * @param editor - The editor instance.\n * @param ids - The ids of the shapes to export.\n * @param opts - Options for the export.\n *\n * @public\n */\nexport async function exportAs(\n\teditor: Editor,\n\tids: TLShapeId[],\n\topts: ExportAsOptions\n): Promise<void> {\n\t// If we don't get name then use a predefined one\n\tlet name = opts.name\n\tif (!name) {\n\t\tname = `shapes at ${getTimestamp()}`\n\t\tif (ids.length === 1) {\n\t\t\tconst first = editor.getShape(ids[0])!\n\t\t\tif (editor.isShapeOfType(first, 'frame')) {\n\t\t\t\tname = first.props.name || 'frame'\n\t\t\t} else {\n\t\t\t\tname = `${sanitizeId(first.id)} at ${getTimestamp()}`\n\t\t\t}\n\t\t}\n\t}\n\tname += `.${opts.format}`\n\n\tconst { blob } = await editor.toImage(ids, opts)\n\tconst file = new File([blob], name, { type: blob.type })\n\tdownloadFile(file)\n}\n\nfunction getTimestamp() {\n\tconst now = new Date()\n\n\tconst year = String(now.getFullYear()).slice(2)\n\tconst month = String(now.getMonth() + 1).padStart(2, '0')\n\tconst day = String(now.getDate()).padStart(2, '0')\n\tconst hours = String(now.getHours()).padStart(2, '0')\n\tconst minutes = String(now.getMinutes()).padStart(2, '0')\n\tconst seconds = String(now.getSeconds()).padStart(2, '0')\n\n\treturn `${year}-${month}-${day} ${hours}.${minutes}.${seconds}`\n}\n\n/** @internal */\nexport function downloadFile(file: File) {\n\tconst link = document.createElement('a')\n\tconst url = URL.createObjectURL(file)\n\tlink.href = url\n\tlink.download = file.name\n\tlink.click()\n\tURL.revokeObjectURL(url)\n}\n"],
5
+ "mappings": "AAAA,SAAiB,kBAAiE;AAmBlF,eAAsB,SACrB,QACA,KACA,MACgB;AAEhB,MAAI,OAAO,KAAK;AAChB,MAAI,CAAC,MAAM;AACV,WAAO,aAAa,aAAa,CAAC;AAClC,QAAI,IAAI,WAAW,GAAG;AACrB,YAAM,QAAQ,OAAO,SAAS,IAAI,CAAC,CAAC;AACpC,UAAI,OAAO,cAAc,OAAO,OAAO,GAAG;AACzC,eAAO,MAAM,MAAM,QAAQ;AAAA,MAC5B,OAAO;AACN,eAAO,GAAG,WAAW,MAAM,EAAE,CAAC,OAAO,aAAa,CAAC;AAAA,MACpD;AAAA,IACD;AAAA,EACD;AACA,UAAQ,IAAI,KAAK,MAAM;AAEvB,QAAM,EAAE,KAAK,IAAI,MAAM,OAAO,QAAQ,KAAK,IAAI;AAC/C,QAAM,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC;AACvD,eAAa,IAAI;AAClB;AAEA,SAAS,eAAe;AACvB,QAAM,MAAM,oBAAI,KAAK;AAErB,QAAM,OAAO,OAAO,IAAI,YAAY,CAAC,EAAE,MAAM,CAAC;AAC9C,QAAM,QAAQ,OAAO,IAAI,SAAS,IAAI,CAAC,EAAE,SAAS,GAAG,GAAG;AACxD,QAAM,MAAM,OAAO,IAAI,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AACjD,QAAM,QAAQ,OAAO,IAAI,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG;AACpD,QAAM,UAAU,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AACxD,QAAM,UAAU,OAAO,IAAI,WAAW,CAAC,EAAE,SAAS,GAAG,GAAG;AAExD,SAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO;AAC9D;AAGO,SAAS,aAAa,MAAY;AACxC,QAAM,OAAO,SAAS,cAAc,GAAG;AACvC,QAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,OAAK,OAAO;AACZ,OAAK,WAAW,KAAK;AACrB,OAAK,MAAM;AACX,MAAI,gBAAgB,GAAG;AACxB;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/utils/frames/frames.ts"],
4
- "sourcesContent": ["import {\n\tBox,\n\tEditor,\n\tTLFrameShape,\n\tTLShape,\n\tTLShapeId,\n\tTLShapePartial,\n\tVec,\n\tcompact,\n\tkickoutOccludedShapes,\n} from '@tldraw/editor'\n\n/**\n * Remove a frame.\n *\n * @param editor - tldraw editor instance.\n * @param ids - Ids of the frames you wish to remove.\n *\n * @public\n */\nexport function removeFrame(editor: Editor, ids: TLShapeId[]) {\n\tconst frames = compact(\n\t\tids\n\t\t\t.map((id) => editor.getShape<TLFrameShape>(id))\n\t\t\t.filter((f) => f && editor.isShapeOfType<TLFrameShape>(f, 'frame'))\n\t)\n\tif (!frames.length) return\n\n\tconst allChildren: TLShapeId[] = []\n\teditor.run(() => {\n\t\tframes.map((frame) => {\n\t\t\tconst children = editor.getSortedChildIdsForParent(frame.id)\n\t\t\tif (children.length) {\n\t\t\t\tkickoutOccludedShapes(editor, children, {\n\t\t\t\t\tfilter: (s) => !frames.find((f) => f.id === s.id),\n\t\t\t\t})\n\t\t\t\tallChildren.push(...children)\n\t\t\t}\n\t\t})\n\t\teditor.setSelectedShapes(allChildren)\n\t\teditor.deleteShapes(ids)\n\t})\n}\n\n/** @internal */\nexport const DEFAULT_FRAME_PADDING = 50\n\nexport function getFrameChildrenBounds(\n\tchildren: (TLShape | undefined)[],\n\teditor: Editor,\n\topts: { padding: number } = { padding: DEFAULT_FRAME_PADDING }\n) {\n\tconst bounds = Box.FromPoints(\n\t\tchildren.flatMap((shape) => {\n\t\t\tif (!shape) return []\n\t\t\tconst geometry = editor.getShapeGeometry(shape.id)\n\t\t\tconst transform = editor.getShapeLocalTransform(shape)\n\t\t\treturn transform?.applyToPoints(geometry.vertices) ?? []\n\t\t})\n\t)\n\n\tconst padding = opts.padding ?? DEFAULT_FRAME_PADDING\n\tconst w = bounds.w + 2 * padding\n\tconst h = bounds.h + 2 * padding\n\tconst dx = padding - bounds.minX\n\tconst dy = padding - bounds.minY\n\n\treturn { w, h, dx, dy }\n}\n\n/**\n * Fit a frame to its content.\n *\n * @param id - Id of the frame you wish to fit to content.\n * @param editor - tlraw editor instance.\n * @param opts - Options for fitting the frame.\n *\n * @public\n */\nexport function fitFrameToContent(editor: Editor, id: TLShapeId, opts = {} as { padding: number }) {\n\tconst frame = editor.getShape<TLFrameShape>(id)\n\tif (!frame) return\n\n\tconst childIds = editor.getSortedChildIdsForParent(frame.id)\n\tconst children = compact(childIds.map((id) => editor.getShape(id)))\n\tif (!children.length) return\n\n\tconst { w, h, dx, dy } = getFrameChildrenBounds(children, editor, opts)\n\n\t// The shapes already perfectly fit the frame.\n\tif (dx === 0 && dy === 0 && frame.props.w === w && frame.props.h === h) return\n\n\tconst diff = new Vec(dx, dy).rot(frame.rotation)\n\teditor.run(() => {\n\t\tconst changes: TLShapePartial[] = childIds.map((child) => {\n\t\t\tconst shape = editor.getShape(child)!\n\t\t\treturn {\n\t\t\t\tid: shape.id,\n\t\t\t\ttype: shape.type,\n\t\t\t\tx: shape.x + dx,\n\t\t\t\ty: shape.y + dy,\n\t\t\t}\n\t\t})\n\n\t\tchanges.push({\n\t\t\tid: frame.id,\n\t\t\ttype: frame.type,\n\t\t\tx: frame.x - diff.x,\n\t\t\ty: frame.y - diff.y,\n\t\t\tprops: {\n\t\t\t\tw,\n\t\t\t\th,\n\t\t\t},\n\t\t})\n\n\t\teditor.updateShapes(changes)\n\t})\n}\n"],
5
- "mappings": "AAAA;AAAA,EACC;AAAA,EAMA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAUA,SAAS,YAAY,QAAgB,KAAkB;AAC7D,QAAM,SAAS;AAAA,IACd,IACE,IAAI,CAAC,OAAO,OAAO,SAAuB,EAAE,CAAC,EAC7C,OAAO,CAAC,MAAM,KAAK,OAAO,cAA4B,GAAG,OAAO,CAAC;AAAA,EACpE;AACA,MAAI,CAAC,OAAO,OAAQ;AAEpB,QAAM,cAA2B,CAAC;AAClC,SAAO,IAAI,MAAM;AAChB,WAAO,IAAI,CAAC,UAAU;AACrB,YAAM,WAAW,OAAO,2BAA2B,MAAM,EAAE;AAC3D,UAAI,SAAS,QAAQ;AACpB,8BAAsB,QAAQ,UAAU;AAAA,UACvC,QAAQ,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;AAAA,QACjD,CAAC;AACD,oBAAY,KAAK,GAAG,QAAQ;AAAA,MAC7B;AAAA,IACD,CAAC;AACD,WAAO,kBAAkB,WAAW;AACpC,WAAO,aAAa,GAAG;AAAA,EACxB,CAAC;AACF;AAGO,MAAM,wBAAwB;AAE9B,SAAS,uBACf,UACA,QACA,OAA4B,EAAE,SAAS,sBAAsB,GAC5D;AACD,QAAM,SAAS,IAAI;AAAA,IAClB,SAAS,QAAQ,CAAC,UAAU;AAC3B,UAAI,CAAC,MAAO,QAAO,CAAC;AACpB,YAAM,WAAW,OAAO,iBAAiB,MAAM,EAAE;AACjD,YAAM,YAAY,OAAO,uBAAuB,KAAK;AACrD,aAAO,WAAW,cAAc,SAAS,QAAQ,KAAK,CAAC;AAAA,IACxD,CAAC;AAAA,EACF;AAEA,QAAM,UAAU,KAAK,WAAW;AAChC,QAAM,IAAI,OAAO,IAAI,IAAI;AACzB,QAAM,IAAI,OAAO,IAAI,IAAI;AACzB,QAAM,KAAK,UAAU,OAAO;AAC5B,QAAM,KAAK,UAAU,OAAO;AAE5B,SAAO,EAAE,GAAG,GAAG,IAAI,GAAG;AACvB;AAWO,SAAS,kBAAkB,QAAgB,IAAe,OAAO,CAAC,GAA0B;AAClG,QAAM,QAAQ,OAAO,SAAuB,EAAE;AAC9C,MAAI,CAAC,MAAO;AAEZ,QAAM,WAAW,OAAO,2BAA2B,MAAM,EAAE;AAC3D,QAAM,WAAW,QAAQ,SAAS,IAAI,CAACA,QAAO,OAAO,SAASA,GAAE,CAAC,CAAC;AAClE,MAAI,CAAC,SAAS,OAAQ;AAEtB,QAAM,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,uBAAuB,UAAU,QAAQ,IAAI;AAGtE,MAAI,OAAO,KAAK,OAAO,KAAK,MAAM,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM,EAAG;AAExE,QAAM,OAAO,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,MAAM,QAAQ;AAC/C,SAAO,IAAI,MAAM;AAChB,UAAM,UAA4B,SAAS,IAAI,CAAC,UAAU;AACzD,YAAM,QAAQ,OAAO,SAAS,KAAK;AACnC,aAAO;AAAA,QACN,IAAI,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QACZ,GAAG,MAAM,IAAI;AAAA,QACb,GAAG,MAAM,IAAI;AAAA,MACd;AAAA,IACD,CAAC;AAED,YAAQ,KAAK;AAAA,MACZ,IAAI,MAAM;AAAA,MACV,MAAM,MAAM;AAAA,MACZ,GAAG,MAAM,IAAI,KAAK;AAAA,MAClB,GAAG,MAAM,IAAI,KAAK;AAAA,MAClB,OAAO;AAAA,QACN;AAAA,QACA;AAAA,MACD;AAAA,IACD,CAAC;AAED,WAAO,aAAa,OAAO;AAAA,EAC5B,CAAC;AACF;",
4
+ "sourcesContent": ["import {\n\tBox,\n\tEditor,\n\tTLFrameShape,\n\tTLShape,\n\tTLShapeId,\n\tTLShapePartial,\n\tVec,\n\tcompact,\n\tkickoutOccludedShapes,\n} from '@tldraw/editor'\n\n/**\n * Remove a frame.\n *\n * @param editor - tldraw editor instance.\n * @param ids - Ids of the frames you wish to remove.\n *\n * @public\n */\nexport function removeFrame(editor: Editor, ids: TLShapeId[]) {\n\tconst frames = compact(\n\t\tids\n\t\t\t.map((id) => editor.getShape<TLFrameShape>(id))\n\t\t\t.filter((f) => f && editor.isShapeOfType(f, 'frame'))\n\t)\n\tif (!frames.length) return\n\n\tconst allChildren: TLShapeId[] = []\n\teditor.run(() => {\n\t\tframes.map((frame) => {\n\t\t\tconst children = editor.getSortedChildIdsForParent(frame.id)\n\t\t\tif (children.length) {\n\t\t\t\tkickoutOccludedShapes(editor, children, {\n\t\t\t\t\tfilter: (s) => !frames.find((f) => f.id === s.id),\n\t\t\t\t})\n\t\t\t\tallChildren.push(...children)\n\t\t\t}\n\t\t})\n\t\teditor.setSelectedShapes(allChildren)\n\t\teditor.deleteShapes(ids)\n\t})\n}\n\n/** @internal */\nexport const DEFAULT_FRAME_PADDING = 50\n\nexport function getFrameChildrenBounds(\n\tchildren: (TLShape | undefined)[],\n\teditor: Editor,\n\topts: { padding: number } = { padding: DEFAULT_FRAME_PADDING }\n) {\n\tconst bounds = Box.FromPoints(\n\t\tchildren.flatMap((shape) => {\n\t\t\tif (!shape) return []\n\t\t\tconst geometry = editor.getShapeGeometry(shape.id)\n\t\t\tconst transform = editor.getShapeLocalTransform(shape)\n\t\t\treturn transform?.applyToPoints(geometry.vertices) ?? []\n\t\t})\n\t)\n\n\tconst padding = opts.padding ?? DEFAULT_FRAME_PADDING\n\tconst w = bounds.w + 2 * padding\n\tconst h = bounds.h + 2 * padding\n\tconst dx = padding - bounds.minX\n\tconst dy = padding - bounds.minY\n\n\treturn { w, h, dx, dy }\n}\n\n/**\n * Fit a frame to its content.\n *\n * @param id - Id of the frame you wish to fit to content.\n * @param editor - tlraw editor instance.\n * @param opts - Options for fitting the frame.\n *\n * @public\n */\nexport function fitFrameToContent(editor: Editor, id: TLShapeId, opts = {} as { padding: number }) {\n\tconst frame = editor.getShape<TLFrameShape>(id)\n\tif (!frame) return\n\n\tconst childIds = editor.getSortedChildIdsForParent(frame.id)\n\tconst children = compact(childIds.map((id) => editor.getShape(id)))\n\tif (!children.length) return\n\n\tconst { w, h, dx, dy } = getFrameChildrenBounds(children, editor, opts)\n\n\t// The shapes already perfectly fit the frame.\n\tif (dx === 0 && dy === 0 && frame.props.w === w && frame.props.h === h) return\n\n\tconst diff = new Vec(dx, dy).rot(frame.rotation)\n\teditor.run(() => {\n\t\tconst changes: TLShapePartial[] = childIds.map((child) => {\n\t\t\tconst shape = editor.getShape(child)!\n\t\t\treturn {\n\t\t\t\tid: shape.id,\n\t\t\t\ttype: shape.type,\n\t\t\t\tx: shape.x + dx,\n\t\t\t\ty: shape.y + dy,\n\t\t\t}\n\t\t})\n\n\t\tchanges.push({\n\t\t\tid: frame.id,\n\t\t\ttype: frame.type,\n\t\t\tx: frame.x - diff.x,\n\t\t\ty: frame.y - diff.y,\n\t\t\tprops: {\n\t\t\t\tw,\n\t\t\t\th,\n\t\t\t},\n\t\t})\n\n\t\teditor.updateShapes(changes)\n\t})\n}\n"],
5
+ "mappings": "AAAA;AAAA,EACC;AAAA,EAMA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAUA,SAAS,YAAY,QAAgB,KAAkB;AAC7D,QAAM,SAAS;AAAA,IACd,IACE,IAAI,CAAC,OAAO,OAAO,SAAuB,EAAE,CAAC,EAC7C,OAAO,CAAC,MAAM,KAAK,OAAO,cAAc,GAAG,OAAO,CAAC;AAAA,EACtD;AACA,MAAI,CAAC,OAAO,OAAQ;AAEpB,QAAM,cAA2B,CAAC;AAClC,SAAO,IAAI,MAAM;AAChB,WAAO,IAAI,CAAC,UAAU;AACrB,YAAM,WAAW,OAAO,2BAA2B,MAAM,EAAE;AAC3D,UAAI,SAAS,QAAQ;AACpB,8BAAsB,QAAQ,UAAU;AAAA,UACvC,QAAQ,CAAC,MAAM,CAAC,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE;AAAA,QACjD,CAAC;AACD,oBAAY,KAAK,GAAG,QAAQ;AAAA,MAC7B;AAAA,IACD,CAAC;AACD,WAAO,kBAAkB,WAAW;AACpC,WAAO,aAAa,GAAG;AAAA,EACxB,CAAC;AACF;AAGO,MAAM,wBAAwB;AAE9B,SAAS,uBACf,UACA,QACA,OAA4B,EAAE,SAAS,sBAAsB,GAC5D;AACD,QAAM,SAAS,IAAI;AAAA,IAClB,SAAS,QAAQ,CAAC,UAAU;AAC3B,UAAI,CAAC,MAAO,QAAO,CAAC;AACpB,YAAM,WAAW,OAAO,iBAAiB,MAAM,EAAE;AACjD,YAAM,YAAY,OAAO,uBAAuB,KAAK;AACrD,aAAO,WAAW,cAAc,SAAS,QAAQ,KAAK,CAAC;AAAA,IACxD,CAAC;AAAA,EACF;AAEA,QAAM,UAAU,KAAK,WAAW;AAChC,QAAM,IAAI,OAAO,IAAI,IAAI;AACzB,QAAM,IAAI,OAAO,IAAI,IAAI;AACzB,QAAM,KAAK,UAAU,OAAO;AAC5B,QAAM,KAAK,UAAU,OAAO;AAE5B,SAAO,EAAE,GAAG,GAAG,IAAI,GAAG;AACvB;AAWO,SAAS,kBAAkB,QAAgB,IAAe,OAAO,CAAC,GAA0B;AAClG,QAAM,QAAQ,OAAO,SAAuB,EAAE;AAC9C,MAAI,CAAC,MAAO;AAEZ,QAAM,WAAW,OAAO,2BAA2B,MAAM,EAAE;AAC3D,QAAM,WAAW,QAAQ,SAAS,IAAI,CAACA,QAAO,OAAO,SAASA,GAAE,CAAC,CAAC;AAClE,MAAI,CAAC,SAAS,OAAQ;AAEtB,QAAM,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI,uBAAuB,UAAU,QAAQ,IAAI;AAGtE,MAAI,OAAO,KAAK,OAAO,KAAK,MAAM,MAAM,MAAM,KAAK,MAAM,MAAM,MAAM,EAAG;AAExE,QAAM,OAAO,IAAI,IAAI,IAAI,EAAE,EAAE,IAAI,MAAM,QAAQ;AAC/C,SAAO,IAAI,MAAM;AAChB,UAAM,UAA4B,SAAS,IAAI,CAAC,UAAU;AACzD,YAAM,QAAQ,OAAO,SAAS,KAAK;AACnC,aAAO;AAAA,QACN,IAAI,MAAM;AAAA,QACV,MAAM,MAAM;AAAA,QACZ,GAAG,MAAM,IAAI;AAAA,QACb,GAAG,MAAM,IAAI;AAAA,MACd;AAAA,IACD,CAAC;AAED,YAAQ,KAAK;AAAA,MACZ,IAAI,MAAM;AAAA,MACV,MAAM,MAAM;AAAA,MACZ,GAAG,MAAM,IAAI,KAAK;AAAA,MAClB,GAAG,MAAM,IAAI,KAAK;AAAA,MAClB,OAAO;AAAA,QACN;AAAA,QACA;AAAA,MACD;AAAA,IACD,CAAC;AAED,WAAO,aAAa,OAAO;AAAA,EAC5B,CAAC;AACF;",
6
6
  "names": ["id"]
7
7
  }