@tldraw/editor 3.12.0-canary.3ab62f1ff84a → 3.12.0-canary.3d1a69111704

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 (85) hide show
  1. package/dist-cjs/index.d.ts +152 -15
  2. package/dist-cjs/index.js +3 -1
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +4 -0
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/components/GeometryDebuggingView.js +2 -2
  7. package/dist-cjs/lib/components/GeometryDebuggingView.js.map +2 -2
  8. package/dist-cjs/lib/editor/Editor.js +208 -18
  9. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  10. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +9 -0
  11. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  12. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +4 -13
  13. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +2 -2
  14. package/dist-cjs/lib/editor/types/selection-types.js.map +1 -1
  15. package/dist-cjs/lib/exports/StyleEmbedder.js +19 -5
  16. package/dist-cjs/lib/exports/StyleEmbedder.js.map +2 -2
  17. package/dist-cjs/lib/exports/cssRules.js +127 -0
  18. package/dist-cjs/lib/exports/cssRules.js.map +7 -0
  19. package/dist-cjs/lib/exports/parseCss.js +0 -69
  20. package/dist-cjs/lib/exports/parseCss.js.map +2 -2
  21. package/dist-cjs/lib/hooks/useDocumentEvents.js +16 -0
  22. package/dist-cjs/lib/hooks/useDocumentEvents.js.map +2 -2
  23. package/dist-cjs/lib/license/Watermark.js +2 -0
  24. package/dist-cjs/lib/license/Watermark.js.map +2 -2
  25. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +133 -16
  26. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +3 -3
  27. package/dist-cjs/lib/primitives/geometry/Group2d.js +54 -11
  28. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  29. package/dist-cjs/lib/primitives/intersect.js +20 -0
  30. package/dist-cjs/lib/primitives/intersect.js.map +2 -2
  31. package/dist-cjs/lib/utils/reorderShapes.js +2 -8
  32. package/dist-cjs/lib/utils/reorderShapes.js.map +2 -2
  33. package/dist-cjs/version.js +3 -3
  34. package/dist-cjs/version.js.map +1 -1
  35. package/dist-esm/index.d.mts +152 -15
  36. package/dist-esm/index.mjs +8 -2
  37. package/dist-esm/index.mjs.map +2 -2
  38. package/dist-esm/lib/TldrawEditor.mjs +4 -0
  39. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  40. package/dist-esm/lib/components/GeometryDebuggingView.mjs +3 -3
  41. package/dist-esm/lib/components/GeometryDebuggingView.mjs.map +2 -2
  42. package/dist-esm/lib/editor/Editor.mjs +209 -18
  43. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  44. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +9 -0
  45. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  46. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +4 -13
  47. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +2 -2
  48. package/dist-esm/lib/exports/StyleEmbedder.mjs +21 -12
  49. package/dist-esm/lib/exports/StyleEmbedder.mjs.map +2 -2
  50. package/dist-esm/lib/exports/cssRules.mjs +107 -0
  51. package/dist-esm/lib/exports/cssRules.mjs.map +7 -0
  52. package/dist-esm/lib/exports/parseCss.mjs +0 -69
  53. package/dist-esm/lib/exports/parseCss.mjs.map +2 -2
  54. package/dist-esm/lib/hooks/useDocumentEvents.mjs +16 -0
  55. package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
  56. package/dist-esm/lib/license/Watermark.mjs +2 -0
  57. package/dist-esm/lib/license/Watermark.mjs.map +2 -2
  58. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +137 -14
  59. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  60. package/dist-esm/lib/primitives/geometry/Group2d.mjs +55 -12
  61. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  62. package/dist-esm/lib/primitives/intersect.mjs +20 -0
  63. package/dist-esm/lib/primitives/intersect.mjs.map +2 -2
  64. package/dist-esm/lib/utils/reorderShapes.mjs +2 -8
  65. package/dist-esm/lib/utils/reorderShapes.mjs.map +2 -2
  66. package/dist-esm/version.mjs +3 -3
  67. package/dist-esm/version.mjs.map +1 -1
  68. package/package.json +7 -7
  69. package/src/index.ts +11 -2
  70. package/src/lib/TldrawEditor.tsx +27 -1
  71. package/src/lib/components/GeometryDebuggingView.tsx +3 -3
  72. package/src/lib/editor/Editor.ts +315 -24
  73. package/src/lib/editor/shapes/ShapeUtil.ts +10 -0
  74. package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +7 -15
  75. package/src/lib/editor/types/selection-types.ts +3 -0
  76. package/src/lib/exports/StyleEmbedder.ts +25 -15
  77. package/src/lib/exports/cssRules.ts +126 -0
  78. package/src/lib/exports/parseCss.ts +0 -79
  79. package/src/lib/hooks/useDocumentEvents.ts +18 -0
  80. package/src/lib/license/Watermark.tsx +2 -0
  81. package/src/lib/primitives/geometry/Geometry2d.ts +196 -16
  82. package/src/lib/primitives/geometry/Group2d.ts +76 -13
  83. package/src/lib/primitives/intersect.ts +41 -0
  84. package/src/lib/utils/reorderShapes.ts +2 -9
  85. package/src/version.ts +3 -3
@@ -293,6 +293,47 @@ export function intersectPolygonPolygon(
293
293
  return orderClockwise([...result.values()])
294
294
  }
295
295
 
296
+ /**
297
+ * Find all the points where `polyA` and `polyB` intersect and returns them in an undefined order.
298
+ * To find the polygon that's the intersection of polyA and polyB, use `intersectPolygonPolygon`
299
+ * instead, which orders the points and includes internal points.
300
+ *
301
+ * @param polyA - The first polygon.
302
+ * @param polyB - The second polygon.
303
+ * @param isAClosed - Whether `polyA` is a closed polygon or a polyline.
304
+ * @param isBClosed - Whether `polyB` is a closed polygon or a polyline.
305
+ * @public
306
+ */
307
+ export function intersectPolys(
308
+ polyA: VecLike[],
309
+ polyB: VecLike[],
310
+ isAClosed: boolean,
311
+ isBClosed: boolean
312
+ ): VecLike[] {
313
+ const result: Map<string, VecLike> = new Map()
314
+
315
+ // Add all intersection points to result
316
+ for (let i = 0, n = isAClosed ? polyA.length : polyA.length - 1; i < n; i++) {
317
+ const currentA = polyA[i]
318
+ const nextA = polyA[(i + 1) % polyA.length]
319
+
320
+ for (let j = 0, m = isBClosed ? polyB.length : polyB.length - 1; j < m; j++) {
321
+ const currentB = polyB[j]
322
+ const nextB = polyB[(j + 1) % polyB.length]
323
+ const intersection = intersectLineSegmentLineSegment(currentA, nextA, currentB, nextB)
324
+
325
+ if (intersection !== null) {
326
+ const id = getPointId(intersection)
327
+ if (!result.has(id)) {
328
+ result.set(id, intersection)
329
+ }
330
+ }
331
+ }
332
+ }
333
+
334
+ return [...result.values()]
335
+ }
336
+
296
337
  function getPointId(point: VecLike) {
297
338
  return `${point.x},${point.y}`
298
339
  }
@@ -154,24 +154,17 @@ function reorderToFront(moving: Set<TLShape>, children: TLShape[], changes: TLSh
154
154
  }
155
155
  }
156
156
 
157
- function getVerticesInPageSpace(editor: Editor, shape: TLShape) {
158
- const geo = editor.getShapeGeometry(shape)
159
- const pageTransform = editor.getShapePageTransform(shape)
160
- if (!geo || !pageTransform) return null
161
- return pageTransform.applyToPoints(geo.vertices)
162
- }
163
-
164
157
  function getOverlapChecker(editor: Editor, moving: Set<TLShape>) {
165
158
  const movingVertices = Array.from(moving)
166
159
  .map((shape) => {
167
- const vertices = getVerticesInPageSpace(editor, shape)
160
+ const vertices = editor.getShapePageGeometry(shape).vertices
168
161
  if (!vertices) return null
169
162
  return { shape, vertices }
170
163
  })
171
164
  .filter(Boolean) as { shape: TLShape; vertices: Vec[] }[]
172
165
 
173
166
  const isOverlapping = (child: TLShape) => {
174
- const vertices = getVerticesInPageSpace(editor, child)
167
+ const vertices = editor.getShapePageGeometry(child).vertices
175
168
  if (!vertices) return false
176
169
  return movingVertices.some((other) => {
177
170
  return polygonsIntersect(other.vertices, vertices)
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.12.0-canary.3ab62f1ff84a'
4
+ export const version = '3.12.0-canary.3d1a69111704'
5
5
  export const publishDates = {
6
6
  major: '2024-09-13T14:36:29.063Z',
7
- minor: '2025-04-02T10:42:06.481Z',
8
- patch: '2025-04-02T10:42:06.481Z',
7
+ minor: '2025-04-04T08:20:04.596Z',
8
+ patch: '2025-04-04T08:20:04.596Z',
9
9
  }