tldraw 4.3.0-canary.e52fa5385f86 → 4.3.0-canary.ea88b223b83a
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.
- package/dist-cjs/index.d.ts +294 -237
- package/dist-cjs/index.js +12 -5
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/canvas/TldrawSelectionForeground.js +2 -2
- package/dist-cjs/lib/canvas/TldrawSelectionForeground.js.map +2 -2
- package/dist-cjs/lib/defaultEmbedDefinitions.js +1 -1
- package/dist-cjs/lib/defaultEmbedDefinitions.js.map +2 -2
- package/dist-cjs/lib/defaultExternalContentHandlers.js +5 -5
- package/dist-cjs/lib/defaultExternalContentHandlers.js.map +2 -2
- package/dist-cjs/lib/defaultSideEffects.js +6 -1
- package/dist-cjs/lib/defaultSideEffects.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js +14 -13
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/arrow-types.js.map +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowLabel.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/arrowTargetState.js +1 -1
- package/dist-cjs/lib/shapes/arrow/arrowTargetState.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/elbow/getElbowArrowInfo.js +1 -1
- package/dist-cjs/lib/shapes/arrow/elbow/getElbowArrowInfo.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js +4 -10
- package/dist-cjs/lib/shapes/arrow/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js +7 -4
- package/dist-cjs/lib/shapes/arrow/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +25 -23
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/getPath.js +20 -11
- package/dist-cjs/lib/shapes/draw/getPath.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js +82 -86
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +3 -3
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js +6 -0
- package/dist-cjs/lib/shapes/embed/EmbedShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js +6 -5
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +146 -142
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/toolStates/Idle.js +5 -10
- package/dist-cjs/lib/shapes/geo/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js +3 -3
- package/dist-cjs/lib/shapes/geo/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +23 -21
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/line/toolStates/Pointing.js +3 -3
- package/dist-cjs/lib/shapes/line/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js +6 -11
- package/dist-cjs/lib/shapes/note/NoteShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/note/toolStates/Pointing.js +5 -10
- package/dist-cjs/lib/shapes/note/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js +3 -2
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js +14 -2
- package/dist-cjs/lib/shapes/shared/PlainTextLabel.js.map +3 -3
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js +12 -4
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js.map +3 -3
- package/dist-cjs/lib/shapes/shared/ShapeFill.js +2 -2
- package/dist-cjs/lib/shapes/shared/ShapeFill.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/interpolate-props.js +3 -3
- package/dist-cjs/lib/shapes/shared/interpolate-props.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/{useForceSolid.js → useEfficientZoomThreshold.js} +10 -7
- package/dist-cjs/lib/shapes/shared/useEfficientZoomThreshold.js.map +7 -0
- package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js +1 -1
- package/dist-cjs/lib/shapes/shared/useImageOrVideoAsset.js.map +2 -2
- package/dist-cjs/lib/shapes/text/RichTextArea.js +5 -0
- package/dist-cjs/lib/shapes/text/RichTextArea.js.map +2 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js +5 -2
- package/dist-cjs/lib/shapes/text/TextShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/text/toolStates/Idle.js +4 -10
- package/dist-cjs/lib/shapes/text/toolStates/Idle.js.map +2 -2
- package/dist-cjs/lib/shapes/text/toolStates/Pointing.js +7 -5
- package/dist-cjs/lib/shapes/text/toolStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/video/VideoShapeUtil.js.map +2 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js +4 -5
- package/dist-cjs/lib/tools/EraserTool/childStates/Erasing.js.map +2 -2
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js +2 -4
- package/dist-cjs/lib/tools/EraserTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/HandTool.js +3 -5
- package/dist-cjs/lib/tools/HandTool/HandTool.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js +3 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Dragging.js.map +2 -2
- package/dist-cjs/lib/tools/HandTool/childStates/Pointing.js +1 -1
- package/dist-cjs/lib/tools/HandTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/LaserTool/childStates/Lasering.js +1 -1
- package/dist-cjs/lib/tools/LaserTool/childStates/Lasering.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js +9 -7
- package/dist-cjs/lib/tools/SelectTool/DragAndDropManager.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js +6 -5
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js +4 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Cropping.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/Idle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js +2 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js +7 -5
- package/dist-cjs/lib/tools/SelectTool/childStates/DraggingHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js +38 -11
- package/dist-cjs/lib/tools/SelectTool/childStates/EditingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +42 -50
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js +6 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingArrowLabel.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingCanvas.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js +4 -14
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingResizeHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingRotateHandle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingSelection.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js +4 -13
- package/dist-cjs/lib/tools/SelectTool/childStates/PointingShape.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +5 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js +2 -3
- package/dist-cjs/lib/tools/SelectTool/childStates/Rotating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js +7 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/ScribbleBrushing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +13 -11
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/selectHelpers.js +15 -4
- package/dist-cjs/lib/tools/SelectTool/selectHelpers.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/ZoomTool.js +1 -1
- package/dist-cjs/lib/tools/ZoomTool/ZoomTool.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/childStates/Pointing.js +3 -3
- package/dist-cjs/lib/tools/ZoomTool/childStates/Pointing.js.map +2 -2
- package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js +5 -6
- package/dist-cjs/lib/tools/ZoomTool/childStates/ZoomBrushing.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js +1 -3
- package/dist-cjs/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/selectOnCanvasPointerUp.js +1 -1
- package/dist-cjs/lib/tools/selection-logic/selectOnCanvasPointerUp.js.map +2 -2
- package/dist-cjs/lib/tools/selection-logic/updateHoveredShapeId.js +1 -1
- package/dist-cjs/lib/tools/selection-logic/updateHoveredShapeId.js.map +2 -2
- package/dist-cjs/lib/ui/TldrawUi.js +2 -2
- package/dist-cjs/lib/ui/TldrawUi.js.map +2 -2
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js +3 -9
- package/dist-cjs/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.js.map +2 -2
- package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js +1 -3
- package/dist-cjs/lib/ui/components/ContextMenu/DefaultContextMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/CursorChatBubble.js +1 -1
- package/dist-cjs/lib/ui/components/CursorChatBubble.js.map +2 -2
- package/dist-cjs/lib/ui/components/DefaultDebugPanel.js +1 -21
- package/dist-cjs/lib/ui/components/DefaultDebugPanel.js.map +2 -2
- package/dist-cjs/lib/ui/components/HelperButtons/StopFollowing.js.map +2 -2
- package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js +1 -1
- package/dist-cjs/lib/ui/components/Minimap/DefaultMinimap.js.map +2 -2
- package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js +2 -15
- package/dist-cjs/lib/ui/components/OfflineIndicator/OfflineIndicator.js.map +3 -3
- package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js +3 -1
- package/dist-cjs/lib/ui/components/PageMenu/PageItemInput.js.map +2 -2
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js +6 -0
- package/dist-cjs/lib/ui/components/SharePanel/PeopleMenu.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js +1 -1
- package/dist-cjs/lib/ui/components/Toolbar/DefaultImageToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbar.js +1 -1
- package/dist-cjs/lib/ui/components/Toolbar/DefaultRichTextToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/TopPanel/CenteredTopPanelContainer.js.map +1 -1
- package/dist-cjs/lib/ui/components/menu-items.js +3 -1
- package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js +3 -1
- package/dist-cjs/lib/ui/components/primitives/TldrawUiContextualToolbar.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +6 -5
- package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.js.map +2 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +1 -2
- package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
- package/dist-cjs/lib/ui/context/actions.js +6 -6
- package/dist-cjs/lib/ui/context/actions.js.map +2 -2
- package/dist-cjs/lib/ui/context/components.js +1 -2
- package/dist-cjs/lib/ui/context/components.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useClipboardEvents.js +2 -2
- package/dist-cjs/lib/ui/hooks/useClipboardEvents.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js +2 -2
- package/dist-cjs/lib/ui/hooks/useKeyboardShortcuts.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTools.js +4 -5
- package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
- package/dist-cjs/lib/ui/version.js +3 -3
- package/dist-cjs/lib/ui/version.js.map +1 -1
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +8 -6
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
- package/dist-cjs/lib/{tools/selection-logic/getShouldEnterCropModeOnPointerDown.js → utils/test-helpers.js} +21 -8
- package/dist-cjs/lib/utils/test-helpers.js.map +7 -0
- package/dist-cjs/lib/utils/text/richText.js +4 -2
- package/dist-cjs/lib/utils/text/richText.js.map +2 -2
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +7 -2
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
- package/dist-esm/index.d.mts +294 -237
- package/dist-esm/index.mjs +12 -5
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs +2 -2
- package/dist-esm/lib/canvas/TldrawSelectionForeground.mjs.map +2 -2
- package/dist-esm/lib/defaultEmbedDefinitions.mjs +1 -1
- package/dist-esm/lib/defaultEmbedDefinitions.mjs.map +2 -2
- package/dist-esm/lib/defaultExternalContentHandlers.mjs +5 -5
- package/dist-esm/lib/defaultExternalContentHandlers.mjs.map +2 -2
- package/dist-esm/lib/defaultSideEffects.mjs +6 -1
- package/dist-esm/lib/defaultSideEffects.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs +15 -15
- package/dist-esm/lib/shapes/arrow/ArrowShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/arrowLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/arrowTargetState.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/elbow/getElbowArrowInfo.mjs +1 -1
- package/dist-esm/lib/shapes/arrow/elbow/getElbowArrowInfo.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs +4 -10
- package/dist-esm/lib/shapes/arrow/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs +7 -4
- package/dist-esm/lib/shapes/arrow/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +30 -25
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/getPath.mjs +21 -11
- package/dist-esm/lib/shapes/draw/getPath.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs +83 -86
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +3 -3
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs +6 -0
- package/dist-esm/lib/shapes/embed/EmbedShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs +6 -5
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +147 -142
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs +5 -10
- package/dist-esm/lib/shapes/geo/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs +3 -3
- package/dist-esm/lib/shapes/geo/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +24 -22
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs +3 -3
- package/dist-esm/lib/shapes/line/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs +7 -12
- package/dist-esm/lib/shapes/note/NoteShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs +5 -10
- package/dist-esm/lib/shapes/note/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs +4 -3
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs +14 -2
- package/dist-esm/lib/shapes/shared/PlainTextLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +12 -4
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs +2 -2
- package/dist-esm/lib/shapes/shared/ShapeFill.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/interpolate-props.mjs +4 -4
- package/dist-esm/lib/shapes/shared/interpolate-props.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.mjs +12 -0
- package/dist-esm/lib/shapes/shared/useEfficientZoomThreshold.mjs.map +7 -0
- package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs +1 -1
- package/dist-esm/lib/shapes/shared/useImageOrVideoAsset.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/RichTextArea.mjs +5 -0
- package/dist-esm/lib/shapes/text/RichTextArea.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs +5 -2
- package/dist-esm/lib/shapes/text/TextShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/toolStates/Idle.mjs +4 -10
- package/dist-esm/lib/shapes/text/toolStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs +7 -5
- package/dist-esm/lib/shapes/text/toolStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/video/VideoShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs +4 -5
- package/dist-esm/lib/tools/EraserTool/childStates/Erasing.mjs.map +2 -2
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs +2 -4
- package/dist-esm/lib/tools/EraserTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/HandTool.mjs +3 -5
- package/dist-esm/lib/tools/HandTool/HandTool.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs +3 -2
- package/dist-esm/lib/tools/HandTool/childStates/Dragging.mjs.map +2 -2
- package/dist-esm/lib/tools/HandTool/childStates/Pointing.mjs +1 -1
- package/dist-esm/lib/tools/HandTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/LaserTool/childStates/Lasering.mjs +1 -1
- package/dist-esm/lib/tools/LaserTool/childStates/Lasering.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs +9 -7
- package/dist-esm/lib/tools/SelectTool/DragAndDropManager.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs +6 -5
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs +4 -6
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Cropping.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/Idle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs +2 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs +7 -5
- package/dist-esm/lib/tools/SelectTool/childStates/DraggingHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs +38 -11
- package/dist-esm/lib/tools/SelectTool/childStates/EditingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +43 -51
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs +6 -6
- package/dist-esm/lib/tools/SelectTool/childStates/PointingArrowLabel.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingCanvas.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs +5 -15
- package/dist-esm/lib/tools/SelectTool/childStates/PointingHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingResizeHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/PointingRotateHandle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingSelection.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs +4 -13
- package/dist-esm/lib/tools/SelectTool/childStates/PointingShape.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +5 -6
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs +2 -3
- package/dist-esm/lib/tools/SelectTool/childStates/Rotating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs +7 -6
- package/dist-esm/lib/tools/SelectTool/childStates/ScribbleBrushing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +13 -11
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs +17 -4
- package/dist-esm/lib/tools/SelectTool/selectHelpers.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/ZoomTool.mjs +1 -1
- package/dist-esm/lib/tools/ZoomTool/ZoomTool.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/childStates/Pointing.mjs +3 -3
- package/dist-esm/lib/tools/ZoomTool/childStates/Pointing.mjs.map +2 -2
- package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs +5 -6
- package/dist-esm/lib/tools/ZoomTool/childStates/ZoomBrushing.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs +1 -3
- package/dist-esm/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/selectOnCanvasPointerUp.mjs +1 -1
- package/dist-esm/lib/tools/selection-logic/selectOnCanvasPointerUp.mjs.map +2 -2
- package/dist-esm/lib/tools/selection-logic/updateHoveredShapeId.mjs +1 -1
- package/dist-esm/lib/tools/selection-logic/updateHoveredShapeId.mjs.map +2 -2
- package/dist-esm/lib/ui/TldrawUi.mjs +2 -2
- package/dist-esm/lib/ui/TldrawUi.mjs.map +2 -2
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs +2 -8
- package/dist-esm/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.mjs.map +2 -2
- package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs +1 -3
- package/dist-esm/lib/ui/components/ContextMenu/DefaultContextMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/CursorChatBubble.mjs +1 -1
- package/dist-esm/lib/ui/components/CursorChatBubble.mjs.map +2 -2
- package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs +3 -30
- package/dist-esm/lib/ui/components/DefaultDebugPanel.mjs.map +2 -2
- package/dist-esm/lib/ui/components/HelperButtons/StopFollowing.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs +1 -1
- package/dist-esm/lib/ui/components/Minimap/DefaultMinimap.mjs.map +2 -2
- package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs +3 -6
- package/dist-esm/lib/ui/components/OfflineIndicator/OfflineIndicator.mjs.map +2 -2
- package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs +3 -1
- package/dist-esm/lib/ui/components/PageMenu/PageItemInput.mjs.map +2 -2
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs +6 -0
- package/dist-esm/lib/ui/components/SharePanel/PeopleMenu.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs +1 -1
- package/dist-esm/lib/ui/components/Toolbar/DefaultImageToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbar.mjs +1 -1
- package/dist-esm/lib/ui/components/Toolbar/DefaultRichTextToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/TopPanel/CenteredTopPanelContainer.mjs.map +1 -1
- package/dist-esm/lib/ui/components/menu-items.mjs +3 -1
- package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs +3 -1
- package/dist-esm/lib/ui/components/primitives/TldrawUiContextualToolbar.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +6 -5
- package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.mjs.map +2 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +1 -2
- package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
- package/dist-esm/lib/ui/context/actions.mjs +6 -6
- package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
- package/dist-esm/lib/ui/context/components.mjs +1 -2
- package/dist-esm/lib/ui/context/components.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs +2 -2
- package/dist-esm/lib/ui/hooks/useClipboardEvents.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs +2 -2
- package/dist-esm/lib/ui/hooks/useKeyboardShortcuts.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTools.mjs +4 -5
- package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
- package/dist-esm/lib/ui/version.mjs +3 -3
- package/dist-esm/lib/ui/version.mjs.map +1 -1
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +9 -6
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
- package/dist-esm/lib/utils/test-helpers.mjs +21 -0
- package/dist-esm/lib/utils/test-helpers.mjs.map +7 -0
- package/dist-esm/lib/utils/text/richText.mjs +5 -2
- package/dist-esm/lib/utils/text/richText.mjs.map +2 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +8 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
- package/package.json +18 -16
- package/src/index.ts +5 -2
- package/src/lib/Tldraw.test.tsx +46 -1
- package/src/lib/canvas/TldrawSelectionForeground.tsx +2 -2
- package/src/lib/defaultEmbedDefinitions.ts +2 -1
- package/src/lib/defaultExternalContentHandlers.ts +10 -10
- package/src/lib/defaultSideEffects.ts +6 -1
- package/src/lib/shapes/arrow/ArrowShapeOptions.test.ts +40 -133
- package/src/lib/shapes/arrow/ArrowShapeTool.test.ts +8 -8
- package/src/lib/shapes/arrow/ArrowShapeUtil.tsx +15 -15
- package/src/lib/shapes/arrow/arrow-types.ts +2 -0
- package/src/lib/shapes/arrow/arrowLabel.ts +1 -1
- package/src/lib/shapes/arrow/arrowTargetState.ts +1 -1
- package/src/lib/shapes/arrow/elbow/getElbowArrowInfo.test.ts +80 -0
- package/src/lib/shapes/arrow/elbow/getElbowArrowInfo.tsx +1 -1
- package/src/lib/shapes/arrow/toolStates/Idle.tsx +4 -14
- package/src/lib/shapes/arrow/toolStates/Pointing.tsx +7 -4
- package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +1 -1
- package/src/lib/shapes/draw/DrawShapeUtil.test.ts +146 -0
- package/src/lib/shapes/draw/DrawShapeUtil.tsx +31 -27
- package/src/lib/shapes/draw/getPath.ts +31 -10
- package/src/lib/shapes/draw/toolStates/Drawing.ts +96 -86
- package/src/lib/shapes/embed/EmbedShapeUtil.tsx +7 -0
- package/src/lib/shapes/frame/FrameShapeUtil.tsx +10 -4
- package/src/lib/shapes/geo/GeoShapeUtil.tsx +228 -176
- package/src/lib/shapes/geo/toolStates/Idle.ts +5 -15
- package/src/lib/shapes/geo/toolStates/Pointing.ts +3 -3
- package/src/lib/shapes/highlight/HighlightShapeUtil.test.ts +146 -0
- package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +25 -24
- package/src/lib/shapes/line/toolStates/Pointing.ts +3 -3
- package/src/lib/shapes/note/NoteShapeUtil.tsx +9 -10
- package/src/lib/shapes/note/noteCloning.test.ts +3 -1
- package/src/lib/shapes/note/toolStates/Pointing.ts +5 -10
- package/src/lib/shapes/shared/HyperlinkButton.tsx +4 -3
- package/src/lib/shapes/shared/PlainTextLabel.tsx +10 -1
- package/src/lib/shapes/shared/RichTextLabel.tsx +12 -3
- package/src/lib/shapes/shared/ShapeFill.tsx +2 -2
- package/src/lib/shapes/shared/interpolate-props.ts +4 -4
- package/src/lib/shapes/shared/useEfficientZoomThreshold.ts +10 -0
- package/src/lib/shapes/shared/useImageOrVideoAsset.ts +1 -1
- package/src/lib/shapes/text/RichTextArea.tsx +5 -0
- package/src/lib/shapes/text/TextShapeUtil.tsx +5 -0
- package/src/lib/shapes/text/toolStates/Idle.ts +4 -14
- package/src/lib/shapes/text/toolStates/Pointing.ts +7 -7
- package/src/lib/shapes/video/VideoShapeUtil.tsx +2 -1
- package/src/lib/tools/EraserTool/childStates/Erasing.ts +4 -5
- package/src/lib/tools/EraserTool/childStates/Pointing.ts +2 -4
- package/src/lib/tools/HandTool/HandTool.ts +3 -5
- package/src/lib/tools/HandTool/childStates/Dragging.ts +3 -2
- package/src/lib/tools/HandTool/childStates/Pointing.ts +1 -1
- package/src/lib/tools/LaserTool/childStates/Lasering.ts +1 -1
- package/src/lib/tools/SelectTool/DragAndDropManager.ts +12 -7
- package/src/lib/tools/SelectTool/childStates/Brushing.ts +6 -5
- package/src/lib/tools/SelectTool/childStates/Crop/children/Cropping.ts +7 -6
- package/src/lib/tools/SelectTool/childStates/Crop/children/Idle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCrop.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/PointingCropHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/TranslatingCrop.ts +2 -1
- package/src/lib/tools/SelectTool/childStates/Crop/children/crop_helpers.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/DraggingHandle.tsx +7 -5
- package/src/lib/tools/SelectTool/childStates/EditingShape.ts +55 -12
- package/src/lib/tools/SelectTool/childStates/Idle.ts +58 -71
- package/src/lib/tools/SelectTool/childStates/PointingArrowLabel.ts +6 -7
- package/src/lib/tools/SelectTool/childStates/PointingCanvas.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingHandle.ts +5 -5
- package/src/lib/tools/SelectTool/childStates/PointingResizeHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingRotateHandle.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/PointingSelection.ts +2 -2
- package/src/lib/tools/SelectTool/childStates/PointingShape.ts +4 -14
- package/src/lib/tools/SelectTool/childStates/Resizing.ts +6 -6
- package/src/lib/tools/SelectTool/childStates/Rotating.ts +2 -3
- package/src/lib/tools/SelectTool/childStates/ScribbleBrushing.ts +7 -6
- package/src/lib/tools/SelectTool/childStates/Translating.ts +15 -12
- package/src/lib/tools/SelectTool/selectHelpers.ts +39 -4
- package/src/lib/tools/ZoomTool/ZoomTool.ts +1 -1
- package/src/lib/tools/ZoomTool/childStates/Pointing.ts +3 -3
- package/src/lib/tools/ZoomTool/childStates/ZoomBrushing.ts +5 -6
- package/src/lib/tools/selection-logic/getHitShapeOnCanvasPointerDown.ts +1 -3
- package/src/lib/tools/selection-logic/selectOnCanvasPointerUp.ts +1 -1
- package/src/lib/tools/selection-logic/updateHoveredShapeId.ts +1 -1
- package/src/lib/ui/TldrawUi.tsx +5 -2
- package/src/lib/ui/components/ActionsMenu/DefaultActionsMenuContent.tsx +1 -9
- package/src/lib/ui/components/ContextMenu/DefaultContextMenu.tsx +1 -3
- package/src/lib/ui/components/CursorChatBubble.tsx +2 -2
- package/src/lib/ui/components/DefaultDebugPanel.tsx +3 -42
- package/src/lib/ui/components/HelperButtons/StopFollowing.tsx +2 -2
- package/src/lib/ui/components/Minimap/DefaultMinimap.tsx +1 -1
- package/src/lib/ui/components/OfflineIndicator/OfflineIndicator.tsx +6 -5
- package/src/lib/ui/components/PageMenu/PageItemInput.tsx +3 -1
- package/src/lib/ui/components/SharePanel/PeopleMenu.tsx +8 -0
- package/src/lib/ui/components/Toolbar/DefaultImageToolbar.tsx +1 -1
- package/src/lib/ui/components/Toolbar/DefaultRichTextToolbar.tsx +1 -1
- package/src/lib/ui/components/TopPanel/CenteredTopPanelContainer.tsx +1 -1
- package/src/lib/ui/components/menu-items.tsx +3 -1
- package/src/lib/ui/components/primitives/TldrawUiContextualToolbar.tsx +5 -3
- package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +12 -5
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuActionCheckboxItem.tsx +1 -1
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuActionItem.tsx +1 -1
- package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +0 -1
- package/src/lib/ui/context/actions.tsx +6 -6
- package/src/lib/ui/context/components.tsx +1 -2
- package/src/lib/ui/hooks/useClipboardEvents.ts +2 -2
- package/src/lib/ui/hooks/useKeyboardShortcuts.ts +2 -2
- package/src/lib/ui/hooks/useTools.tsx +4 -5
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/ui.css +27 -23
- package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +12 -48
- package/src/lib/utils/excalidraw/putExcalidrawContent.ts +11 -6
- package/src/lib/utils/test-helpers.ts +60 -0
- package/src/lib/utils/text/richText.ts +6 -5
- package/src/lib/utils/tldr/buildFromV1Document.ts +9 -2
- package/src/test/Editor.test.tsx +40 -29
- package/src/test/EraserTool.test.ts +10 -12
- package/src/test/TestEditor.ts +48 -47
- package/src/test/TldrawEditor.test.tsx +3 -2
- package/src/test/__snapshots__/drawing.test.ts.snap +3 -1257
- package/src/test/__snapshots__/resizing.test.ts.snap +3 -12
- package/src/test/arrows-megabus.test.tsx +1 -1
- package/src/test/commands/__snapshots__/getSvgString.test.ts.snap +10 -10
- package/src/test/commands/cameraState.test.ts +299 -0
- package/src/test/commands/setCamera.test.ts +13 -11
- package/src/test/commands/stackShapes.test.ts +34 -8
- package/src/test/commands/zoomToBounds.test.ts +19 -3
- package/src/test/commands/zoomToSelection.test.ts +14 -3
- package/src/test/custom-clipping.test.ts +16 -9
- package/src/test/drawing.test.ts +17 -10
- package/src/test/flipShapes.test.ts +33 -0
- package/src/test/frames.test.ts +92 -0
- package/src/test/groups.test.tsx +1 -1
- package/src/test/modifiers.test.ts +6 -6
- package/src/test/resizing.test.ts +7 -9
- package/src/test/selection-omnibus.test.ts +2 -2
- package/src/test/spacebarPanning.test.ts +28 -10
- package/src/test/test-jsx.tsx +3 -0
- package/tldraw.css +41 -35
- package/dist-cjs/lib/shapes/shared/useForceSolid.js.map +0 -7
- package/dist-cjs/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.js.map +0 -7
- package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js +0 -32
- package/dist-cjs/lib/ui/components/TopPanel/DefaultTopPanel.js.map +0 -7
- package/dist-cjs/lib/utils/text/textDirection.js +0 -51
- package/dist-cjs/lib/utils/text/textDirection.js.map +0 -7
- package/dist-esm/lib/shapes/shared/useForceSolid.mjs +0 -9
- package/dist-esm/lib/shapes/shared/useForceSolid.mjs.map +0 -7
- package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs +0 -8
- package/dist-esm/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.mjs.map +0 -7
- package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs +0 -12
- package/dist-esm/lib/ui/components/TopPanel/DefaultTopPanel.mjs.map +0 -7
- package/dist-esm/lib/utils/text/textDirection.mjs +0 -31
- package/dist-esm/lib/utils/text/textDirection.mjs.map +0 -7
- package/src/lib/shapes/shared/useForceSolid.ts +0 -6
- package/src/lib/tools/selection-logic/getShouldEnterCropModeOnPointerDown.ts +0 -10
- package/src/lib/ui/components/TopPanel/DefaultTopPanel.tsx +0 -10
- package/src/lib/utils/text/textDirection.ts +0 -32
|
@@ -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\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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",
|
|
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\tVecModel,\n\tZERO_INDEX_KEY,\n\tb64Vecs,\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\tconst points: VecModel[] = element.points.map(([x, y, z = 0.5]: number[]) => ({\n\t\t\t\t\tx,\n\t\t\t\t\ty,\n\t\t\t\t\tz,\n\t\t\t\t}))\n\t\t\t\tconst base64Points = b64Vecs.encodePoints(points)\n\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: base64Points,\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.getShiftKey() ? editor.inputs.getCurrentPagePoint() : 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
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { b64Vecs, compressLegacySegments } from "@tldraw/editor";
|
|
2
|
+
function pointsToBase64(points) {
|
|
3
|
+
return b64Vecs.encodePoints(points);
|
|
4
|
+
}
|
|
5
|
+
function base64ToPoints(base64) {
|
|
6
|
+
return b64Vecs.decodePoints(base64);
|
|
7
|
+
}
|
|
8
|
+
function createDrawSegments(pointArrays, type = "free") {
|
|
9
|
+
return compressLegacySegments(
|
|
10
|
+
pointArrays.map((points) => ({
|
|
11
|
+
type,
|
|
12
|
+
points
|
|
13
|
+
}))
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
export {
|
|
17
|
+
base64ToPoints,
|
|
18
|
+
createDrawSegments,
|
|
19
|
+
pointsToBase64
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=test-helpers.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/lib/utils/test-helpers.ts"],
|
|
4
|
+
"sourcesContent": ["import type { TLDrawShapeSegment, VecModel } from '@tldraw/editor'\nimport { b64Vecs, compressLegacySegments } from '@tldraw/editor'\n\n/**\n * Helper function to convert draw shape points from VecModel[] to base64 string.\n * This is useful for tests that create draw shapes with the legacy array format.\n *\n * @example\n * ```ts\n * const segments = [{ type: 'free', points: pointsToBase64([{x: 0, y: 0, z: 0.5}]) }]\n * ```\n *\n * @public\n */\nexport function pointsToBase64(points: VecModel[]): string {\n\treturn b64Vecs.encodePoints(points)\n}\n\n/**\n * Helper function to convert base64 string back to VecModel[] points.\n * This is useful for tests that need to inspect draw shape points.\n *\n * @example\n * ```ts\n * const points = base64ToPoints(shape.props.segments[0].points)\n * expect(points[0].x).toBe(0)\n * ```\n *\n * @public\n */\nexport function base64ToPoints(base64: string): VecModel[] {\n\treturn b64Vecs.decodePoints(base64)\n}\n\n/**\n * Helper function to create draw shape segments from legacy array format.\n * This allows tests to use the old format while the shape uses the new base64 format.\n *\n * @example\n * ```ts\n * editor.createShapes([{\n * type: 'draw',\n * props: {\n * segments: createDrawSegments([[{x: 0, y: 0}, {x: 10, y: 10}]])\n * }\n * }])\n * ```\n * @public\n */\nexport function createDrawSegments(\n\tpointArrays: VecModel[][],\n\ttype: 'free' | 'straight' = 'free'\n): TLDrawShapeSegment[] {\n\treturn compressLegacySegments(\n\t\tpointArrays.map((points) => ({\n\t\t\ttype,\n\t\t\tpoints,\n\t\t}))\n\t)\n}\n"],
|
|
5
|
+
"mappings": "AACA,SAAS,SAAS,8BAA8B;AAazC,SAAS,eAAe,QAA4B;AAC1D,SAAO,QAAQ,aAAa,MAAM;AACnC;AAcO,SAAS,eAAe,QAA4B;AAC1D,SAAO,QAAQ,aAAa,MAAM;AACnC;AAiBO,SAAS,mBACf,aACA,OAA4B,QACL;AACvB,SAAO;AAAA,IACN,YAAY,IAAI,CAAC,YAAY;AAAA,MAC5B;AAAA,MACA;AAAA,IACD,EAAE;AAAA,EACH;AACD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Extension,
|
|
3
|
+
extensions,
|
|
3
4
|
generateHTML,
|
|
4
5
|
generateJSON,
|
|
5
6
|
generateText
|
|
@@ -12,7 +13,6 @@ import {
|
|
|
12
13
|
WeakCache
|
|
13
14
|
} from "@tldraw/editor";
|
|
14
15
|
import { DefaultFontFaces } from "../../shapes/shared/defaultFonts.mjs";
|
|
15
|
-
import { TextDirection } from "./textDirection.mjs";
|
|
16
16
|
const KeyboardShiftEnterTweakExtension = Extension.create({
|
|
17
17
|
name: "keyboardShiftEnterHandler",
|
|
18
18
|
addKeyboardShortcuts() {
|
|
@@ -36,7 +36,10 @@ const tipTapDefaultExtensions = [
|
|
|
36
36
|
}),
|
|
37
37
|
Highlight,
|
|
38
38
|
KeyboardShiftEnterTweakExtension,
|
|
39
|
-
|
|
39
|
+
// N.B. We disable the text direction core extension in RichTextArea,
|
|
40
|
+
// but we add it back in again here in our own extensions list so that
|
|
41
|
+
// people can omit/override it if they want to.
|
|
42
|
+
extensions.TextDirection.configure({ direction: "auto" })
|
|
40
43
|
];
|
|
41
44
|
const htmlCache = new WeakCache();
|
|
42
45
|
function renderHtmlFromRichText(editor, richText) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/utils/text/richText.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\tExtension,\n\tExtensions,\n\tgenerateHTML,\n\tgenerateJSON,\n\tgenerateText,\n\tJSONContent,\n} from '@tiptap/core'\nimport { Code } from '@tiptap/extension-code'\nimport { Highlight } from '@tiptap/extension-highlight'\nimport { Node } from '@tiptap/pm/model'\nimport { StarterKit } from '@tiptap/starter-kit'\nimport {\n\tEditor,\n\tgetOwnProperty,\n\tRichTextFontVisitorState,\n\tTLFontFace,\n\tTLRichText,\n\tWeakCache,\n} from '@tldraw/editor'\nimport { DefaultFontFaces } from '../../shapes/shared/defaultFonts'\
|
|
5
|
-
"mappings": "AAAA;AAAA,EACC;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,OAEM;AACP,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAE1B,SAAS,kBAAkB;AAC3B;AAAA,EAEC;AAAA,EAIA;AAAA,OACM;AACP,SAAS,wBAAwB;
|
|
4
|
+
"sourcesContent": ["import {\n\tExtension,\n\tExtensions,\n\textensions,\n\tgenerateHTML,\n\tgenerateJSON,\n\tgenerateText,\n\tJSONContent,\n} from '@tiptap/core'\nimport { Code } from '@tiptap/extension-code'\nimport { Highlight } from '@tiptap/extension-highlight'\nimport { Node } from '@tiptap/pm/model'\nimport { StarterKit } from '@tiptap/starter-kit'\nimport {\n\tEditor,\n\tgetOwnProperty,\n\tRichTextFontVisitorState,\n\tTLFontFace,\n\tTLRichText,\n\tWeakCache,\n} from '@tldraw/editor'\nimport { DefaultFontFaces } from '../../shapes/shared/defaultFonts'\n\n/** @public */\nexport const KeyboardShiftEnterTweakExtension = Extension.create({\n\tname: 'keyboardShiftEnterHandler',\n\taddKeyboardShortcuts() {\n\t\treturn {\n\t\t\t// We don't support soft breaks, so we just use the default enter command.\n\t\t\t'Shift-Enter': ({ editor }) => editor.commands.enter(),\n\t\t}\n\t},\n})\n\n// We change the default Code to override what's in the StarterKit.\n// It allows for other attributes/extensions.\n// @ts-ignore this is fine.\nCode.config.excludes = undefined\n\n// We want the highlighting to take precedence over bolding/italics/links\n// as far as rendering is concerned. Otherwise, the highlighting\n// looks broken up.\nHighlight.config.priority = 1100\n\n/**\n * Default extensions for the TipTap editor.\n *\n * @public\n */\nexport const tipTapDefaultExtensions: Extensions = [\n\tStarterKit.configure({\n\t\tblockquote: false,\n\t\tcodeBlock: false,\n\t\thorizontalRule: false,\n\t\tlink: {\n\t\t\topenOnClick: false,\n\t\t\tautolink: true,\n\t\t},\n\t}),\n\tHighlight,\n\tKeyboardShiftEnterTweakExtension,\n\n\t// N.B. We disable the text direction core extension in RichTextArea,\n\t// but we add it back in again here in our own extensions list so that\n\t// people can omit/override it if they want to.\n\textensions.TextDirection.configure({ direction: 'auto' }),\n]\n\n// todo: bust this if the editor changes, too\nconst htmlCache = new WeakCache<TLRichText, string>()\n\n/**\n * Renders HTML from a rich text string.\n *\n * @param editor - The editor instance.\n * @param richText - The rich text content.\n *\n * @public\n */\nexport function renderHtmlFromRichText(editor: Editor, richText: TLRichText) {\n\treturn htmlCache.get(richText, () => {\n\t\tconst tipTapExtensions =\n\t\t\teditor.getTextOptions().tipTapConfig?.extensions ?? tipTapDefaultExtensions\n\t\tconst html = generateHTML(richText as JSONContent, tipTapExtensions)\n\t\t// We replace empty paragraphs with a single line break to prevent the browser from collapsing them.\n\t\treturn html.replaceAll('<p dir=\"auto\"></p>', '<p><br /></p>') ?? ''\n\t})\n}\n\n/**\n * Renders HTML from a rich text string for measurement.\n * @param editor - The editor instance.\n * @param richText - The rich text content.\n *\n * @public\n */\nexport function renderHtmlFromRichTextForMeasurement(editor: Editor, richText: TLRichText) {\n\tconst html = renderHtmlFromRichText(editor, richText)\n\treturn `<div class=\"tl-rich-text\">${html}</div>`\n}\n\n// A weak cache used to store plaintext that's been extracted from rich text.\nconst plainTextFromRichTextCache = new WeakCache<TLRichText, string>()\n\nexport function isEmptyRichText(richText: TLRichText) {\n\tif (richText.content.length === 1) {\n\t\tif (!(richText.content[0] as any).content) return true\n\t}\n\treturn false\n}\n\n/**\n * Renders plaintext from a rich text string.\n * @param editor - The editor instance.\n * @param richText - The rich text content.\n *\n * @public\n */\nexport function renderPlaintextFromRichText(editor: Editor, richText: TLRichText) {\n\tif (isEmptyRichText(richText)) return ''\n\n\treturn plainTextFromRichTextCache.get(richText, () => {\n\t\tconst tipTapExtensions =\n\t\t\teditor.getTextOptions().tipTapConfig?.extensions ?? tipTapDefaultExtensions\n\t\treturn generateText(richText as JSONContent, tipTapExtensions, {\n\t\t\tblockSeparator: '\\n',\n\t\t})\n\t})\n}\n\n/**\n * Renders JSONContent from html.\n * @param editor - The editor instance.\n * @param richText - The rich text content.\n *\n * @public\n */\nexport function renderRichTextFromHTML(editor: Editor, html: string): TLRichText {\n\tconst tipTapExtensions =\n\t\teditor.getTextOptions().tipTapConfig?.extensions ?? tipTapDefaultExtensions\n\treturn generateJSON(html, tipTapExtensions) as TLRichText\n}\n\n/** @public */\nexport function defaultAddFontsFromNode(\n\tnode: Node,\n\tstate: RichTextFontVisitorState,\n\taddFont: (font: TLFontFace) => void\n) {\n\tfor (const mark of node.marks) {\n\t\tif (mark.type.name === 'bold' && state.weight !== 'bold') {\n\t\t\tstate = { ...state, weight: 'bold' }\n\t\t}\n\t\tif (mark.type.name === 'italic' && state.style !== 'italic') {\n\t\t\tstate = { ...state, style: 'italic' }\n\t\t}\n\t\tif (mark.type.name === 'code' && state.family !== 'tldraw_mono') {\n\t\t\tstate = { ...state, family: 'tldraw_mono' }\n\t\t}\n\t}\n\n\tconst fontsForFamily = getOwnProperty(DefaultFontFaces, state.family)\n\tif (!fontsForFamily) return state\n\n\tconst fontsForStyle = getOwnProperty(fontsForFamily, state.style)\n\tif (!fontsForStyle) return state\n\n\tconst fontsForWeight = getOwnProperty(fontsForStyle, state.weight)\n\tif (!fontsForWeight) return state\n\n\taddFont(fontsForWeight)\n\n\treturn state\n}\n"],
|
|
5
|
+
"mappings": "AAAA;AAAA,EACC;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEM;AACP,SAAS,YAAY;AACrB,SAAS,iBAAiB;AAE1B,SAAS,kBAAkB;AAC3B;AAAA,EAEC;AAAA,EAIA;AAAA,OACM;AACP,SAAS,wBAAwB;AAG1B,MAAM,mCAAmC,UAAU,OAAO;AAAA,EAChE,MAAM;AAAA,EACN,uBAAuB;AACtB,WAAO;AAAA;AAAA,MAEN,eAAe,CAAC,EAAE,OAAO,MAAM,OAAO,SAAS,MAAM;AAAA,IACtD;AAAA,EACD;AACD,CAAC;AAKD,KAAK,OAAO,WAAW;AAKvB,UAAU,OAAO,WAAW;AAOrB,MAAM,0BAAsC;AAAA,EAClD,WAAW,UAAU;AAAA,IACpB,YAAY;AAAA,IACZ,WAAW;AAAA,IACX,gBAAgB;AAAA,IAChB,MAAM;AAAA,MACL,aAAa;AAAA,MACb,UAAU;AAAA,IACX;AAAA,EACD,CAAC;AAAA,EACD;AAAA,EACA;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,cAAc,UAAU,EAAE,WAAW,OAAO,CAAC;AACzD;AAGA,MAAM,YAAY,IAAI,UAA8B;AAU7C,SAAS,uBAAuB,QAAgB,UAAsB;AAC5E,SAAO,UAAU,IAAI,UAAU,MAAM;AACpC,UAAM,mBACL,OAAO,eAAe,EAAE,cAAc,cAAc;AACrD,UAAM,OAAO,aAAa,UAAyB,gBAAgB;AAEnE,WAAO,KAAK,WAAW,sBAAsB,eAAe,KAAK;AAAA,EAClE,CAAC;AACF;AASO,SAAS,qCAAqC,QAAgB,UAAsB;AAC1F,QAAM,OAAO,uBAAuB,QAAQ,QAAQ;AACpD,SAAO,6BAA6B,IAAI;AACzC;AAGA,MAAM,6BAA6B,IAAI,UAA8B;AAE9D,SAAS,gBAAgB,UAAsB;AACrD,MAAI,SAAS,QAAQ,WAAW,GAAG;AAClC,QAAI,CAAE,SAAS,QAAQ,CAAC,EAAU,QAAS,QAAO;AAAA,EACnD;AACA,SAAO;AACR;AASO,SAAS,4BAA4B,QAAgB,UAAsB;AACjF,MAAI,gBAAgB,QAAQ,EAAG,QAAO;AAEtC,SAAO,2BAA2B,IAAI,UAAU,MAAM;AACrD,UAAM,mBACL,OAAO,eAAe,EAAE,cAAc,cAAc;AACrD,WAAO,aAAa,UAAyB,kBAAkB;AAAA,MAC9D,gBAAgB;AAAA,IACjB,CAAC;AAAA,EACF,CAAC;AACF;AASO,SAAS,uBAAuB,QAAgB,MAA0B;AAChF,QAAM,mBACL,OAAO,eAAe,EAAE,cAAc,cAAc;AACrD,SAAO,aAAa,MAAM,gBAAgB;AAC3C;AAGO,SAAS,wBACf,MACA,OACA,SACC;AACD,aAAW,QAAQ,KAAK,OAAO;AAC9B,QAAI,KAAK,KAAK,SAAS,UAAU,MAAM,WAAW,QAAQ;AACzD,cAAQ,EAAE,GAAG,OAAO,QAAQ,OAAO;AAAA,IACpC;AACA,QAAI,KAAK,KAAK,SAAS,YAAY,MAAM,UAAU,UAAU;AAC5D,cAAQ,EAAE,GAAG,OAAO,OAAO,SAAS;AAAA,IACrC;AACA,QAAI,KAAK,KAAK,SAAS,UAAU,MAAM,WAAW,eAAe;AAChE,cAAQ,EAAE,GAAG,OAAO,QAAQ,cAAc;AAAA,IAC3C;AAAA,EACD;AAEA,QAAM,iBAAiB,eAAe,kBAAkB,MAAM,MAAM;AACpE,MAAI,CAAC,eAAgB,QAAO;AAE5B,QAAM,gBAAgB,eAAe,gBAAgB,MAAM,KAAK;AAChE,MAAI,CAAC,cAAe,QAAO;AAE3B,QAAM,iBAAiB,eAAe,eAAe,MAAM,MAAM;AACjE,MAAI,CAAC,eAAgB,QAAO;AAE5B,UAAQ,cAAc;AAEtB,SAAO;AACR;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
AssetRecordType,
|
|
3
3
|
PageRecordType,
|
|
4
4
|
Vec,
|
|
5
|
+
b64Vecs,
|
|
5
6
|
clamp,
|
|
6
7
|
createShapeId,
|
|
7
8
|
fetch,
|
|
@@ -297,6 +298,8 @@ function buildFromV1Document(editor, _document) {
|
|
|
297
298
|
decideNotToCreateShape(v1Shape);
|
|
298
299
|
break;
|
|
299
300
|
}
|
|
301
|
+
const points = v1Shape.points.map(getV2Point);
|
|
302
|
+
const base64Points = b64Vecs.encodePoints(points);
|
|
300
303
|
editor.createShapes([
|
|
301
304
|
{
|
|
302
305
|
...inCommon,
|
|
@@ -308,7 +311,10 @@ function buildFromV1Document(editor, _document) {
|
|
|
308
311
|
dash: getV2Dash(v1Shape.style.dash),
|
|
309
312
|
isPen: false,
|
|
310
313
|
isComplete: v1Shape.isComplete,
|
|
311
|
-
segments: [{ type: "free", points:
|
|
314
|
+
segments: [{ type: "free", points: base64Points }],
|
|
315
|
+
scale: 1,
|
|
316
|
+
scaleX: 1,
|
|
317
|
+
scaleY: 1
|
|
312
318
|
}
|
|
313
319
|
}
|
|
314
320
|
]);
|
|
@@ -426,7 +432,7 @@ function buildFromV1Document(editor, _document) {
|
|
|
426
432
|
}
|
|
427
433
|
const v2ShapeId = v1ShapeIdsToV2ShapeIds.get(v1Shape.id);
|
|
428
434
|
const util = editor.getShapeUtil("arrow");
|
|
429
|
-
editor.inputs.
|
|
435
|
+
editor.inputs.setCtrlKey(false);
|
|
430
436
|
for (const handleId of ["start", "end"]) {
|
|
431
437
|
const bindingId = v1Shape.handles[handleId].bindingId;
|
|
432
438
|
if (bindingId) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/utils/tldr/buildFromV1Document.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\tAssetRecordType,\n\tEditor,\n\tPageRecordType,\n\tTLArrowShape,\n\tTLArrowShapeArrowheadStyle,\n\tTLAsset,\n\tTLAssetId,\n\tTLDefaultColorStyle,\n\tTLDefaultDashStyle,\n\tTLDefaultFontStyle,\n\tTLDefaultHorizontalAlignStyle,\n\tTLDefaultSizeStyle,\n\tTLDefaultTextAlignStyle,\n\tTLGeoShape,\n\tTLPageId,\n\tTLShapeId,\n\tVec,\n\tVecModel,\n\tclamp,\n\tcreateShapeId,\n\tfetch,\n\tstructuredClone,\n\ttoRichText,\n} from '@tldraw/editor'\nimport { getArrowBindings } from '../../shapes/arrow/shared'\n\nconst TLDRAW_V1_VERSION = 15.5\n\n/** @internal */\nexport function buildFromV1Document(editor: Editor, _document: unknown) {\n\tlet document = _document as TLV1Document\n\teditor.run(() => {\n\t\tdocument = migrate(document, TLDRAW_V1_VERSION)\n\t\t// Cancel any interactions / states\n\t\teditor.cancel().cancel().cancel().cancel()\n\n\t\tconst firstPageId = editor.getPages()[0].id\n\n\t\t// Set the current page to the first page\n\t\teditor.setCurrentPage(firstPageId)\n\n\t\t// Delete all pages except first page\n\t\tfor (const page of editor.getPages().slice(1)) {\n\t\t\teditor.deletePage(page.id)\n\t\t}\n\n\t\t// Delete all of the shapes on the current page\n\t\teditor.selectAll()\n\t\teditor.deleteShapes(editor.getSelectedShapeIds())\n\n\t\t// Create assets\n\t\tconst v1AssetIdsToV2AssetIds = new Map<string, TLAssetId>()\n\n\t\tObject.values(document.assets ?? {}).forEach((v1Asset) => {\n\t\t\tswitch (v1Asset.type) {\n\t\t\t\tcase TLV1AssetType.Image: {\n\t\t\t\t\tconst assetId: TLAssetId = AssetRecordType.createId()\n\t\t\t\t\tv1AssetIdsToV2AssetIds.set(v1Asset.id, assetId)\n\t\t\t\t\tconst placeholderAsset: TLAsset = {\n\t\t\t\t\t\tid: assetId,\n\t\t\t\t\t\ttypeName: 'asset',\n\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tw: coerceDimension(v1Asset.size[0]),\n\t\t\t\t\t\t\th: coerceDimension(v1Asset.size[1]),\n\t\t\t\t\t\t\tname: v1Asset.fileName ?? 'Untitled',\n\t\t\t\t\t\t\tisAnimated: false,\n\t\t\t\t\t\t\tmimeType: null,\n\t\t\t\t\t\t\tsrc: v1Asset.src,\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\teditor.createAssets([placeholderAsset])\n\t\t\t\t\ttryMigrateAsset(editor, placeholderAsset)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase TLV1AssetType.Video:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst assetId: TLAssetId = AssetRecordType.createId()\n\t\t\t\t\t\tv1AssetIdsToV2AssetIds.set(v1Asset.id, assetId)\n\t\t\t\t\t\teditor.createAssets([\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: assetId,\n\t\t\t\t\t\t\t\ttypeName: 'asset',\n\t\t\t\t\t\t\t\ttype: 'video',\n\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Asset.size[0]),\n\t\t\t\t\t\t\t\t\th: coerceDimension(v1Asset.size[1]),\n\t\t\t\t\t\t\t\t\tname: v1Asset.fileName ?? 'Untitled',\n\t\t\t\t\t\t\t\t\tisAnimated: true,\n\t\t\t\t\t\t\t\t\tmimeType: null,\n\t\t\t\t\t\t\t\t\tsrc: v1Asset.src,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmeta: {},\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\tbreak\n\t\t\t}\n\t\t})\n\n\t\t// Create pages\n\n\t\tconst v1PageIdsToV2PageIds = new Map<string, TLPageId>()\n\n\t\tObject.values(document.pages ?? {})\n\t\t\t.sort((a, b) => ((a.childIndex ?? 1) < (b.childIndex ?? 1) ? -1 : 1))\n\t\t\t.forEach((v1Page, i) => {\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tv1PageIdsToV2PageIds.set(v1Page.id, editor.getCurrentPageId())\n\t\t\t\t} else {\n\t\t\t\t\tconst pageId = PageRecordType.createId()\n\t\t\t\t\tv1PageIdsToV2PageIds.set(v1Page.id, pageId)\n\t\t\t\t\teditor.createPage({ name: v1Page.name ?? 'Page', id: pageId })\n\t\t\t\t}\n\t\t\t})\n\n\t\tObject.values(document.pages ?? {})\n\t\t\t.sort((a, b) => ((a.childIndex ?? 1) < (b.childIndex ?? 1) ? -1 : 1))\n\t\t\t.forEach((v1Page) => {\n\t\t\t\t// Set the current page id to the current page\n\t\t\t\teditor.setCurrentPage(v1PageIdsToV2PageIds.get(v1Page.id)!)\n\n\t\t\t\tconst v1ShapeIdsToV2ShapeIds = new Map<string, TLShapeId>()\n\t\t\t\tconst v1GroupShapeIdsToV1ChildIds = new Map<string, string[]>()\n\n\t\t\t\tconst v1Shapes = Object.values(v1Page.shapes ?? {})\n\t\t\t\t\t.sort((a, b) => (a.childIndex < b.childIndex ? -1 : 1))\n\t\t\t\t\t.slice(0, editor.options.maxShapesPerPage)\n\n\t\t\t\t// Groups only\n\t\t\t\tv1Shapes.forEach((v1Shape) => {\n\t\t\t\t\tif (v1Shape.type !== TLV1ShapeType.Group) return\n\n\t\t\t\t\tconst shapeId = createShapeId()\n\t\t\t\t\tv1ShapeIdsToV2ShapeIds.set(v1Shape.id, shapeId)\n\t\t\t\t\tv1GroupShapeIdsToV1ChildIds.set(v1Shape.id, [])\n\t\t\t\t})\n\n\t\t\t\tfunction decideNotToCreateShape(v1Shape: TLV1Shape) {\n\t\t\t\t\tv1ShapeIdsToV2ShapeIds.delete(v1Shape.id)\n\t\t\t\t\tconst v1GroupParent = v1GroupShapeIdsToV1ChildIds.has(v1Shape.parentId)\n\t\t\t\t\tif (v1GroupParent) {\n\t\t\t\t\t\tconst ids = v1GroupShapeIdsToV1ChildIds\n\t\t\t\t\t\t\t.get(v1Shape.parentId)!\n\t\t\t\t\t\t\t.filter((id) => id !== v1Shape.id)\n\t\t\t\t\t\tv1GroupShapeIdsToV1ChildIds.set(v1Shape.parentId, ids)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Non-groups only\n\t\t\t\tv1Shapes.forEach((v1Shape) => {\n\t\t\t\t\t// Skip groups for now, we'll create groups via the app's API\n\t\t\t\t\tif (v1Shape.type === TLV1ShapeType.Group) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tconst shapeId = createShapeId()\n\t\t\t\t\tv1ShapeIdsToV2ShapeIds.set(v1Shape.id, shapeId)\n\n\t\t\t\t\tif (v1Shape.parentId !== v1Page.id) {\n\t\t\t\t\t\t// If the parent is a group, then add the shape to the group's children\n\t\t\t\t\t\tif (v1GroupShapeIdsToV1ChildIds.has(v1Shape.parentId)) {\n\t\t\t\t\t\t\tv1GroupShapeIdsToV1ChildIds.get(v1Shape.parentId)!.push(v1Shape.id)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn('parent does not exist', v1Shape)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// First, try to find the shape's parent among the existing groups\n\t\t\t\t\tconst parentId = v1PageIdsToV2PageIds.get(v1Page.id)!\n\n\t\t\t\t\tconst inCommon = {\n\t\t\t\t\t\tid: shapeId,\n\t\t\t\t\t\tparentId,\n\t\t\t\t\t\tx: coerceNumber(v1Shape.point[0]),\n\t\t\t\t\t\ty: coerceNumber(v1Shape.point[1]),\n\t\t\t\t\t\trotation: 0,\n\t\t\t\t\t\tisLocked: !!v1Shape.isLocked,\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (v1Shape.type) {\n\t\t\t\t\t\tcase TLV1ShapeType.Sticky: {\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'note',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.text ?? ''),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\talign: getV2Align(v1Shape.style.textAlign),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Rectangle: {\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tgeo: 'rectangle',\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.label ?? ''),\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\talign: 'middle',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tconst pageBoundsBeforeLabel = editor.getShapePageBounds(inCommon.id)!\n\n\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.label ?? ''),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tif (pageBoundsBeforeLabel.width === pageBoundsBeforeLabel.height) {\n\t\t\t\t\t\t\t\tconst shape = editor.getShape<TLGeoShape>(inCommon.id)!\n\t\t\t\t\t\t\t\tconst { growY } = shape.props\n\t\t\t\t\t\t\t\tconst w = coerceDimension(shape.props.w)\n\t\t\t\t\t\t\t\tconst h = coerceDimension(shape.props.h)\n\t\t\t\t\t\t\t\tconst newW = w + growY / 2\n\t\t\t\t\t\t\t\tconst newH = h + growY / 2\n\n\t\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\t\tx: coerceNumber(shape.x) - (newW - w) / 2,\n\t\t\t\t\t\t\t\t\t\ty: coerceNumber(shape.y) - (newH - h) / 2,\n\t\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t\tw: newW,\n\t\t\t\t\t\t\t\t\t\t\th: newH,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Triangle: {\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tgeo: 'triangle',\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\talign: 'middle',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tconst pageBoundsBeforeLabel = editor.getShapePageBounds(inCommon.id)!\n\n\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.label ?? ''),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tif (pageBoundsBeforeLabel.width === pageBoundsBeforeLabel.height) {\n\t\t\t\t\t\t\t\tconst shape = editor.getShape<TLGeoShape>(inCommon.id)!\n\t\t\t\t\t\t\t\tconst { growY } = shape.props\n\t\t\t\t\t\t\t\tconst w = coerceDimension(shape.props.w)\n\t\t\t\t\t\t\t\tconst h = coerceDimension(shape.props.h)\n\t\t\t\t\t\t\t\tconst newW = w + growY / 2\n\t\t\t\t\t\t\t\tconst newH = h + growY / 2\n\n\t\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\t\tx: coerceNumber(shape.x) - (newW - w) / 2,\n\t\t\t\t\t\t\t\t\t\ty: coerceNumber(shape.y) - (newH - h) / 2,\n\t\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t\tw: newW,\n\t\t\t\t\t\t\t\t\t\t\th: newH,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Ellipse: {\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tgeo: 'ellipse',\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.radius[0]) * 2,\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.radius[1]) * 2,\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\talign: 'middle',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tconst pageBoundsBeforeLabel = editor.getShapePageBounds(inCommon.id)!\n\n\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.label ?? ''),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tif (pageBoundsBeforeLabel.width === pageBoundsBeforeLabel.height) {\n\t\t\t\t\t\t\t\tconst shape = editor.getShape<TLGeoShape>(inCommon.id)!\n\t\t\t\t\t\t\t\tconst { growY } = shape.props\n\t\t\t\t\t\t\t\tconst w = coerceDimension(shape.props.w)\n\t\t\t\t\t\t\t\tconst h = coerceDimension(shape.props.h)\n\t\t\t\t\t\t\t\tconst newW = w + growY / 2\n\t\t\t\t\t\t\t\tconst newH = h + growY / 2\n\n\t\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\t\tx: coerceNumber(shape.x) - (newW - w) / 2,\n\t\t\t\t\t\t\t\t\t\ty: coerceNumber(shape.y) - (newH - h) / 2,\n\t\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t\tw: newW,\n\t\t\t\t\t\t\t\t\t\t\th: newH,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Draw: {\n\t\t\t\t\t\t\tif (v1Shape.points.length === 0) {\n\t\t\t\t\t\t\t\tdecideNotToCreateShape(v1Shape)\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'draw',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\tisPen: false,\n\t\t\t\t\t\t\t\t\t\tisComplete: v1Shape.isComplete,\n\t\t\t\t\t\t\t\t\t\tsegments: [{ type: 'free', points: v1Shape.points.map(getV2Point) }],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Arrow: {\n\t\t\t\t\t\t\tconst v1Bend = coerceNumber(v1Shape.bend)\n\t\t\t\t\t\t\tconst v1Start = getV2Point(v1Shape.handles.start.point)\n\t\t\t\t\t\t\tconst v1End = getV2Point(v1Shape.handles.end.point)\n\t\t\t\t\t\t\tconst dist = Vec.Dist(v1Start, v1End)\n\t\t\t\t\t\t\tconst v2Bend = (dist * -v1Bend) / 2\n\n\t\t\t\t\t\t\t// Could also be a line... but we'll use it as an arrow anyway\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'arrow',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.label ?? ''),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\tarrowheadStart: getV2Arrowhead(v1Shape.decorations?.start),\n\t\t\t\t\t\t\t\t\t\tarrowheadEnd: getV2Arrowhead(v1Shape.decorations?.end),\n\t\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\t\tx: coerceNumber(v1Shape.handles.start.point[0]),\n\t\t\t\t\t\t\t\t\t\t\ty: coerceNumber(v1Shape.handles.start.point[1]),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\t\t\tx: coerceNumber(v1Shape.handles.end.point[0]),\n\t\t\t\t\t\t\t\t\t\t\ty: coerceNumber(v1Shape.handles.end.point[1]),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tbend: v2Bend,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Text: {\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.text ?? ' '),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2TextSize(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\ttextAlign: getV2TextAlign(v1Shape.style.textAlign),\n\t\t\t\t\t\t\t\t\t\tscale: v1Shape.style.scale ?? 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Image: {\n\t\t\t\t\t\t\tconst assetId = v1AssetIdsToV2AssetIds.get(v1Shape.assetId)\n\n\t\t\t\t\t\t\tif (!assetId) {\n\t\t\t\t\t\t\t\tconsole.warn('Could not find asset id', v1Shape.assetId)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\tassetId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Video: {\n\t\t\t\t\t\t\tconst assetId = v1AssetIdsToV2AssetIds.get(v1Shape.assetId)\n\n\t\t\t\t\t\t\tif (!assetId) {\n\t\t\t\t\t\t\t\tconsole.warn('Could not find asset id', v1Shape.assetId)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'video',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\tassetId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rotation = coerceNumber(v1Shape.rotation)\n\n\t\t\t\t\tif (rotation !== 0) {\n\t\t\t\t\t\teditor.select(shapeId)\n\t\t\t\t\t\teditor.rotateShapesBy([shapeId], rotation)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// Create groups\n\t\t\t\tv1GroupShapeIdsToV1ChildIds.forEach((v1ChildIds, v1GroupId) => {\n\t\t\t\t\tconst v2ChildShapeIds = v1ChildIds.map((id) => v1ShapeIdsToV2ShapeIds.get(id)!)\n\t\t\t\t\tconst v2GroupId = v1ShapeIdsToV2ShapeIds.get(v1GroupId)!\n\t\t\t\t\teditor.groupShapes(v2ChildShapeIds, { groupId: v2GroupId })\n\n\t\t\t\t\tconst v1Group = v1Page.shapes[v1GroupId]\n\t\t\t\t\tconst rotation = coerceNumber(v1Group.rotation)\n\n\t\t\t\t\tif (rotation !== 0) {\n\t\t\t\t\t\teditor.select(v2GroupId)\n\t\t\t\t\t\teditor.rotateShapesBy([v2GroupId], rotation)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// Bind arrows to shapes\n\n\t\t\t\tv1Shapes.forEach((v1Shape) => {\n\t\t\t\t\tif (v1Shape.type !== TLV1ShapeType.Arrow) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tconst v2ShapeId = v1ShapeIdsToV2ShapeIds.get(v1Shape.id)!\n\t\t\t\t\tconst util = editor.getShapeUtil<TLArrowShape>('arrow')\n\n\t\t\t\t\t// dumb but necessary\n\t\t\t\t\teditor.inputs.ctrlKey = false\n\n\t\t\t\t\tfor (const handleId of ['start', 'end'] as const) {\n\t\t\t\t\t\tconst bindingId = v1Shape.handles[handleId].bindingId\n\t\t\t\t\t\tif (bindingId) {\n\t\t\t\t\t\t\tconst binding = v1Page.bindings[bindingId]\n\t\t\t\t\t\t\tif (!binding) {\n\t\t\t\t\t\t\t\t// arrow has a reference to a binding that no longer exists\n\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst targetId = v1ShapeIdsToV2ShapeIds.get(binding.toId)!\n\n\t\t\t\t\t\t\tconst targetShape = editor.getShape(targetId)!\n\n\t\t\t\t\t\t\t// (unexpected) We didn't create the target shape\n\t\t\t\t\t\t\tif (!targetShape) continue\n\n\t\t\t\t\t\t\tif (targetId) {\n\t\t\t\t\t\t\t\tconst bounds = editor.getShapePageBounds(targetId)!\n\n\t\t\t\t\t\t\t\tconst v2ShapeFresh = editor.getShape<TLArrowShape>(v2ShapeId)!\n\n\t\t\t\t\t\t\t\tconst nx = clamp((coerceNumber(binding.point[0]) + 0.5) / 2, 0.2, 0.8)\n\t\t\t\t\t\t\t\tconst ny = clamp((coerceNumber(binding.point[1]) + 0.5) / 2, 0.2, 0.8)\n\n\t\t\t\t\t\t\t\tconst point = editor.getPointInShapeSpace(v2ShapeFresh, {\n\t\t\t\t\t\t\t\t\tx: bounds.minX + bounds.width * nx,\n\t\t\t\t\t\t\t\t\ty: bounds.minY + bounds.height * ny,\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\tconst handles = editor.getShapeHandles(v2ShapeFresh)!\n\t\t\t\t\t\t\t\tconst change = util.onHandleDrag!(v2ShapeFresh, {\n\t\t\t\t\t\t\t\t\thandle: {\n\t\t\t\t\t\t\t\t\t\t...handles.find((h) => h.id === handleId)!,\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tisPrecise: point.x !== 0.5 || point.y !== 0.5,\n\t\t\t\t\t\t\t\t\tisCreatingShape: true,\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\tif (change) {\n\t\t\t\t\t\t\t\t\teditor.updateShape(change)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst freshBinding = getArrowBindings(\n\t\t\t\t\t\t\t\t\teditor,\n\t\t\t\t\t\t\t\t\teditor.getShape<TLArrowShape>(v2ShapeId)!\n\t\t\t\t\t\t\t\t)[handleId]\n\t\t\t\t\t\t\t\tif (freshBinding) {\n\t\t\t\t\t\t\t\t\tconst updatedFreshBinding = structuredClone(freshBinding)\n\t\t\t\t\t\t\t\t\tif (binding.distance === 0) {\n\t\t\t\t\t\t\t\t\t\tupdatedFreshBinding.props.isExact = true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (updatedFreshBinding.toId !== targetId) {\n\t\t\t\t\t\t\t\t\t\tupdatedFreshBinding.toId = targetId\n\t\t\t\t\t\t\t\t\t\tupdatedFreshBinding.props.normalizedAnchor = { x: nx, y: ny }\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\teditor.updateBinding(updatedFreshBinding)\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})\n\n\t\t// Set the current page to the first page again\n\t\teditor.setCurrentPage(firstPageId)\n\n\t\teditor.clearHistory()\n\t\teditor.selectNone()\n\n\t\tconst bounds = editor.getCurrentPageBounds()\n\t\tif (bounds) {\n\t\t\teditor.zoomToBounds(bounds, { targetZoom: 1 })\n\t\t}\n\t})\n}\n\nfunction coerceNumber(n: unknown): number {\n\tif (typeof n !== 'number') return 0\n\tif (Number.isNaN(n)) return 0\n\tif (!Number.isFinite(n)) return 0\n\treturn n\n}\n\nfunction coerceDimension(d: unknown): number {\n\tconst n = coerceNumber(d)\n\tif (n <= 0) return 1\n\treturn n\n}\n\n/**\n * We want to move assets over to our new S3 bucket & extract any relevant metadata. That process is\n * async though, where the rest of our migration is synchronous.\n *\n * We'll write placeholder assets to the app using the old asset URLs, then kick off a process async\n * to try and download the real assets, extract the metadata, and upload them to our new bucket.\n * It's not a big deal if this fails though.\n */\nasync function tryMigrateAsset(editor: Editor, placeholderAsset: TLAsset) {\n\ttry {\n\t\tif (placeholderAsset.type === 'bookmark' || !placeholderAsset.props.src) return\n\n\t\tconst response = await fetch(placeholderAsset.props.src)\n\t\tif (!response.ok) return\n\n\t\tconst file = new File([await response.blob()], placeholderAsset.props.name, {\n\t\t\ttype: response.headers.get('content-type') ?? placeholderAsset.props.mimeType ?? undefined,\n\t\t})\n\n\t\tconst newAsset = await editor.getAssetForExternalContent({ type: 'file', file })\n\t\tif (!newAsset) throw new Error('Could not get asset for external content')\n\t\tif (newAsset.type === 'bookmark') return\n\n\t\teditor.updateAssets([\n\t\t\t{\n\t\t\t\tid: placeholderAsset.id,\n\t\t\t\ttype: placeholderAsset.type,\n\t\t\t\tprops: {\n\t\t\t\t\t...newAsset.props,\n\t\t\t\t\tname: placeholderAsset.props.name,\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t} catch {\n\t\t// not a big deal, we'll just keep the placeholder asset\n\t}\n}\n\nfunction migrate(document: TLV1Document, newVersion: number): TLV1Document {\n\tconst { version = 0 } = document\n\n\tif (!document.assets) {\n\t\tdocument.assets = {}\n\t}\n\n\t// Remove unused assets when loading a document\n\tconst assetIdsInUse = new Set<string>()\n\n\tObject.values(document.pages).forEach((page) =>\n\t\tObject.values(page.shapes).forEach((shape) => {\n\t\t\tconst { parentId, children, assetId } = shape\n\n\t\t\tif (assetId) {\n\t\t\t\tassetIdsInUse.add(assetId)\n\t\t\t}\n\n\t\t\t// Fix missing parent bug\n\t\t\tif (parentId !== page.id && !page.shapes[parentId]) {\n\t\t\t\tconsole.warn('Encountered a shape with a missing parent!')\n\t\t\t\tshape.parentId = page.id\n\t\t\t}\n\n\t\t\tif (shape.type === TLV1ShapeType.Group && children) {\n\t\t\t\tchildren.forEach((childId) => {\n\t\t\t\t\tif (!page.shapes[childId]) {\n\t\t\t\t\t\tconsole.warn('Encountered a parent with a missing child!', shape.id, childId)\n\t\t\t\t\t\tchildren?.splice(children.indexOf(childId), 1)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// TODO: Remove the shape if it has no children\n\t\t\t}\n\t\t})\n\t)\n\n\tObject.keys(document.assets).forEach((assetId) => {\n\t\tif (!assetIdsInUse.has(assetId)) {\n\t\t\tdelete document.assets[assetId]\n\t\t}\n\t})\n\n\tif (version !== newVersion) {\n\t\tif (version < 14) {\n\t\t\tObject.values(document.pages).forEach((page) => {\n\t\t\t\tObject.values(page.shapes)\n\t\t\t\t\t.filter((shape) => shape.type === TLV1ShapeType.Text)\n\t\t\t\t\t.forEach((shape) => {\n\t\t\t\t\t\tif ((shape as TLV1TextShape).style.font === undefined) {\n\t\t\t\t\t\t\t;(shape as TLV1TextShape).style.font = TLV1FontStyle.Script\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\t// Lowercase styles, move binding meta to binding\n\t\tif (version <= 13) {\n\t\t\tObject.values(document.pages).forEach((page) => {\n\t\t\t\tObject.values(page.bindings).forEach((binding) => {\n\t\t\t\t\tObject.assign(binding, (binding as any).meta)\n\t\t\t\t})\n\n\t\t\t\tObject.values(page.shapes).forEach((shape) => {\n\t\t\t\t\tObject.entries(shape.style).forEach(([id, style]) => {\n\t\t\t\t\t\tif (typeof style === 'string') {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tshape.style[id] = style.toLowerCase()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tif (shape.type === TLV1ShapeType.Arrow) {\n\t\t\t\t\t\tif (shape.decorations) {\n\t\t\t\t\t\t\tObject.entries(shape.decorations).forEach(([id, decoration]) => {\n\t\t\t\t\t\t\t\tif ((decoration as unknown) === 'Arrow') {\n\t\t\t\t\t\t\t\t\tshape.decorations = {\n\t\t\t\t\t\t\t\t\t\t...shape.decorations,\n\t\t\t\t\t\t\t\t\t\t[id]: TLV1Decoration.Arrow,\n\t\t\t\t\t\t\t\t\t}\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})\n\t\t}\n\n\t\t// Add document name and file system handle\n\t\tif (version <= 13.1 && document.name == null) {\n\t\t\tdocument.name = 'New Document'\n\t\t}\n\n\t\tif (version < 15 && document.assets == null) {\n\t\t\tdocument.assets = {}\n\t\t}\n\n\t\tObject.values(document.pages).forEach((page) => {\n\t\t\tObject.values(page.shapes).forEach((shape) => {\n\t\t\t\tif (version < 15.2) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t(shape.type === TLV1ShapeType.Image || shape.type === TLV1ShapeType.Video) &&\n\t\t\t\t\t\tshape.style.isFilled == null\n\t\t\t\t\t) {\n\t\t\t\t\t\tshape.style.isFilled = true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (version < 15.3) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tshape.type === TLV1ShapeType.Rectangle ||\n\t\t\t\t\t\tshape.type === TLV1ShapeType.Triangle ||\n\t\t\t\t\t\tshape.type === TLV1ShapeType.Ellipse ||\n\t\t\t\t\t\tshape.type === TLV1ShapeType.Arrow\n\t\t\t\t\t) {\n\t\t\t\t\t\tif ('text' in shape && typeof shape.text === 'string') {\n\t\t\t\t\t\t\tshape.label = shape.text\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!shape.label) {\n\t\t\t\t\t\t\tshape.label = ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!shape.labelPoint) {\n\t\t\t\t\t\t\tshape.labelPoint = [0.5, 0.5]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n\n\t// Cleanup\n\tObject.values(document.pageStates).forEach((pageState) => {\n\t\tpageState.selectedIds = pageState.selectedIds.filter((id) => {\n\t\t\treturn document.pages[pageState.id].shapes[id] !== undefined\n\t\t})\n\t\tpageState.bindingId = undefined\n\t\tpageState.editingId = undefined\n\t\tpageState.hoveredId = undefined\n\t\tpageState.pointedId = undefined\n\t})\n\n\tdocument.version = newVersion\n\n\treturn document\n}\n\n/* -------------------- TLV1 Types -------------------- */\n\n/** @internal */\nexport interface TLV1Handle {\n\tid: string\n\tindex: number\n\tpoint: number[]\n\tcanBind?: boolean\n\tbindingId?: string\n}\n\n/** @internal */\nexport interface TLV1BaseBinding {\n\tid: string\n\ttoId: string\n\tfromId: string\n}\n\n/** @internal */\nexport enum TLV1ShapeType {\n\tSticky = 'sticky',\n\tEllipse = 'ellipse',\n\tRectangle = 'rectangle',\n\tTriangle = 'triangle',\n\tDraw = 'draw',\n\tArrow = 'arrow',\n\tText = 'text',\n\tGroup = 'group',\n\tImage = 'image',\n\tVideo = 'video',\n}\n\n/** @internal */\nexport enum TLV1ColorStyle {\n\tWhite = 'white',\n\tLightGray = 'lightGray',\n\tGray = 'gray',\n\tBlack = 'black',\n\tGreen = 'green',\n\tCyan = 'cyan',\n\tBlue = 'blue',\n\tIndigo = 'indigo',\n\tViolet = 'violet',\n\tRed = 'red',\n\tOrange = 'orange',\n\tYellow = 'yellow',\n}\n\n/** @internal */\nexport enum TLV1SizeStyle {\n\tSmall = 'small',\n\tMedium = 'medium',\n\tLarge = 'large',\n}\n\n/** @internal */\nexport enum TLV1DashStyle {\n\tDraw = 'draw',\n\tSolid = 'solid',\n\tDashed = 'dashed',\n\tDotted = 'dotted',\n}\n\n/** @internal */\nexport enum TLV1AlignStyle {\n\tStart = 'start',\n\tMiddle = 'middle',\n\tEnd = 'end',\n\tJustify = 'justify',\n}\n\n/** @internal */\nexport enum TLV1FontStyle {\n\tScript = 'script',\n\tSans = 'sans',\n\tSerif = 'serif',\n\tMono = 'mono',\n}\n\n/** @internal */\nexport interface TLV1ShapeStyles {\n\tcolor: TLV1ColorStyle\n\tsize: TLV1SizeStyle\n\tdash: TLV1DashStyle\n\tfont?: TLV1FontStyle\n\ttextAlign?: TLV1AlignStyle\n\tisFilled?: boolean\n\tscale?: number\n}\n\n/** @internal */\nexport interface TLV1BaseShape {\n\tid: string\n\tparentId: string\n\tchildIndex: number\n\tname: string\n\tpoint: number[]\n\tassetId?: string\n\trotation?: number\n\tchildren?: string[]\n\tisGhost?: boolean\n\tisHidden?: boolean\n\tisLocked?: boolean\n\tisGenerated?: boolean\n\tisAspectRatioLocked?: boolean\n\tstyle: TLV1ShapeStyles\n\ttype: TLV1ShapeType\n\tlabel?: string\n\thandles?: Record<string, TLV1Handle>\n}\n\n/** @internal */\nexport interface TLV1DrawShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Draw\n\tpoints: number[][]\n\tisComplete: boolean\n}\n\n/** @internal */\nexport interface TLV1RectangleShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Rectangle\n\tsize: number[]\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\n/** @internal */\nexport interface TLV1EllipseShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Ellipse\n\tradius: number[]\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\n/** @internal */\nexport interface TLV1TriangleShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Triangle\n\tsize: number[]\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\n/** @internal */\nexport enum TLV1Decoration {\n\tArrow = 'arrow',\n}\n\n// The shape created with the arrow tool\n/** @internal */\nexport interface TLV1ArrowShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Arrow\n\tbend: number\n\thandles: {\n\t\tstart: TLV1Handle\n\t\tbend: TLV1Handle\n\t\tend: TLV1Handle\n\t}\n\tdecorations?: {\n\t\tstart?: TLV1Decoration\n\t\tend?: TLV1Decoration\n\t\tmiddle?: TLV1Decoration\n\t}\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\n/** @internal */\nexport interface TLV1ArrowBinding extends TLV1BaseBinding {\n\thandleId: keyof TLV1ArrowShape['handles']\n\tdistance: number\n\tpoint: number[]\n}\n\n/** @internal */\nexport type TLV1Binding = TLV1ArrowBinding\n\n/** @internal */\nexport interface TLV1ImageShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Image\n\tsize: number[]\n\tassetId: string\n}\n\n/** @internal */\nexport interface TLV1VideoShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Video\n\tsize: number[]\n\tassetId: string\n\tisPlaying: boolean\n\tcurrentTime: number\n}\n\n// The shape created by the text tool\n/** @internal */\nexport interface TLV1TextShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Text\n\ttext: string\n}\n\n// The shape created by the sticky tool\n/** @internal */\nexport interface TLV1StickyShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Sticky\n\tsize: number[]\n\ttext: string\n}\n\n// The shape created when multiple shapes are grouped\n/** @internal */\nexport interface TLV1GroupShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Group\n\tsize: number[]\n\tchildren: string[]\n}\n\n/** @internal */\nexport type TLV1Shape =\n\t| TLV1RectangleShape\n\t| TLV1EllipseShape\n\t| TLV1TriangleShape\n\t| TLV1DrawShape\n\t| TLV1ArrowShape\n\t| TLV1TextShape\n\t| TLV1GroupShape\n\t| TLV1StickyShape\n\t| TLV1ImageShape\n\t| TLV1VideoShape\n\n/** @internal */\nexport interface TLV1Page {\n\tid: string\n\tname?: string\n\tchildIndex?: number\n\tshapes: Record<string, TLV1Shape>\n\tbindings: Record<string, TLV1Binding>\n}\n\n/** @internal */\nexport interface TLV1Bounds {\n\tminX: number\n\tminY: number\n\tmaxX: number\n\tmaxY: number\n\twidth: number\n\theight: number\n\trotation?: number\n}\n\n/** @internal */\nexport interface TLV1PageState {\n\tid: string\n\tselectedIds: string[]\n\tcamera: {\n\t\tpoint: number[]\n\t\tzoom: number\n\t}\n\tbrush?: TLV1Bounds | null\n\tpointedId?: string | null\n\thoveredId?: string | null\n\teditingId?: string | null\n\tbindingId?: string | null\n}\n\n/** @internal */\nexport enum TLV1AssetType {\n\tImage = 'image',\n\tVideo = 'video',\n}\n\n/** @internal */\nexport interface TLV1ImageAsset extends TLV1BaseAsset {\n\ttype: TLV1AssetType.Image\n\tfileName: string\n\tsrc: string\n\tsize: number[]\n}\n\n/** @internal */\nexport interface TLV1VideoAsset extends TLV1BaseAsset {\n\ttype: TLV1AssetType.Video\n\tfileName: string\n\tsrc: string\n\tsize: number[]\n}\n\n/** @internal */\nexport interface TLV1BaseAsset {\n\tid: string\n\ttype: string\n}\n\n/** @internal */\nexport type TLV1Asset = TLV1ImageAsset | TLV1VideoAsset\n\n/** @internal */\nexport interface TLV1Document {\n\tid: string\n\tname: string\n\tversion: number\n\tpages: Record<string, TLV1Page>\n\tpageStates: Record<string, TLV1PageState>\n\tassets: Record<string, TLV1Asset>\n}\n\n/* ------------------ Translations ------------------ */\n\nconst v1ColorsToV2Colors: Record<TLV1ColorStyle, TLDefaultColorStyle> = {\n\t[TLV1ColorStyle.White]: 'black',\n\t[TLV1ColorStyle.Black]: 'black',\n\t[TLV1ColorStyle.LightGray]: 'grey',\n\t[TLV1ColorStyle.Gray]: 'grey',\n\t[TLV1ColorStyle.Green]: 'light-green',\n\t[TLV1ColorStyle.Cyan]: 'green',\n\t[TLV1ColorStyle.Blue]: 'light-blue',\n\t[TLV1ColorStyle.Indigo]: 'blue',\n\t[TLV1ColorStyle.Orange]: 'orange',\n\t[TLV1ColorStyle.Yellow]: 'yellow',\n\t[TLV1ColorStyle.Red]: 'red',\n\t[TLV1ColorStyle.Violet]: 'light-violet',\n}\n\nconst v1FontsToV2Fonts: Record<TLV1FontStyle, TLDefaultFontStyle> = {\n\t[TLV1FontStyle.Mono]: 'mono',\n\t[TLV1FontStyle.Sans]: 'sans',\n\t[TLV1FontStyle.Script]: 'draw',\n\t[TLV1FontStyle.Serif]: 'serif',\n}\n\nconst v1AlignsToV2Aligns: Record<TLV1AlignStyle, TLDefaultHorizontalAlignStyle> = {\n\t[TLV1AlignStyle.Start]: 'start',\n\t[TLV1AlignStyle.Middle]: 'middle',\n\t[TLV1AlignStyle.End]: 'end',\n\t[TLV1AlignStyle.Justify]: 'start',\n}\n\nconst v1TextAlignsToV2TextAligns: Record<TLV1AlignStyle, TLDefaultTextAlignStyle> = {\n\t[TLV1AlignStyle.Start]: 'start',\n\t[TLV1AlignStyle.Middle]: 'middle',\n\t[TLV1AlignStyle.End]: 'end',\n\t[TLV1AlignStyle.Justify]: 'start',\n}\n\nconst v1TextSizesToV2TextSizes: Record<TLV1SizeStyle, TLDefaultSizeStyle> = {\n\t[TLV1SizeStyle.Small]: 's',\n\t[TLV1SizeStyle.Medium]: 'l',\n\t[TLV1SizeStyle.Large]: 'xl',\n}\n\nconst v1SizesToV2Sizes: Record<TLV1SizeStyle, TLDefaultSizeStyle> = {\n\t[TLV1SizeStyle.Small]: 'm',\n\t[TLV1SizeStyle.Medium]: 'l',\n\t[TLV1SizeStyle.Large]: 'xl',\n}\n\nconst v1DashesToV2Dashes: Record<TLV1DashStyle, TLDefaultDashStyle> = {\n\t[TLV1DashStyle.Solid]: 'solid',\n\t[TLV1DashStyle.Dashed]: 'dashed',\n\t[TLV1DashStyle.Dotted]: 'dotted',\n\t[TLV1DashStyle.Draw]: 'draw',\n}\n\nfunction getV2Color(color: TLV1ColorStyle | undefined): TLDefaultColorStyle {\n\treturn color ? (v1ColorsToV2Colors[color] ?? 'black') : 'black'\n}\n\nfunction getV2Font(font: TLV1FontStyle | undefined): TLDefaultFontStyle {\n\treturn font ? (v1FontsToV2Fonts[font] ?? 'draw') : 'draw'\n}\n\nfunction getV2Align(align: TLV1AlignStyle | undefined): TLDefaultHorizontalAlignStyle {\n\treturn align ? (v1AlignsToV2Aligns[align] ?? 'middle') : 'middle'\n}\n\nfunction getV2TextAlign(align: TLV1AlignStyle | undefined): TLDefaultTextAlignStyle {\n\treturn align ? (v1TextAlignsToV2TextAligns[align] ?? 'middle') : 'middle'\n}\n\nfunction getV2TextSize(size: TLV1SizeStyle | undefined): TLDefaultSizeStyle {\n\treturn size ? (v1TextSizesToV2TextSizes[size] ?? 'm') : 'm'\n}\n\nfunction getV2Size(size: TLV1SizeStyle | undefined): TLDefaultSizeStyle {\n\treturn size ? (v1SizesToV2Sizes[size] ?? 'l') : 'l'\n}\n\nfunction getV2Dash(dash: TLV1DashStyle | undefined): TLDefaultDashStyle {\n\treturn dash ? (v1DashesToV2Dashes[dash] ?? 'draw') : 'draw'\n}\n\nfunction getV2Point(point: number[]): VecModel {\n\treturn {\n\t\tx: coerceNumber(point[0]),\n\t\ty: coerceNumber(point[1]),\n\t\tz: point[2] == null ? 0.5 : coerceNumber(point[2]),\n\t}\n}\n\nfunction getV2Arrowhead(decoration: TLV1Decoration | undefined): TLArrowShapeArrowheadStyle {\n\treturn decoration === TLV1Decoration.Arrow ? 'arrow' : 'none'\n}\n\nfunction getV2Fill(isFilled: boolean | undefined, color: TLV1ColorStyle) {\n\treturn isFilled\n\t\t? color === TLV1ColorStyle.Black || color === TLV1ColorStyle.White\n\t\t\t? 'semi'\n\t\t\t: 'solid'\n\t\t: 'none'\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n\tAssetRecordType,\n\tEditor,\n\tPageRecordType,\n\tTLArrowShape,\n\tTLArrowShapeArrowheadStyle,\n\tTLAsset,\n\tTLAssetId,\n\tTLDefaultColorStyle,\n\tTLDefaultDashStyle,\n\tTLDefaultFontStyle,\n\tTLDefaultHorizontalAlignStyle,\n\tTLDefaultSizeStyle,\n\tTLDefaultTextAlignStyle,\n\tTLGeoShape,\n\tTLPageId,\n\tTLShapeId,\n\tVec,\n\tVecModel,\n\tb64Vecs,\n\tclamp,\n\tcreateShapeId,\n\tfetch,\n\tstructuredClone,\n\ttoRichText,\n} from '@tldraw/editor'\nimport { getArrowBindings } from '../../shapes/arrow/shared'\n\nconst TLDRAW_V1_VERSION = 15.5\n\n/** @internal */\nexport function buildFromV1Document(editor: Editor, _document: unknown) {\n\tlet document = _document as TLV1Document\n\teditor.run(() => {\n\t\tdocument = migrate(document, TLDRAW_V1_VERSION)\n\t\t// Cancel any interactions / states\n\t\teditor.cancel().cancel().cancel().cancel()\n\n\t\tconst firstPageId = editor.getPages()[0].id\n\n\t\t// Set the current page to the first page\n\t\teditor.setCurrentPage(firstPageId)\n\n\t\t// Delete all pages except first page\n\t\tfor (const page of editor.getPages().slice(1)) {\n\t\t\teditor.deletePage(page.id)\n\t\t}\n\n\t\t// Delete all of the shapes on the current page\n\t\teditor.selectAll()\n\t\teditor.deleteShapes(editor.getSelectedShapeIds())\n\n\t\t// Create assets\n\t\tconst v1AssetIdsToV2AssetIds = new Map<string, TLAssetId>()\n\n\t\tObject.values(document.assets ?? {}).forEach((v1Asset) => {\n\t\t\tswitch (v1Asset.type) {\n\t\t\t\tcase TLV1AssetType.Image: {\n\t\t\t\t\tconst assetId: TLAssetId = AssetRecordType.createId()\n\t\t\t\t\tv1AssetIdsToV2AssetIds.set(v1Asset.id, assetId)\n\t\t\t\t\tconst placeholderAsset: TLAsset = {\n\t\t\t\t\t\tid: assetId,\n\t\t\t\t\t\ttypeName: 'asset',\n\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tw: coerceDimension(v1Asset.size[0]),\n\t\t\t\t\t\t\th: coerceDimension(v1Asset.size[1]),\n\t\t\t\t\t\t\tname: v1Asset.fileName ?? 'Untitled',\n\t\t\t\t\t\t\tisAnimated: false,\n\t\t\t\t\t\t\tmimeType: null,\n\t\t\t\t\t\t\tsrc: v1Asset.src,\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\teditor.createAssets([placeholderAsset])\n\t\t\t\t\ttryMigrateAsset(editor, placeholderAsset)\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tcase TLV1AssetType.Video:\n\t\t\t\t\t{\n\t\t\t\t\t\tconst assetId: TLAssetId = AssetRecordType.createId()\n\t\t\t\t\t\tv1AssetIdsToV2AssetIds.set(v1Asset.id, assetId)\n\t\t\t\t\t\teditor.createAssets([\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tid: assetId,\n\t\t\t\t\t\t\t\ttypeName: 'asset',\n\t\t\t\t\t\t\t\ttype: 'video',\n\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Asset.size[0]),\n\t\t\t\t\t\t\t\t\th: coerceDimension(v1Asset.size[1]),\n\t\t\t\t\t\t\t\t\tname: v1Asset.fileName ?? 'Untitled',\n\t\t\t\t\t\t\t\t\tisAnimated: true,\n\t\t\t\t\t\t\t\t\tmimeType: null,\n\t\t\t\t\t\t\t\t\tsrc: v1Asset.src,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tmeta: {},\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\tbreak\n\t\t\t}\n\t\t})\n\n\t\t// Create pages\n\n\t\tconst v1PageIdsToV2PageIds = new Map<string, TLPageId>()\n\n\t\tObject.values(document.pages ?? {})\n\t\t\t.sort((a, b) => ((a.childIndex ?? 1) < (b.childIndex ?? 1) ? -1 : 1))\n\t\t\t.forEach((v1Page, i) => {\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tv1PageIdsToV2PageIds.set(v1Page.id, editor.getCurrentPageId())\n\t\t\t\t} else {\n\t\t\t\t\tconst pageId = PageRecordType.createId()\n\t\t\t\t\tv1PageIdsToV2PageIds.set(v1Page.id, pageId)\n\t\t\t\t\teditor.createPage({ name: v1Page.name ?? 'Page', id: pageId })\n\t\t\t\t}\n\t\t\t})\n\n\t\tObject.values(document.pages ?? {})\n\t\t\t.sort((a, b) => ((a.childIndex ?? 1) < (b.childIndex ?? 1) ? -1 : 1))\n\t\t\t.forEach((v1Page) => {\n\t\t\t\t// Set the current page id to the current page\n\t\t\t\teditor.setCurrentPage(v1PageIdsToV2PageIds.get(v1Page.id)!)\n\n\t\t\t\tconst v1ShapeIdsToV2ShapeIds = new Map<string, TLShapeId>()\n\t\t\t\tconst v1GroupShapeIdsToV1ChildIds = new Map<string, string[]>()\n\n\t\t\t\tconst v1Shapes = Object.values(v1Page.shapes ?? {})\n\t\t\t\t\t.sort((a, b) => (a.childIndex < b.childIndex ? -1 : 1))\n\t\t\t\t\t.slice(0, editor.options.maxShapesPerPage)\n\n\t\t\t\t// Groups only\n\t\t\t\tv1Shapes.forEach((v1Shape) => {\n\t\t\t\t\tif (v1Shape.type !== TLV1ShapeType.Group) return\n\n\t\t\t\t\tconst shapeId = createShapeId()\n\t\t\t\t\tv1ShapeIdsToV2ShapeIds.set(v1Shape.id, shapeId)\n\t\t\t\t\tv1GroupShapeIdsToV1ChildIds.set(v1Shape.id, [])\n\t\t\t\t})\n\n\t\t\t\tfunction decideNotToCreateShape(v1Shape: TLV1Shape) {\n\t\t\t\t\tv1ShapeIdsToV2ShapeIds.delete(v1Shape.id)\n\t\t\t\t\tconst v1GroupParent = v1GroupShapeIdsToV1ChildIds.has(v1Shape.parentId)\n\t\t\t\t\tif (v1GroupParent) {\n\t\t\t\t\t\tconst ids = v1GroupShapeIdsToV1ChildIds\n\t\t\t\t\t\t\t.get(v1Shape.parentId)!\n\t\t\t\t\t\t\t.filter((id) => id !== v1Shape.id)\n\t\t\t\t\t\tv1GroupShapeIdsToV1ChildIds.set(v1Shape.parentId, ids)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Non-groups only\n\t\t\t\tv1Shapes.forEach((v1Shape) => {\n\t\t\t\t\t// Skip groups for now, we'll create groups via the app's API\n\t\t\t\t\tif (v1Shape.type === TLV1ShapeType.Group) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tconst shapeId = createShapeId()\n\t\t\t\t\tv1ShapeIdsToV2ShapeIds.set(v1Shape.id, shapeId)\n\n\t\t\t\t\tif (v1Shape.parentId !== v1Page.id) {\n\t\t\t\t\t\t// If the parent is a group, then add the shape to the group's children\n\t\t\t\t\t\tif (v1GroupShapeIdsToV1ChildIds.has(v1Shape.parentId)) {\n\t\t\t\t\t\t\tv1GroupShapeIdsToV1ChildIds.get(v1Shape.parentId)!.push(v1Shape.id)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconsole.warn('parent does not exist', v1Shape)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// First, try to find the shape's parent among the existing groups\n\t\t\t\t\tconst parentId = v1PageIdsToV2PageIds.get(v1Page.id)!\n\n\t\t\t\t\tconst inCommon = {\n\t\t\t\t\t\tid: shapeId,\n\t\t\t\t\t\tparentId,\n\t\t\t\t\t\tx: coerceNumber(v1Shape.point[0]),\n\t\t\t\t\t\ty: coerceNumber(v1Shape.point[1]),\n\t\t\t\t\t\trotation: 0,\n\t\t\t\t\t\tisLocked: !!v1Shape.isLocked,\n\t\t\t\t\t}\n\n\t\t\t\t\tswitch (v1Shape.type) {\n\t\t\t\t\t\tcase TLV1ShapeType.Sticky: {\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'note',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.text ?? ''),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\talign: getV2Align(v1Shape.style.textAlign),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Rectangle: {\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tgeo: 'rectangle',\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.label ?? ''),\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\talign: 'middle',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tconst pageBoundsBeforeLabel = editor.getShapePageBounds(inCommon.id)!\n\n\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.label ?? ''),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tif (pageBoundsBeforeLabel.width === pageBoundsBeforeLabel.height) {\n\t\t\t\t\t\t\t\tconst shape = editor.getShape<TLGeoShape>(inCommon.id)!\n\t\t\t\t\t\t\t\tconst { growY } = shape.props\n\t\t\t\t\t\t\t\tconst w = coerceDimension(shape.props.w)\n\t\t\t\t\t\t\t\tconst h = coerceDimension(shape.props.h)\n\t\t\t\t\t\t\t\tconst newW = w + growY / 2\n\t\t\t\t\t\t\t\tconst newH = h + growY / 2\n\n\t\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\t\tx: coerceNumber(shape.x) - (newW - w) / 2,\n\t\t\t\t\t\t\t\t\t\ty: coerceNumber(shape.y) - (newH - h) / 2,\n\t\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t\tw: newW,\n\t\t\t\t\t\t\t\t\t\t\th: newH,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Triangle: {\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tgeo: 'triangle',\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\talign: 'middle',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tconst pageBoundsBeforeLabel = editor.getShapePageBounds(inCommon.id)!\n\n\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.label ?? ''),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tif (pageBoundsBeforeLabel.width === pageBoundsBeforeLabel.height) {\n\t\t\t\t\t\t\t\tconst shape = editor.getShape<TLGeoShape>(inCommon.id)!\n\t\t\t\t\t\t\t\tconst { growY } = shape.props\n\t\t\t\t\t\t\t\tconst w = coerceDimension(shape.props.w)\n\t\t\t\t\t\t\t\tconst h = coerceDimension(shape.props.h)\n\t\t\t\t\t\t\t\tconst newW = w + growY / 2\n\t\t\t\t\t\t\t\tconst newH = h + growY / 2\n\n\t\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\t\tx: coerceNumber(shape.x) - (newW - w) / 2,\n\t\t\t\t\t\t\t\t\t\ty: coerceNumber(shape.y) - (newH - h) / 2,\n\t\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t\tw: newW,\n\t\t\t\t\t\t\t\t\t\t\th: newH,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Ellipse: {\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tgeo: 'ellipse',\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.radius[0]) * 2,\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.radius[1]) * 2,\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\talign: 'middle',\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tconst pageBoundsBeforeLabel = editor.getShapePageBounds(inCommon.id)!\n\n\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.label ?? ''),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tif (pageBoundsBeforeLabel.width === pageBoundsBeforeLabel.height) {\n\t\t\t\t\t\t\t\tconst shape = editor.getShape<TLGeoShape>(inCommon.id)!\n\t\t\t\t\t\t\t\tconst { growY } = shape.props\n\t\t\t\t\t\t\t\tconst w = coerceDimension(shape.props.w)\n\t\t\t\t\t\t\t\tconst h = coerceDimension(shape.props.h)\n\t\t\t\t\t\t\t\tconst newW = w + growY / 2\n\t\t\t\t\t\t\t\tconst newH = h + growY / 2\n\n\t\t\t\t\t\t\t\teditor.updateShapes([\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tid: inCommon.id,\n\t\t\t\t\t\t\t\t\t\ttype: 'geo',\n\t\t\t\t\t\t\t\t\t\tx: coerceNumber(shape.x) - (newW - w) / 2,\n\t\t\t\t\t\t\t\t\t\ty: coerceNumber(shape.y) - (newH - h) / 2,\n\t\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\t\tw: newW,\n\t\t\t\t\t\t\t\t\t\t\th: newH,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Draw: {\n\t\t\t\t\t\t\tif (v1Shape.points.length === 0) {\n\t\t\t\t\t\t\t\tdecideNotToCreateShape(v1Shape)\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst points = v1Shape.points.map(getV2Point)\n\t\t\t\t\t\t\tconst base64Points = b64Vecs.encodePoints(points)\n\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'draw',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tfill: getV2Fill(v1Shape.style.isFilled, v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\tisPen: false,\n\t\t\t\t\t\t\t\t\t\tisComplete: v1Shape.isComplete,\n\t\t\t\t\t\t\t\t\t\tsegments: [{ type: 'free', points: base64Points }],\n\t\t\t\t\t\t\t\t\t\tscale: 1,\n\t\t\t\t\t\t\t\t\t\tscaleX: 1,\n\t\t\t\t\t\t\t\t\t\tscaleY: 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Arrow: {\n\t\t\t\t\t\t\tconst v1Bend = coerceNumber(v1Shape.bend)\n\t\t\t\t\t\t\tconst v1Start = getV2Point(v1Shape.handles.start.point)\n\t\t\t\t\t\t\tconst v1End = getV2Point(v1Shape.handles.end.point)\n\t\t\t\t\t\t\tconst dist = Vec.Dist(v1Start, v1End)\n\t\t\t\t\t\t\tconst v2Bend = (dist * -v1Bend) / 2\n\n\t\t\t\t\t\t\t// Could also be a line... but we'll use it as an arrow anyway\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'arrow',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.label ?? ''),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tlabelColor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2Size(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\tdash: getV2Dash(v1Shape.style.dash),\n\t\t\t\t\t\t\t\t\t\tarrowheadStart: getV2Arrowhead(v1Shape.decorations?.start),\n\t\t\t\t\t\t\t\t\t\tarrowheadEnd: getV2Arrowhead(v1Shape.decorations?.end),\n\t\t\t\t\t\t\t\t\t\tstart: {\n\t\t\t\t\t\t\t\t\t\t\tx: coerceNumber(v1Shape.handles.start.point[0]),\n\t\t\t\t\t\t\t\t\t\t\ty: coerceNumber(v1Shape.handles.start.point[1]),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tend: {\n\t\t\t\t\t\t\t\t\t\t\tx: coerceNumber(v1Shape.handles.end.point[0]),\n\t\t\t\t\t\t\t\t\t\t\ty: coerceNumber(v1Shape.handles.end.point[1]),\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\tbend: v2Bend,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Text: {\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\trichText: toRichText(v1Shape.text ?? ' '),\n\t\t\t\t\t\t\t\t\t\tcolor: getV2Color(v1Shape.style.color),\n\t\t\t\t\t\t\t\t\t\tsize: getV2TextSize(v1Shape.style.size),\n\t\t\t\t\t\t\t\t\t\tfont: getV2Font(v1Shape.style.font),\n\t\t\t\t\t\t\t\t\t\ttextAlign: getV2TextAlign(v1Shape.style.textAlign),\n\t\t\t\t\t\t\t\t\t\tscale: v1Shape.style.scale ?? 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Image: {\n\t\t\t\t\t\t\tconst assetId = v1AssetIdsToV2AssetIds.get(v1Shape.assetId)\n\n\t\t\t\t\t\t\tif (!assetId) {\n\t\t\t\t\t\t\t\tconsole.warn('Could not find asset id', v1Shape.assetId)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'image',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\tassetId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase TLV1ShapeType.Video: {\n\t\t\t\t\t\t\tconst assetId = v1AssetIdsToV2AssetIds.get(v1Shape.assetId)\n\n\t\t\t\t\t\t\tif (!assetId) {\n\t\t\t\t\t\t\t\tconsole.warn('Could not find asset id', v1Shape.assetId)\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\teditor.createShapes([\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t...inCommon,\n\t\t\t\t\t\t\t\t\ttype: 'video',\n\t\t\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\t\t\tw: coerceDimension(v1Shape.size[0]),\n\t\t\t\t\t\t\t\t\t\th: coerceDimension(v1Shape.size[1]),\n\t\t\t\t\t\t\t\t\t\tassetId,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rotation = coerceNumber(v1Shape.rotation)\n\n\t\t\t\t\tif (rotation !== 0) {\n\t\t\t\t\t\teditor.select(shapeId)\n\t\t\t\t\t\teditor.rotateShapesBy([shapeId], rotation)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// Create groups\n\t\t\t\tv1GroupShapeIdsToV1ChildIds.forEach((v1ChildIds, v1GroupId) => {\n\t\t\t\t\tconst v2ChildShapeIds = v1ChildIds.map((id) => v1ShapeIdsToV2ShapeIds.get(id)!)\n\t\t\t\t\tconst v2GroupId = v1ShapeIdsToV2ShapeIds.get(v1GroupId)!\n\t\t\t\t\teditor.groupShapes(v2ChildShapeIds, { groupId: v2GroupId })\n\n\t\t\t\t\tconst v1Group = v1Page.shapes[v1GroupId]\n\t\t\t\t\tconst rotation = coerceNumber(v1Group.rotation)\n\n\t\t\t\t\tif (rotation !== 0) {\n\t\t\t\t\t\teditor.select(v2GroupId)\n\t\t\t\t\t\teditor.rotateShapesBy([v2GroupId], rotation)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// Bind arrows to shapes\n\n\t\t\t\tv1Shapes.forEach((v1Shape) => {\n\t\t\t\t\tif (v1Shape.type !== TLV1ShapeType.Arrow) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\n\t\t\t\t\tconst v2ShapeId = v1ShapeIdsToV2ShapeIds.get(v1Shape.id)!\n\t\t\t\t\tconst util = editor.getShapeUtil<TLArrowShape>('arrow')\n\n\t\t\t\t\t// dumb but necessary\n\t\t\t\t\teditor.inputs.setCtrlKey(false)\n\n\t\t\t\t\tfor (const handleId of ['start', 'end'] as const) {\n\t\t\t\t\t\tconst bindingId = v1Shape.handles[handleId].bindingId\n\t\t\t\t\t\tif (bindingId) {\n\t\t\t\t\t\t\tconst binding = v1Page.bindings[bindingId]\n\t\t\t\t\t\t\tif (!binding) {\n\t\t\t\t\t\t\t\t// arrow has a reference to a binding that no longer exists\n\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst targetId = v1ShapeIdsToV2ShapeIds.get(binding.toId)!\n\n\t\t\t\t\t\t\tconst targetShape = editor.getShape(targetId)!\n\n\t\t\t\t\t\t\t// (unexpected) We didn't create the target shape\n\t\t\t\t\t\t\tif (!targetShape) continue\n\n\t\t\t\t\t\t\tif (targetId) {\n\t\t\t\t\t\t\t\tconst bounds = editor.getShapePageBounds(targetId)!\n\n\t\t\t\t\t\t\t\tconst v2ShapeFresh = editor.getShape<TLArrowShape>(v2ShapeId)!\n\n\t\t\t\t\t\t\t\tconst nx = clamp((coerceNumber(binding.point[0]) + 0.5) / 2, 0.2, 0.8)\n\t\t\t\t\t\t\t\tconst ny = clamp((coerceNumber(binding.point[1]) + 0.5) / 2, 0.2, 0.8)\n\n\t\t\t\t\t\t\t\tconst point = editor.getPointInShapeSpace(v2ShapeFresh, {\n\t\t\t\t\t\t\t\t\tx: bounds.minX + bounds.width * nx,\n\t\t\t\t\t\t\t\t\ty: bounds.minY + bounds.height * ny,\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\tconst handles = editor.getShapeHandles(v2ShapeFresh)!\n\t\t\t\t\t\t\t\tconst change = util.onHandleDrag!(v2ShapeFresh, {\n\t\t\t\t\t\t\t\t\thandle: {\n\t\t\t\t\t\t\t\t\t\t...handles.find((h) => h.id === handleId)!,\n\t\t\t\t\t\t\t\t\t\tx: point.x,\n\t\t\t\t\t\t\t\t\t\ty: point.y,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tisPrecise: point.x !== 0.5 || point.y !== 0.5,\n\t\t\t\t\t\t\t\t\tisCreatingShape: true,\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\tif (change) {\n\t\t\t\t\t\t\t\t\teditor.updateShape(change)\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst freshBinding = getArrowBindings(\n\t\t\t\t\t\t\t\t\teditor,\n\t\t\t\t\t\t\t\t\teditor.getShape<TLArrowShape>(v2ShapeId)!\n\t\t\t\t\t\t\t\t)[handleId]\n\t\t\t\t\t\t\t\tif (freshBinding) {\n\t\t\t\t\t\t\t\t\tconst updatedFreshBinding = structuredClone(freshBinding)\n\t\t\t\t\t\t\t\t\tif (binding.distance === 0) {\n\t\t\t\t\t\t\t\t\t\tupdatedFreshBinding.props.isExact = true\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (updatedFreshBinding.toId !== targetId) {\n\t\t\t\t\t\t\t\t\t\tupdatedFreshBinding.toId = targetId\n\t\t\t\t\t\t\t\t\t\tupdatedFreshBinding.props.normalizedAnchor = { x: nx, y: ny }\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\teditor.updateBinding(updatedFreshBinding)\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})\n\n\t\t// Set the current page to the first page again\n\t\teditor.setCurrentPage(firstPageId)\n\n\t\teditor.clearHistory()\n\t\teditor.selectNone()\n\n\t\tconst bounds = editor.getCurrentPageBounds()\n\t\tif (bounds) {\n\t\t\teditor.zoomToBounds(bounds, { targetZoom: 1 })\n\t\t}\n\t})\n}\n\nfunction coerceNumber(n: unknown): number {\n\tif (typeof n !== 'number') return 0\n\tif (Number.isNaN(n)) return 0\n\tif (!Number.isFinite(n)) return 0\n\treturn n\n}\n\nfunction coerceDimension(d: unknown): number {\n\tconst n = coerceNumber(d)\n\tif (n <= 0) return 1\n\treturn n\n}\n\n/**\n * We want to move assets over to our new S3 bucket & extract any relevant metadata. That process is\n * async though, where the rest of our migration is synchronous.\n *\n * We'll write placeholder assets to the app using the old asset URLs, then kick off a process async\n * to try and download the real assets, extract the metadata, and upload them to our new bucket.\n * It's not a big deal if this fails though.\n */\nasync function tryMigrateAsset(editor: Editor, placeholderAsset: TLAsset) {\n\ttry {\n\t\tif (placeholderAsset.type === 'bookmark' || !placeholderAsset.props.src) return\n\n\t\tconst response = await fetch(placeholderAsset.props.src)\n\t\tif (!response.ok) return\n\n\t\tconst file = new File([await response.blob()], placeholderAsset.props.name, {\n\t\t\ttype: response.headers.get('content-type') ?? placeholderAsset.props.mimeType ?? undefined,\n\t\t})\n\n\t\tconst newAsset = await editor.getAssetForExternalContent({ type: 'file', file })\n\t\tif (!newAsset) throw new Error('Could not get asset for external content')\n\t\tif (newAsset.type === 'bookmark') return\n\n\t\teditor.updateAssets([\n\t\t\t{\n\t\t\t\tid: placeholderAsset.id,\n\t\t\t\ttype: placeholderAsset.type,\n\t\t\t\tprops: {\n\t\t\t\t\t...newAsset.props,\n\t\t\t\t\tname: placeholderAsset.props.name,\n\t\t\t\t},\n\t\t\t},\n\t\t])\n\t} catch {\n\t\t// not a big deal, we'll just keep the placeholder asset\n\t}\n}\n\nfunction migrate(document: TLV1Document, newVersion: number): TLV1Document {\n\tconst { version = 0 } = document\n\n\tif (!document.assets) {\n\t\tdocument.assets = {}\n\t}\n\n\t// Remove unused assets when loading a document\n\tconst assetIdsInUse = new Set<string>()\n\n\tObject.values(document.pages).forEach((page) =>\n\t\tObject.values(page.shapes).forEach((shape) => {\n\t\t\tconst { parentId, children, assetId } = shape\n\n\t\t\tif (assetId) {\n\t\t\t\tassetIdsInUse.add(assetId)\n\t\t\t}\n\n\t\t\t// Fix missing parent bug\n\t\t\tif (parentId !== page.id && !page.shapes[parentId]) {\n\t\t\t\tconsole.warn('Encountered a shape with a missing parent!')\n\t\t\t\tshape.parentId = page.id\n\t\t\t}\n\n\t\t\tif (shape.type === TLV1ShapeType.Group && children) {\n\t\t\t\tchildren.forEach((childId) => {\n\t\t\t\t\tif (!page.shapes[childId]) {\n\t\t\t\t\t\tconsole.warn('Encountered a parent with a missing child!', shape.id, childId)\n\t\t\t\t\t\tchildren?.splice(children.indexOf(childId), 1)\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// TODO: Remove the shape if it has no children\n\t\t\t}\n\t\t})\n\t)\n\n\tObject.keys(document.assets).forEach((assetId) => {\n\t\tif (!assetIdsInUse.has(assetId)) {\n\t\t\tdelete document.assets[assetId]\n\t\t}\n\t})\n\n\tif (version !== newVersion) {\n\t\tif (version < 14) {\n\t\t\tObject.values(document.pages).forEach((page) => {\n\t\t\t\tObject.values(page.shapes)\n\t\t\t\t\t.filter((shape) => shape.type === TLV1ShapeType.Text)\n\t\t\t\t\t.forEach((shape) => {\n\t\t\t\t\t\tif ((shape as TLV1TextShape).style.font === undefined) {\n\t\t\t\t\t\t\t;(shape as TLV1TextShape).style.font = TLV1FontStyle.Script\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\t// Lowercase styles, move binding meta to binding\n\t\tif (version <= 13) {\n\t\t\tObject.values(document.pages).forEach((page) => {\n\t\t\t\tObject.values(page.bindings).forEach((binding) => {\n\t\t\t\t\tObject.assign(binding, (binding as any).meta)\n\t\t\t\t})\n\n\t\t\t\tObject.values(page.shapes).forEach((shape) => {\n\t\t\t\t\tObject.entries(shape.style).forEach(([id, style]) => {\n\t\t\t\t\t\tif (typeof style === 'string') {\n\t\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\t\tshape.style[id] = style.toLowerCase()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\t\tif (shape.type === TLV1ShapeType.Arrow) {\n\t\t\t\t\t\tif (shape.decorations) {\n\t\t\t\t\t\t\tObject.entries(shape.decorations).forEach(([id, decoration]) => {\n\t\t\t\t\t\t\t\tif ((decoration as unknown) === 'Arrow') {\n\t\t\t\t\t\t\t\t\tshape.decorations = {\n\t\t\t\t\t\t\t\t\t\t...shape.decorations,\n\t\t\t\t\t\t\t\t\t\t[id]: TLV1Decoration.Arrow,\n\t\t\t\t\t\t\t\t\t}\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})\n\t\t}\n\n\t\t// Add document name and file system handle\n\t\tif (version <= 13.1 && document.name == null) {\n\t\t\tdocument.name = 'New Document'\n\t\t}\n\n\t\tif (version < 15 && document.assets == null) {\n\t\t\tdocument.assets = {}\n\t\t}\n\n\t\tObject.values(document.pages).forEach((page) => {\n\t\t\tObject.values(page.shapes).forEach((shape) => {\n\t\t\t\tif (version < 15.2) {\n\t\t\t\t\tif (\n\t\t\t\t\t\t(shape.type === TLV1ShapeType.Image || shape.type === TLV1ShapeType.Video) &&\n\t\t\t\t\t\tshape.style.isFilled == null\n\t\t\t\t\t) {\n\t\t\t\t\t\tshape.style.isFilled = true\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (version < 15.3) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tshape.type === TLV1ShapeType.Rectangle ||\n\t\t\t\t\t\tshape.type === TLV1ShapeType.Triangle ||\n\t\t\t\t\t\tshape.type === TLV1ShapeType.Ellipse ||\n\t\t\t\t\t\tshape.type === TLV1ShapeType.Arrow\n\t\t\t\t\t) {\n\t\t\t\t\t\tif ('text' in shape && typeof shape.text === 'string') {\n\t\t\t\t\t\t\tshape.label = shape.text\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!shape.label) {\n\t\t\t\t\t\t\tshape.label = ''\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!shape.labelPoint) {\n\t\t\t\t\t\t\tshape.labelPoint = [0.5, 0.5]\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\t}\n\n\t// Cleanup\n\tObject.values(document.pageStates).forEach((pageState) => {\n\t\tpageState.selectedIds = pageState.selectedIds.filter((id) => {\n\t\t\treturn document.pages[pageState.id].shapes[id] !== undefined\n\t\t})\n\t\tpageState.bindingId = undefined\n\t\tpageState.editingId = undefined\n\t\tpageState.hoveredId = undefined\n\t\tpageState.pointedId = undefined\n\t})\n\n\tdocument.version = newVersion\n\n\treturn document\n}\n\n/* -------------------- TLV1 Types -------------------- */\n\n/** @internal */\nexport interface TLV1Handle {\n\tid: string\n\tindex: number\n\tpoint: number[]\n\tcanBind?: boolean\n\tbindingId?: string\n}\n\n/** @internal */\nexport interface TLV1BaseBinding {\n\tid: string\n\ttoId: string\n\tfromId: string\n}\n\n/** @internal */\nexport enum TLV1ShapeType {\n\tSticky = 'sticky',\n\tEllipse = 'ellipse',\n\tRectangle = 'rectangle',\n\tTriangle = 'triangle',\n\tDraw = 'draw',\n\tArrow = 'arrow',\n\tText = 'text',\n\tGroup = 'group',\n\tImage = 'image',\n\tVideo = 'video',\n}\n\n/** @internal */\nexport enum TLV1ColorStyle {\n\tWhite = 'white',\n\tLightGray = 'lightGray',\n\tGray = 'gray',\n\tBlack = 'black',\n\tGreen = 'green',\n\tCyan = 'cyan',\n\tBlue = 'blue',\n\tIndigo = 'indigo',\n\tViolet = 'violet',\n\tRed = 'red',\n\tOrange = 'orange',\n\tYellow = 'yellow',\n}\n\n/** @internal */\nexport enum TLV1SizeStyle {\n\tSmall = 'small',\n\tMedium = 'medium',\n\tLarge = 'large',\n}\n\n/** @internal */\nexport enum TLV1DashStyle {\n\tDraw = 'draw',\n\tSolid = 'solid',\n\tDashed = 'dashed',\n\tDotted = 'dotted',\n}\n\n/** @internal */\nexport enum TLV1AlignStyle {\n\tStart = 'start',\n\tMiddle = 'middle',\n\tEnd = 'end',\n\tJustify = 'justify',\n}\n\n/** @internal */\nexport enum TLV1FontStyle {\n\tScript = 'script',\n\tSans = 'sans',\n\tSerif = 'serif',\n\tMono = 'mono',\n}\n\n/** @internal */\nexport interface TLV1ShapeStyles {\n\tcolor: TLV1ColorStyle\n\tsize: TLV1SizeStyle\n\tdash: TLV1DashStyle\n\tfont?: TLV1FontStyle\n\ttextAlign?: TLV1AlignStyle\n\tisFilled?: boolean\n\tscale?: number\n}\n\n/** @internal */\nexport interface TLV1BaseShape {\n\tid: string\n\tparentId: string\n\tchildIndex: number\n\tname: string\n\tpoint: number[]\n\tassetId?: string\n\trotation?: number\n\tchildren?: string[]\n\tisGhost?: boolean\n\tisHidden?: boolean\n\tisLocked?: boolean\n\tisGenerated?: boolean\n\tisAspectRatioLocked?: boolean\n\tstyle: TLV1ShapeStyles\n\ttype: TLV1ShapeType\n\tlabel?: string\n\thandles?: Record<string, TLV1Handle>\n}\n\n/** @internal */\nexport interface TLV1DrawShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Draw\n\tpoints: number[][]\n\tisComplete: boolean\n}\n\n/** @internal */\nexport interface TLV1RectangleShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Rectangle\n\tsize: number[]\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\n/** @internal */\nexport interface TLV1EllipseShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Ellipse\n\tradius: number[]\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\n/** @internal */\nexport interface TLV1TriangleShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Triangle\n\tsize: number[]\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\n/** @internal */\nexport enum TLV1Decoration {\n\tArrow = 'arrow',\n}\n\n// The shape created with the arrow tool\n/** @internal */\nexport interface TLV1ArrowShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Arrow\n\tbend: number\n\thandles: {\n\t\tstart: TLV1Handle\n\t\tbend: TLV1Handle\n\t\tend: TLV1Handle\n\t}\n\tdecorations?: {\n\t\tstart?: TLV1Decoration\n\t\tend?: TLV1Decoration\n\t\tmiddle?: TLV1Decoration\n\t}\n\tlabel?: string\n\tlabelPoint?: number[]\n}\n\n/** @internal */\nexport interface TLV1ArrowBinding extends TLV1BaseBinding {\n\thandleId: keyof TLV1ArrowShape['handles']\n\tdistance: number\n\tpoint: number[]\n}\n\n/** @internal */\nexport type TLV1Binding = TLV1ArrowBinding\n\n/** @internal */\nexport interface TLV1ImageShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Image\n\tsize: number[]\n\tassetId: string\n}\n\n/** @internal */\nexport interface TLV1VideoShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Video\n\tsize: number[]\n\tassetId: string\n\tisPlaying: boolean\n\tcurrentTime: number\n}\n\n// The shape created by the text tool\n/** @internal */\nexport interface TLV1TextShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Text\n\ttext: string\n}\n\n// The shape created by the sticky tool\n/** @internal */\nexport interface TLV1StickyShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Sticky\n\tsize: number[]\n\ttext: string\n}\n\n// The shape created when multiple shapes are grouped\n/** @internal */\nexport interface TLV1GroupShape extends TLV1BaseShape {\n\ttype: TLV1ShapeType.Group\n\tsize: number[]\n\tchildren: string[]\n}\n\n/** @internal */\nexport type TLV1Shape =\n\t| TLV1RectangleShape\n\t| TLV1EllipseShape\n\t| TLV1TriangleShape\n\t| TLV1DrawShape\n\t| TLV1ArrowShape\n\t| TLV1TextShape\n\t| TLV1GroupShape\n\t| TLV1StickyShape\n\t| TLV1ImageShape\n\t| TLV1VideoShape\n\n/** @internal */\nexport interface TLV1Page {\n\tid: string\n\tname?: string\n\tchildIndex?: number\n\tshapes: Record<string, TLV1Shape>\n\tbindings: Record<string, TLV1Binding>\n}\n\n/** @internal */\nexport interface TLV1Bounds {\n\tminX: number\n\tminY: number\n\tmaxX: number\n\tmaxY: number\n\twidth: number\n\theight: number\n\trotation?: number\n}\n\n/** @internal */\nexport interface TLV1PageState {\n\tid: string\n\tselectedIds: string[]\n\tcamera: {\n\t\tpoint: number[]\n\t\tzoom: number\n\t}\n\tbrush?: TLV1Bounds | null\n\tpointedId?: string | null\n\thoveredId?: string | null\n\teditingId?: string | null\n\tbindingId?: string | null\n}\n\n/** @internal */\nexport enum TLV1AssetType {\n\tImage = 'image',\n\tVideo = 'video',\n}\n\n/** @internal */\nexport interface TLV1ImageAsset extends TLV1BaseAsset {\n\ttype: TLV1AssetType.Image\n\tfileName: string\n\tsrc: string\n\tsize: number[]\n}\n\n/** @internal */\nexport interface TLV1VideoAsset extends TLV1BaseAsset {\n\ttype: TLV1AssetType.Video\n\tfileName: string\n\tsrc: string\n\tsize: number[]\n}\n\n/** @internal */\nexport interface TLV1BaseAsset {\n\tid: string\n\ttype: string\n}\n\n/** @internal */\nexport type TLV1Asset = TLV1ImageAsset | TLV1VideoAsset\n\n/** @internal */\nexport interface TLV1Document {\n\tid: string\n\tname: string\n\tversion: number\n\tpages: Record<string, TLV1Page>\n\tpageStates: Record<string, TLV1PageState>\n\tassets: Record<string, TLV1Asset>\n}\n\n/* ------------------ Translations ------------------ */\n\nconst v1ColorsToV2Colors: Record<TLV1ColorStyle, TLDefaultColorStyle> = {\n\t[TLV1ColorStyle.White]: 'black',\n\t[TLV1ColorStyle.Black]: 'black',\n\t[TLV1ColorStyle.LightGray]: 'grey',\n\t[TLV1ColorStyle.Gray]: 'grey',\n\t[TLV1ColorStyle.Green]: 'light-green',\n\t[TLV1ColorStyle.Cyan]: 'green',\n\t[TLV1ColorStyle.Blue]: 'light-blue',\n\t[TLV1ColorStyle.Indigo]: 'blue',\n\t[TLV1ColorStyle.Orange]: 'orange',\n\t[TLV1ColorStyle.Yellow]: 'yellow',\n\t[TLV1ColorStyle.Red]: 'red',\n\t[TLV1ColorStyle.Violet]: 'light-violet',\n}\n\nconst v1FontsToV2Fonts: Record<TLV1FontStyle, TLDefaultFontStyle> = {\n\t[TLV1FontStyle.Mono]: 'mono',\n\t[TLV1FontStyle.Sans]: 'sans',\n\t[TLV1FontStyle.Script]: 'draw',\n\t[TLV1FontStyle.Serif]: 'serif',\n}\n\nconst v1AlignsToV2Aligns: Record<TLV1AlignStyle, TLDefaultHorizontalAlignStyle> = {\n\t[TLV1AlignStyle.Start]: 'start',\n\t[TLV1AlignStyle.Middle]: 'middle',\n\t[TLV1AlignStyle.End]: 'end',\n\t[TLV1AlignStyle.Justify]: 'start',\n}\n\nconst v1TextAlignsToV2TextAligns: Record<TLV1AlignStyle, TLDefaultTextAlignStyle> = {\n\t[TLV1AlignStyle.Start]: 'start',\n\t[TLV1AlignStyle.Middle]: 'middle',\n\t[TLV1AlignStyle.End]: 'end',\n\t[TLV1AlignStyle.Justify]: 'start',\n}\n\nconst v1TextSizesToV2TextSizes: Record<TLV1SizeStyle, TLDefaultSizeStyle> = {\n\t[TLV1SizeStyle.Small]: 's',\n\t[TLV1SizeStyle.Medium]: 'l',\n\t[TLV1SizeStyle.Large]: 'xl',\n}\n\nconst v1SizesToV2Sizes: Record<TLV1SizeStyle, TLDefaultSizeStyle> = {\n\t[TLV1SizeStyle.Small]: 'm',\n\t[TLV1SizeStyle.Medium]: 'l',\n\t[TLV1SizeStyle.Large]: 'xl',\n}\n\nconst v1DashesToV2Dashes: Record<TLV1DashStyle, TLDefaultDashStyle> = {\n\t[TLV1DashStyle.Solid]: 'solid',\n\t[TLV1DashStyle.Dashed]: 'dashed',\n\t[TLV1DashStyle.Dotted]: 'dotted',\n\t[TLV1DashStyle.Draw]: 'draw',\n}\n\nfunction getV2Color(color: TLV1ColorStyle | undefined): TLDefaultColorStyle {\n\treturn color ? (v1ColorsToV2Colors[color] ?? 'black') : 'black'\n}\n\nfunction getV2Font(font: TLV1FontStyle | undefined): TLDefaultFontStyle {\n\treturn font ? (v1FontsToV2Fonts[font] ?? 'draw') : 'draw'\n}\n\nfunction getV2Align(align: TLV1AlignStyle | undefined): TLDefaultHorizontalAlignStyle {\n\treturn align ? (v1AlignsToV2Aligns[align] ?? 'middle') : 'middle'\n}\n\nfunction getV2TextAlign(align: TLV1AlignStyle | undefined): TLDefaultTextAlignStyle {\n\treturn align ? (v1TextAlignsToV2TextAligns[align] ?? 'middle') : 'middle'\n}\n\nfunction getV2TextSize(size: TLV1SizeStyle | undefined): TLDefaultSizeStyle {\n\treturn size ? (v1TextSizesToV2TextSizes[size] ?? 'm') : 'm'\n}\n\nfunction getV2Size(size: TLV1SizeStyle | undefined): TLDefaultSizeStyle {\n\treturn size ? (v1SizesToV2Sizes[size] ?? 'l') : 'l'\n}\n\nfunction getV2Dash(dash: TLV1DashStyle | undefined): TLDefaultDashStyle {\n\treturn dash ? (v1DashesToV2Dashes[dash] ?? 'draw') : 'draw'\n}\n\nfunction getV2Point(point: number[]): VecModel {\n\treturn {\n\t\tx: coerceNumber(point[0]),\n\t\ty: coerceNumber(point[1]),\n\t\tz: point[2] == null ? 0.5 : coerceNumber(point[2]),\n\t}\n}\n\nfunction getV2Arrowhead(decoration: TLV1Decoration | undefined): TLArrowShapeArrowheadStyle {\n\treturn decoration === TLV1Decoration.Arrow ? 'arrow' : 'none'\n}\n\nfunction getV2Fill(isFilled: boolean | undefined, color: TLV1ColorStyle) {\n\treturn isFilled\n\t\t? color === TLV1ColorStyle.Black || color === TLV1ColorStyle.White\n\t\t\t? 'semi'\n\t\t\t: 'solid'\n\t\t: 'none'\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["bounds", "TLV1ShapeType", "TLV1ColorStyle", "TLV1SizeStyle", "TLV1DashStyle", "TLV1AlignStyle", "TLV1FontStyle", "TLV1Decoration", "TLV1AssetType"]
|
|
7
7
|
}
|