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.
- package/dist-cjs/index.js +1 -1
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/draw/DrawShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/getPath.js +1 -1
- package/dist-cjs/lib/shapes/draw/getPath.js.map +2 -2
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js +20 -20
- package/dist-cjs/lib/shapes/draw/toolStates/Drawing.js.map +2 -2
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js +1 -1
- package/dist-cjs/lib/shapes/highlight/HighlightShapeUtil.js.map +2 -2
- package/dist-cjs/lib/shapes/shared/interpolate-props.js +3 -3
- package/dist-cjs/lib/shapes/shared/interpolate-props.js.map +2 -2
- package/dist-cjs/lib/ui/version.js +3 -3
- package/dist-cjs/lib/ui/version.js.map +1 -1
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js +1 -1
- package/dist-cjs/lib/utils/excalidraw/putExcalidrawContent.js.map +2 -2
- package/dist-cjs/lib/utils/test-helpers.js.map +2 -2
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js +1 -1
- package/dist-cjs/lib/utils/tldr/buildFromV1Document.js.map +2 -2
- package/dist-esm/index.mjs +1 -1
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/draw/DrawShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/getPath.mjs +1 -1
- package/dist-esm/lib/shapes/draw/getPath.mjs.map +2 -2
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs +20 -20
- package/dist-esm/lib/shapes/draw/toolStates/Drawing.mjs.map +2 -2
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs +1 -1
- package/dist-esm/lib/shapes/highlight/HighlightShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/shapes/shared/interpolate-props.mjs +3 -3
- package/dist-esm/lib/shapes/shared/interpolate-props.mjs.map +2 -2
- package/dist-esm/lib/ui/version.mjs +3 -3
- package/dist-esm/lib/ui/version.mjs.map +1 -1
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs +1 -1
- package/dist-esm/lib/utils/excalidraw/putExcalidrawContent.mjs.map +2 -2
- package/dist-esm/lib/utils/test-helpers.mjs.map +2 -2
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs +1 -1
- package/dist-esm/lib/utils/tldr/buildFromV1Document.mjs.map +2 -2
- package/package.json +3 -3
- package/src/lib/shapes/draw/DrawShapeUtil.test.ts +10 -10
- package/src/lib/shapes/draw/DrawShapeUtil.tsx +4 -2
- package/src/lib/shapes/draw/getPath.ts +1 -1
- package/src/lib/shapes/draw/toolStates/Drawing.ts +21 -21
- package/src/lib/shapes/highlight/HighlightShapeUtil.test.ts +10 -10
- package/src/lib/shapes/highlight/HighlightShapeUtil.tsx +4 -2
- package/src/lib/shapes/shared/interpolate-props.ts +3 -3
- package/src/lib/ui/version.ts +3 -3
- package/src/lib/utils/excalidraw/__snapshots__/putExcalidrawContent.test.tsx.snap +4 -4
- package/src/lib/utils/excalidraw/putExcalidrawContent.ts +1 -1
- package/src/lib/utils/test-helpers.ts +4 -2
- package/src/lib/utils/tldr/buildFromV1Document.ts +1 -1
- package/src/test/__snapshots__/drawing.test.ts.snap +1 -1
- package/src/test/__snapshots__/resizing.test.ts.snap +1 -1
- 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].
|
|
148
|
+
const firstPoint = b64Vecs.decodeFirstPoint(segments[0].path)
|
|
149
149
|
const lastSegment = segments[segments.length - 1]
|
|
150
|
-
const lastPoint = b64Vecs.decodeLastPoint(lastSegment.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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.
|
|
491
|
-
const lastPoint = b64Vecs.decodeLastPoint(segment.
|
|
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.
|
|
519
|
-
const lastPoint = b64Vecs.decodeLastPoint(snapSegment.
|
|
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.
|
|
562
|
-
? Vec.Dist(b64Vecs.decodeFirstPoint(newSegment.
|
|
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
|
-
|
|
569
|
-
b64Vecs.decodeFirstPoint(newSegment.
|
|
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
|
-
|
|
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
|
-
|
|
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].
|
|
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',
|
|
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
|
|
123
|
-
//
|
|
124
|
-
// 2 points =
|
|
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(
|
|
129
|
+
expect(twoPointsBase64.length).toBe(24)
|
|
130
130
|
|
|
131
|
-
const shape = createHighlightShape([{ type: 'free',
|
|
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
|
|
137
|
-
// 1 point =
|
|
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(
|
|
139
|
+
expect(onePointBase64.length).toBe(16)
|
|
140
140
|
|
|
141
|
-
const shape = createHighlightShape([{ type: 'free',
|
|
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
|
-
//
|
|
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].
|
|
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.
|
|
14
|
-
endSegments.forEach((segment) => endPoints.push(...b64Vecs.decodePoints(segment.
|
|
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
|
-
|
|
42
|
+
path: b64Vecs.encodePoints(interpolatedPoints),
|
|
43
43
|
},
|
|
44
44
|
]
|
|
45
45
|
}
|
package/src/lib/ui/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 = '4.3.0-
|
|
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-
|
|
8
|
-
patch: '2026-01-
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
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
|
-
"
|
|
1413
|
+
"path": "AAAAAAAAAAAAAAA/jgaOBgAA",
|
|
1414
1414
|
"type": "free",
|
|
1415
1415
|
},
|
|
1416
1416
|
],
|
|
@@ -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',
|
|
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].
|
|
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',
|
|
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
|
-
"
|
|
22
|
+
"path": "AAAAAAAAAAAAAAA/ADwAAAAAAEIAAAAAAEYAvAAAgEgAwgAAgEkAxgAAAEwAyQAAgEsAyQAAgEqAygAAgEsAzAAAgEqAzAAAAEaAygAAAESAygAAAEUAzAAAADwAygAAADwAxgAAAAAAyAAAADwAxwAAALwAxgAAAMAAxQAAAMIAxAAAAMUAwAAAAMYAvAAAAMYAAAAAAMgAAAAAgMgARAAAgMgARwAAgMiASAAAAMgASgAAAMQASgAAAMKASgAAALwASwAAAABATAAAADxATQAAAEYATQAAAEdATAAAAEhATAAAgEnATAAAgEgATQAAAEiATAAAAEfATAAAAEJATAAAADwATAAAAACATAAAAMUATAAAAMoASQAAAMwASAAAwM+ASAAAgMkAPAAAgMkAAAAAAMkAAAAAgMgAAAAAgMgAwAAAAMYAwgAAAMAAxgAAAAAAxgAAAESAyAAAAEqAyQAAAEuAywAAwEwAzAAAgE1AzAAAQE5AzQAAgE5AzgAAwExAzQAAwEyAzQAAgEsAzQAAAEoAzQAAgErAzQAAgEgAzQAAAEXAzAAAAEKAywAAADyAyQAAAAAAyAAAAMAAxgAAAMUAwgAAAMUAvAAAAMUAvAAAAMgAPAAAAMgARgAAAMYASQAAAMYASgAAAMeATAAAAMdATQAAAMVATgAAAMQATwAAAMJATwAAAABATwAAAADATgAAADxATgAAAEfATQAAAEgATAAAAEiASQAAAEmASgAAgEgASAAAAEgARQAAAEgAQAAAAEYAAAAAAEgAvAAAgEgAxQAAgEgAyQAAAEeAyQAAAEaAygAAAEZAzAAAAEVAzAAAAEJAzAAAAECAywAAADyAyAAAAAAAxgAAAAAAxwAAAMAAxAAAAMIAxAAAAMAAAAAAAMIAAAAAAMIAPAAAAMAAQAAAAMAARwAAAMAASAAAALyASQAAALyASQAAAAAASQAAAEKASgAAAEYASgAAAEaASAAAAEiASAAAAEUARAAAAEYAQgAAAEgAQAAAAEYAAAAAAEYAwgAAAEUAyQAAAEUAygAAAEAAyQAAAEKAygAAAEAAygAAAEAAyQAAADwAyQAAADwAxwAAADwAxgAAAAAAwgAAAAAAwAAAAAAAvAAAAAAAQgAAAAAARQAAAAAASAAAAACASAAAAAAARwAAAAAARQAAAAAARQAAADwARQAAAEIARQAAAEAAQgAAAEIAPAAAAEIAPAAAAEQAAAAAAEUAwgAAAEQAxAAAAEIAwgAAAEIAxAAAAEIAwgAAAEAAwAAAAEAAwAAAAEAAAAAAAAAAAAAAADwAAAAAAAAAPAAAADwAPAAAADwAQAAAAAAAQAAAADwAPAAAAAAAPAAAADwAPAAAADwAAAAAADwAAAAAADwAxgAAAECAyAAAAECAyAAAAEIAyAAAAEAAxgAAAEAAxwAAAEAAxgAAAEQAxgAAAEIAxAAAAEQAvAAAAEUAAAAAAEUAAAAAAEcAPAAAgEoASAAAAEsASgAAAEmASQAAAEqASwAAAEmASwAAAEhATAAAAEQASwAAAEBATQAAAECATgAAAAAATQAAAMQATAAAAMlATAAAAMyATAAAwMxATAAAAMwASQAAAMsARQAAAMwARQAAgMoAQAAAAMkAAAAAAMgAxAAAAMaAyAAAALwAywAAAADAzgAAAEkg0AAAwE1g0AAAwE8g0QAAQE9g0AAAYFDA0AAAoFCg0AAA4FHg0QAAwFHg0QAAgE3AzQAAgE0AzgAAgE2AzgAAAEqAywAAgEgAzAAAAEiAzAAAADwAxwAAAMAAxgAAgMgAxAAAgMwAwAAAgM0AAAAAQM0AQgAAANCASgAAYNDATAAAAM8ATQAAAM7ATAAAgMxATAAAQMzATAAAgMmASwAAAMaASQAAAMAASAAAAAAARQAAADwAQgAAAEIAPAAAAEYAPAAAAEQAAAAAAEIAvAAAAEUAvAAAAEAAvAAAAEAAvAAAADwAAAAAADwAvAAAAAAAAAAAADwAAAAA",
|
|
23
23
|
"type": "free",
|
|
24
24
|
},
|
|
25
25
|
],
|
package/src/test/drawing.test.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
249
|
+
const points2 = base64ToPoints(segment2.path)
|
|
250
250
|
const point2 = last(points2)!
|
|
251
251
|
expect(point2.x).toBe(0)
|
|
252
252
|
})
|