@tldraw/editor 4.3.1 → 4.4.0-canary.0791272556f5

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 (103) hide show
  1. package/README.md +1 -1
  2. package/dist-cjs/index.d.ts +181 -12
  3. package/dist-cjs/index.js +3 -6
  4. package/dist-cjs/index.js.map +3 -3
  5. package/dist-cjs/lib/components/LiveCollaborators.js +14 -24
  6. package/dist-cjs/lib/components/LiveCollaborators.js.map +2 -2
  7. package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js +201 -0
  8. package/dist-cjs/lib/components/default-components/CanvasShapeIndicators.js.map +7 -0
  9. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +30 -16
  10. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  11. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +3 -1
  12. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  13. package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js +13 -1
  14. package/dist-cjs/lib/components/default-components/DefaultShapeIndicators.js.map +2 -2
  15. package/dist-cjs/lib/config/TLUserPreferences.js +9 -3
  16. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  17. package/dist-cjs/lib/editor/Editor.js +69 -15
  18. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  19. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +13 -21
  20. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +2 -2
  21. package/dist-cjs/lib/editor/managers/ScribbleManager/ScribbleManager.js +378 -89
  22. package/dist-cjs/lib/editor/managers/ScribbleManager/ScribbleManager.js.map +2 -2
  23. package/dist-cjs/lib/editor/managers/SpatialIndexManager/RBushIndex.js +144 -0
  24. package/dist-cjs/lib/editor/managers/SpatialIndexManager/RBushIndex.js.map +7 -0
  25. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js +180 -0
  26. package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js.map +7 -0
  27. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +8 -3
  28. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  29. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +29 -0
  30. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  31. package/dist-cjs/lib/editor/tools/RootState.js +0 -13
  32. package/dist-cjs/lib/editor/tools/RootState.js.map +2 -2
  33. package/dist-cjs/lib/hooks/usePeerIds.js +29 -0
  34. package/dist-cjs/lib/hooks/usePeerIds.js.map +2 -2
  35. package/dist-cjs/lib/options.js +1 -0
  36. package/dist-cjs/lib/options.js.map +2 -2
  37. package/dist-cjs/lib/utils/collaboratorState.js +42 -0
  38. package/dist-cjs/lib/utils/collaboratorState.js.map +7 -0
  39. package/dist-cjs/version.js +3 -3
  40. package/dist-cjs/version.js.map +1 -1
  41. package/dist-esm/index.d.mts +181 -12
  42. package/dist-esm/index.mjs +3 -6
  43. package/dist-esm/index.mjs.map +2 -2
  44. package/dist-esm/lib/components/LiveCollaborators.mjs +17 -24
  45. package/dist-esm/lib/components/LiveCollaborators.mjs.map +2 -2
  46. package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs +181 -0
  47. package/dist-esm/lib/components/default-components/CanvasShapeIndicators.mjs.map +7 -0
  48. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +30 -16
  49. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  50. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +3 -1
  51. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  52. package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs +13 -1
  53. package/dist-esm/lib/components/default-components/DefaultShapeIndicators.mjs.map +2 -2
  54. package/dist-esm/lib/config/TLUserPreferences.mjs +9 -3
  55. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  56. package/dist-esm/lib/editor/Editor.mjs +69 -15
  57. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  58. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +13 -21
  59. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +2 -2
  60. package/dist-esm/lib/editor/managers/ScribbleManager/ScribbleManager.mjs +378 -89
  61. package/dist-esm/lib/editor/managers/ScribbleManager/ScribbleManager.mjs.map +2 -2
  62. package/dist-esm/lib/editor/managers/SpatialIndexManager/RBushIndex.mjs +114 -0
  63. package/dist-esm/lib/editor/managers/SpatialIndexManager/RBushIndex.mjs.map +7 -0
  64. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs +160 -0
  65. package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs.map +7 -0
  66. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +8 -3
  67. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  68. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +29 -0
  69. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  70. package/dist-esm/lib/editor/tools/RootState.mjs +0 -13
  71. package/dist-esm/lib/editor/tools/RootState.mjs.map +2 -2
  72. package/dist-esm/lib/hooks/usePeerIds.mjs +33 -1
  73. package/dist-esm/lib/hooks/usePeerIds.mjs.map +2 -2
  74. package/dist-esm/lib/options.mjs +1 -0
  75. package/dist-esm/lib/options.mjs.map +2 -2
  76. package/dist-esm/lib/utils/collaboratorState.mjs +22 -0
  77. package/dist-esm/lib/utils/collaboratorState.mjs.map +7 -0
  78. package/dist-esm/version.mjs +3 -3
  79. package/dist-esm/version.mjs.map +1 -1
  80. package/editor.css +11 -9
  81. package/package.json +10 -10
  82. package/src/index.ts +3 -5
  83. package/src/lib/components/LiveCollaborators.tsx +26 -37
  84. package/src/lib/components/default-components/CanvasShapeIndicators.tsx +244 -0
  85. package/src/lib/components/default-components/DefaultCanvas.tsx +16 -6
  86. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +6 -1
  87. package/src/lib/components/default-components/DefaultShapeIndicators.tsx +16 -1
  88. package/src/lib/config/TLUserPreferences.test.ts +1 -0
  89. package/src/lib/config/TLUserPreferences.ts +8 -0
  90. package/src/lib/editor/Editor.ts +103 -15
  91. package/src/lib/editor/derivations/notVisibleShapes.ts +15 -41
  92. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.ts +491 -106
  93. package/src/lib/editor/managers/SpatialIndexManager/RBushIndex.ts +144 -0
  94. package/src/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.ts +214 -0
  95. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +24 -0
  96. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +8 -0
  97. package/src/lib/editor/shapes/ShapeUtil.ts +44 -0
  98. package/src/lib/editor/tools/RootState.ts +0 -16
  99. package/src/lib/hooks/usePeerIds.ts +46 -1
  100. package/src/lib/options.ts +7 -0
  101. package/src/lib/utils/collaboratorState.ts +54 -0
  102. package/src/version.ts +3 -3
  103. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +0 -621
@@ -9,60 +9,34 @@ import { Editor } from '../Editor'
9
9
  * @returns Incremental derivation of non visible shapes.
10
10
  */
11
11
  export function notVisibleShapes(editor: Editor) {
12
- return computed<Set<TLShapeId>>('notVisibleShapes', function updateNotVisibleShapes(prevValue) {
13
- const shapeIds = editor.getCurrentPageShapeIds()
14
- const nextValue = new Set<TLShapeId>()
15
-
16
- // Extract viewport bounds once to avoid repeated property access
12
+ return computed<Set<TLShapeId>>('notVisibleShapes', function (prevValue) {
13
+ const allShapeIds = editor.getCurrentPageShapeIds()
17
14
  const viewportPageBounds = editor.getViewportPageBounds()
18
- const viewMinX = viewportPageBounds.minX
19
- const viewMinY = viewportPageBounds.minY
20
- const viewMaxX = viewportPageBounds.maxX
21
- const viewMaxY = viewportPageBounds.maxY
15
+ const visibleIds = editor.getShapeIdsInsideBounds(viewportPageBounds)
22
16
 
23
- for (const id of shapeIds) {
24
- const pageBounds = editor.getShapePageBounds(id)
25
-
26
- // Hybrid check: if bounds exist and shape overlaps viewport, it's visible.
27
- // This inlines Box.Collides to avoid function call overhead and the
28
- // redundant Contains check that Box.Includes was doing.
29
- if (
30
- pageBounds !== undefined &&
31
- pageBounds.maxX >= viewMinX &&
32
- pageBounds.minX <= viewMaxX &&
33
- pageBounds.maxY >= viewMinY &&
34
- pageBounds.minY <= viewMaxY
35
- ) {
36
- continue
37
- }
17
+ const nextValue = new Set<TLShapeId>()
38
18
 
39
- // Shape is outside viewport or has no bounds - check if it can be culled.
40
- // We defer getShape and canCull checks until here since most shapes are
41
- // typically visible and we can skip these calls for them.
42
- const shape = editor.getShape(id)
43
- if (!shape) continue
19
+ // Non-visible shapes are all shapes minus visible shapes
20
+ for (const id of allShapeIds) {
21
+ if (!visibleIds.has(id)) {
22
+ const shape = editor.getShape(id)
23
+ if (!shape) continue
44
24
 
45
- const canCull = editor.getShapeUtil(shape.type).canCull(shape)
46
- if (!canCull) continue
25
+ const canCull = editor.getShapeUtil(shape.type).canCull(shape)
26
+ if (!canCull) continue
47
27
 
48
- nextValue.add(id)
28
+ nextValue.add(id)
29
+ }
49
30
  }
50
31
 
51
- if (isUninitialized(prevValue)) {
32
+ if (isUninitialized(prevValue) || prevValue.size !== nextValue.size) {
52
33
  return nextValue
53
34
  }
54
35
 
55
- // If there are more or less shapes, we know there's a change
56
- if (prevValue.size !== nextValue.size) return nextValue
57
-
58
- // If any of the old shapes are not in the new set, we know there's a change
59
36
  for (const prev of prevValue) {
60
- if (!nextValue.has(prev)) {
61
- return nextValue
62
- }
37
+ if (!nextValue.has(prev)) return nextValue
63
38
  }
64
39
 
65
- // If we've made it here, we know that the set is the same
66
40
  return prevValue
67
41
  })
68
42
  }