@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
@@ -77,6 +77,7 @@ var import_notVisibleShapes = require("./derivations/notVisibleShapes");
77
77
  var import_parentsToChildren = require("./derivations/parentsToChildren");
78
78
  var import_shapeIdsInCurrentPage = require("./derivations/shapeIdsInCurrentPage");
79
79
  var import_ClickManager = require("./managers/ClickManager/ClickManager");
80
+ var import_CollaboratorsManager = require("./managers/CollaboratorsManager/CollaboratorsManager");
80
81
  var import_EdgeScrollManager = require("./managers/EdgeScrollManager/EdgeScrollManager");
81
82
  var import_FocusManager = require("./managers/FocusManager/FocusManager");
82
83
  var import_FontManager = require("./managers/FontManager/FontManager");
@@ -90,6 +91,7 @@ var import_TextManager = require("./managers/TextManager/TextManager");
90
91
  var import_ThemeManager = require("./managers/ThemeManager/ThemeManager");
91
92
  var import_TickManager = require("./managers/TickManager/TickManager");
92
93
  var import_UserPreferencesManager = require("./managers/UserPreferencesManager/UserPreferencesManager");
94
+ var import_OverlayManager = require("./overlays/OverlayManager");
93
95
  var import_RootState = require("./tools/RootState");
94
96
  class Editor extends import_eventemitter3.default {
95
97
  id = (0, import_utils.uniqueId)();
@@ -99,6 +101,7 @@ class Editor extends import_eventemitter3.default {
99
101
  shapeUtils,
100
102
  bindingUtils,
101
103
  assetUtils: assetUtilConstructors,
104
+ overlayUtils: overlayUtilConstructors,
102
105
  tools,
103
106
  getContainer,
104
107
  // needs to be here for backwards compatibility with TldrawEditor
@@ -158,6 +161,7 @@ class Editor extends import_eventemitter3.default {
158
161
  this.inputs = new import_InputsManager.InputsManager(this);
159
162
  this.performance = new import_PerformanceManager.PerformanceManager(this);
160
163
  this.disposables.add(() => this.performance.dispose());
164
+ this.collaborators = new import_CollaboratorsManager.CollaboratorsManager(this);
161
165
  class NewRoot extends import_RootState.RootState {
162
166
  static initial = initialState ?? "";
163
167
  }
@@ -218,6 +222,13 @@ class Editor extends import_eventemitter3.default {
218
222
  this.root.children[Tool.id] = new Tool(this, this.root);
219
223
  }
220
224
  this.scribbles = new import_ScribbleManager.ScribbleManager(this);
225
+ this.overlays = new import_OverlayManager.OverlayManager(this);
226
+ if (overlayUtilConstructors) {
227
+ for (const Util of overlayUtilConstructors) {
228
+ const util = new Util(this);
229
+ this.overlays.registerUtil(util);
230
+ }
231
+ }
221
232
  const cleanupInstancePageState = (prevPageState, shapesNoLongerInPage) => {
222
233
  let nextPageState = null;
223
234
  const selectedShapeIds = prevPageState.selectedShapeIds.filter(
@@ -670,6 +681,12 @@ class Editor extends import_eventemitter3.default {
670
681
  * @public
671
682
  */
672
683
  timers = import_time.tltime.forContext(this.contextId);
684
+ /**
685
+ * A manager for remote peer collaborators connected to this editor.
686
+ *
687
+ * @public
688
+ */
689
+ collaborators;
673
690
  /**
674
691
  * A manager for the user and their preferences.
675
692
  *
@@ -700,6 +717,12 @@ class Editor extends import_eventemitter3.default {
700
717
  * @public
701
718
  */
702
719
  scribbles;
720
+ /**
721
+ * A manager for canvas overlay UI elements (selection handles, shape handles, etc.).
722
+ *
723
+ * @public
724
+ */
725
+ overlays;
703
726
  /**
704
727
  * A manager for side effects and correct state enforcement. See {@link @tldraw/store#StoreSideEffects} for details.
705
728
  *
@@ -1348,11 +1371,20 @@ class Editor extends import_eventemitter3.default {
1348
1371
  /**
1349
1372
  * Set the cursor.
1350
1373
  *
1374
+ * No-op when the partial wouldn't change the current cursor — `setCursor`
1375
+ * is called from pointer-move hot paths (see `updateHoveredOverlayId`,
1376
+ * various tool states) and skipping redundant writes avoids needlessly
1377
+ * dirtying instance state.
1378
+ *
1351
1379
  * @param cursor - The cursor to set.
1352
1380
  * @public
1353
1381
  */
1354
1382
  setCursor(cursor) {
1355
- this.updateInstanceState({ cursor: { ...this.getInstanceState().cursor, ...cursor } });
1383
+ const current = this.getInstanceState().cursor;
1384
+ if ((cursor.type === void 0 || cursor.type === current.type) && (cursor.rotation === void 0 || cursor.rotation === current.rotation)) {
1385
+ return this;
1386
+ }
1387
+ this.updateInstanceState({ cursor: { ...current, ...cursor } });
1356
1388
  return this;
1357
1389
  }
1358
1390
  getPageStates() {
@@ -3018,26 +3050,53 @@ class Editor extends import_eventemitter3.default {
3018
3050
  const { x: cx, y: cy, z: cz = 1 } = this.getCamera();
3019
3051
  return new import_Vec.Vec((point.x + cx) * cz, (point.y + cy) * cz, point.z ?? 0.5);
3020
3052
  }
3021
- _getCollaboratorsQuery() {
3022
- return this.store.query.records("instance_presence", () => ({
3023
- userId: { neq: this.user.getId() }
3024
- }));
3025
- }
3053
+ // Collaborators
3054
+ /**
3055
+ * Returns a list of presence records for all peer collaborators.
3056
+ * This will return the latest presence record for each connected user.
3057
+ *
3058
+ * Convenience wrapper for {@link CollaboratorsManager.getCollaborators}.
3059
+ *
3060
+ * @public
3061
+ */
3026
3062
  getCollaborators() {
3027
- const allPresenceRecords = this._getCollaboratorsQuery().get();
3028
- if (!allPresenceRecords.length) return import_state.EMPTY_ARRAY;
3029
- const userIds = [...new Set(allPresenceRecords.map((c) => c.userId))].sort();
3030
- return userIds.map((id) => {
3031
- const latestPresence = (0, import_utils.maxBy)(
3032
- allPresenceRecords.filter((c) => c.userId === id),
3033
- (p) => p.lastActivityTimestamp ?? 0
3034
- );
3035
- return latestPresence;
3036
- });
3063
+ return this.collaborators.getCollaborators();
3037
3064
  }
3065
+ /**
3066
+ * Returns a list of presence records for all peer collaborators on the current page.
3067
+ * This will return the latest presence record for each connected user.
3068
+ *
3069
+ * Convenience wrapper for {@link CollaboratorsManager.getCollaboratorsOnCurrentPage}.
3070
+ *
3071
+ * @public
3072
+ */
3038
3073
  getCollaboratorsOnCurrentPage() {
3039
- const currentPageId = this.getCurrentPageId();
3040
- return this.getCollaborators().filter((c) => c.currentPageId === currentPageId);
3074
+ return this.collaborators.getCollaboratorsOnCurrentPage();
3075
+ }
3076
+ /**
3077
+ * Returns a list of presence records for peer collaborators who should currently be
3078
+ * shown in the UI. Filters {@link Editor.getCollaborators} by activity state
3079
+ * (active / idle / inactive) and visibility rules such as following and highlighted
3080
+ * users. Re-evaluates on the collaborator visibility clock, so callers don't need to
3081
+ * drive their own activity timer.
3082
+ *
3083
+ * Convenience wrapper for {@link CollaboratorsManager.getVisibleCollaborators}.
3084
+ *
3085
+ * @public
3086
+ */
3087
+ getVisibleCollaborators() {
3088
+ return this.collaborators.getVisibleCollaborators();
3089
+ }
3090
+ /**
3091
+ * Returns a list of presence records for peer collaborators who should currently be
3092
+ * shown in the UI, filtered to those on the current page.
3093
+ *
3094
+ * Convenience wrapper for {@link CollaboratorsManager.getVisibleCollaboratorsOnCurrentPage}.
3095
+ *
3096
+ * @public
3097
+ */
3098
+ getVisibleCollaboratorsOnCurrentPage() {
3099
+ return this.collaborators.getVisibleCollaboratorsOnCurrentPage();
3041
3100
  }
3042
3101
  // Attribution
3043
3102
  /**
@@ -3673,7 +3732,7 @@ class Editor extends import_eventemitter3.default {
3673
3732
  } = context;
3674
3733
  const zoomStepFunction = (zoom) => Math.pow(2, Math.ceil(Math.log2(zoom)));
3675
3734
  const steppedScreenScale = zoomStepFunction(screenScale);
3676
- const networkEffectiveType = "connection" in navigator ? navigator.connection.effectiveType : null;
3735
+ const networkEffectiveType = "connection" in navigator ? navigator.connection?.effectiveType ?? null : null;
3677
3736
  return await this.store.props.assets.resolve(asset, {
3678
3737
  screenScale: screenScale || 1,
3679
3738
  steppedScreenScale,
@@ -8388,15 +8447,6 @@ __decorateClass([
8388
8447
  __decorateClass([
8389
8448
  import_state.computed
8390
8449
  ], Editor.prototype, "getViewportPageBounds", 1);
8391
- __decorateClass([
8392
- import_state.computed
8393
- ], Editor.prototype, "_getCollaboratorsQuery", 1);
8394
- __decorateClass([
8395
- import_state.computed
8396
- ], Editor.prototype, "getCollaborators", 1);
8397
- __decorateClass([
8398
- import_state.computed
8399
- ], Editor.prototype, "getCollaboratorsOnCurrentPage", 1);
8400
8450
  __decorateClass([
8401
8451
  import_state.computed
8402
8452
  ], Editor.prototype, "getRenderingShapes", 1);