tldraw 4.3.0-canary.9c474ef3fad5 → 4.3.0-canary.a2419250444e
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 +285 -237
- package/dist-cjs/index.js +12 -5
- package/dist-cjs/index.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 +6 -2
- package/dist-cjs/lib/shapes/arrow/ArrowShapeUtil.js.map +2 -2
- 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 +22 -20
- 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 +5 -4
- package/dist-cjs/lib/shapes/frame/FrameShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/geo/GeoShapeUtil.js +136 -136
- 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 +22 -20
- 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 +1 -6
- 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 +1 -1
- package/dist-cjs/lib/shapes/shared/HyperlinkButton.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/RichTextLabel.js +1 -1
- package/dist-cjs/lib/shapes/shared/RichTextLabel.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/text/RichTextArea.js +5 -0
- package/dist-cjs/lib/shapes/text/RichTextArea.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/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/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/BackToContent.js +1 -1
- package/dist-cjs/lib/ui/components/HelperButtons/BackToContent.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/ZoomMenu/DefaultZoomMenu.js +1 -1
- package/dist-cjs/lib/ui/components/ZoomMenu/DefaultZoomMenu.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 +13 -6
- 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 +285 -237
- package/dist-esm/index.mjs +12 -5
- package/dist-esm/index.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 +6 -2
- 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 +27 -22
- 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 +5 -4
- package/dist-esm/lib/shapes/frame/FrameShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/geo/GeoShapeUtil.mjs +137 -136
- 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 +23 -21
- 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 +2 -7
- 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 +1 -1
- package/dist-esm/lib/shapes/shared/HyperlinkButton.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/RichTextLabel.mjs +1 -1
- package/dist-esm/lib/shapes/shared/RichTextLabel.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/text/RichTextArea.mjs +5 -0
- package/dist-esm/lib/shapes/text/RichTextArea.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/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/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/BackToContent.mjs +1 -1
- package/dist-esm/lib/ui/components/HelperButtons/BackToContent.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/ZoomMenu/DefaultZoomMenu.mjs +1 -1
- package/dist-esm/lib/ui/components/ZoomMenu/DefaultZoomMenu.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 +13 -6
- 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/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 +6 -4
- 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 +28 -24
- 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 +9 -3
- package/src/lib/shapes/geo/GeoShapeUtil.tsx +219 -172
- 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 +24 -23
- package/src/lib/shapes/line/toolStates/Pointing.ts +3 -3
- package/src/lib/shapes/note/NoteShapeUtil.tsx +2 -2
- 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 +1 -1
- package/src/lib/shapes/shared/RichTextLabel.tsx +1 -1
- package/src/lib/shapes/shared/interpolate-props.ts +4 -4
- package/src/lib/shapes/text/RichTextArea.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/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/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/BackToContent.tsx +1 -1
- 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/ZoomMenu/DefaultZoomMenu.tsx +1 -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 +5 -2
- 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 +8 -8
- 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/src/test/ui/BackToContent.test.tsx +111 -0
- package/tldraw.css +33 -31
- 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/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/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
|
@@ -3,8 +3,10 @@ import { Popover as _Popover } from 'radix-ui'
|
|
|
3
3
|
import { ReactNode } from 'react'
|
|
4
4
|
import { PORTRAIT_BREAKPOINT } from '../../constants'
|
|
5
5
|
import { useBreakpoint } from '../../context/breakpoints'
|
|
6
|
+
import { useCollaborationStatus } from '../../hooks/useCollaborationStatus'
|
|
6
7
|
import { useMenuIsOpen } from '../../hooks/useMenuIsOpen'
|
|
7
8
|
import { useTranslation } from '../../hooks/useTranslation/useTranslation'
|
|
9
|
+
import { OfflineIndicator } from '../OfflineIndicator/OfflineIndicator'
|
|
8
10
|
import { PeopleMenuAvatar } from './PeopleMenuAvatar'
|
|
9
11
|
import { PeopleMenuItem } from './PeopleMenuItem'
|
|
10
12
|
import { PeopleMenuMore } from './PeopleMenuMore'
|
|
@@ -30,6 +32,12 @@ export function PeopleMenu({ children }: PeopleMenuProps) {
|
|
|
30
32
|
const breakpoint = useBreakpoint()
|
|
31
33
|
const maxAvatars = breakpoint <= PORTRAIT_BREAKPOINT.MOBILE_XS ? 1 : 5
|
|
32
34
|
|
|
35
|
+
const collaborationStatus = useCollaborationStatus()
|
|
36
|
+
|
|
37
|
+
if (collaborationStatus === 'offline') {
|
|
38
|
+
return <OfflineIndicator />
|
|
39
|
+
}
|
|
40
|
+
|
|
33
41
|
if (!userIds.length) return null
|
|
34
42
|
|
|
35
43
|
return (
|
|
@@ -63,7 +63,7 @@ function ContextualToolbarInner({
|
|
|
63
63
|
)
|
|
64
64
|
const camera = useValue('camera', () => editor.getCamera(), [editor])
|
|
65
65
|
const isInCropTool = useValue('editor path', () => editor.isIn('select.crop.'), [editor])
|
|
66
|
-
const previousSelectionBounds = useRef<Box | undefined>()
|
|
66
|
+
const previousSelectionBounds = useRef<Box | undefined>(undefined)
|
|
67
67
|
const handleManipulatingEnd = useCallback(() => {
|
|
68
68
|
editor.setCroppingShape(null)
|
|
69
69
|
editor.setCurrentTool('select.idle')
|
|
@@ -38,7 +38,7 @@ function ContextualToolbarInner({
|
|
|
38
38
|
}) {
|
|
39
39
|
const { isEditingLink, onEditLinkStart, onEditLinkClose } = useEditingLinkBehavior(textEditor)
|
|
40
40
|
const [currentSelection, setCurrentSelection] = useState<Range | null>(null)
|
|
41
|
-
const previousSelectionBounds = useRef<Box | undefined>()
|
|
41
|
+
const previousSelectionBounds = useRef<Box | undefined>(undefined)
|
|
42
42
|
const isMousingDown = useIsMousingDownOnTextEditor(textEditor)
|
|
43
43
|
const msg = useTranslation()
|
|
44
44
|
|
|
@@ -48,7 +48,7 @@ export const DefaultZoomMenu = memo(function DefaultZoomMenu({ children }: TLUiZ
|
|
|
48
48
|
const ZoomTriggerButton = () => {
|
|
49
49
|
const editor = useEditor()
|
|
50
50
|
const breakpoint = useBreakpoint()
|
|
51
|
-
const zoom = useValue('zoom', () => editor.
|
|
51
|
+
const zoom = useValue('zoom', () => editor.getZoomLevel(), [editor])
|
|
52
52
|
const msg = useTranslation()
|
|
53
53
|
|
|
54
54
|
const handleDoubleClick = useCallback(() => {
|
|
@@ -52,8 +52,8 @@ export const TldrawUiContextualToolbar = ({
|
|
|
52
52
|
const editor = useEditor()
|
|
53
53
|
const toolbarRef = useRef<HTMLDivElement>(null)
|
|
54
54
|
|
|
55
|
-
usePassThroughWheelEvents(toolbarRef as RefObject<HTMLDivElement>)
|
|
56
|
-
usePassThroughMouseOverEvents(toolbarRef as RefObject<HTMLDivElement>)
|
|
55
|
+
usePassThroughWheelEvents(toolbarRef as RefObject<HTMLDivElement | null>)
|
|
56
|
+
usePassThroughMouseOverEvents(toolbarRef as RefObject<HTMLDivElement | null>)
|
|
57
57
|
|
|
58
58
|
const { isVisible, isInteractive, hide, show, position, move } =
|
|
59
59
|
useToolbarVisibilityStateMachine(changeOnlyWhenYChanges)
|
|
@@ -105,7 +105,9 @@ export const TldrawUiContextualToolbar = ({
|
|
|
105
105
|
// to have the last updated position in page space, so that we could convert
|
|
106
106
|
// it to screen space and update it here
|
|
107
107
|
const elm = toolbarRef.current
|
|
108
|
-
|
|
108
|
+
if (elm) {
|
|
109
|
+
elm.style.setProperty('transform', `translate(${position.x}px, ${position.y}px)`)
|
|
110
|
+
}
|
|
109
111
|
} else {
|
|
110
112
|
const moveImmediately = lastContentSizeUpdateCounter !== nextContentSizeUpdateCounter
|
|
111
113
|
// Schedule a move to its next location
|
|
@@ -410,8 +410,15 @@ export const TldrawUiTooltip = forwardRef<HTMLButtonElement, TldrawUiTooltipProp
|
|
|
410
410
|
const child = React.Children.only(children)
|
|
411
411
|
assert(React.isValidElement(child), 'TldrawUiTooltip children must be a single element')
|
|
412
412
|
|
|
413
|
+
const childElement = child as React.ReactElement<{
|
|
414
|
+
onMouseEnter?(event: React.MouseEvent<HTMLElement>): void
|
|
415
|
+
onMouseLeave?(event: React.MouseEvent<HTMLElement>): void
|
|
416
|
+
onFocus?(event: React.FocusEvent<HTMLElement>): void
|
|
417
|
+
onBlur?(event: React.FocusEvent<HTMLElement>): void
|
|
418
|
+
}>
|
|
419
|
+
|
|
413
420
|
const handleMouseEnter = (event: React.MouseEvent<HTMLElement>) => {
|
|
414
|
-
|
|
421
|
+
childElement.props.onMouseEnter?.(event)
|
|
415
422
|
tooltipManager.handleEvent({
|
|
416
423
|
type: 'show',
|
|
417
424
|
tooltip: {
|
|
@@ -427,7 +434,7 @@ export const TldrawUiTooltip = forwardRef<HTMLButtonElement, TldrawUiTooltipProp
|
|
|
427
434
|
}
|
|
428
435
|
|
|
429
436
|
const handleMouseLeave = (event: React.MouseEvent<HTMLElement>) => {
|
|
430
|
-
|
|
437
|
+
childElement.props.onMouseLeave?.(event)
|
|
431
438
|
tooltipManager.handleEvent({
|
|
432
439
|
type: 'hide',
|
|
433
440
|
tooltipId: tooltipId.current,
|
|
@@ -437,7 +444,7 @@ export const TldrawUiTooltip = forwardRef<HTMLButtonElement, TldrawUiTooltipProp
|
|
|
437
444
|
}
|
|
438
445
|
|
|
439
446
|
const handleFocus = (event: React.FocusEvent<HTMLElement>) => {
|
|
440
|
-
|
|
447
|
+
childElement.props.onFocus?.(event)
|
|
441
448
|
tooltipManager.handleEvent({
|
|
442
449
|
type: 'show',
|
|
443
450
|
tooltip: {
|
|
@@ -453,7 +460,7 @@ export const TldrawUiTooltip = forwardRef<HTMLButtonElement, TldrawUiTooltipProp
|
|
|
453
460
|
}
|
|
454
461
|
|
|
455
462
|
const handleBlur = (event: React.FocusEvent<HTMLElement>) => {
|
|
456
|
-
|
|
463
|
+
childElement.props.onBlur?.(event)
|
|
457
464
|
tooltipManager.handleEvent({
|
|
458
465
|
type: 'hide',
|
|
459
466
|
tooltipId: tooltipId.current,
|
|
@@ -462,7 +469,7 @@ export const TldrawUiTooltip = forwardRef<HTMLButtonElement, TldrawUiTooltipProp
|
|
|
462
469
|
})
|
|
463
470
|
}
|
|
464
471
|
|
|
465
|
-
const childrenWithHandlers = React.cloneElement(
|
|
472
|
+
const childrenWithHandlers = React.cloneElement(childElement, {
|
|
466
473
|
onMouseEnter: handleMouseEnter,
|
|
467
474
|
onMouseLeave: handleMouseLeave,
|
|
468
475
|
onFocus: handleFocus,
|
|
@@ -17,5 +17,5 @@ export function TldrawUiMenuActionCheckboxItem({
|
|
|
17
17
|
const actions = useActions()
|
|
18
18
|
const action = actions[actionId]
|
|
19
19
|
if (!action) return null
|
|
20
|
-
return <TldrawUiMenuCheckboxItem {...action} {...rest} />
|
|
20
|
+
return <TldrawUiMenuCheckboxItem {...(action as TLUiMenuCheckboxItemProps)} {...rest} />
|
|
21
21
|
}
|
|
@@ -11,5 +11,5 @@ export function TldrawUiMenuActionItem({ actionId = '', ...rest }: TLUiMenuActio
|
|
|
11
11
|
const actions = useActions()
|
|
12
12
|
const action = actions[actionId]
|
|
13
13
|
if (!action) return null
|
|
14
|
-
return <TldrawUiMenuItem {...action} {...rest} />
|
|
14
|
+
return <TldrawUiMenuItem {...(action as TLUiMenuItemProps)} {...rest} />
|
|
15
15
|
}
|
|
@@ -134,7 +134,6 @@ export function TldrawUiMenuItem<
|
|
|
134
134
|
{iconLeft && <TldrawUiButtonIcon icon={iconLeft} small />}
|
|
135
135
|
<TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>
|
|
136
136
|
{kbd && <TldrawUiKbd>{kbd}</TldrawUiKbd>}
|
|
137
|
-
{icon && <TldrawUiButtonIcon icon={icon} small />}
|
|
138
137
|
</TldrawUiButton>
|
|
139
138
|
</TldrawUiDropdownMenuItem>
|
|
140
139
|
)
|
|
@@ -200,7 +199,11 @@ export function TldrawUiMenuItem<
|
|
|
200
199
|
}
|
|
201
200
|
case 'helper-buttons': {
|
|
202
201
|
return (
|
|
203
|
-
<TldrawUiButton
|
|
202
|
+
<TldrawUiButton
|
|
203
|
+
type="low"
|
|
204
|
+
data-testid={`${sourceId}.${id}`}
|
|
205
|
+
onClick={() => onSelect(sourceId)}
|
|
206
|
+
>
|
|
204
207
|
<TldrawUiButtonIcon icon={icon!} />
|
|
205
208
|
<TldrawUiButtonLabel>{labelStr}</TldrawUiButtonLabel>
|
|
206
209
|
</TldrawUiButton>
|
|
@@ -375,7 +375,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
375
375
|
if (editor.root.getCurrent()?.id === 'zoom') return
|
|
376
376
|
|
|
377
377
|
trackEvent('zoom-tool', { source })
|
|
378
|
-
if (!(editor.inputs.
|
|
378
|
+
if (!(editor.inputs.getShiftKey() || editor.inputs.getCtrlKey())) {
|
|
379
379
|
const currentTool = editor.root.getCurrent()
|
|
380
380
|
if (currentTool && currentTool.getCurrent()?.id === 'idle') {
|
|
381
381
|
editor.setCurrentTool('zoom', { onInteractionEnd: currentTool.id, maskAs: 'zoom' })
|
|
@@ -973,7 +973,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
973
973
|
helpers.paste(
|
|
974
974
|
clipboardItems,
|
|
975
975
|
source,
|
|
976
|
-
source === 'context-menu' ? editor.inputs.
|
|
976
|
+
source === 'context-menu' ? editor.inputs.getCurrentPagePoint() : undefined
|
|
977
977
|
)
|
|
978
978
|
})
|
|
979
979
|
.catch(() => {
|
|
@@ -1037,7 +1037,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1037
1037
|
if (!canApplySelectionAction()) return
|
|
1038
1038
|
if (mustGoBackToSelectToolFirst()) return
|
|
1039
1039
|
|
|
1040
|
-
const isFine = editor.inputs.
|
|
1040
|
+
const isFine = editor.inputs.getAltKey()
|
|
1041
1041
|
trackEvent('rotate-cw', { source, fine: isFine })
|
|
1042
1042
|
editor.markHistoryStoppingPoint('rotate-cw')
|
|
1043
1043
|
editor.run(() => {
|
|
@@ -1060,7 +1060,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1060
1060
|
if (!canApplySelectionAction()) return
|
|
1061
1061
|
if (mustGoBackToSelectToolFirst()) return
|
|
1062
1062
|
|
|
1063
|
-
const isFine = editor.inputs.
|
|
1063
|
+
const isFine = editor.inputs.getAltKey()
|
|
1064
1064
|
trackEvent('rotate-ccw', { source, fine: isFine })
|
|
1065
1065
|
editor.markHistoryStoppingPoint('rotate-ccw')
|
|
1066
1066
|
editor.run(() => {
|
|
@@ -1092,7 +1092,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1092
1092
|
readonlyOk: true,
|
|
1093
1093
|
onSelect(source) {
|
|
1094
1094
|
trackEvent('zoom-in', { source, towardsCursor: true })
|
|
1095
|
-
editor.zoomIn(editor.inputs.
|
|
1095
|
+
editor.zoomIn(editor.inputs.getCurrentScreenPoint(), {
|
|
1096
1096
|
animation: { duration: editor.options.animationMediumMs },
|
|
1097
1097
|
})
|
|
1098
1098
|
},
|
|
@@ -1116,7 +1116,7 @@ export function ActionsProvider({ overrides, children }: ActionsProviderProps) {
|
|
|
1116
1116
|
readonlyOk: true,
|
|
1117
1117
|
onSelect(source) {
|
|
1118
1118
|
trackEvent('zoom-out', { source, towardsCursor: true })
|
|
1119
|
-
editor.zoomOut(editor.inputs.
|
|
1119
|
+
editor.zoomOut(editor.inputs.getCurrentScreenPoint(), {
|
|
1120
1120
|
animation: { duration: editor.options.animationMediumMs },
|
|
1121
1121
|
})
|
|
1122
1122
|
},
|
|
@@ -42,7 +42,6 @@ import {
|
|
|
42
42
|
} from '../components/Toolbar/DefaultRichTextToolbar'
|
|
43
43
|
import { DefaultToolbar } from '../components/Toolbar/DefaultToolbar'
|
|
44
44
|
import { DefaultVideoToolbar } from '../components/Toolbar/DefaultVideoToolbar'
|
|
45
|
-
import { DefaultTopPanel } from '../components/TopPanel/DefaultTopPanel'
|
|
46
45
|
import { DefaultZoomMenu, TLUiZoomMenuProps } from '../components/ZoomMenu/DefaultZoomMenu'
|
|
47
46
|
import { useShowCollaborationUi } from '../hooks/useCollaborationStatus'
|
|
48
47
|
|
|
@@ -117,7 +116,7 @@ export function TldrawUiComponentsProvider({
|
|
|
117
116
|
MenuPanel: DefaultMenuPanel,
|
|
118
117
|
SharePanel: showCollaborationUi ? DefaultSharePanel : null,
|
|
119
118
|
CursorChatBubble: showCollaborationUi ? CursorChatBubble : null,
|
|
120
|
-
TopPanel:
|
|
119
|
+
TopPanel: null,
|
|
121
120
|
Dialogs: DefaultDialogs,
|
|
122
121
|
Toasts: DefaultToasts,
|
|
123
122
|
A11y: DefaultA11yAnnouncer,
|
|
@@ -783,9 +783,9 @@ export function useNativeClipboardEvents() {
|
|
|
783
783
|
// | Y | N | Y |
|
|
784
784
|
// | N | Y | Y |
|
|
785
785
|
// | Y | Y | N |
|
|
786
|
-
if (editor.inputs.
|
|
786
|
+
if (editor.inputs.getShiftKey()) pasteAtCursor = true
|
|
787
787
|
if (editor.user.getIsPasteAtCursorMode()) pasteAtCursor = !pasteAtCursor
|
|
788
|
-
if (pasteAtCursor) point = editor.inputs.
|
|
788
|
+
if (pasteAtCursor) point = editor.inputs.getCurrentPagePoint()
|
|
789
789
|
|
|
790
790
|
const pasteFromEvent = () => {
|
|
791
791
|
if (e.clipboardData) {
|
|
@@ -93,7 +93,7 @@ export function useKeyboardShortcuts() {
|
|
|
93
93
|
|
|
94
94
|
editor.inputs.keys.add('Comma')
|
|
95
95
|
|
|
96
|
-
const { x, y, z } = editor.inputs.
|
|
96
|
+
const { x, y, z } = editor.inputs.getCurrentPagePoint()
|
|
97
97
|
const screenpoints = editor.pageToScreen({ x, y })
|
|
98
98
|
|
|
99
99
|
const info: TLPointerEventInfo = {
|
|
@@ -120,7 +120,7 @@ export function useKeyboardShortcuts() {
|
|
|
120
120
|
|
|
121
121
|
editor.inputs.keys.delete('Comma')
|
|
122
122
|
|
|
123
|
-
const { x, y, z } = editor.inputs.
|
|
123
|
+
const { x, y, z } = editor.inputs.getCurrentScreenPoint()
|
|
124
124
|
const info: TLPointerEventInfo = {
|
|
125
125
|
type: 'pointer',
|
|
126
126
|
name: 'pointer_up',
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
useMaybeEditor,
|
|
11
11
|
} from '@tldraw/editor'
|
|
12
12
|
import * as React from 'react'
|
|
13
|
+
import { startEditingShapeWithRichText } from '../../tools/SelectTool/selectHelpers'
|
|
13
14
|
import { EmbedDialog } from '../components/EmbedDialog'
|
|
14
15
|
import { TLUiIconJsx } from '../components/primitives/TldrawUiIcon'
|
|
15
16
|
import { useA11y } from '../context/a11y'
|
|
@@ -239,8 +240,7 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
|
|
|
239
240
|
createShape: (id) =>
|
|
240
241
|
editor.createShape({ id, type: 'text', props: { richText: toRichText('Text') } }),
|
|
241
242
|
onDragEnd: (id) => {
|
|
242
|
-
editor
|
|
243
|
-
editor.emit('select-all-text', { shapeId: id })
|
|
243
|
+
startEditingShapeWithRichText(editor, id, { selectAll: true })
|
|
244
244
|
},
|
|
245
245
|
})
|
|
246
246
|
trackEvent('drag-tool', { source, id: 'text' })
|
|
@@ -269,8 +269,7 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
|
|
|
269
269
|
onDragFromToolbarToCreateShape(editor, info, {
|
|
270
270
|
createShape: (id) => editor.createShape({ id, type: 'note' }),
|
|
271
271
|
onDragEnd: (id) => {
|
|
272
|
-
editor
|
|
273
|
-
editor.emit('select-all-text', { shapeId: id })
|
|
272
|
+
startEditingShapeWithRichText(editor, id, { selectAll: true })
|
|
274
273
|
},
|
|
275
274
|
})
|
|
276
275
|
trackEvent('drag-tool', { source, id: 'note' })
|
|
@@ -360,7 +359,7 @@ export function onDragFromToolbarToCreateShape(
|
|
|
360
359
|
info: TLPointerEventInfo,
|
|
361
360
|
opts: OnDragFromToolbarToCreateShapesOpts
|
|
362
361
|
) {
|
|
363
|
-
const { x, y } = editor.inputs.
|
|
362
|
+
const { x, y } = editor.inputs.getCurrentPagePoint()
|
|
364
363
|
|
|
365
364
|
const stoppingPoint = editor.markHistoryStoppingPoint('drag shape tool')
|
|
366
365
|
editor.setCurrentTool('select.translating')
|
package/src/lib/ui/version.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// This file is automatically generated by internal/scripts/refresh-assets.ts.
|
|
2
2
|
// Do not edit manually. Or do, I'm a comment, not a cop.
|
|
3
3
|
|
|
4
|
-
export const version = '4.3.0-canary.
|
|
4
|
+
export const version = '4.3.0-canary.a2419250444e'
|
|
5
5
|
export const publishDates = {
|
|
6
6
|
major: '2025-09-18T14:39:22.803Z',
|
|
7
|
-
minor: '
|
|
8
|
-
patch: '
|
|
7
|
+
minor: '2026-01-07T11:52:01.977Z',
|
|
8
|
+
patch: '2026-01-07T11:52:01.977Z',
|
|
9
9
|
}
|
package/src/lib/ui.css
CHANGED
|
@@ -609,25 +609,31 @@
|
|
|
609
609
|
|
|
610
610
|
/* Submenu triggers */
|
|
611
611
|
|
|
612
|
-
.tlui-menu__submenu__trigger
|
|
613
|
-
|
|
614
|
-
background: linear-gradient(90deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
612
|
+
.tlui-menu__submenu__trigger {
|
|
613
|
+
--gradient-angle: 90deg;
|
|
615
614
|
}
|
|
616
615
|
|
|
617
|
-
.tlui-menu__submenu__trigger[data-direction='left']
|
|
616
|
+
.tlui-menu__submenu__trigger[data-direction='left'] {
|
|
617
|
+
--gradient-angle: 270deg;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
.tlui-menu__submenu__trigger[data-state='open']::after {
|
|
618
621
|
opacity: 1;
|
|
619
|
-
background: linear-gradient(
|
|
622
|
+
background: linear-gradient(
|
|
623
|
+
var(--gradient-angle),
|
|
624
|
+
rgba(144, 144, 144, 0) 0%,
|
|
625
|
+
var(--tl-color-muted-2) 100%
|
|
626
|
+
);
|
|
620
627
|
}
|
|
621
628
|
|
|
622
629
|
@media (hover: hover) {
|
|
623
|
-
.tlui-menu__submenu__trigger[data-state='open']
|
|
630
|
+
.tlui-menu__submenu__trigger:is(:hover, [data-state='open'])::after {
|
|
624
631
|
opacity: 1;
|
|
625
|
-
background: linear-gradient(
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--tl-color-muted-2) 100%);
|
|
632
|
+
background: linear-gradient(
|
|
633
|
+
var(--gradient-angle),
|
|
634
|
+
rgba(144, 144, 144, 0) 0%,
|
|
635
|
+
var(--tl-color-muted-2) 100%
|
|
636
|
+
);
|
|
631
637
|
}
|
|
632
638
|
}
|
|
633
639
|
|
|
@@ -906,10 +912,8 @@
|
|
|
906
912
|
}
|
|
907
913
|
}
|
|
908
914
|
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
opacity: 1;
|
|
912
|
-
}
|
|
915
|
+
.tl-container[data-coarse='true'] .tlui-page_menu__item__submenu > .tlui-button {
|
|
916
|
+
opacity: 1;
|
|
913
917
|
}
|
|
914
918
|
|
|
915
919
|
.tlui-button__icon {
|
|
@@ -948,16 +952,15 @@
|
|
|
948
952
|
|
|
949
953
|
.tlui-offline-indicator {
|
|
950
954
|
display: flex;
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
padding: 0px var(--tl-space-5);
|
|
957
|
-
height: 42px;
|
|
955
|
+
color: var(--tl-color-background);
|
|
956
|
+
background-color: var(--tl-color-text);
|
|
957
|
+
border: none;
|
|
958
|
+
width: 32px;
|
|
959
|
+
height: 32px;
|
|
958
960
|
align-items: center;
|
|
959
961
|
justify-content: center;
|
|
960
962
|
border-radius: 99px;
|
|
963
|
+
cursor: default;
|
|
961
964
|
opacity: 0;
|
|
962
965
|
animation: tl-fade-in;
|
|
963
966
|
animation-duration: 0.12s;
|
|
@@ -1275,6 +1278,7 @@ tldraw? probably.
|
|
|
1275
1278
|
position: relative;
|
|
1276
1279
|
background: var(--tl-color-panel);
|
|
1277
1280
|
box-shadow: var(--tl-shadow-2);
|
|
1281
|
+
contain: layout style paint;
|
|
1278
1282
|
}
|
|
1279
1283
|
|
|
1280
1284
|
.tlui-main-toolbar--horizontal .tlui-main-toolbar__mobile-style-panel {
|
|
@@ -730,20 +730,11 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
730
730
|
"isComplete": false,
|
|
731
731
|
"isPen": false,
|
|
732
732
|
"scale": 1,
|
|
733
|
+
"scaleX": 1,
|
|
734
|
+
"scaleY": 1,
|
|
733
735
|
"segments": [
|
|
734
736
|
{
|
|
735
|
-
"points":
|
|
736
|
-
{
|
|
737
|
-
"x": 0,
|
|
738
|
-
"y": 0,
|
|
739
|
-
"z": 0.5,
|
|
740
|
-
},
|
|
741
|
-
{
|
|
742
|
-
"x": 0.0001,
|
|
743
|
-
"y": 0.0001,
|
|
744
|
-
"z": 0.5,
|
|
745
|
-
},
|
|
746
|
-
],
|
|
737
|
+
"points": "AAAAAAA4jgaOBgA4",
|
|
747
738
|
"type": "free",
|
|
748
739
|
},
|
|
749
740
|
],
|
|
@@ -770,20 +761,11 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
770
761
|
"isComplete": false,
|
|
771
762
|
"isPen": false,
|
|
772
763
|
"scale": 1,
|
|
764
|
+
"scaleX": 1,
|
|
765
|
+
"scaleY": 1,
|
|
773
766
|
"segments": [
|
|
774
767
|
{
|
|
775
|
-
"points":
|
|
776
|
-
{
|
|
777
|
-
"x": 0,
|
|
778
|
-
"y": 0,
|
|
779
|
-
"z": 0.5,
|
|
780
|
-
},
|
|
781
|
-
{
|
|
782
|
-
"x": 0.0001,
|
|
783
|
-
"y": 0.0001,
|
|
784
|
-
"z": 0.5,
|
|
785
|
-
},
|
|
786
|
-
],
|
|
768
|
+
"points": "AAAAAAA4jgaOBgA4",
|
|
787
769
|
"type": "free",
|
|
788
770
|
},
|
|
789
771
|
],
|
|
@@ -1393,20 +1375,11 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
1393
1375
|
"isComplete": false,
|
|
1394
1376
|
"isPen": false,
|
|
1395
1377
|
"scale": 1,
|
|
1378
|
+
"scaleX": 1,
|
|
1379
|
+
"scaleY": 1,
|
|
1396
1380
|
"segments": [
|
|
1397
1381
|
{
|
|
1398
|
-
"points":
|
|
1399
|
-
{
|
|
1400
|
-
"x": 0,
|
|
1401
|
-
"y": 0,
|
|
1402
|
-
"z": 0.5,
|
|
1403
|
-
},
|
|
1404
|
-
{
|
|
1405
|
-
"x": 0.0001,
|
|
1406
|
-
"y": 0.0001,
|
|
1407
|
-
"z": 0.5,
|
|
1408
|
-
},
|
|
1409
|
-
],
|
|
1382
|
+
"points": "AAAAAAA4jgaOBgA4",
|
|
1410
1383
|
"type": "free",
|
|
1411
1384
|
},
|
|
1412
1385
|
],
|
|
@@ -1433,20 +1406,11 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
|
|
|
1433
1406
|
"isComplete": false,
|
|
1434
1407
|
"isPen": false,
|
|
1435
1408
|
"scale": 1,
|
|
1409
|
+
"scaleX": 1,
|
|
1410
|
+
"scaleY": 1,
|
|
1436
1411
|
"segments": [
|
|
1437
1412
|
{
|
|
1438
|
-
"points":
|
|
1439
|
-
{
|
|
1440
|
-
"x": 0,
|
|
1441
|
-
"y": 0,
|
|
1442
|
-
"z": 0.5,
|
|
1443
|
-
},
|
|
1444
|
-
{
|
|
1445
|
-
"x": 0.0001,
|
|
1446
|
-
"y": 0.0001,
|
|
1447
|
-
"z": 0.5,
|
|
1448
|
-
},
|
|
1449
|
-
],
|
|
1413
|
+
"points": "AAAAAAA4jgaOBgA4",
|
|
1450
1414
|
"type": "free",
|
|
1451
1415
|
},
|
|
1452
1416
|
],
|
|
@@ -16,7 +16,9 @@ import {
|
|
|
16
16
|
TLShapeId,
|
|
17
17
|
Vec,
|
|
18
18
|
VecLike,
|
|
19
|
+
VecModel,
|
|
19
20
|
ZERO_INDEX_KEY,
|
|
21
|
+
b64Vecs,
|
|
20
22
|
compact,
|
|
21
23
|
createBindingId,
|
|
22
24
|
createShapeId,
|
|
@@ -149,6 +151,13 @@ export async function putExcalidrawContent(
|
|
|
149
151
|
break
|
|
150
152
|
}
|
|
151
153
|
case 'freedraw': {
|
|
154
|
+
const points: VecModel[] = element.points.map(([x, y, z = 0.5]: number[]) => ({
|
|
155
|
+
x,
|
|
156
|
+
y,
|
|
157
|
+
z,
|
|
158
|
+
}))
|
|
159
|
+
const base64Points = b64Vecs.encodePoints(points)
|
|
160
|
+
|
|
152
161
|
tldrawContent.shapes.push({
|
|
153
162
|
...base,
|
|
154
163
|
type: 'draw',
|
|
@@ -160,11 +169,7 @@ export async function putExcalidrawContent(
|
|
|
160
169
|
segments: [
|
|
161
170
|
{
|
|
162
171
|
type: 'free',
|
|
163
|
-
points:
|
|
164
|
-
x,
|
|
165
|
-
y,
|
|
166
|
-
z,
|
|
167
|
-
})),
|
|
172
|
+
points: base64Points,
|
|
168
173
|
},
|
|
169
174
|
],
|
|
170
175
|
},
|
|
@@ -329,7 +334,7 @@ export async function putExcalidrawContent(
|
|
|
329
334
|
index = getIndexAbove(index)
|
|
330
335
|
}
|
|
331
336
|
|
|
332
|
-
const p = point ?? (editor.inputs.
|
|
337
|
+
const p = point ?? (editor.inputs.getShiftKey() ? editor.inputs.getCurrentPagePoint() : undefined)
|
|
333
338
|
|
|
334
339
|
editor.putContentOntoCurrentPage(tldrawContent, {
|
|
335
340
|
point: p,
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { TLDrawShapeSegment, VecModel } from '@tldraw/editor'
|
|
2
|
+
import { b64Vecs, compressLegacySegments } from '@tldraw/editor'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Helper function to convert draw shape points from VecModel[] to base64 string.
|
|
6
|
+
* This is useful for tests that create draw shapes with the legacy array format.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```ts
|
|
10
|
+
* const segments = [{ type: 'free', points: pointsToBase64([{x: 0, y: 0, z: 0.5}]) }]
|
|
11
|
+
* ```
|
|
12
|
+
*
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export function pointsToBase64(points: VecModel[]): string {
|
|
16
|
+
return b64Vecs.encodePoints(points)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Helper function to convert base64 string back to VecModel[] points.
|
|
21
|
+
* This is useful for tests that need to inspect draw shape points.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* const points = base64ToPoints(shape.props.segments[0].points)
|
|
26
|
+
* expect(points[0].x).toBe(0)
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @public
|
|
30
|
+
*/
|
|
31
|
+
export function base64ToPoints(base64: string): VecModel[] {
|
|
32
|
+
return b64Vecs.decodePoints(base64)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Helper function to create draw shape segments from legacy array format.
|
|
37
|
+
* This allows tests to use the old format while the shape uses the new base64 format.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```ts
|
|
41
|
+
* editor.createShapes([{
|
|
42
|
+
* type: 'draw',
|
|
43
|
+
* props: {
|
|
44
|
+
* segments: createDrawSegments([[{x: 0, y: 0}, {x: 10, y: 10}]])
|
|
45
|
+
* }
|
|
46
|
+
* }])
|
|
47
|
+
* ```
|
|
48
|
+
* @public
|
|
49
|
+
*/
|
|
50
|
+
export function createDrawSegments(
|
|
51
|
+
pointArrays: VecModel[][],
|
|
52
|
+
type: 'free' | 'straight' = 'free'
|
|
53
|
+
): TLDrawShapeSegment[] {
|
|
54
|
+
return compressLegacySegments(
|
|
55
|
+
pointArrays.map((points) => ({
|
|
56
|
+
type,
|
|
57
|
+
points,
|
|
58
|
+
}))
|
|
59
|
+
)
|
|
60
|
+
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Extension,
|
|
3
3
|
Extensions,
|
|
4
|
+
extensions,
|
|
4
5
|
generateHTML,
|
|
5
6
|
generateJSON,
|
|
6
7
|
generateText,
|
|
@@ -19,7 +20,6 @@ import {
|
|
|
19
20
|
WeakCache,
|
|
20
21
|
} from '@tldraw/editor'
|
|
21
22
|
import { DefaultFontFaces } from '../../shapes/shared/defaultFonts'
|
|
22
|
-
import { TextDirection } from './textDirection'
|
|
23
23
|
|
|
24
24
|
/** @public */
|
|
25
25
|
export const KeyboardShiftEnterTweakExtension = Extension.create({
|
|
@@ -59,7 +59,11 @@ export const tipTapDefaultExtensions: Extensions = [
|
|
|
59
59
|
}),
|
|
60
60
|
Highlight,
|
|
61
61
|
KeyboardShiftEnterTweakExtension,
|
|
62
|
-
|
|
62
|
+
|
|
63
|
+
// N.B. We disable the text direction core extension in RichTextArea,
|
|
64
|
+
// but we add it back in again here in our own extensions list so that
|
|
65
|
+
// people can omit/override it if they want to.
|
|
66
|
+
extensions.TextDirection.configure({ direction: 'auto' }),
|
|
63
67
|
]
|
|
64
68
|
|
|
65
69
|
// todo: bust this if the editor changes, too
|
|
@@ -88,7 +92,6 @@ export function renderHtmlFromRichText(editor: Editor, richText: TLRichText) {
|
|
|
88
92
|
* @param editor - The editor instance.
|
|
89
93
|
* @param richText - The rich text content.
|
|
90
94
|
*
|
|
91
|
-
*
|
|
92
95
|
* @public
|
|
93
96
|
*/
|
|
94
97
|
export function renderHtmlFromRichTextForMeasurement(editor: Editor, richText: TLRichText) {
|
|
@@ -111,7 +114,6 @@ export function isEmptyRichText(richText: TLRichText) {
|
|
|
111
114
|
* @param editor - The editor instance.
|
|
112
115
|
* @param richText - The rich text content.
|
|
113
116
|
*
|
|
114
|
-
*
|
|
115
117
|
* @public
|
|
116
118
|
*/
|
|
117
119
|
export function renderPlaintextFromRichText(editor: Editor, richText: TLRichText) {
|
|
@@ -131,7 +133,6 @@ export function renderPlaintextFromRichText(editor: Editor, richText: TLRichText
|
|
|
131
133
|
* @param editor - The editor instance.
|
|
132
134
|
* @param richText - The rich text content.
|
|
133
135
|
*
|
|
134
|
-
*
|
|
135
136
|
* @public
|
|
136
137
|
*/
|
|
137
138
|
export function renderRichTextFromHTML(editor: Editor, html: string): TLRichText {
|