@tldraw/editor 3.16.0-canary.ffdf566dd0a8 → 3.16.0-internal.71f83a8a571b

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 (218) hide show
  1. package/dist-cjs/index.d.ts +137 -126
  2. package/dist-cjs/index.js +6 -6
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +8 -8
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/components/MenuClickCapture.js +0 -5
  7. package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
  8. package/dist-cjs/lib/components/Shape.js +7 -10
  9. package/dist-cjs/lib/components/Shape.js.map +2 -2
  10. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +14 -23
  11. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  12. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +1 -1
  13. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +1 -1
  14. package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js +1 -1
  15. package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
  16. package/dist-cjs/lib/components/default-components/DefaultScribble.js +1 -1
  17. package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +2 -2
  18. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +9 -1
  19. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  20. package/dist-cjs/lib/config/TLUserPreferences.js +1 -1
  21. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  22. package/dist-cjs/lib/editor/Editor.js +67 -128
  23. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  24. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +4 -0
  25. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +2 -2
  26. package/dist-cjs/lib/editor/derivations/parentsToChildren.js.map +2 -2
  27. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +1 -1
  28. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  29. package/dist-cjs/lib/editor/shapes/BaseBoxShapeUtil.js.map +1 -1
  30. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +23 -0
  31. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  32. package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.js.map +2 -2
  33. package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
  34. package/dist-cjs/lib/exports/getSvgJsx.js +35 -16
  35. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  36. package/dist-cjs/lib/hooks/useCanvasEvents.js +44 -35
  37. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  38. package/dist-cjs/lib/hooks/useDocumentEvents.js +5 -5
  39. package/dist-cjs/lib/hooks/useDocumentEvents.js.map +2 -2
  40. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js +1 -2
  41. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
  42. package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
  43. package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
  44. package/dist-cjs/lib/hooks/useHandleEvents.js +3 -3
  45. package/dist-cjs/lib/hooks/useHandleEvents.js.map +2 -2
  46. package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js +4 -1
  47. package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js.map +2 -2
  48. package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js +4 -1
  49. package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js.map +2 -2
  50. package/dist-cjs/lib/hooks/useSelectionEvents.js +4 -4
  51. package/dist-cjs/lib/hooks/useSelectionEvents.js.map +2 -2
  52. package/dist-cjs/lib/license/LicenseManager.js +140 -53
  53. package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
  54. package/dist-cjs/lib/license/LicenseProvider.js +39 -1
  55. package/dist-cjs/lib/license/LicenseProvider.js.map +2 -2
  56. package/dist-cjs/lib/license/Watermark.js +73 -11
  57. package/dist-cjs/lib/license/Watermark.js.map +3 -3
  58. package/dist-cjs/lib/license/useLicenseManagerState.js.map +2 -2
  59. package/dist-cjs/lib/options.js +6 -0
  60. package/dist-cjs/lib/options.js.map +2 -2
  61. package/dist-cjs/lib/primitives/Box.js +3 -0
  62. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  63. package/dist-cjs/lib/primitives/Vec.js +0 -4
  64. package/dist-cjs/lib/primitives/Vec.js.map +2 -2
  65. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +50 -20
  66. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  67. package/dist-cjs/lib/primitives/geometry/Group2d.js +8 -1
  68. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  69. package/dist-cjs/lib/utils/dom.js +12 -1
  70. package/dist-cjs/lib/utils/dom.js.map +2 -2
  71. package/dist-cjs/lib/utils/getPointerInfo.js +2 -2
  72. package/dist-cjs/lib/utils/getPointerInfo.js.map +2 -2
  73. package/dist-cjs/lib/utils/reparenting.js +2 -35
  74. package/dist-cjs/lib/utils/reparenting.js.map +3 -3
  75. package/dist-cjs/version.js +3 -3
  76. package/dist-cjs/version.js.map +1 -1
  77. package/dist-esm/index.d.mts +137 -126
  78. package/dist-esm/index.mjs +9 -7
  79. package/dist-esm/index.mjs.map +2 -2
  80. package/dist-esm/lib/TldrawEditor.mjs +9 -9
  81. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  82. package/dist-esm/lib/components/MenuClickCapture.mjs +0 -5
  83. package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
  84. package/dist-esm/lib/components/Shape.mjs +7 -10
  85. package/dist-esm/lib/components/Shape.mjs.map +2 -2
  86. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +15 -24
  87. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  88. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +1 -1
  89. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +1 -1
  90. package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs +1 -1
  91. package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
  92. package/dist-esm/lib/components/default-components/DefaultScribble.mjs +1 -1
  93. package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +2 -2
  94. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +9 -1
  95. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  96. package/dist-esm/lib/config/TLUserPreferences.mjs +1 -1
  97. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  98. package/dist-esm/lib/editor/Editor.mjs +67 -128
  99. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  100. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +4 -0
  101. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +2 -2
  102. package/dist-esm/lib/editor/derivations/parentsToChildren.mjs.map +2 -2
  103. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +1 -1
  104. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  105. package/dist-esm/lib/editor/shapes/BaseBoxShapeUtil.mjs.map +1 -1
  106. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +23 -0
  107. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  108. package/dist-esm/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.mjs.map +2 -2
  109. package/dist-esm/lib/exports/getSvgJsx.mjs +36 -16
  110. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  111. package/dist-esm/lib/hooks/useCanvasEvents.mjs +47 -37
  112. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  113. package/dist-esm/lib/hooks/useDocumentEvents.mjs +11 -6
  114. package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
  115. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs +2 -3
  116. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
  117. package/dist-esm/lib/hooks/useGestureEvents.mjs +2 -2
  118. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
  119. package/dist-esm/lib/hooks/useHandleEvents.mjs +9 -4
  120. package/dist-esm/lib/hooks/useHandleEvents.mjs.map +2 -2
  121. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs +4 -1
  122. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs.map +2 -2
  123. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs +4 -1
  124. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
  125. package/dist-esm/lib/hooks/useSelectionEvents.mjs +6 -5
  126. package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +2 -2
  127. package/dist-esm/lib/license/LicenseManager.mjs +141 -54
  128. package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
  129. package/dist-esm/lib/license/LicenseProvider.mjs +39 -2
  130. package/dist-esm/lib/license/LicenseProvider.mjs.map +2 -2
  131. package/dist-esm/lib/license/Watermark.mjs +74 -12
  132. package/dist-esm/lib/license/Watermark.mjs.map +3 -3
  133. package/dist-esm/lib/license/useLicenseManagerState.mjs.map +2 -2
  134. package/dist-esm/lib/options.mjs +6 -0
  135. package/dist-esm/lib/options.mjs.map +2 -2
  136. package/dist-esm/lib/primitives/Box.mjs +4 -1
  137. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  138. package/dist-esm/lib/primitives/Vec.mjs +0 -4
  139. package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
  140. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +53 -21
  141. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  142. package/dist-esm/lib/primitives/geometry/Group2d.mjs +8 -1
  143. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  144. package/dist-esm/lib/utils/dom.mjs +12 -1
  145. package/dist-esm/lib/utils/dom.mjs.map +2 -2
  146. package/dist-esm/lib/utils/getPointerInfo.mjs +2 -2
  147. package/dist-esm/lib/utils/getPointerInfo.mjs.map +2 -2
  148. package/dist-esm/lib/utils/reparenting.mjs +3 -40
  149. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  150. package/dist-esm/version.mjs +3 -3
  151. package/dist-esm/version.mjs.map +1 -1
  152. package/editor.css +308 -292
  153. package/package.json +14 -37
  154. package/src/index.ts +4 -9
  155. package/src/lib/TldrawEditor.tsx +14 -21
  156. package/src/lib/components/MenuClickCapture.tsx +0 -8
  157. package/src/lib/components/Shape.tsx +6 -12
  158. package/src/lib/components/default-components/DefaultCanvas.tsx +12 -23
  159. package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +1 -1
  160. package/src/lib/components/default-components/DefaultErrorFallback.tsx +1 -1
  161. package/src/lib/components/default-components/DefaultScribble.tsx +1 -1
  162. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +5 -1
  163. package/src/lib/config/TLUserPreferences.ts +1 -1
  164. package/src/lib/editor/Editor.test.ts +108 -11
  165. package/src/lib/editor/Editor.ts +112 -195
  166. package/src/lib/editor/derivations/notVisibleShapes.ts +6 -0
  167. package/src/lib/editor/derivations/parentsToChildren.ts +1 -1
  168. package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +15 -14
  169. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +16 -15
  170. package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +49 -48
  171. package/src/lib/editor/managers/FontManager/FontManager.test.ts +38 -27
  172. package/src/lib/editor/managers/HistoryManager/HistoryManager.test.ts +7 -6
  173. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +12 -11
  174. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +57 -50
  175. package/src/lib/editor/managers/TextManager/TextManager.test.ts +51 -26
  176. package/src/lib/editor/managers/TickManager/TickManager.test.ts +14 -13
  177. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +21 -26
  178. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +1 -1
  179. package/src/lib/editor/shapes/BaseBoxShapeUtil.tsx +2 -2
  180. package/src/lib/editor/shapes/ShapeUtil.ts +51 -8
  181. package/src/lib/editor/tools/BaseBoxShapeTool/BaseBoxShapeTool.ts +2 -1
  182. package/src/lib/editor/types/misc-types.ts +0 -6
  183. package/src/lib/exports/getSvgJsx.test.ts +874 -0
  184. package/src/lib/exports/getSvgJsx.tsx +78 -21
  185. package/src/lib/hooks/useCanvasEvents.ts +60 -47
  186. package/src/lib/hooks/useDocumentEvents.ts +11 -6
  187. package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +2 -2
  188. package/src/lib/hooks/useGestureEvents.ts +2 -2
  189. package/src/lib/hooks/useHandleEvents.ts +9 -4
  190. package/src/lib/hooks/usePassThroughMouseOverEvents.ts +4 -1
  191. package/src/lib/hooks/usePassThroughWheelEvents.ts +6 -1
  192. package/src/lib/hooks/useSelectionEvents.ts +6 -5
  193. package/src/lib/license/LicenseManager.test.ts +724 -383
  194. package/src/lib/license/LicenseManager.ts +201 -58
  195. package/src/lib/license/LicenseProvider.tsx +74 -2
  196. package/src/lib/license/Watermark.test.tsx +2 -1
  197. package/src/lib/license/Watermark.tsx +79 -12
  198. package/src/lib/license/useLicenseManagerState.ts +2 -2
  199. package/src/lib/options.ts +6 -0
  200. package/src/lib/primitives/Box.test.ts +126 -0
  201. package/src/lib/primitives/Box.ts +10 -1
  202. package/src/lib/primitives/Vec.ts +0 -5
  203. package/src/lib/primitives/geometry/Geometry2d.test.ts +420 -0
  204. package/src/lib/primitives/geometry/Geometry2d.ts +78 -21
  205. package/src/lib/primitives/geometry/Group2d.ts +10 -1
  206. package/src/lib/test/InFrontOfTheCanvas.test.tsx +187 -0
  207. package/src/lib/utils/dom.test.ts +94 -0
  208. package/src/lib/utils/dom.ts +38 -1
  209. package/src/lib/utils/getPointerInfo.ts +2 -1
  210. package/src/lib/utils/reparenting.ts +3 -69
  211. package/src/lib/utils/sync/LocalIndexedDb.test.ts +2 -1
  212. package/src/lib/utils/sync/TLLocalSyncClient.test.ts +15 -15
  213. package/src/version.ts +3 -3
  214. package/dist-cjs/lib/utils/nearestMultiple.js +0 -34
  215. package/dist-cjs/lib/utils/nearestMultiple.js.map +0 -7
  216. package/dist-esm/lib/utils/nearestMultiple.mjs +0 -14
  217. package/dist-esm/lib/utils/nearestMultiple.mjs.map +0 -7
  218. package/src/lib/utils/nearestMultiple.ts +0 -13
@@ -26,10 +26,7 @@ import { TLClickEventInfo } from '../types/event-types'
26
26
  import { TLResizeHandle } from '../types/selection-types'
27
27
 
28
28
  /** @public */
29
- export interface TLShapeUtilConstructor<
30
- T extends TLUnknownShape,
31
- U extends ShapeUtil<T> = ShapeUtil<T>,
32
- > {
29
+ export interface TLShapeUtilConstructor<T extends TLShape, U extends ShapeUtil<T> = ShapeUtil<T>> {
33
30
  new (editor: Editor): U
34
31
  type: T['type']
35
32
  props?: RecordProps<T>
@@ -42,11 +39,11 @@ export interface TLShapeUtilConstructor<
42
39
  *
43
40
  * @public
44
41
  */
45
- export interface TLShapeUtilCanBindOpts<Shape extends TLUnknownShape = TLUnknownShape> {
42
+ export interface TLShapeUtilCanBindOpts<Shape extends TLShape = TLShape> {
46
43
  /** The type of shape referenced by the `fromId` of the binding. */
47
- fromShapeType: string
44
+ fromShapeType: TLShape['type']
48
45
  /** The type of shape referenced by the `toId` of the binding. */
49
- toShapeType: string
46
+ toShapeType: TLShape['type']
50
47
  /** The type of binding. */
51
48
  bindingType: string
52
49
  }
@@ -79,7 +76,7 @@ export interface TLShapeUtilCanvasSvgDef {
79
76
  }
80
77
 
81
78
  /** @public */
82
- export abstract class ShapeUtil<Shape extends TLUnknownShape = TLUnknownShape> {
79
+ export abstract class ShapeUtil<Shape extends TLShape = TLShape> {
83
80
  /** Configure this shape utils {@link ShapeUtil.options | `options`}. */
84
81
  static configure<T extends TLShapeUtilConstructor<any, any>>(
85
82
  this: T,
@@ -283,6 +280,17 @@ export abstract class ShapeUtil<Shape extends TLUnknownShape = TLUnknownShape> {
283
280
  return true
284
281
  }
285
282
 
283
+ /**
284
+ * Whether this shape can be culled. By default, shapes are culled for
285
+ * performance reasons when they are outside of the viewport. Culled shapes are still rendered
286
+ * to the DOM, but have their `display` property set to `none`.
287
+ *
288
+ * @param shape - The shape.
289
+ */
290
+ canCull(_shape: Shape): boolean {
291
+ return true
292
+ }
293
+
286
294
  /**
287
295
  * Does this shape provide a background for its children? If this is true,
288
296
  * then any children with a `renderBackground` method will have their
@@ -296,6 +304,27 @@ export abstract class ShapeUtil<Shape extends TLUnknownShape = TLUnknownShape> {
296
304
  return false
297
305
  }
298
306
 
307
+ /**
308
+ * Get the clip path to apply to this shape's children.
309
+ *
310
+ * @param shape - The shape to get the clip path for
311
+ * @returns Array of points defining the clipping polygon in local coordinates, or undefined if no clipping
312
+ * @public
313
+ */
314
+ getClipPath?(shape: Shape): Vec[] | undefined
315
+
316
+ /**
317
+ * Whether a specific child shape should be clipped by this shape.
318
+ * Only called if getClipPath returns a valid polygon.
319
+ *
320
+ * If not defined, the default behavior is to clip all children.
321
+ *
322
+ * @param child - The child shape to check
323
+ * @returns boolean indicating if this child should be clipped
324
+ * @public
325
+ */
326
+ shouldClipChild?(child: TLShape): boolean
327
+
299
328
  /**
300
329
  * Whether the shape should hide its resize handles when selected.
301
330
  *
@@ -341,6 +370,20 @@ export abstract class ShapeUtil<Shape extends TLUnknownShape = TLUnknownShape> {
341
370
  return false
342
371
  }
343
372
 
373
+ /**
374
+ * By default, the bounds of an image export are the bounds of all the shapes it contains, plus
375
+ * some padding. If an export includes a shape where `isExportBoundsContainer` is true, then the
376
+ * padding is skipped _if the bounds of that shape contains all the other shapes_. This is
377
+ * useful in cases like annotating on top of an image, where you usually want to avoid extra
378
+ * padding around the image if you don't need it.
379
+ *
380
+ * @param _shape - The shape to check
381
+ * @returns True if this shape should be treated as an export bounds container
382
+ */
383
+ isExportBoundsContainer(_shape: Shape): boolean {
384
+ return false
385
+ }
386
+
344
387
  /**
345
388
  * Get a JSX element for the shape (as an HTML element) to be rendered as part of the canvas background - behind any other shape content.
346
389
  *
@@ -1,4 +1,5 @@
1
1
  import { TLShape } from '@tldraw/tlschema'
2
+ import { TLBaseBoxShape } from '../../shapes/BaseBoxShapeUtil'
2
3
  import { StateNode, TLStateNodeConstructor } from '../StateNode'
3
4
  import { Idle } from './children/Idle'
4
5
  import { Pointing } from './children/Pointing'
@@ -11,7 +12,7 @@ export abstract class BaseBoxShapeTool extends StateNode {
11
12
  return [Idle, Pointing]
12
13
  }
13
14
 
14
- abstract override shapeType: string
15
+ abstract override shapeType: TLBaseBoxShape['type']
15
16
 
16
17
  onCreate?(_shape: TLShape | null): void | null
17
18
  }
@@ -72,12 +72,6 @@ export interface TLImageExportOptions extends TLSvgExportOptions {
72
72
  format?: TLExportType
73
73
  }
74
74
 
75
- /**
76
- * @public
77
- * @deprecated use {@link TLImageExportOptions} instead
78
- */
79
- export type TLSvgOptions = TLImageExportOptions
80
-
81
75
  /** @public */
82
76
  export interface TLCameraMoveOptions {
83
77
  /** Whether to move the camera immediately, rather than on the next tick. */