@tldraw/editor 4.6.0-next.5a871ec02ff3 → 4.6.0-next.6594d48ace27
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 +1316 -285
- package/dist-cjs/index.js +31 -26
- package/dist-cjs/index.js.map +3 -3
- package/dist-cjs/lib/TldrawEditor.js +62 -14
- package/dist-cjs/lib/TldrawEditor.js.map +3 -3
- package/dist-cjs/lib/components/MenuClickCapture.js +99 -38
- package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
- package/dist-cjs/lib/components/default-components/CanvasOverlays.js +180 -0
- package/dist-cjs/lib/components/default-components/CanvasOverlays.js.map +7 -0
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +33 -236
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +3 -3
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
- package/dist-cjs/lib/config/{createTLUser.js → createTLCurrentUser.js} +9 -9
- package/dist-cjs/lib/config/createTLCurrentUser.js.map +7 -0
- package/dist-cjs/lib/config/createTLStore.js +31 -1
- package/dist-cjs/lib/config/createTLStore.js.map +2 -2
- package/dist-cjs/lib/{components/default-components/DefaultShapeIndicatorErrorFallback.js → config/defaultAssets.js} +17 -9
- package/dist-cjs/lib/config/defaultAssets.js.map +7 -0
- package/dist-cjs/lib/config/defaultShapes.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +921 -386
- package/dist-cjs/lib/editor/Editor.js.map +3 -3
- package/dist-cjs/lib/editor/assets/AssetUtil.js +67 -0
- package/dist-cjs/lib/editor/assets/AssetUtil.js.map +7 -0
- package/dist-cjs/lib/editor/bindings/BindingUtil.js +1 -0
- package/dist-cjs/lib/editor/bindings/BindingUtil.js.map +1 -1
- package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js +26 -64
- package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.js +98 -0
- package/dist-cjs/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.js.map +7 -0
- package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +2 -1
- package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js +15 -53
- package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js.map +1 -1
- package/dist-cjs/lib/editor/managers/FontManager/FontManager.js +2 -0
- package/dist-cjs/lib/editor/managers/FontManager/FontManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/HistoryManager/HistoryManager.js +2 -0
- package/dist-cjs/lib/editor/managers/HistoryManager/HistoryManager.js.map +1 -1
- package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js +83 -112
- package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.js +80 -0
- package/dist-cjs/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.js.map +7 -0
- package/dist-cjs/lib/editor/managers/PerformanceManager/PerformanceManager.js +466 -0
- package/dist-cjs/lib/editor/managers/PerformanceManager/PerformanceManager.js.map +7 -0
- package/dist-cjs/lib/{components/default-components/DefaultHandles.js → editor/managers/PerformanceManager/perf-types.js} +3 -14
- package/dist-cjs/lib/editor/managers/PerformanceManager/perf-types.js.map +7 -0
- package/dist-cjs/lib/editor/managers/ScribbleManager/ScribbleManager.js +1 -0
- package/dist-cjs/lib/editor/managers/ScribbleManager/ScribbleManager.js.map +1 -1
- package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js +22 -56
- package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js.map +2 -2
- package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js +12 -52
- package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js.map +2 -2
- package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js +21 -57
- package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js +5 -4
- package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +103 -30
- package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/ThemeManager/ThemeManager.js +107 -0
- package/dist-cjs/lib/editor/managers/ThemeManager/ThemeManager.js.map +7 -0
- package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js +600 -0
- package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js.map +7 -0
- package/dist-cjs/lib/editor/managers/TickManager/TickManager.js +17 -55
- package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +1 -1
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +65 -72
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
- package/dist-cjs/lib/editor/overlays/OverlayManager.js +154 -0
- package/dist-cjs/lib/editor/overlays/OverlayManager.js.map +7 -0
- package/dist-cjs/lib/editor/overlays/OverlayUtil.js +92 -0
- package/dist-cjs/lib/editor/overlays/OverlayUtil.js.map +7 -0
- package/dist-cjs/lib/editor/overlays/ShapeIndicatorOverlayUtil.js +161 -0
- package/dist-cjs/lib/editor/overlays/ShapeIndicatorOverlayUtil.js.map +7 -0
- package/dist-cjs/lib/editor/shapes/BaseFrameLikeShapeUtil.js +76 -0
- package/dist-cjs/lib/editor/shapes/BaseFrameLikeShapeUtil.js.map +7 -0
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js +35 -20
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +33 -3
- package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/shared/getPerfectDashProps.js +6 -0
- package/dist-cjs/lib/editor/shapes/shared/getPerfectDashProps.js.map +2 -2
- package/dist-cjs/lib/editor/tools/StateNode.js +15 -17
- package/dist-cjs/lib/editor/tools/StateNode.js.map +2 -2
- package/dist-cjs/lib/editor/types/SvgExportContext.js.map +2 -2
- package/dist-cjs/lib/editor/types/clipboard-types.js.map +1 -1
- package/dist-cjs/lib/editor/types/event-types.js.map +2 -2
- package/dist-cjs/lib/editor/types/external-content.js.map +1 -1
- package/dist-cjs/lib/exports/ExportDelay.js +13 -53
- package/dist-cjs/lib/exports/ExportDelay.js.map +1 -1
- package/dist-cjs/lib/exports/FontEmbedder.js +14 -57
- package/dist-cjs/lib/exports/FontEmbedder.js.map +1 -1
- package/dist-cjs/lib/exports/StyleEmbedder.js +2 -1
- package/dist-cjs/lib/exports/StyleEmbedder.js.map +2 -2
- package/dist-cjs/lib/exports/fetchCache.js +1 -1
- package/dist-cjs/lib/exports/fetchCache.js.map +2 -2
- package/dist-cjs/lib/exports/getSvgJsx.js +14 -8
- package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
- package/dist-cjs/lib/globals/environment.js +18 -1
- package/dist-cjs/lib/globals/environment.js.map +2 -2
- package/dist-cjs/lib/hooks/EditorComponentsContext.js.map +2 -2
- package/dist-cjs/lib/hooks/useCanvasEvents.js +25 -4
- package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/{useIsDarkMode.js → useColorMode.js} +14 -10
- package/dist-cjs/lib/hooks/useColorMode.js.map +7 -0
- package/dist-cjs/lib/hooks/useCursor.js +3 -7
- package/dist-cjs/lib/hooks/useCursor.js.map +2 -2
- package/dist-cjs/lib/hooks/useDarkMode.js +4 -4
- package/dist-cjs/lib/hooks/useDarkMode.js.map +2 -2
- package/dist-cjs/lib/hooks/useEditorComponents.js +0 -28
- package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
- package/dist-cjs/lib/hooks/useGestureEvents.js +171 -127
- package/dist-cjs/lib/hooks/useGestureEvents.js.map +3 -3
- package/dist-cjs/lib/hooks/useLocalStore.js.map +2 -2
- package/dist-cjs/lib/hooks/usePeerIds.js +1 -36
- package/dist-cjs/lib/hooks/usePeerIds.js.map +2 -2
- package/dist-cjs/lib/hooks/useShapeCulling.js +2 -1
- package/dist-cjs/lib/hooks/useShapeCulling.js.map +2 -2
- package/dist-cjs/lib/options.js +4 -0
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/primitives/Box.js +26 -26
- package/dist-cjs/lib/primitives/Box.js.map +2 -2
- package/dist-cjs/lib/primitives/Vec.js +4 -1
- package/dist-cjs/lib/primitives/Vec.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Arc2d.js +2 -2
- package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Circle2d.js +3 -2
- package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/CubicSpline2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/CubicSpline2d.js.map +1 -1
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +4 -3
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js +12 -9
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Polyline2d.js +2 -2
- package/dist-cjs/lib/primitives/geometry/Polyline2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Stadium2d.js +2 -1
- package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +2 -2
- package/dist-cjs/lib/utils/EditorAtom.js +2 -0
- package/dist-cjs/lib/utils/EditorAtom.js.map +1 -1
- package/dist-cjs/lib/utils/SharedStylesMap.js +1 -1
- package/dist-cjs/lib/utils/SharedStylesMap.js.map +1 -1
- package/dist-cjs/lib/utils/getSvgPathFromPoints.js.map +2 -2
- package/dist-cjs/lib/utils/reparenting.js +2 -1
- package/dist-cjs/lib/utils/reparenting.js.map +2 -2
- package/dist-cjs/lib/utils/richText.js.map +2 -2
- package/dist-cjs/lib/utils/runtime.js +2 -1
- package/dist-cjs/lib/utils/runtime.js.map +2 -2
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +8 -2
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
- package/dist-cjs/lib/utils/sync/hardReset.js +0 -8
- package/dist-cjs/lib/utils/sync/hardReset.js.map +2 -2
- package/dist-cjs/version.js +3 -3
- package/dist-cjs/version.js.map +1 -1
- package/dist-esm/index.d.mts +1316 -285
- package/dist-esm/index.mjs +44 -48
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +65 -14
- package/dist-esm/lib/TldrawEditor.mjs.map +3 -3
- package/dist-esm/lib/components/MenuClickCapture.mjs +100 -39
- package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/CanvasOverlays.mjs +160 -0
- package/dist-esm/lib/components/default-components/CanvasOverlays.mjs.map +7 -0
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +34 -237
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +3 -3
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
- package/dist-esm/lib/config/{createTLUser.mjs → createTLCurrentUser.mjs} +6 -6
- package/dist-esm/lib/config/createTLCurrentUser.mjs.map +7 -0
- package/dist-esm/lib/config/createTLStore.mjs +37 -2
- package/dist-esm/lib/config/createTLStore.mjs.map +2 -2
- package/dist-esm/lib/config/defaultAssets.mjs +16 -0
- package/dist-esm/lib/config/defaultAssets.mjs.map +7 -0
- package/dist-esm/lib/config/defaultShapes.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +924 -389
- package/dist-esm/lib/editor/Editor.mjs.map +3 -3
- package/dist-esm/lib/editor/assets/AssetUtil.mjs +47 -0
- package/dist-esm/lib/editor/assets/AssetUtil.mjs.map +7 -0
- package/dist-esm/lib/editor/bindings/BindingUtil.mjs +1 -0
- package/dist-esm/lib/editor/bindings/BindingUtil.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs +26 -64
- package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.mjs +83 -0
- package/dist-esm/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.mjs.map +7 -0
- package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +2 -1
- package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs +15 -53
- package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs +2 -0
- package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/HistoryManager/HistoryManager.mjs +2 -0
- package/dist-esm/lib/editor/managers/HistoryManager/HistoryManager.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs +83 -112
- package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.mjs +60 -0
- package/dist-esm/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.mjs.map +7 -0
- package/dist-esm/lib/editor/managers/PerformanceManager/PerformanceManager.mjs +438 -0
- package/dist-esm/lib/editor/managers/PerformanceManager/PerformanceManager.mjs.map +7 -0
- package/dist-esm/lib/editor/managers/PerformanceManager/perf-types.mjs +1 -0
- package/dist-esm/lib/editor/managers/PerformanceManager/perf-types.mjs.map +7 -0
- package/dist-esm/lib/editor/managers/ScribbleManager/ScribbleManager.mjs +1 -0
- package/dist-esm/lib/editor/managers/ScribbleManager/ScribbleManager.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs +22 -56
- package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs +12 -52
- package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs +21 -57
- package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs +5 -4
- package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +103 -30
- package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/ThemeManager/ThemeManager.mjs +89 -0
- package/dist-esm/lib/editor/managers/ThemeManager/ThemeManager.mjs.map +7 -0
- package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs +582 -0
- package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs.map +7 -0
- package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs +17 -55
- package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +65 -72
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
- package/dist-esm/lib/editor/overlays/OverlayManager.mjs +136 -0
- package/dist-esm/lib/editor/overlays/OverlayManager.mjs.map +7 -0
- package/dist-esm/lib/editor/overlays/OverlayUtil.mjs +72 -0
- package/dist-esm/lib/editor/overlays/OverlayUtil.mjs.map +7 -0
- package/dist-esm/lib/editor/overlays/ShapeIndicatorOverlayUtil.mjs +141 -0
- package/dist-esm/lib/editor/overlays/ShapeIndicatorOverlayUtil.mjs.map +7 -0
- package/dist-esm/lib/editor/shapes/BaseFrameLikeShapeUtil.mjs +56 -0
- package/dist-esm/lib/editor/shapes/BaseFrameLikeShapeUtil.mjs.map +7 -0
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +35 -20
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +33 -3
- package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/shared/getPerfectDashProps.mjs +6 -0
- package/dist-esm/lib/editor/shapes/shared/getPerfectDashProps.mjs.map +2 -2
- package/dist-esm/lib/editor/tools/StateNode.mjs +15 -17
- package/dist-esm/lib/editor/tools/StateNode.mjs.map +2 -2
- package/dist-esm/lib/editor/types/SvgExportContext.mjs.map +2 -2
- package/dist-esm/lib/editor/types/event-types.mjs.map +2 -2
- package/dist-esm/lib/exports/ExportDelay.mjs +13 -53
- package/dist-esm/lib/exports/ExportDelay.mjs.map +1 -1
- package/dist-esm/lib/exports/FontEmbedder.mjs +14 -57
- package/dist-esm/lib/exports/FontEmbedder.mjs.map +1 -1
- package/dist-esm/lib/exports/StyleEmbedder.mjs +2 -1
- package/dist-esm/lib/exports/StyleEmbedder.mjs.map +2 -2
- package/dist-esm/lib/exports/fetchCache.mjs +2 -2
- package/dist-esm/lib/exports/fetchCache.mjs.map +2 -2
- package/dist-esm/lib/exports/getSvgJsx.mjs +14 -11
- package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
- package/dist-esm/lib/globals/environment.mjs +18 -1
- package/dist-esm/lib/globals/environment.mjs.map +2 -2
- package/dist-esm/lib/hooks/EditorComponentsContext.mjs.map +2 -2
- package/dist-esm/lib/hooks/useCanvasEvents.mjs +25 -4
- package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useColorMode.mjs +19 -0
- package/dist-esm/lib/hooks/useColorMode.mjs.map +7 -0
- package/dist-esm/lib/hooks/useCursor.mjs +3 -7
- package/dist-esm/lib/hooks/useCursor.mjs.map +2 -2
- package/dist-esm/lib/hooks/useDarkMode.mjs +4 -4
- package/dist-esm/lib/hooks/useDarkMode.mjs.map +2 -2
- package/dist-esm/lib/hooks/useEditorComponents.mjs +0 -28
- package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useGestureEvents.mjs +171 -127
- package/dist-esm/lib/hooks/useGestureEvents.mjs.map +3 -3
- package/dist-esm/lib/hooks/useLocalStore.mjs.map +2 -2
- package/dist-esm/lib/hooks/usePeerIds.mjs +2 -40
- package/dist-esm/lib/hooks/usePeerIds.mjs.map +2 -2
- package/dist-esm/lib/hooks/useShapeCulling.mjs +2 -1
- package/dist-esm/lib/hooks/useShapeCulling.mjs.map +2 -2
- package/dist-esm/lib/options.mjs +4 -0
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/primitives/Box.mjs +26 -26
- package/dist-esm/lib/primitives/Box.mjs.map +2 -2
- package/dist-esm/lib/primitives/Vec.mjs +4 -1
- package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Arc2d.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs +3 -2
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/CubicSpline2d.mjs +1 -1
- package/dist-esm/lib/primitives/geometry/CubicSpline2d.mjs.map +1 -1
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +4 -3
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +12 -9
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Polyline2d.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/Polyline2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Stadium2d.mjs +2 -1
- package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +2 -2
- package/dist-esm/lib/utils/EditorAtom.mjs +2 -0
- package/dist-esm/lib/utils/EditorAtom.mjs.map +1 -1
- package/dist-esm/lib/utils/SharedStylesMap.mjs +1 -1
- package/dist-esm/lib/utils/SharedStylesMap.mjs.map +1 -1
- package/dist-esm/lib/utils/getSvgPathFromPoints.mjs.map +2 -2
- package/dist-esm/lib/utils/reparenting.mjs +2 -1
- package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
- package/dist-esm/lib/utils/richText.mjs.map +2 -2
- package/dist-esm/lib/utils/runtime.mjs +2 -1
- package/dist-esm/lib/utils/runtime.mjs.map +2 -2
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +8 -2
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
- package/dist-esm/lib/utils/sync/hardReset.mjs +0 -8
- package/dist-esm/lib/utils/sync/hardReset.mjs.map +2 -2
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +16 -256
- package/package.json +7 -8
- package/src/index.ts +58 -52
- package/src/lib/TldrawEditor.tsx +108 -20
- package/src/lib/components/MenuClickCapture.tsx +129 -49
- package/src/lib/components/default-components/CanvasOverlays.tsx +208 -0
- package/src/lib/components/default-components/DefaultCanvas.tsx +38 -310
- package/src/lib/components/default-components/DefaultErrorFallback.tsx +1 -0
- package/src/lib/config/TLEditorSnapshot.test.ts +1 -1
- package/src/lib/config/{createTLUser.ts → createTLCurrentUser.ts} +9 -9
- package/src/lib/config/createTLStore.ts +58 -3
- package/src/lib/config/defaultAssets.ts +19 -0
- package/src/lib/config/defaultShapes.ts +1 -1
- package/src/lib/editor/Editor.test.ts +3 -1
- package/src/lib/editor/Editor.ts +610 -69
- package/src/lib/editor/assets/AssetUtil.ts +85 -0
- package/src/lib/editor/managers/ClickManager/ClickManager.ts +1 -1
- package/src/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.ts +98 -0
- package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.ts +1 -1
- package/src/lib/editor/managers/FontManager/FontManager.test.ts +9 -2
- package/src/lib/editor/managers/FontManager/FontManager.ts +1 -67
- package/src/lib/editor/managers/InputsManager/InputsManager.ts +42 -30
- package/src/lib/editor/managers/PerformanceManager/PerformanceApiAdapter.ts +82 -0
- package/src/lib/editor/managers/PerformanceManager/PerformanceManager.test.ts +522 -0
- package/src/lib/editor/managers/PerformanceManager/PerformanceManager.ts +583 -0
- package/src/lib/editor/managers/PerformanceManager/perf-types.ts +196 -0
- package/src/lib/editor/managers/SnapManager/BoundsSnaps.ts +1 -1
- package/src/lib/editor/managers/SnapManager/HandleSnaps.ts +1 -1
- package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +13 -2
- package/src/lib/editor/managers/SnapManager/SnapManager.ts +1 -1
- package/src/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.ts +5 -5
- package/src/lib/editor/managers/TextManager/TextManager.test.ts +18 -4
- package/src/lib/editor/managers/TextManager/TextManager.ts +140 -34
- package/src/lib/editor/managers/ThemeManager/ThemeManager.ts +116 -0
- package/src/lib/editor/managers/ThemeManager/defaultThemes.ts +619 -0
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +25 -31
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +7 -5
- package/src/lib/editor/overlays/OverlayManager.ts +183 -0
- package/src/lib/editor/overlays/OverlayUtil.ts +143 -0
- package/src/lib/editor/overlays/ShapeIndicatorOverlayUtil.ts +216 -0
- package/src/lib/editor/shapes/BaseFrameLikeShapeUtil.tsx +123 -0
- package/src/lib/editor/shapes/ShapeUtil.ts +67 -30
- package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +41 -4
- package/src/lib/editor/shapes/shared/getPerfectDashProps.ts +7 -0
- package/src/lib/editor/tools/StateNode.ts +16 -18
- package/src/lib/editor/types/SvgExportContext.tsx +5 -0
- package/src/lib/editor/types/clipboard-types.ts +2 -1
- package/src/lib/editor/types/event-types.ts +2 -0
- package/src/lib/editor/types/external-content.ts +1 -0
- package/src/lib/exports/StyleEmbedder.ts +1 -1
- package/src/lib/exports/fetchCache.ts +2 -4
- package/src/lib/exports/getSvgJsx.test.ts +3 -1
- package/src/lib/exports/getSvgJsx.tsx +24 -17
- package/src/lib/globals/environment.ts +18 -0
- package/src/lib/hooks/EditorComponentsContext.tsx +0 -27
- package/src/lib/hooks/useCanvasEvents.ts +40 -3
- package/src/lib/hooks/{useIsDarkMode.ts → useColorMode.ts} +9 -5
- package/src/lib/hooks/useCursor.ts +3 -7
- package/src/lib/hooks/useDarkMode.ts +4 -4
- package/src/lib/hooks/useEditorComponents.tsx +1 -29
- package/src/lib/hooks/useGestureEvents.ts +240 -168
- package/src/lib/hooks/useLocalStore.ts +1 -1
- package/src/lib/hooks/usePeerIds.ts +6 -55
- package/src/lib/hooks/useShapeCulling.tsx +3 -1
- package/src/lib/options.ts +115 -0
- package/src/lib/primitives/Box.test.ts +30 -0
- package/src/lib/primitives/Box.ts +26 -26
- package/src/lib/primitives/Vec.ts +1 -1
- package/src/lib/primitives/geometry/Arc2d.ts +2 -2
- package/src/lib/primitives/geometry/Circle2d.ts +2 -2
- package/src/lib/primitives/geometry/CubicSpline2d.ts +1 -1
- package/src/lib/primitives/geometry/Ellipse2d.ts +3 -3
- package/src/lib/primitives/geometry/Geometry2d.test.ts +21 -0
- package/src/lib/primitives/geometry/Geometry2d.ts +10 -9
- package/src/lib/primitives/geometry/Polyline2d.ts +2 -2
- package/src/lib/primitives/geometry/Stadium2d.ts +1 -1
- package/src/lib/utils/SharedStylesMap.ts +1 -1
- package/src/lib/utils/getSvgPathFromPoints.ts +1 -1
- package/src/lib/utils/reparenting.ts +6 -2
- package/src/lib/utils/richText.ts +1 -1
- package/src/lib/utils/runtime.ts +3 -1
- package/src/lib/utils/sync/TLLocalSyncClient.test.ts +1 -1
- package/src/lib/utils/sync/TLLocalSyncClient.ts +5 -1
- package/src/lib/utils/sync/hardReset.ts +0 -8
- package/src/version.ts +3 -3
- package/dist-cjs/lib/components/LiveCollaborators.js +0 -151
- package/dist-cjs/lib/components/LiveCollaborators.js.map +0 -7
- package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js +0 -227
- package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultBrush.js +0 -38
- package/dist-cjs/lib/components/default-components/DefaultBrush.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +0 -71
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultHandle.js +0 -56
- package/dist-cjs/lib/components/default-components/DefaultHandle.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultHandles.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultScribble.js +0 -51
- package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultSelectionForeground.js +0 -69
- package/dist-cjs/lib/components/default-components/DefaultSelectionForeground.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +0 -107
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicatorErrorFallback.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js +0 -101
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js.map +0 -7
- package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js +0 -170
- package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js.map +0 -7
- package/dist-cjs/lib/config/createTLUser.js.map +0 -7
- package/dist-cjs/lib/hooks/useIsDarkMode.js.map +0 -7
- package/dist-esm/lib/components/LiveCollaborators.mjs +0 -134
- package/dist-esm/lib/components/LiveCollaborators.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs +0 -207
- package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultBrush.mjs +0 -18
- package/dist-esm/lib/components/default-components/DefaultBrush.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +0 -41
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultHandle.mjs +0 -26
- package/dist-esm/lib/components/default-components/DefaultHandle.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultHandles.mjs +0 -8
- package/dist-esm/lib/components/default-components/DefaultHandles.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultScribble.mjs +0 -21
- package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultSelectionForeground.mjs +0 -39
- package/dist-esm/lib/components/default-components/DefaultSelectionForeground.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +0 -77
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultShapeIndicatorErrorFallback.mjs +0 -8
- package/dist-esm/lib/components/default-components/DefaultShapeIndicatorErrorFallback.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs +0 -81
- package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs +0 -142
- package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs.map +0 -7
- package/dist-esm/lib/config/createTLUser.mjs.map +0 -7
- package/dist-esm/lib/hooks/useIsDarkMode.mjs +0 -15
- package/dist-esm/lib/hooks/useIsDarkMode.mjs.map +0 -7
- package/src/lib/components/LiveCollaborators.tsx +0 -174
- package/src/lib/components/default-components/CanvasShapeIndicators.tsx +0 -289
- package/src/lib/components/default-components/DefaultBrush.tsx +0 -35
- package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +0 -52
- package/src/lib/components/default-components/DefaultHandle.tsx +0 -42
- package/src/lib/components/default-components/DefaultHandles.tsx +0 -15
- package/src/lib/components/default-components/DefaultScribble.tsx +0 -31
- package/src/lib/components/default-components/DefaultSelectionForeground.tsx +0 -50
- package/src/lib/components/default-components/DefaultShapeIndicator.tsx +0 -104
- package/src/lib/components/default-components/DefaultShapeIndicatorErrorFallback.tsx +0 -9
- package/src/lib/components/default-components/DefaultShapeIndicators.tsx +0 -116
- package/src/lib/components/default-components/DefaultSnapIndictor.tsx +0 -174
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { LegacyMigrations, MigrationSequence } from '@tldraw/store'
|
|
2
|
+
import {
|
|
3
|
+
RecordProps,
|
|
4
|
+
TLAsset,
|
|
5
|
+
TLAssetId,
|
|
6
|
+
TLPropsMigrations,
|
|
7
|
+
TLUnknownAsset,
|
|
8
|
+
} from '@tldraw/tlschema'
|
|
9
|
+
import type { Editor } from '../Editor'
|
|
10
|
+
|
|
11
|
+
/** @public */
|
|
12
|
+
export interface TLAssetUtilConstructor<
|
|
13
|
+
T extends TLAsset = TLAsset,
|
|
14
|
+
U extends AssetUtil<T> = AssetUtil<T>,
|
|
15
|
+
> {
|
|
16
|
+
new (editor: Editor): U
|
|
17
|
+
type: T['type']
|
|
18
|
+
props?: RecordProps<T>
|
|
19
|
+
migrations?: LegacyMigrations | TLPropsMigrations | MigrationSequence
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Abstract base class for defining asset-type-specific behavior.
|
|
24
|
+
*
|
|
25
|
+
* Each asset type (image, video, bookmark, etc.) has a corresponding AssetUtil that handles
|
|
26
|
+
* type-specific operations like determining supported MIME types and creating assets from files.
|
|
27
|
+
*
|
|
28
|
+
* @public
|
|
29
|
+
*/
|
|
30
|
+
export abstract class AssetUtil<Asset extends TLAsset = TLAsset> {
|
|
31
|
+
/** Configure this asset util's {@link AssetUtil.options | `options`}. */
|
|
32
|
+
static configure<T extends TLAssetUtilConstructor<any, any>>(
|
|
33
|
+
this: T,
|
|
34
|
+
options: T extends new (...args: any[]) => { options: infer Options } ? Partial<Options> : never
|
|
35
|
+
): T {
|
|
36
|
+
// @ts-expect-error -- typescript has no idea what's going on here but it's fine
|
|
37
|
+
return class extends this {
|
|
38
|
+
// @ts-expect-error
|
|
39
|
+
options = { ...this.options, ...options }
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
constructor(public editor: Editor) {}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Options for this asset util. Override this to provide customization options for your asset.
|
|
47
|
+
* Use {@link AssetUtil.configure} to customize existing asset utils.
|
|
48
|
+
*/
|
|
49
|
+
options = {}
|
|
50
|
+
|
|
51
|
+
static props?: RecordProps<TLUnknownAsset>
|
|
52
|
+
static migrations?: LegacyMigrations | TLPropsMigrations | MigrationSequence
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The type of the asset util, which should match the asset's type.
|
|
56
|
+
*/
|
|
57
|
+
static type: string
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Get the default props for an asset of this type.
|
|
61
|
+
*/
|
|
62
|
+
abstract getDefaultProps(): Asset['props']
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Get the MIME types that this asset type supports.
|
|
66
|
+
* Return an empty array if this asset type doesn't support files (e.g. bookmarks).
|
|
67
|
+
*/
|
|
68
|
+
getSupportedMimeTypes(): readonly string[] {
|
|
69
|
+
return []
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Check whether this asset type accepts a given MIME type.
|
|
74
|
+
*/
|
|
75
|
+
acceptsMimeType(mimeType: string): boolean {
|
|
76
|
+
return this.getSupportedMimeTypes().includes(mimeType)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Create an asset from a file. Return null if this asset type can't handle the file.
|
|
81
|
+
*/
|
|
82
|
+
async getAssetFromFile(_file: File, _assetId: TLAssetId): Promise<Asset | null> {
|
|
83
|
+
return null
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { EMPTY_ARRAY, atom, computed } from '@tldraw/state'
|
|
2
|
+
import { TLInstancePresence } from '@tldraw/tlschema'
|
|
3
|
+
import { maxBy } from '@tldraw/utils'
|
|
4
|
+
import {
|
|
5
|
+
getCollaboratorStateFromElapsedTime,
|
|
6
|
+
shouldShowCollaborator,
|
|
7
|
+
} from '../../../utils/collaboratorState'
|
|
8
|
+
import type { Editor } from '../../Editor'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Tracks remote peers and exposes the collaborator-related queries used by the
|
|
12
|
+
* editor and its overlays. Encapsulates the visibility clock that periodically
|
|
13
|
+
* re-evaluates which collaborators should be visible based on activity.
|
|
14
|
+
*
|
|
15
|
+
* Accessed via {@link Editor.collaborators}.
|
|
16
|
+
*
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
export class CollaboratorsManager {
|
|
20
|
+
constructor(private readonly editor: Editor) {
|
|
21
|
+
// Editor disposes `editor.timers` on its own teardown, so the interval is
|
|
22
|
+
// automatically cleared when the editor is disposed.
|
|
23
|
+
editor.timers.setInterval(() => {
|
|
24
|
+
this._visibilityClock.set(Date.now())
|
|
25
|
+
}, editor.options.collaboratorCheckIntervalMs)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Drives reactive re-evaluation of {@link CollaboratorsManager.getVisibleCollaborators}.
|
|
30
|
+
* Ticked on a fixed interval so callers don't need to manage their own activity timers.
|
|
31
|
+
*/
|
|
32
|
+
private readonly _visibilityClock = atom('collaboratorVisibilityClock', Date.now())
|
|
33
|
+
|
|
34
|
+
@computed
|
|
35
|
+
private _getCollaboratorsQuery() {
|
|
36
|
+
return this.editor.store.query.records('instance_presence', () => ({
|
|
37
|
+
userId: { neq: this.editor.user.getId() },
|
|
38
|
+
}))
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Returns a list of presence records for all peer collaborators.
|
|
43
|
+
* This will return the latest presence record for each connected user.
|
|
44
|
+
*/
|
|
45
|
+
@computed
|
|
46
|
+
getCollaborators(): TLInstancePresence[] {
|
|
47
|
+
const allPresenceRecords = this._getCollaboratorsQuery().get()
|
|
48
|
+
if (!allPresenceRecords.length) return EMPTY_ARRAY
|
|
49
|
+
const userIds = [...new Set(allPresenceRecords.map((c) => c.userId))].sort()
|
|
50
|
+
return userIds.map((id) => {
|
|
51
|
+
const latestPresence = maxBy(
|
|
52
|
+
allPresenceRecords.filter((c) => c.userId === id),
|
|
53
|
+
(p) => p.lastActivityTimestamp ?? 0
|
|
54
|
+
)
|
|
55
|
+
return latestPresence!
|
|
56
|
+
})
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Returns a list of presence records for all peer collaborators on the current page.
|
|
61
|
+
* This will return the latest presence record for each connected user.
|
|
62
|
+
*/
|
|
63
|
+
@computed
|
|
64
|
+
getCollaboratorsOnCurrentPage(): TLInstancePresence[] {
|
|
65
|
+
const currentPageId = this.editor.getCurrentPageId()
|
|
66
|
+
return this.getCollaborators().filter((c) => c.currentPageId === currentPageId)
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Returns a list of presence records for peer collaborators who should currently be
|
|
71
|
+
* shown in the UI. Filters {@link CollaboratorsManager.getCollaborators} by activity
|
|
72
|
+
* state (active / idle / inactive) and visibility rules such as following and
|
|
73
|
+
* highlighted users. Re-evaluates on the visibility clock, so callers don't need to
|
|
74
|
+
* drive their own activity timer.
|
|
75
|
+
*/
|
|
76
|
+
@computed
|
|
77
|
+
getVisibleCollaborators(): TLInstancePresence[] {
|
|
78
|
+
this._visibilityClock.get()
|
|
79
|
+
const now = Date.now()
|
|
80
|
+
return this.getCollaborators().filter((presence) => {
|
|
81
|
+
// Treat a missing `lastActivityTimestamp` as "active right now" (elapsed = 0)
|
|
82
|
+
// so newly-joined peers aren't immediately classified as idle/inactive.
|
|
83
|
+
const elapsed = Math.max(0, now - (presence.lastActivityTimestamp ?? now))
|
|
84
|
+
const state = getCollaboratorStateFromElapsedTime(this.editor, elapsed)
|
|
85
|
+
return shouldShowCollaborator(this.editor, presence, state)
|
|
86
|
+
})
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Returns a list of presence records for peer collaborators who should currently be
|
|
91
|
+
* shown in the UI, filtered to those on the current page.
|
|
92
|
+
*/
|
|
93
|
+
@computed
|
|
94
|
+
getVisibleCollaboratorsOnCurrentPage(): TLInstancePresence[] {
|
|
95
|
+
const currentPageId = this.editor.getCurrentPageId()
|
|
96
|
+
return this.getVisibleCollaborators().filter((c) => c.currentPageId === currentPageId)
|
|
97
|
+
}
|
|
98
|
+
}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
TLFontFace,
|
|
3
|
+
TLParentId,
|
|
4
|
+
TLShape,
|
|
5
|
+
TLShapeId,
|
|
6
|
+
createShapeId,
|
|
7
|
+
toRichText,
|
|
8
|
+
} from '@tldraw/tlschema'
|
|
2
9
|
import { IndexKey } from '@tldraw/utils'
|
|
3
10
|
import { Mock, Mocked, vi } from 'vitest'
|
|
4
11
|
import { Editor } from '../../Editor'
|
|
5
|
-
import { FontManager
|
|
12
|
+
import { FontManager } from './FontManager'
|
|
6
13
|
|
|
7
14
|
// Mock the Editor class
|
|
8
15
|
vi.mock('../../Editor')
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { computed, EMPTY_ARRAY, transact } from '@tldraw/state'
|
|
2
2
|
import { AtomMap } from '@tldraw/store'
|
|
3
|
-
import { TLShape, TLShapeId } from '@tldraw/tlschema'
|
|
3
|
+
import { TLFontFace, TLShape, TLShapeId } from '@tldraw/tlschema'
|
|
4
4
|
import {
|
|
5
5
|
areArraysShallowEqual,
|
|
6
6
|
compact,
|
|
@@ -10,72 +10,6 @@ import {
|
|
|
10
10
|
} from '@tldraw/utils'
|
|
11
11
|
import type { Editor } from '../../Editor'
|
|
12
12
|
|
|
13
|
-
/**
|
|
14
|
-
* Represents the `src` property of a {@link TLFontFace}.
|
|
15
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/src | `src`} for details of the properties here.
|
|
16
|
-
* @public
|
|
17
|
-
*/
|
|
18
|
-
export interface TLFontFaceSource {
|
|
19
|
-
/**
|
|
20
|
-
* A URL from which to load the font. If the value here is a key in
|
|
21
|
-
* {@link tldraw#TLEditorAssetUrls.fonts}, the value from there will be used instead.
|
|
22
|
-
*/
|
|
23
|
-
url: string
|
|
24
|
-
format?: string
|
|
25
|
-
tech?: string
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* A font face that can be used in the editor. The properties of this are largely the same as the
|
|
30
|
-
* ones in the
|
|
31
|
-
* {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face | css `@font-face` rule}.
|
|
32
|
-
* @public
|
|
33
|
-
*/
|
|
34
|
-
export interface TLFontFace {
|
|
35
|
-
/**
|
|
36
|
-
* How this font can be referred to in CSS.
|
|
37
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-family | `font-family`}.
|
|
38
|
-
*/
|
|
39
|
-
readonly family: string
|
|
40
|
-
/**
|
|
41
|
-
* The source of the font. This
|
|
42
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/src | `src`}.
|
|
43
|
-
*/
|
|
44
|
-
readonly src: TLFontFaceSource
|
|
45
|
-
/**
|
|
46
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/ascent-override | `ascent-override`}.
|
|
47
|
-
*/
|
|
48
|
-
readonly ascentOverride?: string
|
|
49
|
-
/**
|
|
50
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/descent-override | `descent-override`}.
|
|
51
|
-
*/
|
|
52
|
-
readonly descentOverride?: string
|
|
53
|
-
/**
|
|
54
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-stretch | `font-stretch`}.
|
|
55
|
-
*/
|
|
56
|
-
readonly stretch?: string
|
|
57
|
-
/**
|
|
58
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-style | `font-style`}.
|
|
59
|
-
*/
|
|
60
|
-
readonly style?: string
|
|
61
|
-
/**
|
|
62
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-weight | `font-weight`}.
|
|
63
|
-
*/
|
|
64
|
-
readonly weight?: string
|
|
65
|
-
/**
|
|
66
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-feature-settings | `font-feature-settings`}.
|
|
67
|
-
*/
|
|
68
|
-
readonly featureSettings?: string
|
|
69
|
-
/**
|
|
70
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/line-gap-override | `line-gap-override`}.
|
|
71
|
-
*/
|
|
72
|
-
readonly lineGapOverride?: string
|
|
73
|
-
/**
|
|
74
|
-
* See {@link https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/unicode-range | `unicode-range`}.
|
|
75
|
-
*/
|
|
76
|
-
readonly unicodeRange?: string
|
|
77
|
-
}
|
|
78
|
-
|
|
79
13
|
interface FontState {
|
|
80
14
|
readonly state: 'loading' | 'ready' | 'error'
|
|
81
15
|
readonly instance: FontFace
|
|
@@ -21,7 +21,7 @@ export class InputsManager {
|
|
|
21
21
|
/**
|
|
22
22
|
* @deprecated Use `getOriginPagePoint()` instead.
|
|
23
23
|
*/
|
|
24
|
-
// eslint-disable-next-line no-
|
|
24
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
25
25
|
get originPagePoint() {
|
|
26
26
|
return this.getOriginPagePoint()
|
|
27
27
|
}
|
|
@@ -36,7 +36,7 @@ export class InputsManager {
|
|
|
36
36
|
/**
|
|
37
37
|
* @deprecated Use `getOriginScreenPoint()` instead.
|
|
38
38
|
*/
|
|
39
|
-
// eslint-disable-next-line no-
|
|
39
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
40
40
|
get originScreenPoint() {
|
|
41
41
|
return this.getOriginScreenPoint()
|
|
42
42
|
}
|
|
@@ -51,7 +51,7 @@ export class InputsManager {
|
|
|
51
51
|
/**
|
|
52
52
|
* @deprecated Use `getPreviousPagePoint()` instead.
|
|
53
53
|
*/
|
|
54
|
-
// eslint-disable-next-line no-
|
|
54
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
55
55
|
get previousPagePoint() {
|
|
56
56
|
return this.getPreviousPagePoint()
|
|
57
57
|
}
|
|
@@ -66,7 +66,7 @@ export class InputsManager {
|
|
|
66
66
|
/**
|
|
67
67
|
* @deprecated Use `getPreviousScreenPoint()` instead.
|
|
68
68
|
*/
|
|
69
|
-
// eslint-disable-next-line no-
|
|
69
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
70
70
|
get previousScreenPoint() {
|
|
71
71
|
return this.getPreviousScreenPoint()
|
|
72
72
|
}
|
|
@@ -81,7 +81,7 @@ export class InputsManager {
|
|
|
81
81
|
/**
|
|
82
82
|
* @deprecated Use `getCurrentPagePoint()` instead.
|
|
83
83
|
*/
|
|
84
|
-
// eslint-disable-next-line no-
|
|
84
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
85
85
|
get currentPagePoint() {
|
|
86
86
|
return this.getCurrentPagePoint()
|
|
87
87
|
}
|
|
@@ -96,7 +96,7 @@ export class InputsManager {
|
|
|
96
96
|
/**
|
|
97
97
|
* @deprecated Use `getCurrentScreenPoint()` instead.
|
|
98
98
|
*/
|
|
99
|
-
// eslint-disable-next-line no-
|
|
99
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
100
100
|
get currentScreenPoint() {
|
|
101
101
|
return this.getCurrentScreenPoint()
|
|
102
102
|
}
|
|
@@ -111,7 +111,7 @@ export class InputsManager {
|
|
|
111
111
|
/**
|
|
112
112
|
* @deprecated Use `getPointerVelocity()` instead.
|
|
113
113
|
*/
|
|
114
|
-
// eslint-disable-next-line no-
|
|
114
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
115
115
|
get pointerVelocity() {
|
|
116
116
|
return this.getPointerVelocity()
|
|
117
117
|
}
|
|
@@ -147,11 +147,11 @@ export class InputsManager {
|
|
|
147
147
|
/**
|
|
148
148
|
* @deprecated Use `getIsPen()` instead.
|
|
149
149
|
*/
|
|
150
|
-
// eslint-disable-next-line no-
|
|
150
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
151
151
|
get isPen() {
|
|
152
152
|
return this.getIsPen()
|
|
153
153
|
}
|
|
154
|
-
// eslint-disable-next-line no-
|
|
154
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
155
155
|
set isPen(isPen: boolean) {
|
|
156
156
|
this.setIsPen(isPen)
|
|
157
157
|
}
|
|
@@ -172,11 +172,11 @@ export class InputsManager {
|
|
|
172
172
|
/**
|
|
173
173
|
* @deprecated Use `getShiftKey()` instead.
|
|
174
174
|
*/
|
|
175
|
-
// eslint-disable-next-line no-
|
|
175
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
176
176
|
get shiftKey() {
|
|
177
177
|
return this.getShiftKey()
|
|
178
178
|
}
|
|
179
|
-
// eslint-disable-next-line no-
|
|
179
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
180
180
|
set shiftKey(shiftKey: boolean) {
|
|
181
181
|
this.setShiftKey(shiftKey)
|
|
182
182
|
}
|
|
@@ -198,11 +198,11 @@ export class InputsManager {
|
|
|
198
198
|
/**
|
|
199
199
|
* @deprecated Use `getMetaKey()` instead.
|
|
200
200
|
*/
|
|
201
|
-
// eslint-disable-next-line no-
|
|
201
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
202
202
|
get metaKey() {
|
|
203
203
|
return this.getMetaKey()
|
|
204
204
|
}
|
|
205
|
-
// eslint-disable-next-line no-
|
|
205
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
206
206
|
set metaKey(metaKey: boolean) {
|
|
207
207
|
this.setMetaKey(metaKey)
|
|
208
208
|
}
|
|
@@ -224,11 +224,11 @@ export class InputsManager {
|
|
|
224
224
|
/**
|
|
225
225
|
* @deprecated Use `getCtrlKey()` instead.
|
|
226
226
|
*/
|
|
227
|
-
// eslint-disable-next-line no-
|
|
227
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
228
228
|
get ctrlKey() {
|
|
229
229
|
return this.getCtrlKey()
|
|
230
230
|
}
|
|
231
|
-
// eslint-disable-next-line no-
|
|
231
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
232
232
|
set ctrlKey(ctrlKey: boolean) {
|
|
233
233
|
this.setCtrlKey(ctrlKey)
|
|
234
234
|
}
|
|
@@ -250,11 +250,11 @@ export class InputsManager {
|
|
|
250
250
|
/**
|
|
251
251
|
* @deprecated Use `getAltKey()` instead.
|
|
252
252
|
*/
|
|
253
|
-
// eslint-disable-next-line no-
|
|
253
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
254
254
|
get altKey() {
|
|
255
255
|
return this.getAltKey()
|
|
256
256
|
}
|
|
257
|
-
// eslint-disable-next-line no-
|
|
257
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
258
258
|
set altKey(altKey: boolean) {
|
|
259
259
|
this.setAltKey(altKey)
|
|
260
260
|
}
|
|
@@ -275,7 +275,7 @@ export class InputsManager {
|
|
|
275
275
|
/**
|
|
276
276
|
* @deprecated Use `getAccelKey()` instead.
|
|
277
277
|
*/
|
|
278
|
-
// eslint-disable-next-line no-
|
|
278
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
279
279
|
get accelKey() {
|
|
280
280
|
return this.getAccelKey()
|
|
281
281
|
}
|
|
@@ -290,11 +290,11 @@ export class InputsManager {
|
|
|
290
290
|
/**
|
|
291
291
|
* Soon to be deprecated, use `getIsDragging()` instead.
|
|
292
292
|
*/
|
|
293
|
-
// eslint-disable-next-line no-
|
|
293
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
294
294
|
get isDragging() {
|
|
295
295
|
return this.getIsDragging()
|
|
296
296
|
}
|
|
297
|
-
// eslint-disable-next-line no-
|
|
297
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
298
298
|
set isDragging(isDragging: boolean) {
|
|
299
299
|
this.setIsDragging(isDragging)
|
|
300
300
|
}
|
|
@@ -315,11 +315,11 @@ export class InputsManager {
|
|
|
315
315
|
/**
|
|
316
316
|
* @deprecated Use `getIsPointing()` instead.
|
|
317
317
|
*/
|
|
318
|
-
// eslint-disable-next-line no-
|
|
318
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
319
319
|
get isPointing() {
|
|
320
320
|
return this.getIsPointing()
|
|
321
321
|
}
|
|
322
|
-
// eslint-disable-next-line no-
|
|
322
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
323
323
|
set isPointing(isPointing: boolean) {
|
|
324
324
|
this.setIsPointing(isPointing)
|
|
325
325
|
}
|
|
@@ -331,6 +331,18 @@ export class InputsManager {
|
|
|
331
331
|
this._isPointing.set(isPointing)
|
|
332
332
|
}
|
|
333
333
|
|
|
334
|
+
private _isRightPointing = atom<boolean>('isRightPointing', false)
|
|
335
|
+
/**
|
|
336
|
+
* Whether the user is right-click pointing (before drag threshold).
|
|
337
|
+
*/
|
|
338
|
+
getIsRightPointing() {
|
|
339
|
+
return this._isRightPointing.get()
|
|
340
|
+
}
|
|
341
|
+
/** @internal */
|
|
342
|
+
setIsRightPointing(isRightPointing: boolean) {
|
|
343
|
+
this._isRightPointing.set(isRightPointing)
|
|
344
|
+
}
|
|
345
|
+
|
|
334
346
|
private _isPinching = atom<boolean>('isPinching', false)
|
|
335
347
|
/**
|
|
336
348
|
* Whether the user is pinching.
|
|
@@ -341,11 +353,11 @@ export class InputsManager {
|
|
|
341
353
|
/**
|
|
342
354
|
* @deprecated Use `getIsPinching()` instead.
|
|
343
355
|
*/
|
|
344
|
-
// eslint-disable-next-line no-
|
|
356
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
345
357
|
get isPinching() {
|
|
346
358
|
return this.getIsPinching()
|
|
347
359
|
}
|
|
348
|
-
// eslint-disable-next-line no-
|
|
360
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
349
361
|
set isPinching(isPinching: boolean) {
|
|
350
362
|
this.setIsPinching(isPinching)
|
|
351
363
|
}
|
|
@@ -367,11 +379,11 @@ export class InputsManager {
|
|
|
367
379
|
/**
|
|
368
380
|
* @deprecated Use `getIsEditing()` instead.
|
|
369
381
|
*/
|
|
370
|
-
// eslint-disable-next-line no-
|
|
382
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
371
383
|
get isEditing() {
|
|
372
384
|
return this.getIsEditing()
|
|
373
385
|
}
|
|
374
|
-
// eslint-disable-next-line no-
|
|
386
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
375
387
|
set isEditing(isEditing: boolean) {
|
|
376
388
|
this.setIsEditing(isEditing)
|
|
377
389
|
}
|
|
@@ -392,11 +404,11 @@ export class InputsManager {
|
|
|
392
404
|
/**
|
|
393
405
|
* @deprecated Use `getIsPanning()` instead.
|
|
394
406
|
*/
|
|
395
|
-
// eslint-disable-next-line no-
|
|
407
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
396
408
|
get isPanning() {
|
|
397
409
|
return this.getIsPanning()
|
|
398
410
|
}
|
|
399
|
-
// eslint-disable-next-line no-
|
|
411
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
400
412
|
set isPanning(isPanning: boolean) {
|
|
401
413
|
this.setIsPanning(isPanning)
|
|
402
414
|
}
|
|
@@ -418,11 +430,11 @@ export class InputsManager {
|
|
|
418
430
|
/**
|
|
419
431
|
* @deprecated Use `getIsSpacebarPanning()` instead.
|
|
420
432
|
*/
|
|
421
|
-
// eslint-disable-next-line no-
|
|
433
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
422
434
|
get isSpacebarPanning() {
|
|
423
435
|
return this.getIsSpacebarPanning()
|
|
424
436
|
}
|
|
425
|
-
// eslint-disable-next-line no-
|
|
437
|
+
// eslint-disable-next-line tldraw/no-setter-getter
|
|
426
438
|
set isSpacebarPanning(isSpacebarPanning: boolean) {
|
|
427
439
|
this.setIsSpacebarPanning(isSpacebarPanning)
|
|
428
440
|
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { PerformanceManager } from './PerformanceManager'
|
|
2
|
+
|
|
3
|
+
/** Wrap performance.mark with try/catch — `detail` option may throw in Safari/Firefox. */
|
|
4
|
+
function safeMark(name: string, detail?: Record<string, unknown>) {
|
|
5
|
+
try {
|
|
6
|
+
performance.mark(name, detail ? { detail } : undefined)
|
|
7
|
+
} catch {
|
|
8
|
+
performance.mark(name)
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Optional adapter that pipes PerformanceManager events into browser
|
|
14
|
+
* `performance.mark()` / `performance.measure()` for DevTools integration.
|
|
15
|
+
*
|
|
16
|
+
* Tree-shakeable — only included if imported.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const adapter = new PerformanceApiAdapter(editor.performance)
|
|
21
|
+
* // ... later
|
|
22
|
+
* adapter.dispose()
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @public
|
|
26
|
+
*/
|
|
27
|
+
export class PerformanceApiAdapter {
|
|
28
|
+
private cleanups: (() => void)[] = []
|
|
29
|
+
|
|
30
|
+
constructor(perfManager: PerformanceManager) {
|
|
31
|
+
this.cleanups.push(
|
|
32
|
+
perfManager.on('interaction-start', (event) => {
|
|
33
|
+
safeMark(`tldraw:interaction:${event.name}:start`, { path: event.path })
|
|
34
|
+
})
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
this.cleanups.push(
|
|
38
|
+
perfManager.on('interaction-end', (event) => {
|
|
39
|
+
const startMark = `tldraw:interaction:${event.name}:start`
|
|
40
|
+
const endMark = `tldraw:interaction:${event.name}:end`
|
|
41
|
+
safeMark(endMark, {
|
|
42
|
+
path: event.path,
|
|
43
|
+
fps: event.fps,
|
|
44
|
+
frameCount: event.frameCount,
|
|
45
|
+
shapeCount: event.shapeCount,
|
|
46
|
+
})
|
|
47
|
+
try {
|
|
48
|
+
performance.measure(`tldraw:interaction:${event.name}`, startMark, endMark)
|
|
49
|
+
} catch {
|
|
50
|
+
// start mark may not exist if adapter attached mid-interaction
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
this.cleanups.push(
|
|
56
|
+
perfManager.on('camera-start', (event) => {
|
|
57
|
+
safeMark(`tldraw:camera:${event.type}:start`)
|
|
58
|
+
})
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
this.cleanups.push(
|
|
62
|
+
perfManager.on('camera-end', (event) => {
|
|
63
|
+
const startMark = `tldraw:camera:${event.type}:start`
|
|
64
|
+
const endMark = `tldraw:camera:${event.type}:end`
|
|
65
|
+
safeMark(endMark, { fps: event.fps, shapeCount: event.shapeCount })
|
|
66
|
+
try {
|
|
67
|
+
performance.measure(`tldraw:camera:${event.type}`, startMark, endMark)
|
|
68
|
+
} catch {
|
|
69
|
+
// start mark may not exist
|
|
70
|
+
}
|
|
71
|
+
})
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** Remove all listeners and stop piping events. @public */
|
|
76
|
+
dispose() {
|
|
77
|
+
for (const cleanup of this.cleanups) {
|
|
78
|
+
cleanup()
|
|
79
|
+
}
|
|
80
|
+
this.cleanups.length = 0
|
|
81
|
+
}
|
|
82
|
+
}
|