@tldraw/editor 4.6.0-next.0eb36d65eec3 → 4.6.0-next.1a05e8ec7833
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 +816 -112
- package/dist-cjs/index.js +22 -6
- package/dist-cjs/index.js.map +3 -3
- package/dist-cjs/lib/TldrawEditor.js +59 -14
- package/dist-cjs/lib/TldrawEditor.js.map +3 -3
- package/dist-cjs/lib/components/LiveCollaborators.js +1 -0
- package/dist-cjs/lib/components/LiveCollaborators.js.map +2 -2
- 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/CanvasShapeIndicators.js +10 -3
- package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js.map +3 -3
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +5 -2
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js +1 -0
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.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 +30 -0
- package/dist-cjs/lib/config/createTLStore.js.map +2 -2
- package/dist-cjs/lib/config/defaultAssets.js +36 -0
- package/dist-cjs/lib/config/defaultAssets.js.map +7 -0
- package/dist-cjs/lib/editor/Editor.js +389 -13
- 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 +1 -0
- package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js.map +1 -1
- package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +1 -0
- package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +1 -1
- package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js +1 -0
- 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 +12 -0
- 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/editor/managers/PerformanceManager/perf-types.js +17 -0
- 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 +1 -0
- package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js.map +1 -1
- package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js +1 -0
- package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js.map +1 -1
- package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js +2 -1
- package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js +1 -0
- package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js.map +1 -1
- package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +1 -0
- package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +1 -1
- 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 +586 -0
- package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js.map +7 -0
- package/dist-cjs/lib/editor/managers/TickManager/TickManager.js +1 -0
- package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +1 -1
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +8 -4
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
- 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 +32 -2
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +1 -1
- 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/external-content.js.map +1 -1
- package/dist-cjs/lib/exports/ExportDelay.js +1 -0
- package/dist-cjs/lib/exports/ExportDelay.js.map +1 -1
- package/dist-cjs/lib/exports/StyleEmbedder.js +1 -0
- package/dist-cjs/lib/exports/StyleEmbedder.js.map +1 -1
- 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/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/useGestureEvents.js +171 -127
- package/dist-cjs/lib/hooks/useGestureEvents.js.map +3 -3
- package/dist-cjs/lib/options.js +2 -0
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/primitives/Vec.js +3 -0
- package/dist-cjs/lib/primitives/Vec.js.map +1 -1
- package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -0
- package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +1 -1
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +1 -0
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +1 -1
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js +2 -0
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +1 -1
- package/dist-cjs/lib/primitives/geometry/Stadium2d.js +1 -0
- package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +1 -1
- package/dist-cjs/lib/utils/EditorAtom.js +2 -0
- package/dist-cjs/lib/utils/EditorAtom.js.map +1 -1
- 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 +2 -0
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +1 -1
- 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 +816 -112
- package/dist-esm/index.mjs +27 -9
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +62 -14
- package/dist-esm/lib/TldrawEditor.mjs.map +3 -3
- package/dist-esm/lib/components/LiveCollaborators.mjs +1 -0
- package/dist-esm/lib/components/LiveCollaborators.mjs.map +2 -2
- 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/CanvasShapeIndicators.mjs +10 -3
- package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs.map +3 -3
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +5 -2
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs +1 -0
- package/dist-esm/lib/components/default-components/DefaultShapeIndicators.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 +36 -1
- 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/editor/Editor.mjs +391 -13
- 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 +1 -0
- package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +1 -0
- package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs +1 -0
- 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 +12 -0
- 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 +1 -0
- package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs +1 -0
- package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs +2 -1
- package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs +1 -0
- package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +1 -0
- package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +1 -1
- 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 +568 -0
- package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs.map +7 -0
- package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs +1 -0
- package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +1 -1
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +8 -4
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
- 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 +32 -2
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +1 -1
- 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/exports/ExportDelay.mjs +1 -0
- package/dist-esm/lib/exports/ExportDelay.mjs.map +1 -1
- package/dist-esm/lib/exports/StyleEmbedder.mjs +1 -0
- package/dist-esm/lib/exports/StyleEmbedder.mjs.map +1 -1
- 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/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/useGestureEvents.mjs +171 -127
- package/dist-esm/lib/hooks/useGestureEvents.mjs.map +3 -3
- package/dist-esm/lib/options.mjs +2 -0
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/primitives/Vec.mjs +3 -0
- package/dist-esm/lib/primitives/Vec.mjs.map +1 -1
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs +1 -0
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +1 -1
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +1 -0
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +1 -1
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +2 -0
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +1 -1
- package/dist-esm/lib/primitives/geometry/Stadium2d.mjs +1 -0
- package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +1 -1
- package/dist-esm/lib/utils/EditorAtom.mjs +2 -0
- package/dist-esm/lib/utils/EditorAtom.mjs.map +1 -1
- 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 +2 -0
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +1 -1
- 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 +13 -37
- package/package.json +8 -9
- package/src/index.ts +30 -7
- package/src/lib/TldrawEditor.tsx +98 -19
- package/src/lib/components/LiveCollaborators.tsx +8 -2
- package/src/lib/components/MenuClickCapture.tsx +129 -49
- package/src/lib/components/default-components/CanvasShapeIndicators.tsx +14 -3
- package/src/lib/components/default-components/DefaultCanvas.tsx +6 -2
- package/src/lib/components/default-components/DefaultShapeIndicator.tsx +2 -2
- package/src/lib/components/default-components/DefaultShapeIndicators.tsx +2 -0
- package/src/lib/config/{createTLUser.ts → createTLCurrentUser.ts} +6 -6
- package/src/lib/config/createTLStore.ts +57 -2
- package/src/lib/config/defaultAssets.ts +19 -0
- package/src/lib/editor/Editor.ts +526 -42
- package/src/lib/editor/assets/AssetUtil.ts +85 -0
- 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 +12 -0
- 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/SnapManager.test.ts +13 -2
- package/src/lib/editor/managers/SnapManager/SnapManager.ts +1 -1
- package/src/lib/editor/managers/ThemeManager/ThemeManager.ts +116 -0
- package/src/lib/editor/managers/ThemeManager/defaultThemes.ts +605 -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/shapes/BaseFrameLikeShapeUtil.tsx +121 -0
- package/src/lib/editor/shapes/ShapeUtil.ts +50 -3
- package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +1 -1
- 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/external-content.ts +1 -0
- package/src/lib/exports/getSvgJsx.tsx +23 -16
- package/src/lib/globals/environment.ts +18 -0
- 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/useGestureEvents.ts +240 -168
- package/src/lib/options.ts +14 -0
- package/src/lib/primitives/Box.test.ts +30 -0
- package/src/lib/primitives/geometry/Geometry2d.test.ts +21 -0
- 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/hardReset.ts +0 -8
- package/src/version.ts +3 -3
- package/dist-cjs/lib/config/createTLUser.js.map +0 -7
- package/dist-cjs/lib/hooks/useIsDarkMode.js.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
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import { useAtom, useValue } from '@tldraw/state-react'
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
TLShape,
|
|
5
|
-
TLShapeId,
|
|
6
|
-
getColorValue,
|
|
7
|
-
getDefaultColorTheme,
|
|
8
|
-
} from '@tldraw/tlschema'
|
|
2
|
+
import { TLFrameShape, TLShape, TLShapeId } from '@tldraw/tlschema'
|
|
3
|
+
import { TLFontFace } from '@tldraw/tlschema'
|
|
9
4
|
import { hasOwnProperty, promiseWithResolve, uniqueId } from '@tldraw/utils'
|
|
10
5
|
import {
|
|
11
6
|
ComponentType,
|
|
@@ -21,7 +16,7 @@ import { flushSync } from 'react-dom'
|
|
|
21
16
|
import { ErrorBoundary } from '../components/ErrorBoundary'
|
|
22
17
|
import { InnerShape, InnerShapeBackground } from '../components/Shape'
|
|
23
18
|
import type { Editor, TLRenderingShape } from '../editor/Editor'
|
|
24
|
-
import {
|
|
19
|
+
import { getColorValue } from '../editor/managers/ThemeManager/defaultThemes'
|
|
25
20
|
import { ShapeUtil } from '../editor/shapes/ShapeUtil'
|
|
26
21
|
import { TLImageExportOptions } from '../editor/types/misc-types'
|
|
27
22
|
import {
|
|
@@ -54,7 +49,9 @@ export function getSvgJsx(editor: Editor, ids: TLShapeId[], opts: TLImageExportO
|
|
|
54
49
|
const renderPadding =
|
|
55
50
|
typeof opts.padding === 'number' ? opts.padding : editor.options.defaultSvgPadding
|
|
56
51
|
|
|
57
|
-
const
|
|
52
|
+
const colorMode: 'light' | 'dark' =
|
|
53
|
+
opts.darkMode !== undefined ? (opts.darkMode ? 'dark' : 'light') : editor.getColorMode()
|
|
54
|
+
const isDarkMode = colorMode === 'dark'
|
|
58
55
|
|
|
59
56
|
// ---Figure out which shapes we need to include
|
|
60
57
|
const shapeIdsToInclude = editor.getShapeAndDescendantIds(ids)
|
|
@@ -63,8 +60,9 @@ export function getSvgJsx(editor: Editor, ids: TLShapeId[], opts: TLImageExportO
|
|
|
63
60
|
.filter(({ id }) => shapeIdsToInclude.has(id))
|
|
64
61
|
|
|
65
62
|
// --- Common bounding box of all shapes
|
|
63
|
+
const singleFrameShape = ids.length === 1 ? editor.getShape(ids[0]) : null
|
|
66
64
|
const singleFrameShapeId =
|
|
67
|
-
|
|
65
|
+
singleFrameShape && editor.isShapeFrameLike(singleFrameShape) ? ids[0] : null
|
|
68
66
|
|
|
69
67
|
let bbox: null | Box = null
|
|
70
68
|
let paddingWasApplied = false
|
|
@@ -116,6 +114,7 @@ export function getSvgJsx(editor: Editor, ids: TLShapeId[], opts: TLImageExportO
|
|
|
116
114
|
background={background}
|
|
117
115
|
singleFrameShapeId={singleFrameShapeId}
|
|
118
116
|
isDarkMode={isDarkMode}
|
|
117
|
+
colorMode={colorMode}
|
|
119
118
|
renderingShapes={renderingShapes}
|
|
120
119
|
onMount={initialEffectPromise.resolve}
|
|
121
120
|
waitUntil={exportDelay.waitUntil}
|
|
@@ -206,6 +205,7 @@ function SvgExport({
|
|
|
206
205
|
background,
|
|
207
206
|
singleFrameShapeId,
|
|
208
207
|
isDarkMode,
|
|
208
|
+
colorMode,
|
|
209
209
|
renderingShapes,
|
|
210
210
|
onMount,
|
|
211
211
|
waitUntil,
|
|
@@ -218,12 +218,13 @@ function SvgExport({
|
|
|
218
218
|
background: boolean
|
|
219
219
|
singleFrameShapeId: TLShapeId | null
|
|
220
220
|
isDarkMode: boolean
|
|
221
|
+
colorMode: 'light' | 'dark'
|
|
221
222
|
renderingShapes: TLRenderingShape[]
|
|
222
223
|
onMount(): void
|
|
223
224
|
waitUntil(promise: Promise<void>): void
|
|
224
225
|
}) {
|
|
225
226
|
const masksId = useUniqueSafeId()
|
|
226
|
-
const theme =
|
|
227
|
+
const theme = editor.getCurrentTheme()
|
|
227
228
|
|
|
228
229
|
const stateAtom = useAtom<{
|
|
229
230
|
defsById: Record<
|
|
@@ -257,6 +258,7 @@ function SvgExport({
|
|
|
257
258
|
const exportContext = useMemo(
|
|
258
259
|
(): SvgExportContext => ({
|
|
259
260
|
isDarkMode,
|
|
261
|
+
colorMode,
|
|
260
262
|
waitUntil,
|
|
261
263
|
addExportDef,
|
|
262
264
|
scale,
|
|
@@ -272,7 +274,7 @@ function SvgExport({
|
|
|
272
274
|
})
|
|
273
275
|
},
|
|
274
276
|
}),
|
|
275
|
-
[isDarkMode, waitUntil, addExportDef, scale, pixelRatio, editor]
|
|
277
|
+
[isDarkMode, colorMode, waitUntil, addExportDef, scale, pixelRatio, editor]
|
|
276
278
|
)
|
|
277
279
|
|
|
278
280
|
const didRenderRef = useRef(false)
|
|
@@ -443,17 +445,22 @@ function SvgExport({
|
|
|
443
445
|
onMount()
|
|
444
446
|
}, [onMount, shapeElements])
|
|
445
447
|
|
|
446
|
-
|
|
448
|
+
const colors = theme.colors[colorMode]
|
|
449
|
+
let backgroundColor = background ? colors.background : 'transparent'
|
|
447
450
|
|
|
448
451
|
if (singleFrameShapeId && background) {
|
|
449
452
|
const frameShapeUtil = editor.getShapeUtil('frame') as any as
|
|
450
453
|
| undefined
|
|
451
|
-
| {
|
|
454
|
+
| {
|
|
455
|
+
options: {
|
|
456
|
+
showColors: boolean
|
|
457
|
+
}
|
|
458
|
+
}
|
|
452
459
|
if (frameShapeUtil?.options.showColors) {
|
|
453
460
|
const shape = editor.getShape(singleFrameShapeId)! as TLFrameShape
|
|
454
|
-
backgroundColor = getColorValue(
|
|
461
|
+
backgroundColor = getColorValue(colors, shape.props.color, 'frameFill')
|
|
455
462
|
} else {
|
|
456
|
-
backgroundColor =
|
|
463
|
+
backgroundColor = colors.solid
|
|
457
464
|
}
|
|
458
465
|
}
|
|
459
466
|
|
|
@@ -46,8 +46,26 @@ const tlenvReactive = atom('tlenvReactive', {
|
|
|
46
46
|
// on touch-screen laptops, which will become "coarse" if the user touches the screen.
|
|
47
47
|
// See https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@media/pointer#coarse
|
|
48
48
|
isCoarsePointer: false,
|
|
49
|
+
// Whether the user's display supports P3 color space. This is dynamic because a window can
|
|
50
|
+
// move between displays with different color gamut support.
|
|
51
|
+
supportsP3ColorSpace: false,
|
|
49
52
|
})
|
|
50
53
|
|
|
54
|
+
if (typeof window !== 'undefined') {
|
|
55
|
+
const canRenderP3 = typeof CSS !== 'undefined' && CSS.supports('color', 'color(display-p3 1 1 1)')
|
|
56
|
+
if (canRenderP3) {
|
|
57
|
+
const p3mql = window.matchMedia('(color-gamut: p3)')
|
|
58
|
+
const updateSupportsP3 = () => {
|
|
59
|
+
const supportsP3 = p3mql.matches
|
|
60
|
+
if (supportsP3 !== tlenvReactive.__unsafe__getWithoutCapture().supportsP3ColorSpace) {
|
|
61
|
+
tlenvReactive.update((prev) => ({ ...prev, supportsP3ColorSpace: supportsP3 }))
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
updateSupportsP3()
|
|
65
|
+
p3mql.addEventListener('change', updateSupportsP3)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
51
69
|
if (typeof window !== 'undefined' && !isForcedFinePointer) {
|
|
52
70
|
const mql = getGlobalWindow().matchMedia && getGlobalWindow().matchMedia('(any-pointer: coarse)')
|
|
53
71
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { useValue } from '@tldraw/state-react'
|
|
2
2
|
import React, { useEffect, useMemo } from 'react'
|
|
3
|
-
import { RIGHT_MOUSE_BUTTON } from '../constants'
|
|
4
3
|
import { tlenv } from '../globals/environment'
|
|
5
4
|
import {
|
|
6
5
|
elementShouldCaptureKeys,
|
|
@@ -21,7 +20,9 @@ export function useCanvasEvents() {
|
|
|
21
20
|
function onPointerDown(e: React.PointerEvent) {
|
|
22
21
|
if (editor.wasEventAlreadyHandled(e)) return
|
|
23
22
|
|
|
24
|
-
|
|
23
|
+
// With right-click panning disabled, fire right_click on press and let the
|
|
24
|
+
// native contextmenu through so the menu opens at the pointer-down location.
|
|
25
|
+
if (e.button === 2 && !editor.options.rightClickPanning) {
|
|
25
26
|
editor.dispatch({
|
|
26
27
|
type: 'pointer',
|
|
27
28
|
target: 'canvas',
|
|
@@ -31,7 +32,7 @@ export function useCanvasEvents() {
|
|
|
31
32
|
return
|
|
32
33
|
}
|
|
33
34
|
|
|
34
|
-
if (e.button !== 0 && e.button !== 1 && e.button !== 5) return
|
|
35
|
+
if (e.button !== 0 && e.button !== 1 && e.button !== 2 && e.button !== 5) return
|
|
35
36
|
|
|
36
37
|
setPointerCapture(e.currentTarget, e)
|
|
37
38
|
|
|
@@ -47,6 +48,11 @@ export function useCanvasEvents() {
|
|
|
47
48
|
if (editor.wasEventAlreadyHandled(e)) return
|
|
48
49
|
if (e.button !== 0 && e.button !== 1 && e.button !== 2 && e.button !== 5) return
|
|
49
50
|
|
|
51
|
+
const rightClickPanning = editor.options.rightClickPanning
|
|
52
|
+
// Check before dispatch (which resets isPanning)
|
|
53
|
+
const wasRightClickPanning =
|
|
54
|
+
rightClickPanning && e.button === 2 && editor.inputs.getIsPanning()
|
|
55
|
+
|
|
50
56
|
releasePointerCapture(e.currentTarget, e)
|
|
51
57
|
|
|
52
58
|
editor.dispatch({
|
|
@@ -55,6 +61,21 @@ export function useCanvasEvents() {
|
|
|
55
61
|
name: 'pointer_up',
|
|
56
62
|
...getPointerInfo(editor, e),
|
|
57
63
|
})
|
|
64
|
+
|
|
65
|
+
// Static right-click: fire contextmenu at the pointer-up location
|
|
66
|
+
if (rightClickPanning && e.button === 2 && !wasRightClickPanning) {
|
|
67
|
+
const contextMenuEvent = new PointerEvent('contextmenu', {
|
|
68
|
+
bubbles: true,
|
|
69
|
+
clientX: e.clientX,
|
|
70
|
+
clientY: e.clientY,
|
|
71
|
+
button: 2,
|
|
72
|
+
buttons: 0,
|
|
73
|
+
pointerId: e.pointerId,
|
|
74
|
+
pointerType: e.pointerType,
|
|
75
|
+
isPrimary: e.isPrimary,
|
|
76
|
+
})
|
|
77
|
+
e.currentTarget.dispatchEvent(contextMenuEvent)
|
|
78
|
+
}
|
|
58
79
|
}
|
|
59
80
|
|
|
60
81
|
function onPointerEnter(e: React.PointerEvent) {
|
|
@@ -143,6 +164,21 @@ export function useCanvasEvents() {
|
|
|
143
164
|
e.stopPropagation()
|
|
144
165
|
}
|
|
145
166
|
|
|
167
|
+
function onContextMenu(e: React.MouseEvent) {
|
|
168
|
+
// With right-click panning disabled, let the native contextmenu through so the
|
|
169
|
+
// menu opens on press.
|
|
170
|
+
if (!editor.options.rightClickPanning) return
|
|
171
|
+
// Synthetic events — our own dispatch from onPointerUp, or tests using
|
|
172
|
+
// fireEvent.contextMenu — pass through so Radix can open the menu. The real
|
|
173
|
+
// browser contextmenu is always suppressed: right-click behavior has
|
|
174
|
+
// already been decided by our pointer handling (either we dispatched a
|
|
175
|
+
// synthetic to open the menu at the release position, or we panned and
|
|
176
|
+
// don't want a menu at all).
|
|
177
|
+
if (e.nativeEvent.isTrusted) {
|
|
178
|
+
preventDefault(e)
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
146
182
|
return {
|
|
147
183
|
onPointerDown,
|
|
148
184
|
onPointerUp,
|
|
@@ -153,6 +189,7 @@ export function useCanvasEvents() {
|
|
|
153
189
|
onTouchStart,
|
|
154
190
|
onTouchEnd,
|
|
155
191
|
onClick,
|
|
192
|
+
onContextMenu,
|
|
156
193
|
}
|
|
157
194
|
},
|
|
158
195
|
[editor]
|
|
@@ -3,11 +3,15 @@ import { useSvgExportContext } from '../editor/types/SvgExportContext'
|
|
|
3
3
|
import { useEditor } from './useEditor'
|
|
4
4
|
|
|
5
5
|
/** @public */
|
|
6
|
-
export function
|
|
6
|
+
export function useColorMode(): 'light' | 'dark' {
|
|
7
7
|
const editor = useEditor()
|
|
8
8
|
const exportContext = useSvgExportContext()
|
|
9
|
-
return useValue(
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
return useValue(
|
|
10
|
+
'colorMode',
|
|
11
|
+
() => {
|
|
12
|
+
if (exportContext) return exportContext.colorMode
|
|
13
|
+
return editor.getColorMode()
|
|
14
|
+
},
|
|
15
|
+
[exportContext, editor]
|
|
16
|
+
)
|
|
13
17
|
}
|
|
@@ -3,7 +3,6 @@ import { TLCursorType } from '@tldraw/tlschema'
|
|
|
3
3
|
import { PI, radiansToDegrees } from '../primitives/utils'
|
|
4
4
|
import { useContainer } from './useContainer'
|
|
5
5
|
import { useEditor } from './useEditor'
|
|
6
|
-
import { useIsDarkMode } from './useIsDarkMode'
|
|
7
6
|
|
|
8
7
|
const CORNER_SVG = `<path d='m19.7432 17.0869-4.072 4.068 2.829 2.828-8.473-.013-.013-8.47 2.841 2.842 4.075-4.068 1.414-1.415-2.844-2.842h8.486v8.484l-2.83-2.827z' fill='%23fff'/><path d='m18.6826 16.7334-4.427 4.424 1.828 1.828-5.056-.016-.014-5.054 1.842 1.841 4.428-4.422 2.474-2.475-1.844-1.843h5.073v5.071l-1.83-1.828z' fill='%23000'/>`
|
|
9
8
|
const EDGE_SVG = `<path d='m9 17.9907v.005l5.997 5.996.001-3.999h1.999 2.02v4l5.98-6.001-5.98-5.999.001 4.019-2.021.002h-2l.001-4.022zm1.411.003 3.587-3.588-.001 2.587h3.5 2.521v-2.585l3.565 3.586-3.564 3.585-.001-2.585h-2.521l-3.499-.001-.001 2.586z' fill='%23fff'/><path d='m17.4971 18.9932h2.521v2.586l3.565-3.586-3.565-3.585v2.605h-2.521-3.5v-2.607l-3.586 3.587 3.586 3.586v-2.587z' fill='%23000'/>`
|
|
@@ -67,7 +66,6 @@ export function getCursor(cursor: TLCursorType, rotation = 0, color = 'black') {
|
|
|
67
66
|
export function useCursor() {
|
|
68
67
|
const editor = useEditor()
|
|
69
68
|
const container = useContainer()
|
|
70
|
-
const isDarkMode = useIsDarkMode()
|
|
71
69
|
|
|
72
70
|
useQuickReactor(
|
|
73
71
|
'useCursor',
|
|
@@ -79,11 +77,9 @@ export function useCursor() {
|
|
|
79
77
|
return
|
|
80
78
|
}
|
|
81
79
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
getCursor(type, rotation, isDarkMode ? 'white' : 'black')
|
|
85
|
-
)
|
|
80
|
+
const { cursor } = editor.getCurrentTheme().colors[editor.getColorMode()]
|
|
81
|
+
container.style.setProperty('--tl-cursor', getCursor(type, rotation, cursor))
|
|
86
82
|
},
|
|
87
|
-
[editor, container
|
|
83
|
+
[editor, container]
|
|
88
84
|
)
|
|
89
85
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { useValue } from '@tldraw/state-react'
|
|
2
2
|
import React from 'react'
|
|
3
3
|
import { debugFlags } from '../utils/debug-flags'
|
|
4
|
+
import { useColorMode } from './useColorMode'
|
|
4
5
|
import { useContainer } from './useContainer'
|
|
5
6
|
import { useEditor } from './useEditor'
|
|
6
|
-
import { useIsDarkMode } from './useIsDarkMode'
|
|
7
7
|
|
|
8
8
|
export function useDarkMode() {
|
|
9
9
|
const editor = useEditor()
|
|
10
10
|
const container = useContainer()
|
|
11
|
-
const
|
|
11
|
+
const colorMode = useColorMode()
|
|
12
12
|
const forceSrgb = useValue(debugFlags.forceSrgb)
|
|
13
13
|
|
|
14
14
|
React.useEffect(() => {
|
|
15
|
-
if (
|
|
15
|
+
if (colorMode === 'dark') {
|
|
16
16
|
container.setAttribute('data-color-mode', 'dark')
|
|
17
17
|
container.classList.remove('tl-theme__light')
|
|
18
18
|
container.classList.add('tl-theme__dark')
|
|
@@ -26,5 +26,5 @@ export function useDarkMode() {
|
|
|
26
26
|
} else {
|
|
27
27
|
container.classList.remove('tl-theme__force-sRGB')
|
|
28
28
|
}
|
|
29
|
-
}, [editor, container, forceSrgb,
|
|
29
|
+
}, [editor, container, forceSrgb, colorMode])
|
|
30
30
|
}
|