@tldraw/editor 3.13.0-canary.3ac739625a6f → 3.13.0-canary.42efa4c14663

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.
@@ -1,8 +1,8 @@
1
- const version = "3.13.0-canary.3ac739625a6f";
1
+ const version = "3.13.0-canary.42efa4c14663";
2
2
  const publishDates = {
3
3
  major: "2024-09-13T14:36:29.063Z",
4
- minor: "2025-04-17T07:28:20.362Z",
5
- patch: "2025-04-17T07:28:20.362Z"
4
+ minor: "2025-04-17T08:57:44.308Z",
5
+ patch: "2025-04-17T08:57:44.308Z"
6
6
  };
7
7
  export {
8
8
  publishDates,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/version.ts"],
4
- "sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\nexport const version = '3.13.0-canary.3ac739625a6f'\nexport const publishDates = {\n\tmajor: '2024-09-13T14:36:29.063Z',\n\tminor: '2025-04-17T07:28:20.362Z',\n\tpatch: '2025-04-17T07:28:20.362Z',\n}\n"],
4
+ "sourcesContent": ["// This file is automatically generated by internal/scripts/refresh-assets.ts.\n// Do not edit manually. Or do, I'm a comment, not a cop.\n\nexport const version = '3.13.0-canary.42efa4c14663'\nexport const publishDates = {\n\tmajor: '2024-09-13T14:36:29.063Z',\n\tminor: '2025-04-17T08:57:44.308Z',\n\tpatch: '2025-04-17T08:57:44.308Z',\n}\n"],
5
5
  "mappings": "AAGO,MAAM,UAAU;AAChB,MAAM,eAAe;AAAA,EAC3B,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AACR;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tldraw/editor",
3
3
  "description": "A tiny little drawing app (editor).",
4
- "version": "3.13.0-canary.3ac739625a6f",
4
+ "version": "3.13.0-canary.42efa4c14663",
5
5
  "author": {
6
6
  "name": "tldraw Inc.",
7
7
  "email": "hello@tldraw.com"
@@ -48,12 +48,12 @@
48
48
  "@tiptap/core": "^2.9.1",
49
49
  "@tiptap/pm": "^2.9.1",
50
50
  "@tiptap/react": "^2.9.1",
51
- "@tldraw/state": "3.13.0-canary.3ac739625a6f",
52
- "@tldraw/state-react": "3.13.0-canary.3ac739625a6f",
53
- "@tldraw/store": "3.13.0-canary.3ac739625a6f",
54
- "@tldraw/tlschema": "3.13.0-canary.3ac739625a6f",
55
- "@tldraw/utils": "3.13.0-canary.3ac739625a6f",
56
- "@tldraw/validate": "3.13.0-canary.3ac739625a6f",
51
+ "@tldraw/state": "3.13.0-canary.42efa4c14663",
52
+ "@tldraw/state-react": "3.13.0-canary.42efa4c14663",
53
+ "@tldraw/store": "3.13.0-canary.42efa4c14663",
54
+ "@tldraw/tlschema": "3.13.0-canary.42efa4c14663",
55
+ "@tldraw/utils": "3.13.0-canary.42efa4c14663",
56
+ "@tldraw/validate": "3.13.0-canary.42efa4c14663",
57
57
  "@types/core-js": "^2.5.8",
58
58
  "@use-gesture/react": "^10.3.1",
59
59
  "classnames": "^2.5.1",
@@ -42,6 +42,7 @@ import {
42
42
  TLImageAsset,
43
43
  TLInstance,
44
44
  TLInstancePageState,
45
+ TLInstancePresence,
45
46
  TLNoteShape,
46
47
  TLPOINTER_ID,
47
48
  TLPage,
@@ -2575,14 +2576,25 @@ export class Editor extends EventEmitter<TLEventMap> {
2575
2576
  return baseCamera
2576
2577
  }
2577
2578
 
2579
+ private _getFollowingPresence(targetUserId: string | null) {
2580
+ const visited = [this.user.getId()]
2581
+ const collaborators = this.getCollaborators()
2582
+ let leaderPresence = null as null | TLInstancePresence
2583
+ while (targetUserId && !visited.includes(targetUserId)) {
2584
+ leaderPresence = collaborators.find((c) => c.userId === targetUserId) ?? null
2585
+ targetUserId = leaderPresence?.followingUserId ?? null
2586
+ if (leaderPresence) {
2587
+ visited.push(leaderPresence.userId)
2588
+ }
2589
+ }
2590
+ return leaderPresence
2591
+ }
2592
+
2578
2593
  @computed
2579
2594
  private getViewportPageBoundsForFollowing(): null | Box {
2580
- const followingUserId = this.getInstanceState().followingUserId
2581
- if (!followingUserId) return null
2582
- const leaderPresence = this.getCollaborators().find((c) => c.userId === followingUserId)
2583
- if (!leaderPresence) return null
2595
+ const leaderPresence = this._getFollowingPresence(this.getInstanceState().followingUserId)
2584
2596
 
2585
- if (!leaderPresence.camera || !leaderPresence.screenBounds) return null
2597
+ if (!leaderPresence?.camera || !leaderPresence?.screenBounds) return null
2586
2598
 
2587
2599
  // Fit their viewport inside of our screen bounds
2588
2600
  // 1. calculate their viewport in page space
@@ -3781,15 +3793,6 @@ export class Editor extends EventEmitter<TLEventMap> {
3781
3793
  // if we were already following someone, stop following them
3782
3794
  this.stopFollowingUser()
3783
3795
 
3784
- const leaderPresences = this._getCollaboratorsQuery()
3785
- .get()
3786
- .filter((p) => p.userId === userId)
3787
-
3788
- if (!leaderPresences.length) {
3789
- console.warn('User not found')
3790
- return this
3791
- }
3792
-
3793
3796
  const thisUserId = this.user.getId()
3794
3797
 
3795
3798
  if (!thisUserId) {
@@ -3797,13 +3800,14 @@ export class Editor extends EventEmitter<TLEventMap> {
3797
3800
  // allow to continue since it's probably fine most of the time.
3798
3801
  }
3799
3802
 
3800
- // If the leader is following us, then we can't follow them
3801
- if (leaderPresences.some((p) => p.followingUserId === thisUserId)) {
3803
+ const leaderPresence = this._getFollowingPresence(userId)
3804
+
3805
+ if (!leaderPresence) {
3802
3806
  return this
3803
3807
  }
3804
3808
 
3805
3809
  const latestLeaderPresence = computed('latestLeaderPresence', () => {
3806
- return this.getCollaborators().find((p) => p.userId === userId)
3810
+ return this._getFollowingPresence(userId)
3807
3811
  })
3808
3812
 
3809
3813
  transact(() => {
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 = '3.13.0-canary.3ac739625a6f'
4
+ export const version = '3.13.0-canary.42efa4c14663'
5
5
  export const publishDates = {
6
6
  major: '2024-09-13T14:36:29.063Z',
7
- minor: '2025-04-17T07:28:20.362Z',
8
- patch: '2025-04-17T07:28:20.362Z',
7
+ minor: '2025-04-17T08:57:44.308Z',
8
+ patch: '2025-04-17T08:57:44.308Z',
9
9
  }