@tldraw/editor 5.5.0-next.a2698a88ecfb → 5.5.0-next.b6a9f7cd7be2

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 (127) hide show
  1. package/dist-cjs/index.d.ts +2 -0
  2. package/dist-cjs/index.js +1 -1
  3. package/dist-cjs/lib/TldrawEditor.js +16 -12
  4. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  5. package/dist-cjs/lib/components/MenuClickCapture.js +42 -3
  6. package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
  7. package/dist-cjs/lib/editor/Editor.js +144 -155
  8. package/dist-cjs/lib/editor/Editor.js.map +3 -3
  9. package/dist-cjs/lib/editor/derivations/bindingsIndex.js +2 -0
  10. package/dist-cjs/lib/editor/derivations/bindingsIndex.js.map +2 -2
  11. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +4 -4
  12. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +2 -2
  13. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +14 -6
  14. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +3 -3
  15. package/dist-cjs/lib/exports/ExportDelay.js +10 -2
  16. package/dist-cjs/lib/exports/ExportDelay.js.map +2 -2
  17. package/dist-cjs/lib/exports/FontEmbedder.js +25 -11
  18. package/dist-cjs/lib/exports/FontEmbedder.js.map +2 -2
  19. package/dist-cjs/lib/exports/StyleEmbedder.js +9 -4
  20. package/dist-cjs/lib/exports/StyleEmbedder.js.map +2 -2
  21. package/dist-cjs/lib/exports/fetchCache.js +3 -0
  22. package/dist-cjs/lib/exports/fetchCache.js.map +2 -2
  23. package/dist-cjs/lib/exports/getSvgAsImage.js +10 -4
  24. package/dist-cjs/lib/exports/getSvgAsImage.js.map +2 -2
  25. package/dist-cjs/lib/exports/getSvgJsx.js +18 -9
  26. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  27. package/dist-cjs/lib/exports/parseCss.js +1 -1
  28. package/dist-cjs/lib/exports/parseCss.js.map +1 -1
  29. package/dist-cjs/lib/hooks/useCanvasEvents.js +24 -0
  30. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  31. package/dist-cjs/lib/hooks/useIdentity.js +6 -2
  32. package/dist-cjs/lib/hooks/useIdentity.js.map +3 -3
  33. package/dist-cjs/lib/license/LicenseManager.js +9 -1
  34. package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
  35. package/dist-cjs/lib/license/LicenseProvider.js +12 -4
  36. package/dist-cjs/lib/license/LicenseProvider.js.map +2 -2
  37. package/dist-cjs/lib/utils/deepLinks.js +2 -1
  38. package/dist-cjs/lib/utils/deepLinks.js.map +2 -2
  39. package/dist-cjs/lib/utils/sync/LocalIndexedDb.js +13 -17
  40. package/dist-cjs/lib/utils/sync/LocalIndexedDb.js.map +2 -2
  41. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +78 -40
  42. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
  43. package/dist-cjs/version.js +3 -3
  44. package/dist-cjs/version.js.map +1 -1
  45. package/dist-esm/index.d.mts +2 -0
  46. package/dist-esm/index.mjs +1 -1
  47. package/dist-esm/lib/TldrawEditor.mjs +17 -13
  48. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  49. package/dist-esm/lib/components/MenuClickCapture.mjs +42 -3
  50. package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
  51. package/dist-esm/lib/editor/Editor.mjs +144 -155
  52. package/dist-esm/lib/editor/Editor.mjs.map +3 -3
  53. package/dist-esm/lib/editor/derivations/bindingsIndex.mjs +2 -0
  54. package/dist-esm/lib/editor/derivations/bindingsIndex.mjs.map +2 -2
  55. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +4 -4
  56. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +2 -2
  57. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +14 -6
  58. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +3 -3
  59. package/dist-esm/lib/exports/ExportDelay.mjs +11 -3
  60. package/dist-esm/lib/exports/ExportDelay.mjs.map +2 -2
  61. package/dist-esm/lib/exports/FontEmbedder.mjs +25 -11
  62. package/dist-esm/lib/exports/FontEmbedder.mjs.map +2 -2
  63. package/dist-esm/lib/exports/StyleEmbedder.mjs +9 -4
  64. package/dist-esm/lib/exports/StyleEmbedder.mjs.map +2 -2
  65. package/dist-esm/lib/exports/fetchCache.mjs +3 -0
  66. package/dist-esm/lib/exports/fetchCache.mjs.map +2 -2
  67. package/dist-esm/lib/exports/getSvgAsImage.mjs +10 -4
  68. package/dist-esm/lib/exports/getSvgAsImage.mjs.map +2 -2
  69. package/dist-esm/lib/exports/getSvgJsx.mjs +18 -9
  70. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  71. package/dist-esm/lib/exports/parseCss.mjs +1 -1
  72. package/dist-esm/lib/exports/parseCss.mjs.map +1 -1
  73. package/dist-esm/lib/hooks/useCanvasEvents.mjs +24 -0
  74. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  75. package/dist-esm/lib/hooks/useIdentity.mjs +7 -3
  76. package/dist-esm/lib/hooks/useIdentity.mjs.map +3 -3
  77. package/dist-esm/lib/license/LicenseManager.mjs +9 -1
  78. package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
  79. package/dist-esm/lib/license/LicenseProvider.mjs +13 -5
  80. package/dist-esm/lib/license/LicenseProvider.mjs.map +2 -2
  81. package/dist-esm/lib/utils/deepLinks.mjs +2 -1
  82. package/dist-esm/lib/utils/deepLinks.mjs.map +2 -2
  83. package/dist-esm/lib/utils/sync/LocalIndexedDb.mjs +13 -17
  84. package/dist-esm/lib/utils/sync/LocalIndexedDb.mjs.map +2 -2
  85. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +78 -40
  86. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
  87. package/dist-esm/version.mjs +3 -3
  88. package/dist-esm/version.mjs.map +1 -1
  89. package/editor.css +9 -1
  90. package/package.json +8 -11
  91. package/src/lib/TldrawEditor.tsx +27 -15
  92. package/src/lib/components/MenuClickCapture.tsx +55 -4
  93. package/src/lib/editor/Editor.test.ts +20 -0
  94. package/src/lib/editor/Editor.ts +221 -259
  95. package/src/lib/editor/derivations/bindingsIndex.ts +3 -0
  96. package/src/lib/editor/managers/TextManager/TextManager.test.ts +74 -0
  97. package/src/lib/editor/managers/TextManager/TextManager.ts +6 -5
  98. package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +23 -8
  99. package/src/lib/exports/ExportDelay.tsx +16 -4
  100. package/src/lib/exports/FontEmbedder.test.ts +99 -0
  101. package/src/lib/exports/FontEmbedder.ts +32 -11
  102. package/src/lib/exports/StyleEmbedder.ts +13 -4
  103. package/src/lib/exports/fetchCache.test.ts +22 -0
  104. package/src/lib/exports/fetchCache.ts +4 -0
  105. package/src/lib/exports/getSvgAsImage.ts +13 -5
  106. package/src/lib/exports/getSvgJsx.test.ts +43 -1
  107. package/src/lib/exports/getSvgJsx.tsx +28 -16
  108. package/src/lib/exports/parseCss.test.ts +4 -0
  109. package/src/lib/exports/parseCss.ts +2 -2
  110. package/src/lib/hooks/useCanvasEvents.ts +42 -0
  111. package/src/lib/hooks/useIdentity.tsx +12 -1
  112. package/src/lib/license/LicenseManager.ts +13 -1
  113. package/src/lib/license/LicenseProvider.test.tsx +76 -0
  114. package/src/lib/license/LicenseProvider.tsx +19 -5
  115. package/src/lib/test/preserveFocus.test.tsx +81 -0
  116. package/src/lib/utils/deepLinks.test.ts +15 -0
  117. package/src/lib/utils/deepLinks.ts +8 -3
  118. package/src/lib/utils/sync/LocalIndexedDb.test.ts +28 -0
  119. package/src/lib/utils/sync/LocalIndexedDb.ts +18 -20
  120. package/src/lib/utils/sync/TLLocalSyncClient.test.ts +236 -0
  121. package/src/lib/utils/sync/TLLocalSyncClient.ts +106 -54
  122. package/src/version.ts +3 -3
  123. package/dist-cjs/lib/primitives/geometry/geometry.bench.js +0 -133
  124. package/dist-cjs/lib/primitives/geometry/geometry.bench.js.map +0 -7
  125. package/dist-esm/lib/primitives/geometry/geometry.bench.mjs +0 -132
  126. package/dist-esm/lib/primitives/geometry/geometry.bench.mjs.map +0 -7
  127. package/src/lib/primitives/geometry/geometry.bench.ts +0 -179
@@ -1,132 +0,0 @@
1
- import { bench, describe } from "vitest";
2
- import { Vec } from "../Vec.mjs";
3
- import { Arc2d } from "./Arc2d.mjs";
4
- import { Circle2d } from "./Circle2d.mjs";
5
- import { Edge2d } from "./Edge2d.mjs";
6
- import { Polyline2d } from "./Polyline2d.mjs";
7
- import { Rectangle2d } from "./Rectangle2d.mjs";
8
- const lsA = new Vec(0, 0);
9
- const lsB = new Vec(100, 50);
10
- const lsP = new Vec(30, 60);
11
- describe("Vec line segment", () => {
12
- bench("NearestPointOnLineSegment", () => {
13
- Vec.NearestPointOnLineSegment(lsA, lsB, lsP, true);
14
- });
15
- bench("DistanceToLineSegment", () => {
16
- Vec.DistanceToLineSegment(lsA, lsB, lsP, true);
17
- });
18
- });
19
- const vecA = new Vec(3, 4);
20
- const vecB = new Vec(-1, 2);
21
- const lineOrigin = new Vec(10, 10);
22
- const lineDir = new Vec(0.7071, 0.7071);
23
- const lineTestP = new Vec(20, 15);
24
- describe("Vec utilities", () => {
25
- bench("Lrp", () => {
26
- Vec.Lrp(lsA, lsB, 0.35);
27
- });
28
- bench("AngleBetween", () => {
29
- Vec.AngleBetween(vecA, vecB);
30
- });
31
- bench("NearestPointOnLineThroughPoint", () => {
32
- Vec.NearestPointOnLineThroughPoint(lineOrigin, lineDir, lineTestP);
33
- });
34
- bench("DistanceToLineThroughPoint", () => {
35
- Vec.DistanceToLineThroughPoint(lineOrigin, lineDir, lineTestP);
36
- });
37
- });
38
- import { intersectLineSegmentCircle, intersectLineSegmentLineSegment } from "../intersect.mjs";
39
- const intA1 = new Vec(0, 0);
40
- const intA2 = new Vec(100, 100);
41
- const intB1 = new Vec(100, 0);
42
- const intB2 = new Vec(0, 100);
43
- const intB1Miss = new Vec(200, 0);
44
- const intB2Miss = new Vec(200, 100);
45
- const intCenter = new Vec(50, 50);
46
- describe("Intersections", () => {
47
- bench("lineSegment-lineSegment (hit)", () => {
48
- intersectLineSegmentLineSegment(intA1, intA2, intB1, intB2);
49
- });
50
- bench("lineSegment-lineSegment (miss)", () => {
51
- intersectLineSegmentLineSegment(intA1, intA2, intB1Miss, intB2Miss);
52
- });
53
- bench("lineSegment-circle (hit)", () => {
54
- intersectLineSegmentCircle(intA1, intA2, intCenter, 30);
55
- });
56
- bench("lineSegment-circle (miss)", () => {
57
- intersectLineSegmentCircle(intA1, intA2, intCenter, 5);
58
- });
59
- });
60
- const edge = new Edge2d({ start: new Vec(0, 0), end: new Vec(100, 50) });
61
- const edgePoint = new Vec(30, 60);
62
- describe("Edge2d", () => {
63
- bench("nearestPoint", () => {
64
- edge.nearestPoint(edgePoint);
65
- });
66
- bench("distanceToPoint", () => {
67
- edge.distanceToPoint(edgePoint);
68
- });
69
- });
70
- const circle = new Circle2d({ radius: 50, isFilled: true });
71
- const circlePoint = new Vec(80, 60);
72
- const circlePointInside = new Vec(50, 50);
73
- describe("Circle2d", () => {
74
- bench("nearestPoint", () => {
75
- circle.nearestPoint(circlePoint);
76
- });
77
- bench("distanceToPoint", () => {
78
- circle.distanceToPoint(circlePoint);
79
- });
80
- bench("hitTestPoint (outside)", () => {
81
- circle.hitTestPoint(circlePoint, 5);
82
- });
83
- bench("hitTestPoint (inside)", () => {
84
- circle.hitTestPoint(circlePointInside, 5, true);
85
- });
86
- });
87
- const arc = new Arc2d({
88
- center: new Vec(50, 50),
89
- start: new Vec(100, 50),
90
- end: new Vec(50, 100),
91
- sweepFlag: 1,
92
- largeArcFlag: 0
93
- });
94
- const arcPoint = new Vec(90, 90);
95
- describe("Arc2d", () => {
96
- bench("nearestPoint", () => {
97
- arc.nearestPoint(arcPoint);
98
- });
99
- });
100
- const polyPoints = [];
101
- for (let i = 0; i <= 20; i++) {
102
- const t = i / 20;
103
- polyPoints.push(new Vec(t * 200, Math.sin(t * Math.PI * 2) * 50 + 50));
104
- }
105
- const polyline = new Polyline2d({ points: polyPoints });
106
- const polyPoint = new Vec(100, 80);
107
- describe("Polyline2d", () => {
108
- bench("nearestPoint", () => {
109
- polyline.nearestPoint(polyPoint);
110
- });
111
- bench("distanceToPoint", () => {
112
- polyline.distanceToPoint(polyPoint);
113
- });
114
- });
115
- const rect = new Rectangle2d({ width: 100, height: 80, isFilled: true });
116
- const rectPointOutside = new Vec(120, 40);
117
- const rectPointInside = new Vec(50, 40);
118
- describe("Rectangle2d (Geometry2d)", () => {
119
- bench("hitTestPoint (outside)", () => {
120
- rect.hitTestPoint(rectPointOutside, 5);
121
- });
122
- bench("hitTestPoint (inside)", () => {
123
- rect.hitTestPoint(rectPointInside, 5, true);
124
- });
125
- bench("distanceToPoint (outside)", () => {
126
- rect.distanceToPoint(rectPointOutside);
127
- });
128
- bench("distanceToPoint (inside)", () => {
129
- rect.distanceToPoint(rectPointInside, true);
130
- });
131
- });
132
- //# sourceMappingURL=geometry.bench.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/lib/primitives/geometry/geometry.bench.ts"],
4
- "sourcesContent": ["import { bench, describe } from 'vitest'\nimport { Vec } from '../Vec'\nimport { Arc2d } from './Arc2d'\nimport { Circle2d } from './Circle2d'\nimport { Edge2d } from './Edge2d'\nimport { Polyline2d } from './Polyline2d'\nimport { Rectangle2d } from './Rectangle2d'\n\n// --- Vec line segment utilities ---\n\nconst lsA = new Vec(0, 0)\nconst lsB = new Vec(100, 50)\nconst lsP = new Vec(30, 60)\n\ndescribe('Vec line segment', () => {\n\tbench('NearestPointOnLineSegment', () => {\n\t\tVec.NearestPointOnLineSegment(lsA, lsB, lsP, true)\n\t})\n\n\tbench('DistanceToLineSegment', () => {\n\t\tVec.DistanceToLineSegment(lsA, lsB, lsP, true)\n\t})\n})\n\n// --- Vec utilities ---\n\nconst vecA = new Vec(3, 4)\nconst vecB = new Vec(-1, 2)\nconst lineOrigin = new Vec(10, 10)\nconst lineDir = new Vec(0.7071, 0.7071) // ~unit vector at 45\u00B0\nconst lineTestP = new Vec(20, 15)\n\ndescribe('Vec utilities', () => {\n\tbench('Lrp', () => {\n\t\tVec.Lrp(lsA, lsB, 0.35)\n\t})\n\n\tbench('AngleBetween', () => {\n\t\tVec.AngleBetween(vecA, vecB)\n\t})\n\n\tbench('NearestPointOnLineThroughPoint', () => {\n\t\tVec.NearestPointOnLineThroughPoint(lineOrigin, lineDir, lineTestP)\n\t})\n\n\tbench('DistanceToLineThroughPoint', () => {\n\t\tVec.DistanceToLineThroughPoint(lineOrigin, lineDir, lineTestP)\n\t})\n})\n\n// --- Intersections ---\n\nimport { intersectLineSegmentCircle, intersectLineSegmentLineSegment } from '../intersect'\n\nconst intA1 = new Vec(0, 0)\nconst intA2 = new Vec(100, 100)\nconst intB1 = new Vec(100, 0)\nconst intB2 = new Vec(0, 100)\nconst intB1Miss = new Vec(200, 0)\nconst intB2Miss = new Vec(200, 100)\nconst intCenter = new Vec(50, 50)\n\ndescribe('Intersections', () => {\n\tbench('lineSegment-lineSegment (hit)', () => {\n\t\tintersectLineSegmentLineSegment(intA1, intA2, intB1, intB2)\n\t})\n\n\tbench('lineSegment-lineSegment (miss)', () => {\n\t\tintersectLineSegmentLineSegment(intA1, intA2, intB1Miss, intB2Miss)\n\t})\n\n\tbench('lineSegment-circle (hit)', () => {\n\t\tintersectLineSegmentCircle(intA1, intA2, intCenter, 30)\n\t})\n\n\tbench('lineSegment-circle (miss)', () => {\n\t\tintersectLineSegmentCircle(intA1, intA2, intCenter, 5)\n\t})\n})\n\n// --- Edge2d ---\n\nconst edge = new Edge2d({ start: new Vec(0, 0), end: new Vec(100, 50) })\nconst edgePoint = new Vec(30, 60)\n\ndescribe('Edge2d', () => {\n\tbench('nearestPoint', () => {\n\t\tedge.nearestPoint(edgePoint)\n\t})\n\n\tbench('distanceToPoint', () => {\n\t\tedge.distanceToPoint(edgePoint)\n\t})\n})\n\n// --- Circle2d ---\n\nconst circle = new Circle2d({ radius: 50, isFilled: true })\nconst circlePoint = new Vec(80, 60)\nconst circlePointInside = new Vec(50, 50)\n\ndescribe('Circle2d', () => {\n\tbench('nearestPoint', () => {\n\t\tcircle.nearestPoint(circlePoint)\n\t})\n\n\tbench('distanceToPoint', () => {\n\t\tcircle.distanceToPoint(circlePoint)\n\t})\n\n\tbench('hitTestPoint (outside)', () => {\n\t\tcircle.hitTestPoint(circlePoint, 5)\n\t})\n\n\tbench('hitTestPoint (inside)', () => {\n\t\tcircle.hitTestPoint(circlePointInside, 5, true)\n\t})\n})\n\n// --- Arc2d ---\n\nconst arc = new Arc2d({\n\tcenter: new Vec(50, 50),\n\tstart: new Vec(100, 50),\n\tend: new Vec(50, 100),\n\tsweepFlag: 1,\n\tlargeArcFlag: 0,\n})\nconst arcPoint = new Vec(90, 90)\n\ndescribe('Arc2d', () => {\n\tbench('nearestPoint', () => {\n\t\tarc.nearestPoint(arcPoint)\n\t})\n})\n\n// --- Polyline2d (20 segments) ---\n\nconst polyPoints: Vec[] = []\nfor (let i = 0; i <= 20; i++) {\n\tconst t = i / 20\n\tpolyPoints.push(new Vec(t * 200, Math.sin(t * Math.PI * 2) * 50 + 50))\n}\nconst polyline = new Polyline2d({ points: polyPoints })\nconst polyPoint = new Vec(100, 80)\n\ndescribe('Polyline2d', () => {\n\tbench('nearestPoint', () => {\n\t\tpolyline.nearestPoint(polyPoint)\n\t})\n\n\tbench('distanceToPoint', () => {\n\t\tpolyline.distanceToPoint(polyPoint)\n\t})\n})\n\n// --- Rectangle2d (Geometry2d base) ---\n\nconst rect = new Rectangle2d({ width: 100, height: 80, isFilled: true })\nconst rectPointOutside = new Vec(120, 40)\nconst rectPointInside = new Vec(50, 40)\n\ndescribe('Rectangle2d (Geometry2d)', () => {\n\tbench('hitTestPoint (outside)', () => {\n\t\trect.hitTestPoint(rectPointOutside, 5)\n\t})\n\n\tbench('hitTestPoint (inside)', () => {\n\t\trect.hitTestPoint(rectPointInside, 5, true)\n\t})\n\n\tbench('distanceToPoint (outside)', () => {\n\t\trect.distanceToPoint(rectPointOutside)\n\t})\n\n\tbench('distanceToPoint (inside)', () => {\n\t\trect.distanceToPoint(rectPointInside, true)\n\t})\n})\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,179 +0,0 @@
1
- import { bench, describe } from 'vitest'
2
- import { Vec } from '../Vec'
3
- import { Arc2d } from './Arc2d'
4
- import { Circle2d } from './Circle2d'
5
- import { Edge2d } from './Edge2d'
6
- import { Polyline2d } from './Polyline2d'
7
- import { Rectangle2d } from './Rectangle2d'
8
-
9
- // --- Vec line segment utilities ---
10
-
11
- const lsA = new Vec(0, 0)
12
- const lsB = new Vec(100, 50)
13
- const lsP = new Vec(30, 60)
14
-
15
- describe('Vec line segment', () => {
16
- bench('NearestPointOnLineSegment', () => {
17
- Vec.NearestPointOnLineSegment(lsA, lsB, lsP, true)
18
- })
19
-
20
- bench('DistanceToLineSegment', () => {
21
- Vec.DistanceToLineSegment(lsA, lsB, lsP, true)
22
- })
23
- })
24
-
25
- // --- Vec utilities ---
26
-
27
- const vecA = new Vec(3, 4)
28
- const vecB = new Vec(-1, 2)
29
- const lineOrigin = new Vec(10, 10)
30
- const lineDir = new Vec(0.7071, 0.7071) // ~unit vector at 45°
31
- const lineTestP = new Vec(20, 15)
32
-
33
- describe('Vec utilities', () => {
34
- bench('Lrp', () => {
35
- Vec.Lrp(lsA, lsB, 0.35)
36
- })
37
-
38
- bench('AngleBetween', () => {
39
- Vec.AngleBetween(vecA, vecB)
40
- })
41
-
42
- bench('NearestPointOnLineThroughPoint', () => {
43
- Vec.NearestPointOnLineThroughPoint(lineOrigin, lineDir, lineTestP)
44
- })
45
-
46
- bench('DistanceToLineThroughPoint', () => {
47
- Vec.DistanceToLineThroughPoint(lineOrigin, lineDir, lineTestP)
48
- })
49
- })
50
-
51
- // --- Intersections ---
52
-
53
- import { intersectLineSegmentCircle, intersectLineSegmentLineSegment } from '../intersect'
54
-
55
- const intA1 = new Vec(0, 0)
56
- const intA2 = new Vec(100, 100)
57
- const intB1 = new Vec(100, 0)
58
- const intB2 = new Vec(0, 100)
59
- const intB1Miss = new Vec(200, 0)
60
- const intB2Miss = new Vec(200, 100)
61
- const intCenter = new Vec(50, 50)
62
-
63
- describe('Intersections', () => {
64
- bench('lineSegment-lineSegment (hit)', () => {
65
- intersectLineSegmentLineSegment(intA1, intA2, intB1, intB2)
66
- })
67
-
68
- bench('lineSegment-lineSegment (miss)', () => {
69
- intersectLineSegmentLineSegment(intA1, intA2, intB1Miss, intB2Miss)
70
- })
71
-
72
- bench('lineSegment-circle (hit)', () => {
73
- intersectLineSegmentCircle(intA1, intA2, intCenter, 30)
74
- })
75
-
76
- bench('lineSegment-circle (miss)', () => {
77
- intersectLineSegmentCircle(intA1, intA2, intCenter, 5)
78
- })
79
- })
80
-
81
- // --- Edge2d ---
82
-
83
- const edge = new Edge2d({ start: new Vec(0, 0), end: new Vec(100, 50) })
84
- const edgePoint = new Vec(30, 60)
85
-
86
- describe('Edge2d', () => {
87
- bench('nearestPoint', () => {
88
- edge.nearestPoint(edgePoint)
89
- })
90
-
91
- bench('distanceToPoint', () => {
92
- edge.distanceToPoint(edgePoint)
93
- })
94
- })
95
-
96
- // --- Circle2d ---
97
-
98
- const circle = new Circle2d({ radius: 50, isFilled: true })
99
- const circlePoint = new Vec(80, 60)
100
- const circlePointInside = new Vec(50, 50)
101
-
102
- describe('Circle2d', () => {
103
- bench('nearestPoint', () => {
104
- circle.nearestPoint(circlePoint)
105
- })
106
-
107
- bench('distanceToPoint', () => {
108
- circle.distanceToPoint(circlePoint)
109
- })
110
-
111
- bench('hitTestPoint (outside)', () => {
112
- circle.hitTestPoint(circlePoint, 5)
113
- })
114
-
115
- bench('hitTestPoint (inside)', () => {
116
- circle.hitTestPoint(circlePointInside, 5, true)
117
- })
118
- })
119
-
120
- // --- Arc2d ---
121
-
122
- const arc = new Arc2d({
123
- center: new Vec(50, 50),
124
- start: new Vec(100, 50),
125
- end: new Vec(50, 100),
126
- sweepFlag: 1,
127
- largeArcFlag: 0,
128
- })
129
- const arcPoint = new Vec(90, 90)
130
-
131
- describe('Arc2d', () => {
132
- bench('nearestPoint', () => {
133
- arc.nearestPoint(arcPoint)
134
- })
135
- })
136
-
137
- // --- Polyline2d (20 segments) ---
138
-
139
- const polyPoints: Vec[] = []
140
- for (let i = 0; i <= 20; i++) {
141
- const t = i / 20
142
- polyPoints.push(new Vec(t * 200, Math.sin(t * Math.PI * 2) * 50 + 50))
143
- }
144
- const polyline = new Polyline2d({ points: polyPoints })
145
- const polyPoint = new Vec(100, 80)
146
-
147
- describe('Polyline2d', () => {
148
- bench('nearestPoint', () => {
149
- polyline.nearestPoint(polyPoint)
150
- })
151
-
152
- bench('distanceToPoint', () => {
153
- polyline.distanceToPoint(polyPoint)
154
- })
155
- })
156
-
157
- // --- Rectangle2d (Geometry2d base) ---
158
-
159
- const rect = new Rectangle2d({ width: 100, height: 80, isFilled: true })
160
- const rectPointOutside = new Vec(120, 40)
161
- const rectPointInside = new Vec(50, 40)
162
-
163
- describe('Rectangle2d (Geometry2d)', () => {
164
- bench('hitTestPoint (outside)', () => {
165
- rect.hitTestPoint(rectPointOutside, 5)
166
- })
167
-
168
- bench('hitTestPoint (inside)', () => {
169
- rect.hitTestPoint(rectPointInside, 5, true)
170
- })
171
-
172
- bench('distanceToPoint (outside)', () => {
173
- rect.distanceToPoint(rectPointOutside)
174
- })
175
-
176
- bench('distanceToPoint (inside)', () => {
177
- rect.distanceToPoint(rectPointInside, true)
178
- })
179
- })