@tldraw/editor 3.14.0-canary.dbe17bbcfb3d → 3.14.0-canary.e099968e8b09

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 (96) hide show
  1. package/dist-cjs/index.d.ts +51 -46
  2. package/dist-cjs/index.js +3 -1
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/editor/Editor.js +2 -4
  5. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  6. package/dist-cjs/lib/editor/managers/FontManager.js +5 -1
  7. package/dist-cjs/lib/editor/managers/FontManager.js.map +2 -2
  8. package/dist-cjs/lib/primitives/Box.js +39 -33
  9. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  10. package/dist-cjs/lib/primitives/Vec.js +13 -8
  11. package/dist-cjs/lib/primitives/Vec.js.map +2 -2
  12. package/dist-cjs/lib/primitives/geometry/Arc2d.js +41 -21
  13. package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
  14. package/dist-cjs/lib/primitives/geometry/Circle2d.js +11 -11
  15. package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
  16. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +13 -16
  17. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
  18. package/dist-cjs/lib/primitives/geometry/CubicSpline2d.js +4 -4
  19. package/dist-cjs/lib/primitives/geometry/CubicSpline2d.js.map +2 -2
  20. package/dist-cjs/lib/primitives/geometry/Edge2d.js +14 -17
  21. package/dist-cjs/lib/primitives/geometry/Edge2d.js.map +2 -2
  22. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +10 -10
  23. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
  24. package/dist-cjs/lib/primitives/geometry/Point2d.js +6 -6
  25. package/dist-cjs/lib/primitives/geometry/Point2d.js.map +2 -2
  26. package/dist-cjs/lib/primitives/geometry/Polygon2d.js +3 -0
  27. package/dist-cjs/lib/primitives/geometry/Polygon2d.js.map +2 -2
  28. package/dist-cjs/lib/primitives/geometry/Polyline2d.js +8 -5
  29. package/dist-cjs/lib/primitives/geometry/Polyline2d.js.map +2 -2
  30. package/dist-cjs/lib/primitives/geometry/Rectangle2d.js +22 -11
  31. package/dist-cjs/lib/primitives/geometry/Rectangle2d.js.map +2 -2
  32. package/dist-cjs/lib/primitives/geometry/Stadium2d.js +22 -22
  33. package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +2 -2
  34. package/dist-cjs/lib/utils/areShapesContentEqual.js +1 -1
  35. package/dist-cjs/lib/utils/areShapesContentEqual.js.map +2 -2
  36. package/dist-cjs/version.js +3 -3
  37. package/dist-cjs/version.js.map +1 -1
  38. package/dist-esm/index.d.mts +51 -46
  39. package/dist-esm/index.mjs +3 -1
  40. package/dist-esm/index.mjs.map +2 -2
  41. package/dist-esm/lib/editor/Editor.mjs +2 -4
  42. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  43. package/dist-esm/lib/editor/managers/FontManager.mjs +5 -1
  44. package/dist-esm/lib/editor/managers/FontManager.mjs.map +2 -2
  45. package/dist-esm/lib/primitives/Box.mjs +39 -33
  46. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  47. package/dist-esm/lib/primitives/Vec.mjs +13 -8
  48. package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
  49. package/dist-esm/lib/primitives/geometry/Arc2d.mjs +41 -21
  50. package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
  51. package/dist-esm/lib/primitives/geometry/Circle2d.mjs +11 -11
  52. package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
  53. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +13 -16
  54. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
  55. package/dist-esm/lib/primitives/geometry/CubicSpline2d.mjs +4 -4
  56. package/dist-esm/lib/primitives/geometry/CubicSpline2d.mjs.map +2 -2
  57. package/dist-esm/lib/primitives/geometry/Edge2d.mjs +14 -17
  58. package/dist-esm/lib/primitives/geometry/Edge2d.mjs.map +2 -2
  59. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +11 -11
  60. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
  61. package/dist-esm/lib/primitives/geometry/Point2d.mjs +6 -6
  62. package/dist-esm/lib/primitives/geometry/Point2d.mjs.map +2 -2
  63. package/dist-esm/lib/primitives/geometry/Polygon2d.mjs +3 -0
  64. package/dist-esm/lib/primitives/geometry/Polygon2d.mjs.map +2 -2
  65. package/dist-esm/lib/primitives/geometry/Polyline2d.mjs +8 -5
  66. package/dist-esm/lib/primitives/geometry/Polyline2d.mjs.map +2 -2
  67. package/dist-esm/lib/primitives/geometry/Rectangle2d.mjs +22 -11
  68. package/dist-esm/lib/primitives/geometry/Rectangle2d.mjs.map +2 -2
  69. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs +22 -22
  70. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +2 -2
  71. package/dist-esm/lib/utils/areShapesContentEqual.mjs +1 -1
  72. package/dist-esm/lib/utils/areShapesContentEqual.mjs.map +2 -2
  73. package/dist-esm/version.mjs +3 -3
  74. package/dist-esm/version.mjs.map +1 -1
  75. package/package.json +7 -7
  76. package/src/index.ts +1 -0
  77. package/src/lib/editor/Editor.ts +3 -4
  78. package/src/lib/editor/managers/FontManager.ts +5 -1
  79. package/src/lib/primitives/Box.test.ts +588 -7
  80. package/src/lib/primitives/Box.ts +41 -33
  81. package/src/lib/primitives/Vec.test.ts +2 -2
  82. package/src/lib/primitives/Vec.ts +13 -8
  83. package/src/lib/primitives/geometry/Arc2d.ts +42 -23
  84. package/src/lib/primitives/geometry/Circle2d.ts +12 -12
  85. package/src/lib/primitives/geometry/CubicBezier2d.test.ts +5 -0
  86. package/src/lib/primitives/geometry/CubicBezier2d.ts +13 -17
  87. package/src/lib/primitives/geometry/CubicSpline2d.ts +5 -5
  88. package/src/lib/primitives/geometry/Edge2d.ts +14 -18
  89. package/src/lib/primitives/geometry/Ellipse2d.ts +12 -13
  90. package/src/lib/primitives/geometry/Point2d.ts +6 -6
  91. package/src/lib/primitives/geometry/Polygon2d.ts +4 -0
  92. package/src/lib/primitives/geometry/Polyline2d.ts +10 -7
  93. package/src/lib/primitives/geometry/Rectangle2d.ts +24 -11
  94. package/src/lib/primitives/geometry/Stadium2d.ts +22 -23
  95. package/src/lib/utils/areShapesContentEqual.ts +2 -1
  96. package/src/version.ts +3 -3
@@ -4,18 +4,21 @@ import { Geometry2d, Geometry2dOptions } from './Geometry2d'
4
4
 
5
5
  /** @public */
6
6
  export class Polyline2d extends Geometry2d {
7
- points: Vec[]
7
+ private _points: Vec[]
8
+ private _segments?: Edge2d[]
8
9
 
9
10
  constructor(config: Omit<Geometry2dOptions, 'isFilled' | 'isClosed'> & { points: Vec[] }) {
10
11
  super({ isClosed: false, isFilled: false, ...config })
11
12
  const { points } = config
12
- this.points = points
13
- }
13
+ this._points = points
14
14
 
15
- _segments?: Edge2d[]
15
+ if (points.length < 2) {
16
+ throw new Error('Polyline2d: points must be an array of at least 2 points')
17
+ }
18
+ }
16
19
 
17
20
  // eslint-disable-next-line no-restricted-syntax
18
- get segments() {
21
+ protected get segments() {
19
22
  if (!this._segments) {
20
23
  this._segments = []
21
24
  const { vertices } = this
@@ -38,12 +41,12 @@ export class Polyline2d extends Geometry2d {
38
41
  }
39
42
 
40
43
  getVertices() {
41
- return this.points
44
+ return this._points
42
45
  }
43
46
 
44
47
  nearestPoint(A: VecLike): Vec {
45
48
  const { segments } = this
46
- let nearest = this.points[0]
49
+ let nearest = this._points[0]
47
50
  let dist = Infinity
48
51
  let p: Vec // current point on segment
49
52
  let d: number // distance from A to p
@@ -5,10 +5,10 @@ import { Polygon2d } from './Polygon2d'
5
5
 
6
6
  /** @public */
7
7
  export class Rectangle2d extends Polygon2d {
8
- x: number
9
- y: number
10
- w: number
11
- h: number
8
+ private _x: number
9
+ private _y: number
10
+ private _w: number
11
+ private _h: number
12
12
 
13
13
  constructor(
14
14
  config: Omit<Geometry2dOptions, 'isClosed'> & {
@@ -28,18 +28,31 @@ export class Rectangle2d extends Polygon2d {
28
28
  new Vec(x, y + height),
29
29
  ],
30
30
  })
31
- this.x = x
32
- this.y = y
33
- this.w = width
34
- this.h = height
31
+ this._x = x
32
+ this._y = y
33
+ this._w = width
34
+ this._h = height
35
35
  }
36
36
 
37
37
  getBounds() {
38
- return new Box(this.x, this.y, this.w, this.h)
38
+ return new Box(this._x, this._y, this._w, this._h)
39
39
  }
40
40
 
41
41
  getSvgPathData(): string {
42
- const { x, y, w, h } = this
43
- return `M${x},${y} h${w} v${h} h-${w}z`
42
+ const { _x: x, _y: y, _w: w, _h: h } = this
43
+ this.negativeZeroFix()
44
+ return `M${x},${y} h${w} v${h} h${-w}z`
44
45
  }
46
+
47
+ private negativeZeroFix() {
48
+ this._x = zeroFix(this._x)
49
+ this._y = zeroFix(this._y)
50
+ this._w = zeroFix(this._w)
51
+ this._h = zeroFix(this._h)
52
+ }
53
+ }
54
+
55
+ function zeroFix(value: number) {
56
+ if (Object.is(value, -0)) return 0
57
+ return value
45
58
  }
@@ -7,13 +7,12 @@ import { Geometry2d, Geometry2dOptions } from './Geometry2d'
7
7
 
8
8
  /** @public */
9
9
  export class Stadium2d extends Geometry2d {
10
- w: number
11
- h: number
12
-
13
- a: Arc2d
14
- b: Edge2d
15
- c: Arc2d
16
- d: Edge2d
10
+ private _w: number
11
+ private _h: number
12
+ private _a: Arc2d
13
+ private _b: Edge2d
14
+ private _c: Arc2d
15
+ private _d: Edge2d
17
16
 
18
17
  constructor(
19
18
  public config: Omit<Geometry2dOptions, 'isClosed'> & {
@@ -23,45 +22,45 @@ export class Stadium2d extends Geometry2d {
23
22
  ) {
24
23
  super({ ...config, isClosed: true })
25
24
  const { width: w, height: h } = config
26
- this.w = w
27
- this.h = h
25
+ this._w = w
26
+ this._h = h
28
27
 
29
28
  if (h > w) {
30
29
  const r = w / 2
31
- this.a = new Arc2d({
30
+ this._a = new Arc2d({
32
31
  start: new Vec(0, r),
33
32
  end: new Vec(w, r),
34
33
  center: new Vec(w / 2, r),
35
34
  sweepFlag: 1,
36
35
  largeArcFlag: 1,
37
36
  })
38
- this.b = new Edge2d({ start: new Vec(w, r), end: new Vec(w, h - r) })
39
- this.c = new Arc2d({
37
+ this._b = new Edge2d({ start: new Vec(w, r), end: new Vec(w, h - r) })
38
+ this._c = new Arc2d({
40
39
  start: new Vec(w, h - r),
41
40
  end: new Vec(0, h - r),
42
41
  center: new Vec(w / 2, h - r),
43
42
  sweepFlag: 1,
44
43
  largeArcFlag: 1,
45
44
  })
46
- this.d = new Edge2d({ start: new Vec(0, h - r), end: new Vec(0, r) })
45
+ this._d = new Edge2d({ start: new Vec(0, h - r), end: new Vec(0, r) })
47
46
  } else {
48
47
  const r = h / 2
49
- this.a = new Arc2d({
48
+ this._a = new Arc2d({
50
49
  start: new Vec(r, h),
51
50
  end: new Vec(r, 0),
52
51
  center: new Vec(r, r),
53
52
  sweepFlag: 1,
54
53
  largeArcFlag: 1,
55
54
  })
56
- this.b = new Edge2d({ start: new Vec(r, 0), end: new Vec(w - r, 0) })
57
- this.c = new Arc2d({
55
+ this._b = new Edge2d({ start: new Vec(r, 0), end: new Vec(w - r, 0) })
56
+ this._c = new Arc2d({
58
57
  start: new Vec(w - r, 0),
59
58
  end: new Vec(w - r, h),
60
59
  center: new Vec(w - r, r),
61
60
  sweepFlag: 1,
62
61
  largeArcFlag: 1,
63
62
  })
64
- this.d = new Edge2d({ start: new Vec(w - r, h), end: new Vec(r, h) })
63
+ this._d = new Edge2d({ start: new Vec(w - r, h), end: new Vec(r, h) })
65
64
  }
66
65
  }
67
66
 
@@ -71,7 +70,7 @@ export class Stadium2d extends Geometry2d {
71
70
  let _d: number
72
71
  let p: Vec
73
72
 
74
- const { a, b, c, d } = this
73
+ const { _a: a, _b: b, _c: c, _d: d } = this
75
74
  for (const part of [a, b, c, d]) {
76
75
  p = part.nearestPoint(A)
77
76
  _d = Vec.Dist2(p, A)
@@ -85,12 +84,12 @@ export class Stadium2d extends Geometry2d {
85
84
  }
86
85
 
87
86
  hitTestLineSegment(A: VecLike, B: VecLike): boolean {
88
- const { a, b, c, d } = this
87
+ const { _a: a, _b: b, _c: c, _d: d } = this
89
88
  return [a, b, c, d].some((edge) => edge.hitTestLineSegment(A, B))
90
89
  }
91
90
 
92
91
  getVertices() {
93
- const { a, b, c, d } = this
92
+ const { _a: a, _b: b, _c: c, _d: d } = this
94
93
  return [a, b, c, d].reduce<Vec[]>((a, p) => {
95
94
  a.push(...p.vertices)
96
95
  return a
@@ -98,17 +97,17 @@ export class Stadium2d extends Geometry2d {
98
97
  }
99
98
 
100
99
  getBounds() {
101
- return new Box(0, 0, this.w, this.h)
100
+ return new Box(0, 0, this._w, this._h)
102
101
  }
103
102
 
104
103
  getLength() {
105
- const { h, w } = this
104
+ const { _h: h, _w: w } = this
106
105
  if (h > w) return (PI * (w / 2) + (h - w)) * 2
107
106
  else return (PI * (h / 2) + (w - h)) * 2
108
107
  }
109
108
 
110
109
  getSvgPathData() {
111
- const { a, b, c, d } = this
110
+ const { _a: a, _b: b, _c: c, _d: d } = this
112
111
  return [a, b, c, d].map((p, i) => p.getSvgPathData(i === 0)).join(' ') + ' Z'
113
112
  }
114
113
  }
@@ -1,4 +1,5 @@
1
1
  import { TLShape } from '@tldraw/tlschema'
2
2
 
3
+ /** @public */
3
4
  export const areShapesContentEqual = (a: TLShape, b: TLShape) =>
4
- a.props === b.props && a.meta === b.meta
5
+ a.parentId === b.parentId && a.props === b.props && a.meta === b.meta
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.14.0-canary.dbe17bbcfb3d'
4
+ export const version = '3.14.0-canary.e099968e8b09'
5
5
  export const publishDates = {
6
6
  major: '2024-09-13T14:36:29.063Z',
7
- minor: '2025-05-27T16:09:05.952Z',
8
- patch: '2025-05-27T16:09:05.952Z',
7
+ minor: '2025-06-06T16:01:04.424Z',
8
+ patch: '2025-06-06T16:01:04.424Z',
9
9
  }