@tldraw/editor 4.6.0-internal.e29318c66fb0 → 4.6.0-next.0c36db38afea
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 +184 -24
- package/dist-cjs/index.js +5 -4
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/TldrawEditor.js +4 -2
- package/dist-cjs/lib/TldrawEditor.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.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 +24 -1
- package/dist-cjs/lib/config/createTLStore.js.map +2 -2
- package/dist-cjs/lib/config/defaultShapes.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +115 -8
- package/dist-cjs/lib/editor/Editor.js.map +3 -3
- package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +1 -1
- package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js +1 -1
- package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js.map +2 -2
- package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js.map +2 -2
- package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js +4 -4
- package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +102 -30
- package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js +10 -0
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/types/clipboard-types.js.map +1 -1
- package/dist-cjs/lib/exports/StyleEmbedder.js +1 -1
- package/dist-cjs/lib/exports/StyleEmbedder.js.map +2 -2
- package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
- 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/options.js +3 -0
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/primitives/Box.js +1 -1
- package/dist-cjs/lib/primitives/Box.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 +2 -2
- package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +2 -2
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js +4 -3
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Polyline2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/Polyline2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Stadium2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +2 -2
- package/dist-cjs/lib/utils/getSvgPathFromPoints.js.map +2 -2
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +1 -1
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.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 +184 -24
- package/dist-esm/index.mjs +12 -5
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +4 -2
- package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.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 +28 -2
- package/dist-esm/lib/config/createTLStore.mjs.map +2 -2
- package/dist-esm/lib/config/defaultShapes.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +118 -9
- package/dist-esm/lib/editor/Editor.mjs.map +3 -3
- package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +1 -1
- package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs +1 -1
- package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs +4 -4
- package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +102 -30
- package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +10 -0
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/exports/StyleEmbedder.mjs +1 -1
- package/dist-esm/lib/exports/StyleEmbedder.mjs.map +2 -2
- package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
- 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/options.mjs +3 -0
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/primitives/Box.mjs +1 -1
- package/dist-esm/lib/primitives/Box.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 +2 -2
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +4 -3
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Polyline2d.mjs +1 -1
- package/dist-esm/lib/primitives/geometry/Polyline2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Stadium2d.mjs +1 -1
- package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +2 -2
- package/dist-esm/lib/utils/getSvgPathFromPoints.mjs.map +2 -2
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +1 -1
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +13 -0
- package/package.json +8 -9
- package/src/index.ts +14 -2
- package/src/lib/TldrawEditor.tsx +9 -7
- package/src/lib/components/default-components/DefaultCanvas.tsx +1 -1
- package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +1 -1
- package/src/lib/config/TLEditorSnapshot.test.ts +1 -1
- package/src/lib/config/{createTLUser.ts → createTLCurrentUser.ts} +6 -6
- package/src/lib/config/createTLStore.ts +36 -2
- package/src/lib/config/defaultShapes.ts +1 -1
- package/src/lib/editor/Editor.ts +148 -10
- package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.ts +1 -1
- 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/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/UserPreferencesManager/UserPreferencesManager.test.ts +2 -2
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +2 -2
- package/src/lib/editor/shapes/ShapeUtil.ts +13 -2
- package/src/lib/editor/types/clipboard-types.ts +2 -1
- package/src/lib/exports/StyleEmbedder.ts +1 -1
- package/src/lib/exports/getSvgJsx.tsx +1 -1
- package/src/lib/hooks/useEditorComponents.tsx +1 -1
- package/src/lib/hooks/useGestureEvents.ts +240 -168
- package/src/lib/hooks/useLocalStore.ts +1 -1
- package/src/lib/options.ts +108 -0
- package/src/lib/primitives/Box.test.ts +30 -0
- package/src/lib/primitives/Box.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/Ellipse2d.ts +2 -2
- package/src/lib/primitives/geometry/Geometry2d.test.ts +21 -0
- package/src/lib/primitives/geometry/Geometry2d.ts +4 -3
- package/src/lib/primitives/geometry/Polyline2d.ts +1 -1
- package/src/lib/primitives/geometry/Stadium2d.ts +1 -1
- package/src/lib/utils/getSvgPathFromPoints.ts +1 -1
- package/src/lib/utils/sync/TLLocalSyncClient.test.ts +1 -1
- package/src/lib/utils/sync/TLLocalSyncClient.ts +1 -1
- package/src/version.ts +3 -3
- package/dist-cjs/lib/config/createTLUser.js.map +0 -7
- package/dist-esm/lib/config/createTLUser.mjs.map +0 -7
|
@@ -728,4 +728,34 @@ describe('Box', () => {
|
|
|
728
728
|
expect(result).not.toBe(zeroBox) // different object
|
|
729
729
|
})
|
|
730
730
|
})
|
|
731
|
+
|
|
732
|
+
describe('Box.isValid', () => {
|
|
733
|
+
it('returns true for normal box', () => {
|
|
734
|
+
expect(new Box(10, 20, 100, 200).isValid()).toBe(true)
|
|
735
|
+
})
|
|
736
|
+
|
|
737
|
+
it('returns false when x is NaN', () => {
|
|
738
|
+
expect(new Box(NaN, 0, 100, 100).isValid()).toBe(false)
|
|
739
|
+
})
|
|
740
|
+
|
|
741
|
+
it('returns false when y is NaN', () => {
|
|
742
|
+
expect(new Box(0, NaN, 100, 100).isValid()).toBe(false)
|
|
743
|
+
})
|
|
744
|
+
|
|
745
|
+
it('returns false when w is NaN', () => {
|
|
746
|
+
expect(new Box(0, 0, NaN, 100).isValid()).toBe(false)
|
|
747
|
+
})
|
|
748
|
+
|
|
749
|
+
it('returns false when h is NaN', () => {
|
|
750
|
+
expect(new Box(0, 0, 100, NaN).isValid()).toBe(false)
|
|
751
|
+
})
|
|
752
|
+
|
|
753
|
+
it('returns false for Infinity', () => {
|
|
754
|
+
expect(new Box(Infinity, 0, 100, 100).isValid()).toBe(false)
|
|
755
|
+
})
|
|
756
|
+
|
|
757
|
+
it('returns true for zero-sized box', () => {
|
|
758
|
+
expect(new Box(0, 0, 0, 0).isValid()).toBe(true)
|
|
759
|
+
})
|
|
760
|
+
})
|
|
731
761
|
})
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Vec, VecLike } from '../Vec'
|
|
2
1
|
import { intersectLineSegmentCircle } from '../intersect'
|
|
3
2
|
import { getArcMeasure, getPointInArcT, getPointOnCircle } from '../utils'
|
|
4
|
-
import {
|
|
3
|
+
import { Vec, VecLike } from '../Vec'
|
|
5
4
|
import { getVerticesCountForArcLength } from './geometry-constants'
|
|
5
|
+
import { Geometry2d, Geometry2dOptions } from './Geometry2d'
|
|
6
6
|
|
|
7
7
|
/** @public */
|
|
8
8
|
export class Arc2d extends Geometry2d {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Box } from '../Box'
|
|
2
|
-
import { Vec, VecLike } from '../Vec'
|
|
3
2
|
import { intersectLineSegmentCircle } from '../intersect'
|
|
4
3
|
import { PI2, getPointOnCircle } from '../utils'
|
|
5
|
-
import {
|
|
4
|
+
import { Vec, VecLike } from '../Vec'
|
|
6
5
|
import { getVerticesCountForArcLength } from './geometry-constants'
|
|
6
|
+
import { Geometry2d, Geometry2dOptions } from './Geometry2d'
|
|
7
7
|
|
|
8
8
|
/** @public */
|
|
9
9
|
export class Circle2d extends Geometry2d {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Box } from '../Box'
|
|
2
|
-
import { Vec, VecLike } from '../Vec'
|
|
3
2
|
import { PI, PI2, clamp, perimeterOfEllipse, pointInPolygon } from '../utils'
|
|
3
|
+
import { Vec, VecLike } from '../Vec'
|
|
4
4
|
import { Edge2d } from './Edge2d'
|
|
5
|
-
import { Geometry2d, Geometry2dOptions } from './Geometry2d'
|
|
6
5
|
import { getVerticesCountForArcLength } from './geometry-constants'
|
|
6
|
+
import { Geometry2d, Geometry2dOptions } from './Geometry2d'
|
|
7
7
|
|
|
8
8
|
/** @public */
|
|
9
9
|
export class Ellipse2d extends Geometry2d {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Mat } from '../Mat'
|
|
2
2
|
import { Vec, VecLike } from '../Vec'
|
|
3
|
+
import { Edge2d } from './Edge2d'
|
|
3
4
|
import { Geometry2dFilters } from './Geometry2d'
|
|
4
5
|
import { Group2d } from './Group2d'
|
|
5
6
|
import { Rectangle2d } from './Rectangle2d'
|
|
@@ -456,6 +457,26 @@ describe('Group2d getBoundsVertices', () => {
|
|
|
456
457
|
})
|
|
457
458
|
})
|
|
458
459
|
|
|
460
|
+
describe('interpolateAlongEdge', () => {
|
|
461
|
+
it('returns vertex when segment has zero length', () => {
|
|
462
|
+
const edge = new Edge2d({ start: new Vec(5, 5), end: new Vec(5, 5) })
|
|
463
|
+
const result = edge.interpolateAlongEdge(0.5)
|
|
464
|
+
expect(result.x).toBe(5)
|
|
465
|
+
expect(result.y).toBe(5)
|
|
466
|
+
expect(Number.isFinite(result.x)).toBe(true)
|
|
467
|
+
expect(Number.isFinite(result.y)).toBe(true)
|
|
468
|
+
})
|
|
469
|
+
})
|
|
470
|
+
|
|
471
|
+
describe('uninterpolateAlongEdge', () => {
|
|
472
|
+
it('returns 0 when geometry has zero length', () => {
|
|
473
|
+
const edge = new Edge2d({ start: new Vec(5, 5), end: new Vec(5, 5) })
|
|
474
|
+
const result = edge.uninterpolateAlongEdge(new Vec(5, 5))
|
|
475
|
+
expect(result).toBe(0)
|
|
476
|
+
expect(Number.isFinite(result)).toBe(true)
|
|
477
|
+
})
|
|
478
|
+
})
|
|
479
|
+
|
|
459
480
|
function expectApproxMatch(a: VecLike, b: VecLike) {
|
|
460
481
|
expect(a.x).toBeCloseTo(b.x, 0.0001)
|
|
461
482
|
expect(a.y).toBeCloseTo(b.y, 0.0001)
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { assert, invLerp } from '@tldraw/utils'
|
|
2
2
|
import { Box } from '../Box'
|
|
3
|
-
import { Mat, MatModel } from '../Mat'
|
|
4
|
-
import { Vec, VecLike } from '../Vec'
|
|
5
3
|
import {
|
|
6
4
|
intersectCirclePolygon,
|
|
7
5
|
intersectCirclePolyline,
|
|
@@ -12,7 +10,9 @@ import {
|
|
|
12
10
|
polygonIntersectsPolyline,
|
|
13
11
|
polygonsIntersect,
|
|
14
12
|
} from '../intersect'
|
|
13
|
+
import { Mat, MatModel } from '../Mat'
|
|
15
14
|
import { approximately, pointInPolygon } from '../utils'
|
|
15
|
+
import { Vec, VecLike } from '../Vec'
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Filter geometry within a group.
|
|
@@ -191,6 +191,7 @@ export abstract class Geometry2d {
|
|
|
191
191
|
const dist = Vec.Dist(curr, next)
|
|
192
192
|
const newDistanceTraveled = distanceTraveled + dist
|
|
193
193
|
if (newDistanceTraveled >= distanceToTravel) {
|
|
194
|
+
if (dist === 0) return curr
|
|
194
195
|
const p = Vec.Lrp(
|
|
195
196
|
curr,
|
|
196
197
|
next,
|
|
@@ -241,7 +242,7 @@ export abstract class Geometry2d {
|
|
|
241
242
|
const distanceAlongRoute =
|
|
242
243
|
closestSegment.distanceToStart + Vec.Dist(closestSegment.start, closestSegment.nearestPoint)
|
|
243
244
|
|
|
244
|
-
return distanceAlongRoute / length
|
|
245
|
+
return length === 0 ? 0 : distanceAlongRoute / length
|
|
245
246
|
}
|
|
246
247
|
|
|
247
248
|
isPointInBounds(point: VecLike, margin = 0) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Box } from '../Box'
|
|
2
|
-
import { Vec, VecLike } from '../Vec'
|
|
3
2
|
import { PI, pointInPolygon } from '../utils'
|
|
3
|
+
import { Vec, VecLike } from '../Vec'
|
|
4
4
|
import { Arc2d } from './Arc2d'
|
|
5
5
|
import { Edge2d } from './Edge2d'
|
|
6
6
|
import { Geometry2d, Geometry2dOptions } from './Geometry2d'
|
|
@@ -2,8 +2,8 @@ import { PageRecordType } from '@tldraw/tlschema'
|
|
|
2
2
|
import { IndexKey, promiseWithResolve } from '@tldraw/utils'
|
|
3
3
|
import { Mock, vi } from 'vitest'
|
|
4
4
|
import { createTLStore } from '../../config/createTLStore'
|
|
5
|
-
import { TLLocalSyncClient } from './TLLocalSyncClient'
|
|
6
5
|
import { hardReset } from './hardReset'
|
|
6
|
+
import { TLLocalSyncClient } from './TLLocalSyncClient'
|
|
7
7
|
|
|
8
8
|
class BroadcastChannelMock {
|
|
9
9
|
onmessage?: (e: MessageEvent) => void
|
|
@@ -9,8 +9,8 @@ import {
|
|
|
9
9
|
extractSessionStateFromLegacySnapshot,
|
|
10
10
|
loadSessionStateSnapshotIntoStore,
|
|
11
11
|
} from '../../config/TLSessionStateSnapshot'
|
|
12
|
-
import { LocalIndexedDb } from './LocalIndexedDb'
|
|
13
12
|
import { showCantReadFromIndexDbAlert, showCantWriteToIndexDbAlert } from './alerts'
|
|
13
|
+
import { LocalIndexedDb } from './LocalIndexedDb'
|
|
14
14
|
|
|
15
15
|
/** How should we debounce persists? */
|
|
16
16
|
const PERSIST_THROTTLE_MS = 350
|
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-
|
|
4
|
+
export const version = '4.6.0-next.0c36db38afea'
|
|
5
5
|
export const publishDates = {
|
|
6
6
|
major: '2025-09-18T14:39:22.803Z',
|
|
7
|
-
minor: '2026-
|
|
8
|
-
patch: '2026-
|
|
7
|
+
minor: '2026-04-01T13:50:12.376Z',
|
|
8
|
+
patch: '2026-04-01T13:50:12.376Z',
|
|
9
9
|
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/lib/config/createTLUser.ts"],
|
|
4
|
-
"sourcesContent": ["import { Signal, computed, isSignal } from '@tldraw/state'\nimport { useAtom } from '@tldraw/state-react'\nimport { useEffect, useMemo } from 'react'\nimport { useShallowObjectIdentity } from '../hooks/useIdentity'\nimport { TLUserPreferences, getUserPreferences, setUserPreferences } from './TLUserPreferences'\n\n/** @public */\nexport interface TLUser {\n\treadonly userPreferences: Signal<TLUserPreferences>\n\t// eslint-disable-next-line tldraw/method-signature-style\n\treadonly setUserPreferences: (userPreferences: TLUserPreferences) => void\n}\n\nconst defaultLocalStorageUserPrefs = computed('defaultLocalStorageUserPrefs', () =>\n\tgetUserPreferences()\n)\n\n/** @public */\nexport function createTLUser(\n\topts = {} as {\n\t\tuserPreferences?: Signal<TLUserPreferences>\n\t\t// eslint-disable-next-line tldraw/method-signature-style\n\t\tsetUserPreferences?: (userPreferences: TLUserPreferences) => void\n\t}\n): TLUser {\n\treturn {\n\t\tuserPreferences: opts.userPreferences ?? defaultLocalStorageUserPrefs,\n\t\tsetUserPreferences: opts.setUserPreferences ?? setUserPreferences,\n\t}\n}\n\n/**\n * @public\n */\nexport function useTldrawUser(opts: {\n\tuserPreferences?: Signal<TLUserPreferences> | TLUserPreferences\n\t// eslint-disable-next-line tldraw/method-signature-style\n\tsetUserPreferences?: (userPreferences: TLUserPreferences) => void\n}): TLUser {\n\tconst prefs = useShallowObjectIdentity(opts.userPreferences ?? defaultLocalStorageUserPrefs)\n\tconst userAtom = useAtom<TLUserPreferences | Signal<TLUserPreferences>>('userAtom', prefs)\n\tuseEffect(() => {\n\t\tuserAtom.set(prefs)\n\t}, [prefs, userAtom])\n\n\treturn useMemo(\n\t\t() =>\n\t\t\tcreateTLUser({\n\t\t\t\tuserPreferences: computed('userPreferences', () => {\n\t\t\t\t\tconst userStuff = userAtom.get()\n\t\t\t\t\treturn isSignal(userStuff) ? userStuff.get() : userStuff\n\t\t\t\t}),\n\t\t\t\tsetUserPreferences: opts.setUserPreferences,\n\t\t\t}),\n\t\t[userAtom, opts.setUserPreferences]\n\t)\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA2C;AAC3C,yBAAwB;AACxB,mBAAmC;AACnC,yBAAyC;AACzC,+BAA0E;AAS1E,MAAM,mCAA+B;AAAA,EAAS;AAAA,EAAgC,UAC7E,6CAAmB;AACpB;AAGO,SAAS,aACf,OAAO,CAAC,GAKC;AACT,SAAO;AAAA,IACN,iBAAiB,KAAK,mBAAmB;AAAA,IACzC,oBAAoB,KAAK,sBAAsB;AAAA,EAChD;AACD;AAKO,SAAS,cAAc,MAInB;AACV,QAAM,YAAQ,6CAAyB,KAAK,mBAAmB,4BAA4B;AAC3F,QAAM,eAAW,4BAAuD,YAAY,KAAK;AACzF,8BAAU,MAAM;AACf,aAAS,IAAI,KAAK;AAAA,EACnB,GAAG,CAAC,OAAO,QAAQ,CAAC;AAEpB,aAAO;AAAA,IACN,MACC,aAAa;AAAA,MACZ,qBAAiB,uBAAS,mBAAmB,MAAM;AAClD,cAAM,YAAY,SAAS,IAAI;AAC/B,mBAAO,uBAAS,SAAS,IAAI,UAAU,IAAI,IAAI;AAAA,MAChD,CAAC;AAAA,MACD,oBAAoB,KAAK;AAAA,IAC1B,CAAC;AAAA,IACF,CAAC,UAAU,KAAK,kBAAkB;AAAA,EACnC;AACD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/lib/config/createTLUser.ts"],
|
|
4
|
-
"sourcesContent": ["import { Signal, computed, isSignal } from '@tldraw/state'\nimport { useAtom } from '@tldraw/state-react'\nimport { useEffect, useMemo } from 'react'\nimport { useShallowObjectIdentity } from '../hooks/useIdentity'\nimport { TLUserPreferences, getUserPreferences, setUserPreferences } from './TLUserPreferences'\n\n/** @public */\nexport interface TLUser {\n\treadonly userPreferences: Signal<TLUserPreferences>\n\t// eslint-disable-next-line tldraw/method-signature-style\n\treadonly setUserPreferences: (userPreferences: TLUserPreferences) => void\n}\n\nconst defaultLocalStorageUserPrefs = computed('defaultLocalStorageUserPrefs', () =>\n\tgetUserPreferences()\n)\n\n/** @public */\nexport function createTLUser(\n\topts = {} as {\n\t\tuserPreferences?: Signal<TLUserPreferences>\n\t\t// eslint-disable-next-line tldraw/method-signature-style\n\t\tsetUserPreferences?: (userPreferences: TLUserPreferences) => void\n\t}\n): TLUser {\n\treturn {\n\t\tuserPreferences: opts.userPreferences ?? defaultLocalStorageUserPrefs,\n\t\tsetUserPreferences: opts.setUserPreferences ?? setUserPreferences,\n\t}\n}\n\n/**\n * @public\n */\nexport function useTldrawUser(opts: {\n\tuserPreferences?: Signal<TLUserPreferences> | TLUserPreferences\n\t// eslint-disable-next-line tldraw/method-signature-style\n\tsetUserPreferences?: (userPreferences: TLUserPreferences) => void\n}): TLUser {\n\tconst prefs = useShallowObjectIdentity(opts.userPreferences ?? defaultLocalStorageUserPrefs)\n\tconst userAtom = useAtom<TLUserPreferences | Signal<TLUserPreferences>>('userAtom', prefs)\n\tuseEffect(() => {\n\t\tuserAtom.set(prefs)\n\t}, [prefs, userAtom])\n\n\treturn useMemo(\n\t\t() =>\n\t\t\tcreateTLUser({\n\t\t\t\tuserPreferences: computed('userPreferences', () => {\n\t\t\t\t\tconst userStuff = userAtom.get()\n\t\t\t\t\treturn isSignal(userStuff) ? userStuff.get() : userStuff\n\t\t\t\t}),\n\t\t\t\tsetUserPreferences: opts.setUserPreferences,\n\t\t\t}),\n\t\t[userAtom, opts.setUserPreferences]\n\t)\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAiB,UAAU,gBAAgB;AAC3C,SAAS,eAAe;AACxB,SAAS,WAAW,eAAe;AACnC,SAAS,gCAAgC;AACzC,SAA4B,oBAAoB,0BAA0B;AAS1E,MAAM,+BAA+B;AAAA,EAAS;AAAA,EAAgC,MAC7E,mBAAmB;AACpB;AAGO,SAAS,aACf,OAAO,CAAC,GAKC;AACT,SAAO;AAAA,IACN,iBAAiB,KAAK,mBAAmB;AAAA,IACzC,oBAAoB,KAAK,sBAAsB;AAAA,EAChD;AACD;AAKO,SAAS,cAAc,MAInB;AACV,QAAM,QAAQ,yBAAyB,KAAK,mBAAmB,4BAA4B;AAC3F,QAAM,WAAW,QAAuD,YAAY,KAAK;AACzF,YAAU,MAAM;AACf,aAAS,IAAI,KAAK;AAAA,EACnB,GAAG,CAAC,OAAO,QAAQ,CAAC;AAEpB,SAAO;AAAA,IACN,MACC,aAAa;AAAA,MACZ,iBAAiB,SAAS,mBAAmB,MAAM;AAClD,cAAM,YAAY,SAAS,IAAI;AAC/B,eAAO,SAAS,SAAS,IAAI,UAAU,IAAI,IAAI;AAAA,MAChD,CAAC;AAAA,MACD,oBAAoB,KAAK;AAAA,IAC1B,CAAC;AAAA,IACF,CAAC,UAAU,KAAK,kBAAkB;AAAA,EACnC;AACD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|