@tldraw/editor 4.6.0-next.30b99cd52fc8 → 4.6.0-next.35cf541abcf9
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 +758 -96
- package/dist-cjs/index.js +18 -3
- package/dist-cjs/index.js.map +3 -3
- package/dist-cjs/lib/TldrawEditor.js +55 -12
- 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/createTLStore.js +7 -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 +279 -10
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- 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 +22 -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/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/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 +758 -96
- package/dist-esm/index.mjs +19 -6
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +58 -12
- 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/createTLStore.mjs +10 -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 +279 -10
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- 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 +22 -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/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 +0 -37
- package/package.json +7 -7
- package/src/index.ts +24 -6
- package/src/lib/TldrawEditor.tsx +90 -13
- 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/createTLStore.ts +22 -1
- package/src/lib/config/defaultAssets.ts +19 -0
- package/src/lib/editor/Editor.ts +387 -40
- 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 +23 -29
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +5 -3
- package/src/lib/editor/shapes/BaseFrameLikeShapeUtil.tsx +121 -0
- package/src/lib/editor/shapes/ShapeUtil.ts +39 -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/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/options.ts +14 -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/hooks/useIsDarkMode.js.map +0 -7
- package/dist-esm/lib/hooks/useIsDarkMode.mjs +0 -15
- package/dist-esm/lib/hooks/useIsDarkMode.mjs.map +0 -7
|
@@ -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
|
}
|
package/src/lib/options.ts
CHANGED
|
@@ -154,6 +154,12 @@ export interface TldrawOptions {
|
|
|
154
154
|
* When false, the spacebar will not pan the camera.
|
|
155
155
|
*/
|
|
156
156
|
readonly spacebarPanning: boolean
|
|
157
|
+
/**
|
|
158
|
+
* Whether to allow right-click + drag to pan the camera. When true, right-click + drag pans the
|
|
159
|
+
* camera and a static right-click opens the context menu at the release position. When false,
|
|
160
|
+
* right-click opens the context menu on press (no drag-to-pan).
|
|
161
|
+
*/
|
|
162
|
+
readonly rightClickPanning: boolean
|
|
157
163
|
/**
|
|
158
164
|
* The default padding (in pixels) used when zooming to fit content in the viewport.
|
|
159
165
|
* This affects methods like `zoomToFit()`, `zoomToSelection()`, and `zoomToBounds()`.
|
|
@@ -196,6 +202,12 @@ export interface TldrawOptions {
|
|
|
196
202
|
* viewport's page dimensions regardless of overview zoom changes.
|
|
197
203
|
*/
|
|
198
204
|
readonly quickZoomPreservesScreenBounds: boolean
|
|
205
|
+
/**
|
|
206
|
+
* Whether to use 2D canvas rendering for shape indicators. When true (default),
|
|
207
|
+
* shapes that support it will render indicators on a 2D canvas for better
|
|
208
|
+
* performance. When false, all indicators use legacy SVG rendering.
|
|
209
|
+
*/
|
|
210
|
+
readonly useCanvasIndicators: boolean
|
|
199
211
|
/**
|
|
200
212
|
* Called before content is written to the clipboard during a copy or cut operation.
|
|
201
213
|
* Receives the serialized content (shapes, bindings, assets) and can filter or transform
|
|
@@ -326,11 +338,13 @@ export const defaultTldrawOptions = {
|
|
|
326
338
|
debouncedZoom: true,
|
|
327
339
|
debouncedZoomThreshold: 500,
|
|
328
340
|
spacebarPanning: true,
|
|
341
|
+
rightClickPanning: true,
|
|
329
342
|
zoomToFitPadding: 128,
|
|
330
343
|
snapThreshold: 8,
|
|
331
344
|
camera: DEFAULT_CAMERA_OPTIONS,
|
|
332
345
|
text: {},
|
|
333
346
|
deepLinks: undefined,
|
|
347
|
+
useCanvasIndicators: true,
|
|
334
348
|
quickZoomPreservesScreenBounds: true,
|
|
335
349
|
onBeforeCopyToClipboard: undefined,
|
|
336
350
|
onBeforePasteFromClipboard: undefined,
|
|
@@ -103,9 +103,13 @@ export function kickoutOccludedShapes(
|
|
|
103
103
|
if (oldParentIndex > -1) {
|
|
104
104
|
// If the old parent is a direct child of the new parent, then we'll add them above the old parent but below the next sibling.
|
|
105
105
|
const siblingsIndexAbove = oldParentSiblingIds[oldParentIndex + 1]
|
|
106
|
-
const
|
|
106
|
+
const siblingAboveIndex = siblingsIndexAbove
|
|
107
107
|
? editor.getShape(siblingsIndexAbove)!.index
|
|
108
|
-
:
|
|
108
|
+
: undefined
|
|
109
|
+
const indexKeyAbove =
|
|
110
|
+
siblingAboveIndex && siblingAboveIndex > prevParent.index
|
|
111
|
+
? siblingAboveIndex
|
|
112
|
+
: getIndexAbove(prevParent.index)
|
|
109
113
|
insertIndexKey = getIndexBetween(prevParent.index, indexKeyAbove)
|
|
110
114
|
} else {
|
|
111
115
|
// If the old parent is not a direct child of the new parent, then we'll add them to the "top" of the new parent's children.
|
|
@@ -2,9 +2,9 @@ import { getSchema, JSONContent, Editor as TTEditor } from '@tiptap/core'
|
|
|
2
2
|
import { Node, Schema } from '@tiptap/pm/model'
|
|
3
3
|
import { EditorProviderProps } from '@tiptap/react'
|
|
4
4
|
import { TLRichText } from '@tldraw/tlschema'
|
|
5
|
+
import { TLFontFace } from '@tldraw/tlschema'
|
|
5
6
|
import { assert, WeakCache } from '@tldraw/utils'
|
|
6
7
|
import type { Editor } from '../editor/Editor'
|
|
7
|
-
import { TLFontFace } from '../editor/managers/FontManager/FontManager'
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* This is the TipTap editor! Docs are {@link https://tiptap.dev/docs}.
|
package/src/lib/utils/runtime.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { hardReset } from './sync/hardReset'
|
|
2
|
+
|
|
1
3
|
/** @public */
|
|
2
4
|
export const runtime: {
|
|
3
5
|
openWindow(url: string, target: string, allowReferrer?: boolean): void
|
|
@@ -11,7 +13,7 @@ export const runtime: {
|
|
|
11
13
|
window.location.reload()
|
|
12
14
|
},
|
|
13
15
|
async hardReset() {
|
|
14
|
-
return await (
|
|
16
|
+
return await hardReset({ shouldReload: true })
|
|
15
17
|
},
|
|
16
18
|
}
|
|
17
19
|
|
|
@@ -19,11 +19,3 @@ export async function hardReset({ shouldReload = true } = {}) {
|
|
|
19
19
|
window.location.reload()
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
|
|
23
|
-
if (typeof window !== 'undefined') {
|
|
24
|
-
if (process.env.NODE_ENV === 'development') {
|
|
25
|
-
;(window as any).hardReset = hardReset
|
|
26
|
-
}
|
|
27
|
-
// window.__tldraw__hardReset is used to inject the logic into the tldraw library
|
|
28
|
-
;(window as any).__tldraw__hardReset = hardReset
|
|
29
|
-
}
|
package/src/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.6.0-next.
|
|
4
|
+
export const version = '4.6.0-next.35cf541abcf9'
|
|
5
5
|
export const publishDates = {
|
|
6
6
|
major: '2025-09-18T14:39:22.803Z',
|
|
7
|
-
minor: '2026-04-
|
|
8
|
-
patch: '2026-04-
|
|
7
|
+
minor: '2026-04-22T15:37:39.418Z',
|
|
8
|
+
patch: '2026-04-22T15:37:39.418Z',
|
|
9
9
|
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/lib/hooks/useIsDarkMode.ts"],
|
|
4
|
-
"sourcesContent": ["import { useValue } from '@tldraw/state-react'\nimport { useSvgExportContext } from '../editor/types/SvgExportContext'\nimport { useEditor } from './useEditor'\n\n/** @public */\nexport function useIsDarkMode() {\n\tconst editor = useEditor()\n\tconst exportContext = useSvgExportContext()\n\treturn useValue('isDarkMode', () => exportContext?.isDarkMode ?? editor.user.getIsDarkMode(), [\n\t\texportContext,\n\t\teditor,\n\t])\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAAyB;AACzB,8BAAoC;AACpC,uBAA0B;AAGnB,SAAS,gBAAgB;AAC/B,QAAM,aAAS,4BAAU;AACzB,QAAM,oBAAgB,6CAAoB;AAC1C,aAAO,6BAAS,cAAc,MAAM,eAAe,cAAc,OAAO,KAAK,cAAc,GAAG;AAAA,IAC7F;AAAA,IACA;AAAA,EACD,CAAC;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { useValue } from "@tldraw/state-react";
|
|
2
|
-
import { useSvgExportContext } from "../editor/types/SvgExportContext.mjs";
|
|
3
|
-
import { useEditor } from "./useEditor.mjs";
|
|
4
|
-
function useIsDarkMode() {
|
|
5
|
-
const editor = useEditor();
|
|
6
|
-
const exportContext = useSvgExportContext();
|
|
7
|
-
return useValue("isDarkMode", () => exportContext?.isDarkMode ?? editor.user.getIsDarkMode(), [
|
|
8
|
-
exportContext,
|
|
9
|
-
editor
|
|
10
|
-
]);
|
|
11
|
-
}
|
|
12
|
-
export {
|
|
13
|
-
useIsDarkMode
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=useIsDarkMode.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/lib/hooks/useIsDarkMode.ts"],
|
|
4
|
-
"sourcesContent": ["import { useValue } from '@tldraw/state-react'\nimport { useSvgExportContext } from '../editor/types/SvgExportContext'\nimport { useEditor } from './useEditor'\n\n/** @public */\nexport function useIsDarkMode() {\n\tconst editor = useEditor()\n\tconst exportContext = useSvgExportContext()\n\treturn useValue('isDarkMode', () => exportContext?.isDarkMode ?? editor.user.getIsDarkMode(), [\n\t\texportContext,\n\t\teditor,\n\t])\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,gBAAgB;AACzB,SAAS,2BAA2B;AACpC,SAAS,iBAAiB;AAGnB,SAAS,gBAAgB;AAC/B,QAAM,SAAS,UAAU;AACzB,QAAM,gBAAgB,oBAAoB;AAC1C,SAAO,SAAS,cAAc,MAAM,eAAe,cAAc,OAAO,KAAK,cAAc,GAAG;AAAA,IAC7F;AAAA,IACA;AAAA,EACD,CAAC;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|