@tldraw/editor 4.6.0-next.fe1474dc57d8 → 5.0.0

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 (207) hide show
  1. package/dist-cjs/index.d.ts +412 -179
  2. package/dist-cjs/index.js +12 -23
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +3 -0
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/components/default-components/CanvasOverlays.js +180 -0
  7. package/dist-cjs/lib/components/default-components/CanvasOverlays.js.map +7 -0
  8. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +44 -249
  9. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +3 -3
  10. package/dist-cjs/lib/editor/Editor.js +78 -28
  11. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  12. package/dist-cjs/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.js +98 -0
  13. package/dist-cjs/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.js.map +7 -0
  14. package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js +14 -0
  15. package/dist-cjs/lib/editor/managers/ThemeManager/defaultThemes.js.map +2 -2
  16. package/dist-cjs/lib/editor/overlays/OverlayManager.js +154 -0
  17. package/dist-cjs/lib/editor/overlays/OverlayManager.js.map +7 -0
  18. package/dist-cjs/lib/editor/overlays/OverlayUtil.js +92 -0
  19. package/dist-cjs/lib/editor/overlays/OverlayUtil.js.map +7 -0
  20. package/dist-cjs/lib/editor/overlays/ShapeIndicatorOverlayUtil.js +161 -0
  21. package/dist-cjs/lib/editor/overlays/ShapeIndicatorOverlayUtil.js.map +7 -0
  22. package/dist-cjs/lib/editor/overlays/getOverlayDisplayValues.js +39 -0
  23. package/dist-cjs/lib/editor/overlays/getOverlayDisplayValues.js.map +7 -0
  24. package/dist-cjs/lib/editor/shapes/BaseFrameLikeShapeUtil.js +3 -0
  25. package/dist-cjs/lib/editor/shapes/BaseFrameLikeShapeUtil.js.map +2 -2
  26. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +25 -23
  27. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  28. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +32 -2
  29. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +2 -2
  30. package/dist-cjs/lib/editor/types/event-types.js.map +2 -2
  31. package/dist-cjs/lib/exports/fetchCache.js +1 -1
  32. package/dist-cjs/lib/exports/fetchCache.js.map +2 -2
  33. package/dist-cjs/lib/hooks/EditorComponentsContext.js.map +2 -2
  34. package/dist-cjs/lib/hooks/useCanvasEvents.js +3 -3
  35. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  36. package/dist-cjs/lib/hooks/useEditorComponents.js +0 -28
  37. package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
  38. package/dist-cjs/lib/hooks/usePeerIds.js +1 -36
  39. package/dist-cjs/lib/hooks/usePeerIds.js.map +2 -2
  40. package/dist-cjs/lib/hooks/useShapeCulling.js +2 -1
  41. package/dist-cjs/lib/hooks/useShapeCulling.js.map +2 -2
  42. package/dist-cjs/lib/options.js +0 -1
  43. package/dist-cjs/lib/options.js.map +2 -2
  44. package/dist-cjs/lib/utils/reparenting.js +20 -7
  45. package/dist-cjs/lib/utils/reparenting.js.map +2 -2
  46. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +3 -0
  47. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
  48. package/dist-cjs/version.js +4 -4
  49. package/dist-cjs/version.js.map +1 -1
  50. package/dist-esm/index.d.mts +412 -179
  51. package/dist-esm/index.mjs +19 -41
  52. package/dist-esm/index.mjs.map +2 -2
  53. package/dist-esm/lib/TldrawEditor.mjs +3 -0
  54. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  55. package/dist-esm/lib/components/default-components/CanvasOverlays.mjs +160 -0
  56. package/dist-esm/lib/components/default-components/CanvasOverlays.mjs.map +7 -0
  57. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +45 -250
  58. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +3 -3
  59. package/dist-esm/lib/editor/Editor.mjs +78 -29
  60. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  61. package/dist-esm/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.mjs +83 -0
  62. package/dist-esm/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.mjs.map +7 -0
  63. package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs +14 -0
  64. package/dist-esm/lib/editor/managers/ThemeManager/defaultThemes.mjs.map +2 -2
  65. package/dist-esm/lib/editor/overlays/OverlayManager.mjs +136 -0
  66. package/dist-esm/lib/editor/overlays/OverlayManager.mjs.map +7 -0
  67. package/dist-esm/lib/editor/overlays/OverlayUtil.mjs +72 -0
  68. package/dist-esm/lib/editor/overlays/OverlayUtil.mjs.map +7 -0
  69. package/dist-esm/lib/editor/overlays/ShapeIndicatorOverlayUtil.mjs +141 -0
  70. package/dist-esm/lib/editor/overlays/ShapeIndicatorOverlayUtil.mjs.map +7 -0
  71. package/dist-esm/lib/editor/overlays/getOverlayDisplayValues.mjs +19 -0
  72. package/dist-esm/lib/editor/overlays/getOverlayDisplayValues.mjs.map +7 -0
  73. package/dist-esm/lib/editor/shapes/BaseFrameLikeShapeUtil.mjs +3 -0
  74. package/dist-esm/lib/editor/shapes/BaseFrameLikeShapeUtil.mjs.map +2 -2
  75. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +25 -23
  76. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  77. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +32 -2
  78. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +2 -2
  79. package/dist-esm/lib/editor/types/event-types.mjs.map +2 -2
  80. package/dist-esm/lib/exports/fetchCache.mjs +2 -2
  81. package/dist-esm/lib/exports/fetchCache.mjs.map +2 -2
  82. package/dist-esm/lib/hooks/EditorComponentsContext.mjs.map +2 -2
  83. package/dist-esm/lib/hooks/useCanvasEvents.mjs +3 -3
  84. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  85. package/dist-esm/lib/hooks/useEditorComponents.mjs +0 -28
  86. package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
  87. package/dist-esm/lib/hooks/usePeerIds.mjs +2 -40
  88. package/dist-esm/lib/hooks/usePeerIds.mjs.map +2 -2
  89. package/dist-esm/lib/hooks/useShapeCulling.mjs +2 -1
  90. package/dist-esm/lib/hooks/useShapeCulling.mjs.map +2 -2
  91. package/dist-esm/lib/options.mjs +0 -1
  92. package/dist-esm/lib/options.mjs.map +2 -2
  93. package/dist-esm/lib/utils/reparenting.mjs +20 -7
  94. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  95. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +3 -0
  96. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
  97. package/dist-esm/version.mjs +4 -4
  98. package/dist-esm/version.mjs.map +1 -1
  99. package/editor.css +4 -239
  100. package/package.json +7 -7
  101. package/src/index.ts +17 -39
  102. package/src/lib/TldrawEditor.tsx +9 -0
  103. package/src/lib/components/default-components/CanvasOverlays.tsx +208 -0
  104. package/src/lib/components/default-components/DefaultCanvas.tsx +49 -324
  105. package/src/lib/editor/Editor.test.ts +3 -1
  106. package/src/lib/editor/Editor.ts +80 -24
  107. package/src/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.ts +98 -0
  108. package/src/lib/editor/managers/ThemeManager/defaultThemes.ts +14 -0
  109. package/src/lib/editor/overlays/OverlayManager.ts +183 -0
  110. package/src/lib/editor/overlays/OverlayUtil.ts +143 -0
  111. package/src/lib/editor/overlays/ShapeIndicatorOverlayUtil.ts +216 -0
  112. package/src/lib/editor/overlays/getOverlayDisplayValues.ts +51 -0
  113. package/src/lib/editor/shapes/BaseFrameLikeShapeUtil.tsx +9 -2
  114. package/src/lib/editor/shapes/ShapeUtil.ts +34 -26
  115. package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +40 -3
  116. package/src/lib/editor/types/event-types.ts +2 -0
  117. package/src/lib/exports/fetchCache.ts +2 -4
  118. package/src/lib/exports/getSvgJsx.test.ts +3 -1
  119. package/src/lib/hooks/EditorComponentsContext.tsx +0 -27
  120. package/src/lib/hooks/useCanvasEvents.ts +13 -8
  121. package/src/lib/hooks/useEditorComponents.tsx +0 -28
  122. package/src/lib/hooks/usePeerIds.ts +6 -55
  123. package/src/lib/hooks/useShapeCulling.tsx +3 -1
  124. package/src/lib/options.ts +0 -7
  125. package/src/lib/utils/reparenting.ts +22 -9
  126. package/src/lib/utils/sync/TLLocalSyncClient.ts +3 -0
  127. package/src/version.ts +4 -4
  128. package/dist-cjs/lib/components/GeometryDebuggingView.js +0 -115
  129. package/dist-cjs/lib/components/GeometryDebuggingView.js.map +0 -7
  130. package/dist-cjs/lib/components/LiveCollaborators.js +0 -152
  131. package/dist-cjs/lib/components/LiveCollaborators.js.map +0 -7
  132. package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js +0 -234
  133. package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js.map +0 -7
  134. package/dist-cjs/lib/components/default-components/DefaultBrush.js +0 -38
  135. package/dist-cjs/lib/components/default-components/DefaultBrush.js.map +0 -7
  136. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +0 -71
  137. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +0 -7
  138. package/dist-cjs/lib/components/default-components/DefaultCursor.js +0 -59
  139. package/dist-cjs/lib/components/default-components/DefaultCursor.js.map +0 -7
  140. package/dist-cjs/lib/components/default-components/DefaultHandle.js +0 -56
  141. package/dist-cjs/lib/components/default-components/DefaultHandle.js.map +0 -7
  142. package/dist-cjs/lib/components/default-components/DefaultHandles.js +0 -28
  143. package/dist-cjs/lib/components/default-components/DefaultHandles.js.map +0 -7
  144. package/dist-cjs/lib/components/default-components/DefaultScribble.js +0 -51
  145. package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +0 -7
  146. package/dist-cjs/lib/components/default-components/DefaultSelectionForeground.js +0 -69
  147. package/dist-cjs/lib/components/default-components/DefaultSelectionForeground.js.map +0 -7
  148. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +0 -107
  149. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +0 -7
  150. package/dist-cjs/lib/components/default-components/DefaultShapeIndicatorErrorFallback.js +0 -28
  151. package/dist-cjs/lib/components/default-components/DefaultShapeIndicatorErrorFallback.js.map +0 -7
  152. package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js +0 -102
  153. package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js.map +0 -7
  154. package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js +0 -170
  155. package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js.map +0 -7
  156. package/dist-cjs/lib/hooks/useHandleEvents.js +0 -100
  157. package/dist-cjs/lib/hooks/useHandleEvents.js.map +0 -7
  158. package/dist-cjs/lib/hooks/useSelectionEvents.js +0 -98
  159. package/dist-cjs/lib/hooks/useSelectionEvents.js.map +0 -7
  160. package/dist-esm/lib/components/GeometryDebuggingView.mjs +0 -95
  161. package/dist-esm/lib/components/GeometryDebuggingView.mjs.map +0 -7
  162. package/dist-esm/lib/components/LiveCollaborators.mjs +0 -135
  163. package/dist-esm/lib/components/LiveCollaborators.mjs.map +0 -7
  164. package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs +0 -214
  165. package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs.map +0 -7
  166. package/dist-esm/lib/components/default-components/DefaultBrush.mjs +0 -18
  167. package/dist-esm/lib/components/default-components/DefaultBrush.mjs.map +0 -7
  168. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +0 -41
  169. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +0 -7
  170. package/dist-esm/lib/components/default-components/DefaultCursor.mjs +0 -29
  171. package/dist-esm/lib/components/default-components/DefaultCursor.mjs.map +0 -7
  172. package/dist-esm/lib/components/default-components/DefaultHandle.mjs +0 -26
  173. package/dist-esm/lib/components/default-components/DefaultHandle.mjs.map +0 -7
  174. package/dist-esm/lib/components/default-components/DefaultHandles.mjs +0 -8
  175. package/dist-esm/lib/components/default-components/DefaultHandles.mjs.map +0 -7
  176. package/dist-esm/lib/components/default-components/DefaultScribble.mjs +0 -21
  177. package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +0 -7
  178. package/dist-esm/lib/components/default-components/DefaultSelectionForeground.mjs +0 -39
  179. package/dist-esm/lib/components/default-components/DefaultSelectionForeground.mjs.map +0 -7
  180. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +0 -77
  181. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +0 -7
  182. package/dist-esm/lib/components/default-components/DefaultShapeIndicatorErrorFallback.mjs +0 -8
  183. package/dist-esm/lib/components/default-components/DefaultShapeIndicatorErrorFallback.mjs.map +0 -7
  184. package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs +0 -82
  185. package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs.map +0 -7
  186. package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs +0 -142
  187. package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs.map +0 -7
  188. package/dist-esm/lib/hooks/useHandleEvents.mjs +0 -70
  189. package/dist-esm/lib/hooks/useHandleEvents.mjs.map +0 -7
  190. package/dist-esm/lib/hooks/useSelectionEvents.mjs +0 -78
  191. package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +0 -7
  192. package/src/lib/components/GeometryDebuggingView.tsx +0 -108
  193. package/src/lib/components/LiveCollaborators.tsx +0 -180
  194. package/src/lib/components/default-components/CanvasShapeIndicators.tsx +0 -300
  195. package/src/lib/components/default-components/DefaultBrush.tsx +0 -35
  196. package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +0 -52
  197. package/src/lib/components/default-components/DefaultCursor.tsx +0 -59
  198. package/src/lib/components/default-components/DefaultHandle.tsx +0 -42
  199. package/src/lib/components/default-components/DefaultHandles.tsx +0 -15
  200. package/src/lib/components/default-components/DefaultScribble.tsx +0 -31
  201. package/src/lib/components/default-components/DefaultSelectionForeground.tsx +0 -50
  202. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +0 -104
  203. package/src/lib/components/default-components/DefaultShapeIndicatorErrorFallback.tsx +0 -9
  204. package/src/lib/components/default-components/DefaultShapeIndicators.tsx +0 -118
  205. package/src/lib/components/default-components/DefaultSnapIndictor.tsx +0 -174
  206. package/src/lib/hooks/useHandleEvents.ts +0 -88
  207. package/src/lib/hooks/useSelectionEvents.ts +0 -97
@@ -56,7 +56,6 @@ import {
56
56
  hasOwnProperty,
57
57
  last,
58
58
  lerp,
59
- maxBy,
60
59
  minBy,
61
60
  sortById,
62
61
  sortByIndex,
@@ -111,6 +110,7 @@ import { notVisibleShapes } from "./derivations/notVisibleShapes.mjs";
111
110
  import { parentsToChildren } from "./derivations/parentsToChildren.mjs";
112
111
  import { deriveShapeIdsInCurrentPage } from "./derivations/shapeIdsInCurrentPage.mjs";
113
112
  import { ClickManager } from "./managers/ClickManager/ClickManager.mjs";
113
+ import { CollaboratorsManager } from "./managers/CollaboratorsManager/CollaboratorsManager.mjs";
114
114
  import { EdgeScrollManager } from "./managers/EdgeScrollManager/EdgeScrollManager.mjs";
115
115
  import { FocusManager } from "./managers/FocusManager/FocusManager.mjs";
116
116
  import { FontManager } from "./managers/FontManager/FontManager.mjs";
@@ -124,6 +124,7 @@ import { TextManager } from "./managers/TextManager/TextManager.mjs";
124
124
  import { ThemeManager, resolveThemes } from "./managers/ThemeManager/ThemeManager.mjs";
125
125
  import { TickManager } from "./managers/TickManager/TickManager.mjs";
126
126
  import { UserPreferencesManager } from "./managers/UserPreferencesManager/UserPreferencesManager.mjs";
127
+ import { OverlayManager } from "./overlays/OverlayManager.mjs";
127
128
  import { RootState } from "./tools/RootState.mjs";
128
129
  class Editor extends EventEmitter {
129
130
  id = uniqueId();
@@ -133,6 +134,7 @@ class Editor extends EventEmitter {
133
134
  shapeUtils,
134
135
  bindingUtils,
135
136
  assetUtils: assetUtilConstructors,
137
+ overlayUtils: overlayUtilConstructors,
136
138
  tools,
137
139
  getContainer,
138
140
  // needs to be here for backwards compatibility with TldrawEditor
@@ -192,6 +194,7 @@ class Editor extends EventEmitter {
192
194
  this.inputs = new InputsManager(this);
193
195
  this.performance = new PerformanceManager(this);
194
196
  this.disposables.add(() => this.performance.dispose());
197
+ this.collaborators = new CollaboratorsManager(this);
195
198
  class NewRoot extends RootState {
196
199
  static initial = initialState ?? "";
197
200
  }
@@ -252,6 +255,13 @@ class Editor extends EventEmitter {
252
255
  this.root.children[Tool.id] = new Tool(this, this.root);
253
256
  }
254
257
  this.scribbles = new ScribbleManager(this);
258
+ this.overlays = new OverlayManager(this);
259
+ if (overlayUtilConstructors) {
260
+ for (const Util of overlayUtilConstructors) {
261
+ const util = new Util(this);
262
+ this.overlays.registerUtil(util);
263
+ }
264
+ }
255
265
  const cleanupInstancePageState = (prevPageState, shapesNoLongerInPage) => {
256
266
  let nextPageState = null;
257
267
  const selectedShapeIds = prevPageState.selectedShapeIds.filter(
@@ -704,6 +714,12 @@ class Editor extends EventEmitter {
704
714
  * @public
705
715
  */
706
716
  timers = tltime.forContext(this.contextId);
717
+ /**
718
+ * A manager for remote peer collaborators connected to this editor.
719
+ *
720
+ * @public
721
+ */
722
+ collaborators;
707
723
  /**
708
724
  * A manager for the user and their preferences.
709
725
  *
@@ -734,6 +750,12 @@ class Editor extends EventEmitter {
734
750
  * @public
735
751
  */
736
752
  scribbles;
753
+ /**
754
+ * A manager for canvas overlay UI elements (selection handles, shape handles, etc.).
755
+ *
756
+ * @public
757
+ */
758
+ overlays;
737
759
  /**
738
760
  * A manager for side effects and correct state enforcement. See {@link @tldraw/store#StoreSideEffects} for details.
739
761
  *
@@ -1382,11 +1404,20 @@ class Editor extends EventEmitter {
1382
1404
  /**
1383
1405
  * Set the cursor.
1384
1406
  *
1407
+ * No-op when the partial wouldn't change the current cursor — `setCursor`
1408
+ * is called from pointer-move hot paths (see `updateHoveredOverlayId`,
1409
+ * various tool states) and skipping redundant writes avoids needlessly
1410
+ * dirtying instance state.
1411
+ *
1385
1412
  * @param cursor - The cursor to set.
1386
1413
  * @public
1387
1414
  */
1388
1415
  setCursor(cursor) {
1389
- this.updateInstanceState({ cursor: { ...this.getInstanceState().cursor, ...cursor } });
1416
+ const current = this.getInstanceState().cursor;
1417
+ if ((cursor.type === void 0 || cursor.type === current.type) && (cursor.rotation === void 0 || cursor.rotation === current.rotation)) {
1418
+ return this;
1419
+ }
1420
+ this.updateInstanceState({ cursor: { ...current, ...cursor } });
1390
1421
  return this;
1391
1422
  }
1392
1423
  getPageStates() {
@@ -3052,26 +3083,53 @@ class Editor extends EventEmitter {
3052
3083
  const { x: cx, y: cy, z: cz = 1 } = this.getCamera();
3053
3084
  return new Vec((point.x + cx) * cz, (point.y + cy) * cz, point.z ?? 0.5);
3054
3085
  }
3055
- _getCollaboratorsQuery() {
3056
- return this.store.query.records("instance_presence", () => ({
3057
- userId: { neq: this.user.getId() }
3058
- }));
3059
- }
3086
+ // Collaborators
3087
+ /**
3088
+ * Returns a list of presence records for all peer collaborators.
3089
+ * This will return the latest presence record for each connected user.
3090
+ *
3091
+ * Convenience wrapper for {@link CollaboratorsManager.getCollaborators}.
3092
+ *
3093
+ * @public
3094
+ */
3060
3095
  getCollaborators() {
3061
- const allPresenceRecords = this._getCollaboratorsQuery().get();
3062
- if (!allPresenceRecords.length) return EMPTY_ARRAY;
3063
- const userIds = [...new Set(allPresenceRecords.map((c) => c.userId))].sort();
3064
- return userIds.map((id) => {
3065
- const latestPresence = maxBy(
3066
- allPresenceRecords.filter((c) => c.userId === id),
3067
- (p) => p.lastActivityTimestamp ?? 0
3068
- );
3069
- return latestPresence;
3070
- });
3096
+ return this.collaborators.getCollaborators();
3071
3097
  }
3098
+ /**
3099
+ * Returns a list of presence records for all peer collaborators on the current page.
3100
+ * This will return the latest presence record for each connected user.
3101
+ *
3102
+ * Convenience wrapper for {@link CollaboratorsManager.getCollaboratorsOnCurrentPage}.
3103
+ *
3104
+ * @public
3105
+ */
3072
3106
  getCollaboratorsOnCurrentPage() {
3073
- const currentPageId = this.getCurrentPageId();
3074
- return this.getCollaborators().filter((c) => c.currentPageId === currentPageId);
3107
+ return this.collaborators.getCollaboratorsOnCurrentPage();
3108
+ }
3109
+ /**
3110
+ * Returns a list of presence records for peer collaborators who should currently be
3111
+ * shown in the UI. Filters {@link Editor.getCollaborators} by activity state
3112
+ * (active / idle / inactive) and visibility rules such as following and highlighted
3113
+ * users. Re-evaluates on the collaborator visibility clock, so callers don't need to
3114
+ * drive their own activity timer.
3115
+ *
3116
+ * Convenience wrapper for {@link CollaboratorsManager.getVisibleCollaborators}.
3117
+ *
3118
+ * @public
3119
+ */
3120
+ getVisibleCollaborators() {
3121
+ return this.collaborators.getVisibleCollaborators();
3122
+ }
3123
+ /**
3124
+ * Returns a list of presence records for peer collaborators who should currently be
3125
+ * shown in the UI, filtered to those on the current page.
3126
+ *
3127
+ * Convenience wrapper for {@link CollaboratorsManager.getVisibleCollaboratorsOnCurrentPage}.
3128
+ *
3129
+ * @public
3130
+ */
3131
+ getVisibleCollaboratorsOnCurrentPage() {
3132
+ return this.collaborators.getVisibleCollaboratorsOnCurrentPage();
3075
3133
  }
3076
3134
  // Attribution
3077
3135
  /**
@@ -3707,7 +3765,7 @@ class Editor extends EventEmitter {
3707
3765
  } = context;
3708
3766
  const zoomStepFunction = (zoom) => Math.pow(2, Math.ceil(Math.log2(zoom)));
3709
3767
  const steppedScreenScale = zoomStepFunction(screenScale);
3710
- const networkEffectiveType = "connection" in navigator ? navigator.connection.effectiveType : null;
3768
+ const networkEffectiveType = "connection" in navigator ? navigator.connection?.effectiveType ?? null : null;
3711
3769
  return await this.store.props.assets.resolve(asset, {
3712
3770
  screenScale: screenScale || 1,
3713
3771
  steppedScreenScale,
@@ -8422,15 +8480,6 @@ __decorateClass([
8422
8480
  __decorateClass([
8423
8481
  computed
8424
8482
  ], Editor.prototype, "getViewportPageBounds", 1);
8425
- __decorateClass([
8426
- computed
8427
- ], Editor.prototype, "_getCollaboratorsQuery", 1);
8428
- __decorateClass([
8429
- computed
8430
- ], Editor.prototype, "getCollaborators", 1);
8431
- __decorateClass([
8432
- computed
8433
- ], Editor.prototype, "getCollaboratorsOnCurrentPage", 1);
8434
8483
  __decorateClass([
8435
8484
  computed
8436
8485
  ], Editor.prototype, "getRenderingShapes", 1);