tldraw 4.3.0-canary.fda2775019a1 → 4.3.0-next.085293d79c32

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 (52) hide show
  1. package/dist-cjs/index.js +1 -1
  2. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +1 -1
  3. package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
  4. package/dist-cjs/lib/shapes/draw/getPath.js +1 -1
  5. package/dist-cjs/lib/shapes/draw/getPath.js.map +2 -2
  6. package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js +20 -20
  7. package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +2 -2
  8. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +1 -1
  9. package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
  10. package/dist-cjs/lib/shapes/shared/interpolate-props.js +3 -3
  11. package/dist-cjs/lib/shapes/shared/interpolate-props.js.map +2 -2
  12. package/dist-cjs/lib/ui/version.js +3 -3
  13. package/dist-cjs/lib/ui/version.js.map +1 -1
  14. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +1 -1
  15. package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
  16. package/dist-cjs/lib/utils/test-helpers.js.map +2 -2
  17. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +1 -1
  18. package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
  19. package/dist-esm/index.mjs +1 -1
  20. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +1 -1
  21. package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
  22. package/dist-esm/lib/shapes/draw/getPath.mjs +1 -1
  23. package/dist-esm/lib/shapes/draw/getPath.mjs.map +2 -2
  24. package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs +20 -20
  25. package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +2 -2
  26. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +1 -1
  27. package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
  28. package/dist-esm/lib/shapes/shared/interpolate-props.mjs +3 -3
  29. package/dist-esm/lib/shapes/shared/interpolate-props.mjs.map +2 -2
  30. package/dist-esm/lib/ui/version.mjs +3 -3
  31. package/dist-esm/lib/ui/version.mjs.map +1 -1
  32. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +1 -1
  33. package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
  34. package/dist-esm/lib/utils/test-helpers.mjs.map +2 -2
  35. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +1 -1
  36. package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
  37. package/package.json +3 -3
  38. package/src/lib/shapes/draw/DrawShapeUtil.test.ts +10 -10
  39. package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -2
  40. package/src/lib/shapes/draw/getPath.ts +1 -1
  41. package/src/lib/shapes/draw/toolStates/Drawing.ts +21 -21
  42. package/src/lib/shapes/highlight/HighlightShapeUtil.test.ts +10 -10
  43. package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +4 -2
  44. package/src/lib/shapes/shared/interpolate-props.ts +3 -3
  45. package/src/lib/ui/version.ts +3 -3
  46. package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +4 -4
  47. package/src/lib/utils/excalidraw/putExcalidrawContent.ts +1 -1
  48. package/src/lib/utils/test-helpers.ts +4 -2
  49. package/src/lib/utils/tldr/buildFromV1Document.ts +1 -1
  50. package/src/test/__snapshots__/drawing.test.ts.snap +1 -1
  51. package/src/test/__snapshots__/resizing.test.ts.snap +1 -1
  52. package/src/test/drawing.test.ts +7 -7
@@ -145,9 +145,9 @@ export class Drawing extends StateNode {
145
145
  if (!this.canClose()) return false
146
146
 
147
147
  const strokeWidth = STROKE_SIZES[size]
148
- const firstPoint = b64Vecs.decodeFirstPoint(segments[0].points)
148
+ const firstPoint = b64Vecs.decodeFirstPoint(segments[0].path)
149
149
  const lastSegment = segments[segments.length - 1]
150
- const lastPoint = b64Vecs.decodeLastPoint(lastSegment.points)
150
+ const lastPoint = b64Vecs.decodeLastPoint(lastSegment.path)
151
151
 
152
152
  return (
153
153
  firstPoint !== null &&
@@ -193,14 +193,14 @@ export class Drawing extends StateNode {
193
193
 
194
194
  const prevSegment = last(shape.props.segments)
195
195
  if (!prevSegment) throw Error('Expected a previous segment!')
196
- const prevPoint = b64Vecs.decodeLastPoint(prevSegment.points)
196
+ const prevPoint = b64Vecs.decodeLastPoint(prevSegment.path)
197
197
  if (!prevPoint) throw Error('Expected a previous point!')
198
198
 
199
199
  const { x, y } = this.editor.getPointInShapeSpace(shape, originPagePoint).toFixed()
200
200
 
201
201
  const newSegment: TLDrawShapeSegment = {
202
202
  type: this.segmentMode,
203
- points: b64Vecs.encodePoints([
203
+ path: b64Vecs.encodePoints([
204
204
  { x: prevPoint.x, y: prevPoint.y, z: +pressure.toFixed(2) },
205
205
  { x, y, z: +pressure.toFixed(2) },
206
206
  ]),
@@ -262,7 +262,7 @@ export class Drawing extends StateNode {
262
262
  segments: [
263
263
  {
264
264
  type: this.segmentMode,
265
- points: b64Vecs.encodePoints([initialPoint]),
265
+ path: b64Vecs.encodePoints([initialPoint]),
266
266
  },
267
267
  ],
268
268
  },
@@ -324,7 +324,7 @@ export class Drawing extends StateNode {
324
324
  const prevSegment = last(segments)
325
325
  if (!prevSegment) throw Error('Expected a previous segment!')
326
326
 
327
- const prevLastPoint = b64Vecs.decodeLastPoint(prevSegment.points)
327
+ const prevLastPoint = b64Vecs.decodeLastPoint(prevSegment.path)
328
328
  if (!prevLastPoint) throw Error('Expected a previous last point!')
329
329
 
330
330
  let newSegment: TLDrawShapeSegment
@@ -339,7 +339,7 @@ export class Drawing extends StateNode {
339
339
 
340
340
  newSegment = {
341
341
  type: 'straight',
342
- points: b64Vecs.encodePoints([prevLastPoint, newLastPoint]),
342
+ path: b64Vecs.encodePoints([prevLastPoint, newLastPoint]),
343
343
  }
344
344
 
345
345
  const transform = this.editor.getShapePageTransform(shape)!
@@ -348,7 +348,7 @@ export class Drawing extends StateNode {
348
348
  } else {
349
349
  newSegment = {
350
350
  type: 'straight',
351
- points: b64Vecs.encodePoints([newLastPoint, newPoint]),
351
+ path: b64Vecs.encodePoints([newLastPoint, newPoint]),
352
352
  }
353
353
  }
354
354
 
@@ -396,7 +396,7 @@ export class Drawing extends StateNode {
396
396
 
397
397
  const newSegments = segments.slice()
398
398
  const prevStraightSegment = newSegments[newSegments.length - 1]
399
- const prevPoint = b64Vecs.decodeLastPoint(prevStraightSegment.points)
399
+ const prevPoint = b64Vecs.decodeLastPoint(prevStraightSegment.path)
400
400
 
401
401
  if (!prevPoint) {
402
402
  throw Error('No previous point!')
@@ -412,7 +412,7 @@ export class Drawing extends StateNode {
412
412
 
413
413
  const newFreeSegment: TLDrawShapeSegment = {
414
414
  type: 'free',
415
- points: b64Vecs.encodePoints(interpolatedPoints),
415
+ path: b64Vecs.encodePoints(interpolatedPoints),
416
416
  }
417
417
 
418
418
  const finalSegments = [...newSegments, newFreeSegment]
@@ -487,8 +487,8 @@ export class Drawing extends StateNode {
487
487
  if (!segment) break
488
488
  if (segment.type === 'free') continue
489
489
 
490
- const first = b64Vecs.decodeFirstPoint(segment.points)
491
- const lastPoint = b64Vecs.decodeLastPoint(segment.points)
490
+ const first = b64Vecs.decodeFirstPoint(segment.path)
491
+ const lastPoint = b64Vecs.decodeLastPoint(segment.path)
492
492
  if (!(first && lastPoint)) continue
493
493
 
494
494
  // Snap to the nearest point on the segment, if it's closer than the previous snapped point
@@ -515,8 +515,8 @@ export class Drawing extends StateNode {
515
515
 
516
516
  if (didSnap && snapSegment) {
517
517
  const transform = this.editor.getShapePageTransform(shape)!
518
- const first = b64Vecs.decodeFirstPoint(snapSegment.points)
519
- const lastPoint = b64Vecs.decodeLastPoint(snapSegment.points)
518
+ const first = b64Vecs.decodeFirstPoint(snapSegment.path)
519
+ const lastPoint = b64Vecs.decodeLastPoint(snapSegment.path)
520
520
  if (!first || !lastPoint) throw Error('Expected a last point!')
521
521
 
522
522
  const A = Mat.applyToPoint(transform, first)
@@ -558,15 +558,15 @@ export class Drawing extends StateNode {
558
558
  // without continuing the previous line. In this case, we want to remove the previous segment.
559
559
 
560
560
  this.currentLineLength +=
561
- newSegments.length && b64Vecs.decodeFirstPoint(newSegment.points)
562
- ? Vec.Dist(b64Vecs.decodeFirstPoint(newSegment.points)!, Vec.From(newPoint))
561
+ newSegments.length && b64Vecs.decodeFirstPoint(newSegment.path)
562
+ ? Vec.Dist(b64Vecs.decodeFirstPoint(newSegment.path)!, Vec.From(newPoint))
563
563
  : 0
564
564
 
565
565
  newSegments[newSegments.length - 1] = {
566
566
  ...newSegment,
567
567
  type: 'straight',
568
- points: b64Vecs.encodePoints([
569
- b64Vecs.decodeFirstPoint(newSegment.points)!,
568
+ path: b64Vecs.encodePoints([
569
+ b64Vecs.decodeFirstPoint(newSegment.path)!,
570
570
  Vec.From(newPoint),
571
571
  ]),
572
572
  }
@@ -613,7 +613,7 @@ export class Drawing extends StateNode {
613
613
  const newSegment = newSegments[newSegments.length - 1]
614
614
  newSegments[newSegments.length - 1] = {
615
615
  ...newSegment,
616
- points: b64Vecs.encodePoints(cachedPoints),
616
+ path: b64Vecs.encodePoints(cachedPoints),
617
617
  }
618
618
 
619
619
  if (this.currentLineLength < STROKE_SIZES[shape.props.size] * 4) {
@@ -664,7 +664,7 @@ export class Drawing extends StateNode {
664
664
  segments: [
665
665
  {
666
666
  type: 'free',
667
- points: b64Vecs.encodePoints([initialPoint]),
667
+ path: b64Vecs.encodePoints([initialPoint]),
668
668
  },
669
669
  ],
670
670
  },
@@ -693,7 +693,7 @@ export class Drawing extends StateNode {
693
693
  let length = 0
694
694
 
695
695
  for (let j = 0; j < segments.length; j++) {
696
- const points = b64Vecs.decodePoints(segments[j].points)
696
+ const points = b64Vecs.decodePoints(segments[j].path)
697
697
  for (let i = 0; i < points.length - 1; i++) {
698
698
  length += Vec.Dist2(points[i], points[i + 1])
699
699
  }
@@ -28,7 +28,7 @@ describe('HighlightShapeUtil dot detection', () => {
28
28
 
29
29
  describe('getIsDot behavior via hideResizeHandles', () => {
30
30
  it('treats a shape with one segment and zero points as a dot', () => {
31
- const shape = createHighlightShape([{ type: 'free', points: '' }])
31
+ const shape = createHighlightShape([{ type: 'free', path: '' }])
32
32
  const util = editor.getShapeUtil('highlight')
33
33
  expect(util.hideResizeHandles(shape)).toBe(true)
34
34
  })
@@ -119,26 +119,26 @@ describe('HighlightShapeUtil dot detection', () => {
119
119
  })
120
120
 
121
121
  describe('base64 encoding boundary conditions', () => {
122
- it('correctly handles the boundary at exactly 16 base64 characters (2 points)', () => {
123
- // Each point is 8 base64 characters (3 Float16s = 6 bytes = 8 base64 chars)
124
- // 2 points = 16 characters, which should NOT be a dot
122
+ it('correctly handles the boundary at exactly 24 base64 characters (2 points)', () => {
123
+ // First point is 16 base64 chars (Float32), delta points are 8 chars each (Float16)
124
+ // 2 points = 24 characters, which should NOT be a dot
125
125
  const twoPointsBase64 = pointsToBase64([
126
126
  { x: 0, y: 0, z: 0.5 },
127
127
  { x: 1, y: 1, z: 0.5 },
128
128
  ])
129
- expect(twoPointsBase64.length).toBe(16)
129
+ expect(twoPointsBase64.length).toBe(24)
130
130
 
131
- const shape = createHighlightShape([{ type: 'free', points: twoPointsBase64 }])
131
+ const shape = createHighlightShape([{ type: 'free', path: twoPointsBase64 }])
132
132
  const util = editor.getShapeUtil('highlight')
133
133
  expect(util.hideResizeHandles(shape)).toBe(false)
134
134
  })
135
135
 
136
- it('correctly handles the boundary at exactly 8 base64 characters (1 point)', () => {
137
- // 1 point = 8 characters, which should be a dot
136
+ it('correctly handles the boundary at exactly 16 base64 characters (1 point)', () => {
137
+ // 1 point = 16 characters (Float32 first point), which should be a dot
138
138
  const onePointBase64 = pointsToBase64([{ x: 0, y: 0, z: 0.5 }])
139
- expect(onePointBase64.length).toBe(8)
139
+ expect(onePointBase64.length).toBe(16)
140
140
 
141
- const shape = createHighlightShape([{ type: 'free', points: onePointBase64 }])
141
+ const shape = createHighlightShape([{ type: 'free', path: onePointBase64 }])
142
142
  const util = editor.getShapeUtil('highlight')
143
143
  expect(util.hideResizeHandles(shape)).toBe(true)
144
144
  })
@@ -249,9 +249,11 @@ function getStrokeWidth(shape: TLHighlightShape) {
249
249
  }
250
250
 
251
251
  function getIsDot(shape: TLHighlightShape) {
252
- // Each point is 8 base64 characters (3 Float16s = 6 bytes = 8 base64 chars)
252
+ // First point is 16 base64 chars (3 Float32s = 12 bytes)
253
+ // Each delta point is 8 base64 chars (3 Float16s = 6 bytes)
254
+ // 1 point = 16 chars, 2 points = 24 chars
253
255
  // Check if we have less than 2 points without decoding
254
- return shape.props.segments.length === 1 && shape.props.segments[0].points.length < 16
256
+ return shape.props.segments.length === 1 && shape.props.segments[0].path.length < 24
255
257
  }
256
258
 
257
259
  function HighlightRenderer({
@@ -10,8 +10,8 @@ export const interpolateSegments = (
10
10
  const endPoints: VecModel[] = []
11
11
 
12
12
  // Extract all points from startSegments and endSegments
13
- startSegments.forEach((segment) => startPoints.push(...b64Vecs.decodePoints(segment.points)))
14
- endSegments.forEach((segment) => endPoints.push(...b64Vecs.decodePoints(segment.points)))
13
+ startSegments.forEach((segment) => startPoints.push(...b64Vecs.decodePoints(segment.path)))
14
+ endSegments.forEach((segment) => endPoints.push(...b64Vecs.decodePoints(segment.path)))
15
15
 
16
16
  const maxLength = Math.max(startPoints.length, endPoints.length)
17
17
  const pointsToUseStart: VecModel[] = []
@@ -39,7 +39,7 @@ export const interpolateSegments = (
39
39
  return [
40
40
  {
41
41
  type: 'free',
42
- points: b64Vecs.encodePoints(interpolatedPoints),
42
+ path: b64Vecs.encodePoints(interpolatedPoints),
43
43
  },
44
44
  ]
45
45
  }
@@ -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 = '4.3.0-canary.fda2775019a1'
4
+ export const version = '4.3.0-next.085293d79c32'
5
5
  export const publishDates = {
6
6
  major: '2025-09-18T14:39:22.803Z',
7
- minor: '2026-01-12T10:48:32.494Z',
8
- patch: '2026-01-12T10:48:32.494Z',
7
+ minor: '2026-01-21T10:25:57.296Z',
8
+ patch: '2026-01-21T10:25:57.296Z',
9
9
  }
@@ -734,7 +734,7 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
734
734
  "scaleY": 1,
735
735
  "segments": [
736
736
  {
737
- "points": "AAAAAAA4jgaOBgA4",
737
+ "path": "AAAAAAAAAAAAAAA/jgaOBgAA",
738
738
  "type": "free",
739
739
  },
740
740
  ],
@@ -765,7 +765,7 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
765
765
  "scaleY": 1,
766
766
  "segments": [
767
767
  {
768
- "points": "AAAAAAA4jgaOBgA4",
768
+ "path": "AAAAAAAAAAAAAAA/jgaOBgAA",
769
769
  "type": "free",
770
770
  },
771
771
  ],
@@ -1379,7 +1379,7 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
1379
1379
  "scaleY": 1,
1380
1380
  "segments": [
1381
1381
  {
1382
- "points": "AAAAAAA4jgaOBgA4",
1382
+ "path": "AAAAAAAAAAAAAAA/jgaOBgAA",
1383
1383
  "type": "free",
1384
1384
  },
1385
1385
  ],
@@ -1410,7 +1410,7 @@ exports[`putExcalidrawContent test fixtures > line-drawing.json 1`] = `
1410
1410
  "scaleY": 1,
1411
1411
  "segments": [
1412
1412
  {
1413
- "points": "AAAAAAA4jgaOBgA4",
1413
+ "path": "AAAAAAAAAAAAAAA/jgaOBgAA",
1414
1414
  "type": "free",
1415
1415
  },
1416
1416
  ],
@@ -169,7 +169,7 @@ export async function putExcalidrawContent(
169
169
  segments: [
170
170
  {
171
171
  type: 'free',
172
- points: base64Points,
172
+ path: base64Points,
173
173
  },
174
174
  ],
175
175
  },
@@ -3,11 +3,12 @@ import { b64Vecs, compressLegacySegments } from '@tldraw/editor'
3
3
 
4
4
  /**
5
5
  * Helper function to convert draw shape points from VecModel[] to base64 string.
6
+ * Uses delta encoding for improved Float16 precision.
6
7
  * This is useful for tests that create draw shapes with the legacy array format.
7
8
  *
8
9
  * @example
9
10
  * ```ts
10
- * const segments = [{ type: 'free', points: pointsToBase64([{x: 0, y: 0, z: 0.5}]) }]
11
+ * const segments = [{ type: 'free', path: pointsToBase64([{x: 0, y: 0, z: 0.5}]) }]
11
12
  * ```
12
13
  *
13
14
  * @public
@@ -18,11 +19,12 @@ export function pointsToBase64(points: VecModel[]): string {
18
19
 
19
20
  /**
20
21
  * Helper function to convert base64 string back to VecModel[] points.
22
+ * Decodes delta-encoded points to absolute coordinates.
21
23
  * This is useful for tests that need to inspect draw shape points.
22
24
  *
23
25
  * @example
24
26
  * ```ts
25
- * const points = base64ToPoints(shape.props.segments[0].points)
27
+ * const points = base64ToPoints(shape.props.segments[0].path)
26
28
  * expect(points[0].x).toBe(0)
27
29
  * ```
28
30
  *
@@ -385,7 +385,7 @@ export function buildFromV1Document(editor: Editor, _document: unknown) {
385
385
  dash: getV2Dash(v1Shape.style.dash),
386
386
  isPen: false,
387
387
  isComplete: v1Shape.isComplete,
388
- segments: [{ type: 'free', points: base64Points }],
388
+ segments: [{ type: 'free', path: base64Points }],
389
389
  scale: 1,
390
390
  scaleX: 1,
391
391
  scaleY: 1,
@@ -19,7 +19,7 @@ exports[`Draws a bunch > draw shape 1`] = `
19
19
  "scaleY": 1,
20
20
  "segments": [
21
21
  {
22
- "points": "AAAAAAA4ADwAAAA4AEQAAAA4AEkAvAA4wEwAxAA4gE8AyQA4wFEAzQA4oFOAzwA4oFRg0QA4kFVg0wA4YFbQ1AA4wFag1QA4AFdw1gA4UFdw1wA4YFcY2AA4cFdI2AA4cFeI2AA4gFfA2AA4cFfw2AA4UFcY2QA4IFc42QA40FZI2QA4cFZQ2QA4EFZQ2QA4kFVQ2QA4AFUw2QA4cFT42AA4wFOw2AA4wFJQ2AA4QFLg1wA44FEQ1wA4wFEw1gA4wFEg1QA44FGg0wA4oFIg0QA4gFMAzgA4QFQAxwA48FQASgA4gFUAUAA4AFZAUgA4cFZQVAA4oFZgVQA4sFZgVgA4sFaAVwA4YFZAWAA4oFWQWAA4oFTQWAA4YFEYWQA4AFAgWQA4QE0gWQA4gEkgWQA4AEAgWQA4AMcQWQA4gMr4WAA4gMvIWAA4gMuYWAA4gMlQWAA4ADzwVwA4gEsAVwA4QFAAVgA4AFPwVAA4EFVAUwA4sFYgUAA44FcASgA4iFgAyQA4AFmAzwA4YFlA0gA4yFmQ1AA4EFrQ1QA4OFoA1wA4UFrw1wA4WFpQ2AA4WFqQ2AA4SFrA2AA4IFrY2AA4+Fng2AA40Fno2AA4kFng2AA4UFmw2AA4IFlg2AA48FgA2AA4uFjg1gA4gFiQ1QA4WFgA1AA4OFiA0AA4IFgAxwA4IFiATQA4IFggUgA4KFigVAA4YFgQVgA4oFgQVwA44FjAVwA4MFlIWAA4eFmIWAA4uFmwWAA4+FnAWAA4KFrAWAA4aFq4WAA4sFqQWAA4+FpAWAA4MFvQVwA4YFsAVwA4kFvwVQA4uFvgVAA40FugUwA44FvAUQA46FugUAA46FvATwA46FsATgA42FsATQA4wFsATAA4sFsATAA4mFsATAA4gFtATAA4cFvATAA4YFuATgA4UFtAUAA4SFugUQA4QFsAUwA4QFsgVAA4WFvwVAA4iFuwVQA4uFtAVgA4+FvQVgA4EFwQVwA4KFxAVwA4SFxgVwA4YFxgVwA4eFwwVwA4jFyQVgA4oFzQVQA4qFwwVQA4tFxgVAA4vFxAUwA4xFwAUgA4yFzAUAA4zFzATwA40FxATgA40FyATQA40FwATQA40FzATAA40FyATQA40FzATgA40FxgUAA40FyAUQA40FxgUgA40FwAUwA40FygUwA41FwgVAA44FxwVAA46FygVAA49FywVAA4AF3AVAA4EF3AVAA4JF2QVAA4NF1QVAA4QF0gVAA4TF3AUwA4WF1gUwA4YF0gUwA4aF3gUgA4cF3gUgA4cF3gUgA4dF3gUgA4dF0AUwA4eF0gUwA4fF1gUwA4fF2gUwA4gF3AUwA4gF3gUwA4hF0AVAA4iF0AVAA4jF0AVAA4kF1AUwA4mF0gUgA4oF0AUQA4rF0AUAA4tF2ATgA4vF3ATAA4xF2ASgA41F0ARwA44F0AQgA48F0AQAA4BF4AQAA4GF4AQAA4NF4AQgA4aF6ASQA4oF7ATQA4yF5AUAA4+F4gUgA4IF8AVAA4QF8QVQA4UF/wVQA4WF9AVwA4YF9wWAA4YF8QWQA4UF+QWQA4KF8YWgA46F6oWgA4nF4wWwA4XF6AWwA4JF6oWwA45F3QWwA4sF3gWwA4iF3gWwA4aF3AWwA4UF14WwA4TF0IWwA4TF0wWgA4dF0oWQA40F0QWAA4TF6QVQA4wF7AUgA4TF8ATAA44F9AzQA4TmBA1AA4qmAw1wA41mBQ2AA4AmEQ2QA4LmHg2QA4RmFY2gA4WGHY2gA4aGFo2wA4amGg2wA4ZmHQ2wA4VGHw2wA4MGEA3AA4BGEA3AA42mDo2wA4mmCA2wA4VGDo2gA4HGBI2gA42F+w2QA4kF8o2QA4TF+Q2AA4IF8Y2AA4CF+A1wA4AF8A1wA4AF+w1gA4BF+A1gA4EF9w1gA4KF9g1gA4OF9g1gA4RF9w1gA4WF+A1gA4YF+Q1gA4aF+g1gA4bF+g1gA4cF+w1gA4cF+w1gA4dF+w1gA4",
22
+ "path": "AAAAAAAAAAAAAAA/ADwAAAAAAEIAAAAAAEYAvAAAgEgAwgAAgEkAxgAAAEwAyQAAgEsAyQAAgEqAygAAgEsAzAAAgEqAzAAAAEaAygAAAESAygAAAEUAzAAAADwAygAAADwAxgAAAAAAyAAAADwAxwAAALwAxgAAAMAAxQAAAMIAxAAAAMUAwAAAAMYAvAAAAMYAAAAAAMgAAAAAgMgARAAAgMgARwAAgMiASAAAAMgASgAAAMQASgAAAMKASgAAALwASwAAAABATAAAADxATQAAAEYATQAAAEdATAAAAEhATAAAgEnATAAAgEgATQAAAEiATAAAAEfATAAAAEJATAAAADwATAAAAACATAAAAMUATAAAAMoASQAAAMwASAAAwM+ASAAAgMkAPAAAgMkAAAAAAMkAAAAAgMgAAAAAgMgAwAAAAMYAwgAAAMAAxgAAAAAAxgAAAESAyAAAAEqAyQAAAEuAywAAwEwAzAAAgE1AzAAAQE5AzQAAgE5AzgAAwExAzQAAwEyAzQAAgEsAzQAAAEoAzQAAgErAzQAAgEgAzQAAAEXAzAAAAEKAywAAADyAyQAAAAAAyAAAAMAAxgAAAMUAwgAAAMUAvAAAAMUAvAAAAMgAPAAAAMgARgAAAMYASQAAAMYASgAAAMeATAAAAMdATQAAAMVATgAAAMQATwAAAMJATwAAAABATwAAAADATgAAADxATgAAAEfATQAAAEgATAAAAEiASQAAAEmASgAAgEgASAAAAEgARQAAAEgAQAAAAEYAAAAAAEgAvAAAgEgAxQAAgEgAyQAAAEeAyQAAAEaAygAAAEZAzAAAAEVAzAAAAEJAzAAAAECAywAAADyAyAAAAAAAxgAAAAAAxwAAAMAAxAAAAMIAxAAAAMAAAAAAAMIAAAAAAMIAPAAAAMAAQAAAAMAARwAAAMAASAAAALyASQAAALyASQAAAAAASQAAAEKASgAAAEYASgAAAEaASAAAAEiASAAAAEUARAAAAEYAQgAAAEgAQAAAAEYAAAAAAEYAwgAAAEUAyQAAAEUAygAAAEAAyQAAAEKAygAAAEAAygAAAEAAyQAAADwAyQAAADwAxwAAADwAxgAAAAAAwgAAAAAAwAAAAAAAvAAAAAAAQgAAAAAARQAAAAAASAAAAACASAAAAAAARwAAAAAARQAAAAAARQAAADwARQAAAEIARQAAAEAAQgAAAEIAPAAAAEIAPAAAAEQAAAAAAEUAwgAAAEQAxAAAAEIAwgAAAEIAxAAAAEIAwgAAAEAAwAAAAEAAwAAAAEAAAAAAAAAAAAAAADwAAAAAAAAAPAAAADwAPAAAADwAQAAAAAAAQAAAADwAPAAAAAAAPAAAADwAPAAAADwAAAAAADwAAAAAADwAxgAAAECAyAAAAECAyAAAAEIAyAAAAEAAxgAAAEAAxwAAAEAAxgAAAEQAxgAAAEIAxAAAAEQAvAAAAEUAAAAAAEUAAAAAAEcAPAAAgEoASAAAAEsASgAAAEmASQAAAEqASwAAAEmASwAAAEhATAAAAEQASwAAAEBATQAAAECATgAAAAAATQAAAMQATAAAAMlATAAAAMyATAAAwMxATAAAAMwASQAAAMsARQAAAMwARQAAgMoAQAAAAMkAAAAAAMgAxAAAAMaAyAAAALwAywAAAADAzgAAAEkg0AAAwE1g0AAAwE8g0QAAQE9g0AAAYFDA0AAAoFCg0AAA4FHg0QAAwFHg0QAAgE3AzQAAgE0AzgAAgE2AzgAAAEqAywAAgEgAzAAAAEiAzAAAADwAxwAAAMAAxgAAgMgAxAAAgMwAwAAAgM0AAAAAQM0AQgAAANCASgAAYNDATAAAAM8ATQAAAM7ATAAAgMxATAAAQMzATAAAgMmASwAAAMaASQAAAMAASAAAAAAARQAAADwAQgAAAEIAPAAAAEYAPAAAAEQAAAAAAEIAvAAAAEUAvAAAAEAAvAAAAEAAvAAAADwAAAAAADwAvAAAAAAAAAAAADwAAAAA",
23
23
  "type": "free",
24
24
  },
25
25
  ],
@@ -20,7 +20,7 @@ exports[`When resizing a shape with children > Resizes a rotated draw shape > dr
20
20
  "scaleY": 1.1,
21
21
  "segments": [
22
22
  {
23
- "points": "AAAAAAA4QFZAVgA4",
23
+ "path": "AAAAAAAAAAAAAAA/QFZAVgAA",
24
24
  "type": "free",
25
25
  },
26
26
  ],
@@ -78,7 +78,7 @@ for (const toolType of ['draw', 'highlight'] as const) {
78
78
  const segment = shape.props.segments[0]
79
79
  expect(segment.type).toBe('straight')
80
80
 
81
- const points = base64ToPoints(segment.points)
81
+ const points = base64ToPoints(segment.path)
82
82
  expect(points.length).toBe(2)
83
83
  })
84
84
 
@@ -177,7 +177,7 @@ for (const toolType of ['draw', 'highlight'] as const) {
177
177
 
178
178
  const shape = editor.getCurrentPageShapes()[0] as DrawableShape
179
179
  const segment = shape.props.segments[0]
180
- const points = base64ToPoints(segment.points)
180
+ const points = base64ToPoints(segment.path)
181
181
  expect(points[1].x).toBeCloseTo(snappedX)
182
182
  expect(points[1].y).toBeCloseTo(snappedY)
183
183
  })
@@ -192,7 +192,7 @@ for (const toolType of ['draw', 'highlight'] as const) {
192
192
 
193
193
  const shape = editor.getCurrentPageShapes()[0] as DrawableShape
194
194
  const segment = shape.props.segments[0]
195
- const points = base64ToPoints(segment.points)
195
+ const points = base64ToPoints(segment.path)
196
196
  expect(points[1].x).toBeCloseTo(x)
197
197
  expect(points[1].y).toBeCloseTo(y)
198
198
  })
@@ -212,14 +212,14 @@ for (const toolType of ['draw', 'highlight'] as const) {
212
212
 
213
213
  const shape1 = editor.getCurrentPageShapes()[0] as DrawableShape
214
214
  const segment1 = last(shape1.props.segments)!
215
- const points1 = base64ToPoints(segment1.points)
215
+ const points1 = base64ToPoints(segment1.path)
216
216
  const point1 = last(points1)!
217
217
  expect(point1.x).toBe(1)
218
218
 
219
219
  editor.keyDown('Meta')
220
220
  const shape2 = editor.getCurrentPageShapes()[0] as DrawableShape
221
221
  const segment2 = last(shape2.props.segments)!
222
- const points2 = base64ToPoints(segment2.points)
222
+ const points2 = base64ToPoints(segment2.path)
223
223
  const point2 = last(points2)!
224
224
  expect(point2.x).toBe(0)
225
225
  })
@@ -239,14 +239,14 @@ for (const toolType of ['draw', 'highlight'] as const) {
239
239
 
240
240
  const shape1 = editor.getCurrentPageShapes()[0] as DrawableShape
241
241
  const segment1 = last(shape1.props.segments)!
242
- const points1 = base64ToPoints(segment1.points)
242
+ const points1 = base64ToPoints(segment1.path)
243
243
  const point1 = last(points1)!
244
244
  expect(point1.x).toBe(1)
245
245
 
246
246
  editor.keyDown('Meta')
247
247
  const shape2 = editor.getCurrentPageShapes()[0] as DrawableShape
248
248
  const segment2 = last(shape2.props.segments)!
249
- const points2 = base64ToPoints(segment2.points)
249
+ const points2 = base64ToPoints(segment2.path)
250
250
  const point2 = last(points2)!
251
251
  expect(point2.x).toBe(0)
252
252
  })