@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.
Files changed (155) hide show
  1. package/dist-cjs/index.d.ts +184 -24
  2. package/dist-cjs/index.js +5 -4
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +4 -2
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +1 -1
  7. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  8. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +1 -1
  9. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +2 -2
  10. package/dist-cjs/lib/config/{createTLUser.js → createTLCurrentUser.js} +9 -9
  11. package/dist-cjs/lib/config/createTLCurrentUser.js.map +7 -0
  12. package/dist-cjs/lib/config/createTLStore.js +24 -1
  13. package/dist-cjs/lib/config/createTLStore.js.map +2 -2
  14. package/dist-cjs/lib/config/defaultShapes.js.map +2 -2
  15. package/dist-cjs/lib/editor/Editor.js +115 -8
  16. package/dist-cjs/lib/editor/Editor.js.map +3 -3
  17. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +1 -1
  18. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +2 -2
  19. package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js +1 -1
  20. package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js.map +2 -2
  21. package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js.map +2 -2
  22. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js +4 -4
  23. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js.map +2 -2
  24. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +102 -30
  25. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +2 -2
  26. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  27. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +10 -0
  28. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  29. package/dist-cjs/lib/editor/types/clipboard-types.js.map +1 -1
  30. package/dist-cjs/lib/exports/StyleEmbedder.js +1 -1
  31. package/dist-cjs/lib/exports/StyleEmbedder.js.map +2 -2
  32. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  33. package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
  34. package/dist-cjs/lib/hooks/useGestureEvents.js +171 -127
  35. package/dist-cjs/lib/hooks/useGestureEvents.js.map +3 -3
  36. package/dist-cjs/lib/hooks/useLocalStore.js.map +2 -2
  37. package/dist-cjs/lib/options.js +3 -0
  38. package/dist-cjs/lib/options.js.map +2 -2
  39. package/dist-cjs/lib/primitives/Box.js +1 -1
  40. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  41. package/dist-cjs/lib/primitives/geometry/Arc2d.js +2 -2
  42. package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
  43. package/dist-cjs/lib/primitives/geometry/Circle2d.js +2 -2
  44. package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
  45. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +2 -2
  46. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
  47. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +4 -3
  48. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  49. package/dist-cjs/lib/primitives/geometry/Polyline2d.js +1 -1
  50. package/dist-cjs/lib/primitives/geometry/Polyline2d.js.map +2 -2
  51. package/dist-cjs/lib/primitives/geometry/Stadium2d.js +1 -1
  52. package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +2 -2
  53. package/dist-cjs/lib/utils/getSvgPathFromPoints.js.map +2 -2
  54. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +1 -1
  55. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
  56. package/dist-cjs/version.js +3 -3
  57. package/dist-cjs/version.js.map +1 -1
  58. package/dist-esm/index.d.mts +184 -24
  59. package/dist-esm/index.mjs +12 -5
  60. package/dist-esm/index.mjs.map +2 -2
  61. package/dist-esm/lib/TldrawEditor.mjs +4 -2
  62. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  63. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +1 -1
  64. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  65. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +1 -1
  66. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +2 -2
  67. package/dist-esm/lib/config/{createTLUser.mjs → createTLCurrentUser.mjs} +6 -6
  68. package/dist-esm/lib/config/createTLCurrentUser.mjs.map +7 -0
  69. package/dist-esm/lib/config/createTLStore.mjs +28 -2
  70. package/dist-esm/lib/config/createTLStore.mjs.map +2 -2
  71. package/dist-esm/lib/config/defaultShapes.mjs.map +2 -2
  72. package/dist-esm/lib/editor/Editor.mjs +118 -9
  73. package/dist-esm/lib/editor/Editor.mjs.map +3 -3
  74. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +1 -1
  75. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +2 -2
  76. package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs +1 -1
  77. package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs.map +2 -2
  78. package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs.map +2 -2
  79. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs +4 -4
  80. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs.map +2 -2
  81. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +102 -30
  82. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +2 -2
  83. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  84. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +10 -0
  85. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  86. package/dist-esm/lib/exports/StyleEmbedder.mjs +1 -1
  87. package/dist-esm/lib/exports/StyleEmbedder.mjs.map +2 -2
  88. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  89. package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
  90. package/dist-esm/lib/hooks/useGestureEvents.mjs +171 -127
  91. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +3 -3
  92. package/dist-esm/lib/hooks/useLocalStore.mjs.map +2 -2
  93. package/dist-esm/lib/options.mjs +3 -0
  94. package/dist-esm/lib/options.mjs.map +2 -2
  95. package/dist-esm/lib/primitives/Box.mjs +1 -1
  96. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  97. package/dist-esm/lib/primitives/geometry/Arc2d.mjs +2 -2
  98. package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
  99. package/dist-esm/lib/primitives/geometry/Circle2d.mjs +2 -2
  100. package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
  101. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +2 -2
  102. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
  103. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +4 -3
  104. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  105. package/dist-esm/lib/primitives/geometry/Polyline2d.mjs +1 -1
  106. package/dist-esm/lib/primitives/geometry/Polyline2d.mjs.map +2 -2
  107. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs +1 -1
  108. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +2 -2
  109. package/dist-esm/lib/utils/getSvgPathFromPoints.mjs.map +2 -2
  110. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +1 -1
  111. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
  112. package/dist-esm/version.mjs +3 -3
  113. package/dist-esm/version.mjs.map +1 -1
  114. package/editor.css +13 -0
  115. package/package.json +8 -9
  116. package/src/index.ts +14 -2
  117. package/src/lib/TldrawEditor.tsx +9 -7
  118. package/src/lib/components/default-components/DefaultCanvas.tsx +1 -1
  119. package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +1 -1
  120. package/src/lib/config/TLEditorSnapshot.test.ts +1 -1
  121. package/src/lib/config/{createTLUser.ts → createTLCurrentUser.ts} +6 -6
  122. package/src/lib/config/createTLStore.ts +36 -2
  123. package/src/lib/config/defaultShapes.ts +1 -1
  124. package/src/lib/editor/Editor.ts +148 -10
  125. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.ts +1 -1
  126. package/src/lib/editor/managers/SnapManager/BoundsSnaps.ts +1 -1
  127. package/src/lib/editor/managers/SnapManager/HandleSnaps.ts +1 -1
  128. package/src/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.ts +5 -5
  129. package/src/lib/editor/managers/TextManager/TextManager.test.ts +18 -4
  130. package/src/lib/editor/managers/TextManager/TextManager.ts +140 -34
  131. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +2 -2
  132. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +2 -2
  133. package/src/lib/editor/shapes/ShapeUtil.ts +13 -2
  134. package/src/lib/editor/types/clipboard-types.ts +2 -1
  135. package/src/lib/exports/StyleEmbedder.ts +1 -1
  136. package/src/lib/exports/getSvgJsx.tsx +1 -1
  137. package/src/lib/hooks/useEditorComponents.tsx +1 -1
  138. package/src/lib/hooks/useGestureEvents.ts +240 -168
  139. package/src/lib/hooks/useLocalStore.ts +1 -1
  140. package/src/lib/options.ts +108 -0
  141. package/src/lib/primitives/Box.test.ts +30 -0
  142. package/src/lib/primitives/Box.ts +1 -1
  143. package/src/lib/primitives/geometry/Arc2d.ts +2 -2
  144. package/src/lib/primitives/geometry/Circle2d.ts +2 -2
  145. package/src/lib/primitives/geometry/Ellipse2d.ts +2 -2
  146. package/src/lib/primitives/geometry/Geometry2d.test.ts +21 -0
  147. package/src/lib/primitives/geometry/Geometry2d.ts +4 -3
  148. package/src/lib/primitives/geometry/Polyline2d.ts +1 -1
  149. package/src/lib/primitives/geometry/Stadium2d.ts +1 -1
  150. package/src/lib/utils/getSvgPathFromPoints.ts +1 -1
  151. package/src/lib/utils/sync/TLLocalSyncClient.test.ts +1 -1
  152. package/src/lib/utils/sync/TLLocalSyncClient.ts +1 -1
  153. package/src/version.ts +3 -3
  154. package/dist-cjs/lib/config/createTLUser.js.map +0 -7
  155. 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,6 +1,6 @@
1
1
  import { BoxModel } from '@tldraw/tlschema'
2
- import { Vec, VecLike } from './Vec'
3
2
  import { approximatelyLte, PI, PI2, toPrecision } from './utils'
3
+ import { Vec, VecLike } from './Vec'
4
4
 
5
5
  /** @public */
6
6
  export type BoxLike = BoxModel | Box
@@ -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 { Geometry2d, Geometry2dOptions } from './Geometry2d'
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 { Geometry2d, Geometry2dOptions } from './Geometry2d'
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,5 +1,5 @@
1
- import { Vec, VecLike } from '../Vec'
2
1
  import { pointInPolygon } from '../utils'
2
+ import { Vec, VecLike } from '../Vec'
3
3
  import { Edge2d } from './Edge2d'
4
4
  import { Geometry2d, Geometry2dOptions } from './Geometry2d'
5
5
 
@@ -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'
@@ -1,5 +1,5 @@
1
- import { VecLike } from '../primitives/Vec'
2
1
  import { average, precise } from '../primitives/utils'
2
+ import { VecLike } from '../primitives/Vec'
3
3
 
4
4
  /**
5
5
  * Turn an array of points into a path of quadratic curves.
@@ -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-internal.e29318c66fb0'
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-03-20T12:18:33.270Z',
8
- patch: '2026-03-20T12:18:33.270Z',
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
- }